sen
2025-12-22 0864f009837acdfae5657ec81ca544e69ef227ae
service/src/main/java/com/ruoyi/cwgl/service/impl/ReceivableFeeManagementServiceImpl.java
@@ -6,6 +6,7 @@
import java.util.List;
import java.util.Objects;
import com.ruoyi.common.enums.SystemDataNoEnum;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import javax.annotation.Resource;
@@ -14,6 +15,7 @@
import com.ruoyi.cwgl.domain.vo.ReceivableFeeStatisticsVo;
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.system.service.ISystemDataNoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
@@ -63,6 +65,8 @@
    @Autowired
    private IReceivableBillSettlementDetailService receivableBillSettlementDetailService;
    @Autowired
    ISystemDataNoService systemDataNoService;
    /**
     * 查询应收费用管理
@@ -74,7 +78,15 @@
    @Override
    public ReceivableFeeManagement selectReceivableFeeManagementById(Integer id)
    {
        return receivableFeeManagementMapper.selectReceivableFeeManagementById(id);
        ReceivableFeeManagement receivableFeeManagement = receivableFeeManagementMapper.selectReceivableFeeManagementById(id);
        if (receivableFeeManagement != null) {
            // 查询对应的费用明细
            ReceivableFeeDetail detail = new ReceivableFeeDetail();
            detail.setReceivableFeeId(id);
            List<ReceivableFeeDetail> detailList = receivableFeeDetailService.selectReceivableFeeDetailList(detail);
            receivableFeeManagement.setReceivableFeeDetailList(detailList);
        }
        return receivableFeeManagement;
    }
    /**
@@ -132,7 +144,9 @@
    public int insertReceivableFeeManagement(ReceivableFeeManagement receivableFeeManagement)
    {
        receivableFeeManagement.setCreateTime(DateUtils.getNowDate());
        String noByKey = systemDataNoService.getNoByKey(SystemDataNoEnum.YS);
        receivableFeeManagement.setSystemNo(noByKey);
        // 保存主表信息
        int result = receivableFeeManagementMapper.insertReceivableFeeManagement(receivableFeeManagement);
        
@@ -177,7 +191,29 @@
    public int updateReceivableFeeManagement(ReceivableFeeManagement receivableFeeManagement)
    {
        receivableFeeManagement.setUpdateTime(DateUtils.getNowDate());
        return receivableFeeManagementMapper.updateReceivableFeeManagement(receivableFeeManagement);
        // 1. 更新主表信息
        int result = receivableFeeManagementMapper.updateReceivableFeeManagement(receivableFeeManagement);
        // 2. 获取主表ID
        Integer receivableFeeId = receivableFeeManagement.getId();
        // 3. 删除该应收费用下的所有现有明细
        receivableFeeDetailService.deleteReceivableFeeDetailByReceivableFeeId(receivableFeeId);
        // 4. 批量保存新的明细列表
        if (receivableFeeManagement.getReceivableFeeDetailList() != null && !receivableFeeManagement.getReceivableFeeDetailList().isEmpty()) {
            // 设置每个明细的应收费用管理ID
            receivableFeeManagement.getReceivableFeeDetailList().forEach(detail -> {
                detail.setReceivableFeeId(receivableFeeId);
                detail.setUpdateTime(DateUtils.getNowDate()); // 设置更新时间
            });
            // 调用批量插入方法
            receivableFeeDetailService.insertReceivableFeeDetailBatch(receivableFeeManagement.getReceivableFeeDetailList());
        }
        return result;
    }
    /**
@@ -266,9 +302,7 @@
        BigDecimal exchangeRate = new BigDecimal(sysConfig.getConfigValue());
        BigDecimal totalAmountHkd = totalReceivableAmount.divide(exchangeRate, 2, RoundingMode.HALF_UP);
        
        // 查询应收费用明细
        List<ReceivableFeeDetail> detailList = receivableFeeDetailService.selectReceivableFeeDetailByReceivableFeeIds(ids);
        // 组装返回结果
        ReceivableFeeStatisticsVo result = new ReceivableFeeStatisticsVo();
        result.setDocumentCount(documentCount);
@@ -276,7 +310,6 @@
        result.setTotalReceivableAmount(totalReceivableAmount);
        result.setTotalAmountRmb(totalReceivableAmount);
        result.setTotalAmountHkd(totalAmountHkd);
        result.setDetailList(detailList);
        result.setIds(ids);
        
        return result;
@@ -298,9 +331,12 @@
        ReceivableBillManagement billManagement = new ReceivableBillManagement();
        billManagement.setDocumentCount(statisticsVo.getDocumentCount());
        billManagement.setExchangeRate(statisticsVo.getRate());
        billManagement.setStatus("DRAFT"); // 默认草稿状态
        billManagement.setStatus("0"); // 默认草稿状态
        billManagement.setCreateTime(DateUtils.getNowDate());
        billManagement.setBillName(billCreateVo.getBillName());
        billManagement.setCustomerName(billCreateVo.getCustomerName());
        billManagement.setIsInternalSettlement(billCreateVo.getIsInternalSettlement());
        billManagement.setInternalSettlementUnit(billCreateVo.getInternalSettlementUnit());
        // 3. 根据账单类型设置币种和总金额
        if (billType == 0) {
            // 人民币账单
@@ -313,7 +349,8 @@
        } else {
            throw new IllegalArgumentException("无效的账单类型:" + billType);
        }
        String noByKey = systemDataNoService.getNoByKey(SystemDataNoEnum.YSZD);
        billManagement.setSystemNo(noByKey);
        // 4. 保存主账单记录
        int i = receivableBillManagementService.insertReceivableBillManagement(billManagement);
@@ -323,16 +360,16 @@
            String billSystemNo = billManagement.getSystemNo();
            
            // 批量更新应收费用主表的关联账单编号
            List<ReceivableFeeManagement> feeManagements = new ArrayList<>();
            for (Integer feeId : statisticsVo.getIds()) {
                ReceivableFeeManagement feeManagement = new ReceivableFeeManagement();
                feeManagement.setId(feeId);
                feeManagement.setRelatedBillNo(billSystemNo);
                feeManagements.add(feeManagement);
                feeManagement.setStatus("1");
                receivableFeeManagementMapper.updateReceivableFeeManagement(feeManagement);
            }
            
            // 调用批量更新方法
            updateReceivableFeeManagementBatch(feeManagements);
        }
        return i;