@@ -8,6 +8,7 @@ import com.iformall.common.ErrorCode;
import com.iformall.common.IdWorker;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.domain.dto.FinanceReceiveCalcuteDTO;
import com.iformall.domain.dto.FinanceSetOffCalcuteDTO;
import com.iformall.domain.dto.FinanceSetOffDTO;
import com.iformall.domain.dto.WxBillPayDTO;
@@ -521,11 +522,15 @@ public class WxFinanceServiceImpl implements WxFinanceService {
WxMerchant merchant = new WxMerchant();
merchant.updateTenantInfo(record);
boolean isAllEmpity = true;
FinanceReceiveCalcuteDTO calcuteDto = new FinanceReceiveCalcuteDTO();
calcuteDto.setTotalRemainReceive(receiveTotal);
calcuteDto.setTotalSetoff(setOffTotal);
//建立子账单关联单
for (int i = 0 ; i < record.getBills().size(); i++) {
WxBillBaseEntity be = record.getBills().get(i);
//每个账单要创建一个收款关联单,如果有冲抵,要额外创建
boolean noNeedCreate = createBillReceive(receiveTotal,setOffTotal ,user,addreceive,be,merchant,payWay0);
boolean noNeedCreate = createBillReceive(calcuteDto ,user,addreceive,be,merchant,payWay0);
if (!noNeedCreate) {
isAllEmpity = false;
}
@@ -541,24 +546,32 @@ public class WxFinanceServiceImpl implements WxFinanceService {
return bills;
}
public boolean createBillReceive(BigDecimal receiveTotal,BigDecimal setOffTotal ,MallUserInfo user,WxFinanceReceive addreceive,WxBillBaseEntity be,WxMerchant merchant,WxBillPayWay payWay0) {
public boolean createBillReceive(FinanceReceiveCalcuteDTO calcuteDto ,MallUserInfo user,WxFinanceReceive addreceive,WxBillBaseEntity be,WxMerchant merchant,WxBillPayWay payWay0) {
//如果既没有收款,也没有冲抵,则不更新
boolean noNeedCreate = true;
//计算账单收款费用,更新账单收款
BigDecimal b0 = new BigDecimal(0);
WxBillBaseEntity bill = wxBillAllHelper.getBillDetail(EnumBillAllType.getEnum(be.getBillType()), merchant, be.getId());
if (receiveTotal .compareTo(b0) > 0) {
if (calcuteDto.getTotalRemainReceive() .compareTo(b0) > 0) {
noNeedCreate = false;
//有收款,就要更新账单的收款
//更新账单收款信息
String money = "";
if (StringUtils.isNotBlank(be.getCurrentSetOff())) {
if (StringUtils.isNotBlank(bill.getSetOff())) {
bill.setSetOff(new BigDecimal(bill.getSetOff()).add(new BigDecimal(be.getCurrentSetOff())).toPlainString() );
}else {
bill.setSetOff(be.getCurrentSetOff());
}
}
BigDecimal oweDecimal = new BigDecimal(bill.getOwe());
if (oweDecimal.compareTo(receiveTotal) < 0 ) {
if (oweDecimal.compareTo(calcuteDto.getTotalRemainReceive() ) < 0 ) {
money = bill.getOwe();
receiveTotal = receiveTotal.subtract(oweDecimal);
calcuteDto.setTotalRemainReceive(calcuteDto.getTotalRemainReceive().subtract(oweDecimal) );
}else {
money = receiveTotal.toPlainString();
receiveTotal = b0;
money = calcuteDto.getTotalRemainReceive() .toPlainString();
calcuteDto.setTotalRemainReceive(new BigDecimal(0)) ;
}
WxBillPayDTO payDto = new WxBillPayDTO();
payDto.updateTenantInfo(addreceive);
@@ -575,6 +588,7 @@ public class WxFinanceServiceImpl implements WxFinanceService {
bill.setCurrentReceive(money);
//并且有抵扣
if(StringUtils.isNotBlank(be.getCurrentSetOff())) {
calcuteDto.setTotalSetoff(calcuteDto.getTotalSetoff().add(new BigDecimal(be.getCurrentSetOff())));
payDto.setSetOff(be.getCurrentSetOff());
//创建一个冲抵收款单
createFinanceReceiveBill(addreceive,bill,be.getCurrentSetOff(),Constant.bill_pay_way_setoff);
@@ -585,7 +599,7 @@ public class WxFinanceServiceImpl implements WxFinanceService {
}else if (StringUtils.isNotBlank(be.getCurrentSetOff())) {
noNeedCreate = false;
setOffTotal = setOffTotal.add(new BigDecimal(be.getCurrentSetOff( )));
calcuteDto.setTotalSetoff(calcuteDto.getTotalSetoff().add(new BigDecimal(be.getCurrentSetOff() )));
//没收款,有冲抵,就要更新账单的冲抵,然后把对应的预充值使用金额更新,并进行关联
//创建一个冲抵收款单
createFinanceReceiveBill(addreceive,bill,be.getCurrentSetOff(),Constant.bill_pay_way_setoff);