wujianwei
2025-09-09 deb890911f16f28d0caf0edd7b96e8082bdd306d
service/src/main/java/com/ruoyi/cwgl/service/impl/EstimatedReceivableServiceImpl.java
@@ -1,5 +1,7 @@
package com.ruoyi.cwgl.service.impl;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@@ -7,8 +9,13 @@
import com.ruoyi.common.utils.DateUtils;
import javax.annotation.Resource;
import com.ruoyi.common.utils.RandomUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.cwgl.domain.EstimatedReceivableBill;
import com.ruoyi.cwgl.domain.PendingSettlementBusiness;
import com.ruoyi.cwgl.mapper.EstimatedReceivableBillMapper;
import com.ruoyi.cwgl.mapper.EstimatedReceivableLogMapper;
import com.ruoyi.cwgl.mapper.PendingSettlementBusinessMapper;
import com.ruoyi.cwgl.service.IEstimatedReceivableLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@@ -42,6 +49,10 @@
    private EstimatedReceivableMapper estimatedReceivableMapper;
    @Autowired
    private IEstimatedReceivableLogService logService;
    @Resource
    private PendingSettlementBusinessMapper pendingSettlementBusinessMapper;
    @Resource
    private EstimatedReceivableBillMapper estimatedReceivableBillMapper;
    /**
     * 查询预估应收管理
@@ -110,7 +121,22 @@
    @Override
    public int insertEstimatedReceivable(EstimatedReceivable estimatedReceivable)
    {
        estimatedReceivable.setCreateTime(DateUtils.getNowDate());
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
        Date nowDate = DateUtils.getNowDate();
        String datePart = dateFormat.format(nowDate);
        estimatedReceivable.setCreateTime(nowDate);
        estimatedReceivable.setFeeSystemNo("YF"+datePart+ RandomUtils.random(5));
        estimatedReceivable.setFeeType(0);
        PendingSettlementBusiness pendingSettlementBusiness = pendingSettlementBusinessMapper.selectPendingSettlementBusinessByNo(estimatedReceivable.getDispatchNo());
        if (pendingSettlementBusiness == null){
            throw new ServiceException("调度单不存在");
        }
        Integer relatedBillStatus = pendingSettlementBusiness.getRelatedBillStatus();
        if (relatedBillStatus.equals(2)||relatedBillStatus.equals(3)){
            throw new ServiceException("当前调度单已结算或部分结算无法新增明细");
        }
        return estimatedReceivableMapper.insertEstimatedReceivable(estimatedReceivable);
    }
@@ -136,6 +162,29 @@
    @Override
    public int updateEstimatedReceivable(EstimatedReceivable estimatedReceivable)
    {
        Integer id = estimatedReceivable.getId();
        EstimatedReceivable estimatedReceivable1 = estimatedReceivableMapper.selectEstimatedReceivableById(id);
        if (estimatedReceivable1.getRelatedBillStatus().equals(2)||estimatedReceivable1.getRelatedBillStatus().equals(3)){
            throw new ServiceException("结算中或已结算无法修改");
        }
        //原本金额
        BigDecimal oldAmount = estimatedReceivable1.getEstimatedAmount();
        //新金额
        BigDecimal newAmount = estimatedReceivable.getEstimatedAmount();
        if (!oldAmount.equals(newAmount)) {
              PendingSettlementBusiness pendingSettlementBusiness = pendingSettlementBusinessMapper.selectPendingSettlementBusinessByNo(estimatedReceivable.getDispatchNo());
              if (pendingSettlementBusiness!=null) {
                  BigDecimal estimatedTotalIncome = pendingSettlementBusiness.getEstimatedTotalIncome();
                  pendingSettlementBusiness.setEstimatedTotalIncome(estimatedTotalIncome.subtract(oldAmount).add(newAmount));
                  pendingSettlementBusinessMapper.updatePendingSettlementBusiness(pendingSettlementBusiness);
                  if (pendingSettlementBusiness.getBillId() != null) {
                      EstimatedReceivableBill estimatedReceivableBill = estimatedReceivableBillMapper.selectEstimatedReceivableBillById(pendingSettlementBusiness.getBillId());
                            estimatedReceivableBill.setTotalAmount(estimatedReceivableBill.getTotalAmount().subtract( oldAmount).add( newAmount));
                            estimatedReceivableBillMapper.updateEstimatedReceivableBill(estimatedReceivableBill);
                  }
              }
        }
        estimatedReceivable.setUpdateTime(DateUtils.getNowDate());
        String username = SecurityUtils.getUsername();
        logService.insertEstimatedReceivableLog("修改应收",estimatedReceivable.getId(),username);
@@ -204,6 +253,24 @@
            throw new ServiceException("无需重复确认");
        }
        PendingSettlementBusiness pendingSettlementBusiness = pendingSettlementBusinessMapper.selectPendingSettlementBusinessByNo(estimatedReceivable.getDispatchNo());
        if (pendingSettlementBusiness == null){
            throw new ServiceException("调度单不存在");
        }
        Integer relatedBillStatus = pendingSettlementBusiness.getRelatedBillStatus();
        if (relatedBillStatus.equals(2)||relatedBillStatus.equals(3)){
            throw new ServiceException("当前调度单已结算或部分结算无法确认");
        }
        if (pendingSettlementBusiness.getBillId()!=null){
            EstimatedReceivableBill estimatedReceivableBill = estimatedReceivableBillMapper.selectEstimatedReceivableBillById(pendingSettlementBusiness.getBillId());
            BigDecimal totalAmount = estimatedReceivableBill.getTotalAmount();
            estimatedReceivableBill.setTotalAmount(totalAmount.add(estimatedReceivable.getEstimatedAmount()));
            estimatedReceivableBillMapper.updateEstimatedReceivableBill(estimatedReceivableBill);
            pendingSettlementBusiness.setEstimatedTotalIncome(pendingSettlementBusiness.getEstimatedTotalIncome().add(estimatedReceivable.getEstimatedAmount()));
            pendingSettlementBusinessMapper.updatePendingSettlementBusiness(pendingSettlementBusiness);
            estimatedReceivable.setRelatedBillStatus(1);
        }
        String username = SecurityUtils.getUsername();
        logService.insertEstimatedReceivableLog("确认应收",id,username);
@@ -227,10 +294,29 @@
            throw new ServiceException("无需重复取消");
        }
        PendingSettlementBusiness pendingSettlementBusiness = pendingSettlementBusinessMapper.selectPendingSettlementBusinessByNo(estimatedReceivable.getDispatchNo());
        if (pendingSettlementBusiness == null){
            throw new ServiceException("调度单不存在");
        }
        Integer relatedBillStatus = pendingSettlementBusiness.getRelatedBillStatus();
        if (relatedBillStatus.equals(2)||relatedBillStatus.equals(3)){
            throw new ServiceException("当前调度单已结算或部分结算无法取消");
        }
        if (pendingSettlementBusiness.getBillId()!=null){
            EstimatedReceivableBill estimatedReceivableBill = estimatedReceivableBillMapper.selectEstimatedReceivableBillById(pendingSettlementBusiness.getBillId());
            BigDecimal totalAmount = estimatedReceivableBill.getTotalAmount();
            estimatedReceivableBill.setTotalAmount(totalAmount.subtract(estimatedReceivable.getEstimatedAmount()));
            estimatedReceivableBillMapper.updateEstimatedReceivableBill(estimatedReceivableBill);
            pendingSettlementBusiness.setEstimatedTotalIncome(pendingSettlementBusiness.getConfirmedTotalIncome().subtract(estimatedReceivable.getEstimatedAmount()));
            pendingSettlementBusinessMapper.updatePendingSettlementBusiness(pendingSettlementBusiness);
            estimatedReceivable.setRelatedBillStatus(0);
        }
        String username = SecurityUtils.getUsername();
        logService.insertEstimatedReceivableLog("取消应收",id,username);
        estimatedReceivable.setIsConfirmed(0);
        return estimatedReceivableMapper.updateEstimatedReceivable(estimatedReceivable);
    }
@@ -244,6 +330,27 @@
            throw new ServiceException("无需重复作废");
        }
        PendingSettlementBusiness pendingSettlementBusiness = pendingSettlementBusinessMapper.selectPendingSettlementBusinessByNo(estimatedReceivable.getDispatchNo());
        if (pendingSettlementBusiness == null){
            throw new ServiceException("调度单不存在");
        }
        Integer relatedBillStatus = pendingSettlementBusiness.getRelatedBillStatus();
        if (relatedBillStatus.equals(2)||relatedBillStatus.equals(3)){
            throw new ServiceException("当前调度单已结算或部分结算无法作废");
        }
        //确认状态下作废才执行
        if (estimatedReceivable.getIsConfirmed().equals(1)) {
        if (pendingSettlementBusiness.getBillId()!=null){
            EstimatedReceivableBill estimatedReceivableBill = estimatedReceivableBillMapper.selectEstimatedReceivableBillById(pendingSettlementBusiness.getBillId());
            BigDecimal totalAmount = estimatedReceivableBill.getTotalAmount();
            estimatedReceivableBill.setTotalAmount(totalAmount.subtract(estimatedReceivable.getEstimatedAmount()));
            estimatedReceivableBillMapper.updateEstimatedReceivableBill(estimatedReceivableBill);
            pendingSettlementBusiness.setEstimatedTotalIncome(pendingSettlementBusiness.getConfirmedTotalIncome().subtract(estimatedReceivable.getEstimatedAmount()));
            pendingSettlementBusinessMapper.updatePendingSettlementBusiness(pendingSettlementBusiness);
            estimatedReceivable.setRelatedBillStatus(0);
        }
        }
        String username = SecurityUtils.getUsername();
        logService.insertEstimatedReceivableLog("作废应收",id,username);