wujianwei
2025-09-04 a6c2271fc67508c41f680856e24744e4eebb78c0
service/src/main/java/com/ruoyi/cwgl/service/impl/EstimatedReceivableBillServiceImpl.java
@@ -1,9 +1,21 @@
package com.ruoyi.cwgl.service.impl;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import javax.annotation.Resource;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.cwgl.domain.EstimatedReceivableBillLog;
import com.ruoyi.cwgl.domain.PendingSettlementBusiness;
import com.ruoyi.cwgl.mapper.EstimatedReceivableMapper;
import com.ruoyi.cwgl.mapper.PendingSettlementBusinessMapper;
import com.ruoyi.cwgl.service.IEstimatedReceivableBillLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
import org.springframework.scheduling.annotation.Async;
@@ -33,6 +45,12 @@
    protected final Logger logger = LoggerFactory.getLogger(getClass());
    @Resource
    private EstimatedReceivableBillMapper estimatedReceivableBillMapper;
    @Autowired
    private IEstimatedReceivableBillLogService logService;
    @Resource
    private PendingSettlementBusinessMapper pendingSettlementBusinessMapper;
    @Resource
    private EstimatedReceivableMapper estimatedReceivableMapper;
    /**
@@ -129,6 +147,20 @@
    public int updateEstimatedReceivableBill(EstimatedReceivableBill estimatedReceivableBill)
    {
        estimatedReceivableBill.setUpdateTime(DateUtils.getNowDate());
        return estimatedReceivableBillMapper.updateEstimatedReceivableBill(estimatedReceivableBill);
    }
    @Override
    public int updateEstimatedReceivableBillName(EstimatedReceivableBill estimatedReceivableBill) {
        EstimatedReceivableBillLog estimatedReceivableBillLog = new EstimatedReceivableBillLog();
        estimatedReceivableBillLog.setCreateTime(new Date());
        estimatedReceivableBillLog.setBillId(estimatedReceivableBill.getId());
        estimatedReceivableBillLog.setCreateBy(SecurityUtils.getUsername());
        estimatedReceivableBillLog.setOperation("修改账单名称为"+estimatedReceivableBill.getBillName());
        logService.insertEstimatedReceivableBillLog(estimatedReceivableBillLog);
         pendingSettlementBusinessMapper.updatePendingSettlementBusinessByBillId(estimatedReceivableBill.getId(),estimatedReceivableBill.getBillName());
        return estimatedReceivableBillMapper.updateEstimatedReceivableBill(estimatedReceivableBill);
    }
@@ -179,4 +211,71 @@
    {
        return estimatedReceivableBillMapper.deleteEstimatedReceivableBillById(id);
    }
    @Override
    public int settlement(EstimatedReceivableBill estimatedReceivableBill) {
        Integer id = estimatedReceivableBill.getId();
        EstimatedReceivableBill oldData = estimatedReceivableBillMapper.selectEstimatedReceivableBillById(id);
        //应结算金额
        BigDecimal totalAmount = oldData.getTotalAmount()==null?BigDecimal.ZERO:oldData.getTotalAmount();
        //已结算金额
        BigDecimal settledAmount = oldData.getSettledAmount()==null?BigDecimal.ZERO:oldData.getSettledAmount();
        //当前提交金额
        BigDecimal settlementAmount = estimatedReceivableBill.getSettlementAmount();
        EstimatedReceivableBillLog estimatedReceivableBillLog = new EstimatedReceivableBillLog();
        estimatedReceivableBill.setSettledAmount(settlementAmount);
        estimatedReceivableBillLog.setCreateTime(new Date());
        estimatedReceivableBillLog.setBillId(estimatedReceivableBill.getId());
        estimatedReceivableBillLog.setCreateBy(SecurityUtils.getUsername());
        estimatedReceivableBillLog.setOperation("本次提交金额"+ settlementAmount);
        estimatedReceivableBillLog.setFileName(estimatedReceivableBill.getAttachment());
        logService.insertEstimatedReceivableBillLog(estimatedReceivableBillLog);
        List<String>dispatchNos =pendingSettlementBusinessMapper.selectPendingSettlementBusinessDispatchNos(estimatedReceivableBill.getId());
        // 检查当前提交金额+已结算金额是否超过应结算金额
        if (settlementAmount.add(settledAmount).compareTo(totalAmount) > 0) {
            // 超过应结算金额,抛出异常或处理错误
            throw new RuntimeException("当前提交金额加上已结算金额不能超过应结算金额");
        }
       if (settlementAmount.add(settledAmount).compareTo(totalAmount) == 0) {
            //已结算大于应计算金额为已结算
            estimatedReceivableBill.setStatus(2);
            estimatedReceivableMapper.updateEstimatedReceivableBillStatus(dispatchNos,3,null);
            pendingSettlementBusinessMapper.updateEstimatedReceivableBillStatus(dispatchNos,3);
        }else {
            //否则部分结算
            estimatedReceivableBill.setStatus(1);
            estimatedReceivableMapper.updateEstimatedReceivableBillStatus(dispatchNos,2,null);
           pendingSettlementBusinessMapper.updateEstimatedReceivableBillStatus(dispatchNos,2);
        }
        settledAmount = settledAmount.add(settlementAmount);
        estimatedReceivableBill.setSettledAmount(settledAmount);
        return estimatedReceivableBillMapper.updateEstimatedReceivableBill(estimatedReceivableBill);
    }
    @Override
    public int cancelRelevancy(Integer id) {
        PendingSettlementBusiness pendingSettlementBusiness = pendingSettlementBusinessMapper.selectPendingSettlementBusinessById(id);
        if (pendingSettlementBusiness==null){
            throw new ServiceException("待入账业务不存在");
        }
        Integer billId = pendingSettlementBusiness.getBillId();
        EstimatedReceivableBill estimatedReceivableBill = estimatedReceivableBillMapper.selectEstimatedReceivableBillById(billId);
        estimatedReceivableBill.setDispatchCount(estimatedReceivableBill.getDispatchCount()-1);
        //应结算金额修改
        BigDecimal totalAmount = estimatedReceivableBill.getTotalAmount();
        estimatedReceivableBill.setTotalAmount(totalAmount.subtract(pendingSettlementBusiness.getEstimatedTotalIncome()));
        EstimatedReceivableBillLog estimatedReceivableBillLog = new EstimatedReceivableBillLog();
        estimatedReceivableBillLog.setCreateTime(new Date());
        estimatedReceivableBillLog.setBillId(billId);
        estimatedReceivableBillLog.setCreateBy(SecurityUtils.getUsername());
        String dispatchNo = pendingSettlementBusiness.getDispatchNo();
        estimatedReceivableBillLog.setOperation("取消调度单"+ dispatchNo +"关联");
        logService.insertEstimatedReceivableBillLog(estimatedReceivableBillLog);
        return  pendingSettlementBusinessMapper.cancelRelevancy(id);
    }
}