common/src/main/java/com/ruoyi/common/enums/SystemDataNoEnum.java
@@ -21,6 +21,8 @@ DL("DL","DL","调度编号"), YF("YF","YF","应付编号"), YS("YS","YS","应收编号"), YSZD("YSZD","YSZD","应收账单编号"), YFZD("YFZD","YFZD","应付账单编号"), YFD("YFD","YFD","应付详情编号"), YSD("YSD","YSD","应收详情编号"), OF("OF","OF","其他账单编号"), service/src/main/java/com/ruoyi/cwgl/mapper/ReceivableFeeDetailMapper.java
@@ -1,95 +1,103 @@ package com.ruoyi.cwgl.mapper; import java.util.List; import com.ruoyi.cwgl.domain.ReceivableFeeDetail; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * 应收费用明细Mapper接口 * * @author ruoyi * @date 2025-12-17 */ public interface ReceivableFeeDetailMapper extends BaseMapper<ReceivableFeeDetail> { /** * 查询应收费用明细 * * @param id 应收费用明细ID * @return 应收费用明细 */ public ReceivableFeeDetail selectReceivableFeeDetailById(Integer id); /** * 查询应收费用明细 记录数 * * @param receivableFeeDetail 应收费用明细 * @return 应收费用明细集合 */ public int selectReceivableFeeDetailCount(ReceivableFeeDetail receivableFeeDetail); /** * 查询应收费用明细列表 * * @param receivableFeeDetail 应收费用明细 * @return 应收费用明细集合 */ public List<ReceivableFeeDetail> selectReceivableFeeDetailList(ReceivableFeeDetail receivableFeeDetail); /** * 新增应收费用明细 * * @param receivableFeeDetail 应收费用明细 * @return 结果 */ public int insertReceivableFeeDetail(ReceivableFeeDetail receivableFeeDetail); /** * 新增应收费用明细[批量] * * @param receivableFeeDetails 应收费用明细 * @return 结果 */ public int insertReceivableFeeDetailBatch(List<ReceivableFeeDetail> receivableFeeDetails); /** * 修改应收费用明细 * * @param receivableFeeDetail 应收费用明细 * @return 结果 */ public int updateReceivableFeeDetail(ReceivableFeeDetail receivableFeeDetail); /** * 修改应收费用明细[批量] * * @param receivableFeeDetails 应收费用明细 * @return 结果 */ public int updateReceivableFeeDetailBatch(List<ReceivableFeeDetail> receivableFeeDetails); /** * 删除应收费用明细 * * @param id 应收费用明细ID * @return 结果 */ public int deleteReceivableFeeDetailById(Integer id); /** * 批量删除应收费用明细 * * @param ids 需要删除的数据ID * @return 结果 */ public int deleteReceivableFeeDetailByIds(Integer[] ids); /** * 根据应收费用ID数组查询应收费用明细列表 * * @param receivableFeeIds 应收费用ID数组 * @return 应收费用明细集合 */ public List<ReceivableFeeDetail> selectReceivableFeeDetailByReceivableFeeIds(Integer[] receivableFeeIds); } package com.ruoyi.cwgl.mapper; import java.util.List; import com.ruoyi.cwgl.domain.ReceivableFeeDetail; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * 应收费用明细Mapper接口 * * @author ruoyi * @date 2025-12-17 */ public interface ReceivableFeeDetailMapper extends BaseMapper<ReceivableFeeDetail> { /** * 查询应收费用明细 * * @param id 应收费用明细ID * @return 应收费用明细 */ public ReceivableFeeDetail selectReceivableFeeDetailById(Integer id); /** * 查询应收费用明细 记录数 * * @param receivableFeeDetail 应收费用明细 * @return 应收费用明细集合 */ public int selectReceivableFeeDetailCount(ReceivableFeeDetail receivableFeeDetail); /** * 查询应收费用明细列表 * * @param receivableFeeDetail 应收费用明细 * @return 应收费用明细集合 */ public List<ReceivableFeeDetail> selectReceivableFeeDetailList(ReceivableFeeDetail receivableFeeDetail); /** * 新增应收费用明细 * * @param receivableFeeDetail 应收费用明细 * @return 结果 */ public int insertReceivableFeeDetail(ReceivableFeeDetail receivableFeeDetail); /** * 新增应收费用明细[批量] * * @param receivableFeeDetails 应收费用明细 * @return 结果 */ public int insertReceivableFeeDetailBatch(List<ReceivableFeeDetail> receivableFeeDetails); /** * 修改应收费用明细 * * @param receivableFeeDetail 应收费用明细 * @return 结果 */ public int updateReceivableFeeDetail(ReceivableFeeDetail receivableFeeDetail); /** * 修改应收费用明细[批量] * * @param receivableFeeDetails 应收费用明细 * @return 结果 */ public int updateReceivableFeeDetailBatch(List<ReceivableFeeDetail> receivableFeeDetails); /** * 删除应收费用明细 * * @param id 应收费用明细ID * @return 结果 */ public int deleteReceivableFeeDetailById(Integer id); /** * 批量删除应收费用明细 * * @param ids 需要删除的数据ID * @return 结果 */ public int deleteReceivableFeeDetailByIds(Integer[] ids); /** * 根据应收费用ID删除应收费用明细 * * @param receivableFeeId 应收费用ID * @return 结果 */ public int deleteReceivableFeeDetailByReceivableFeeId(Integer receivableFeeId); /** * 根据应收费用ID数组查询应收费用明细列表 * * @param receivableFeeIds 应收费用ID数组 * @return 应收费用明细集合 */ public List<ReceivableFeeDetail> selectReceivableFeeDetailByReceivableFeeIds(Integer[] receivableFeeIds); } service/src/main/java/com/ruoyi/cwgl/service/IReceivableFeeDetailService.java
@@ -101,10 +101,18 @@ public int deleteReceivableFeeDetailById(Integer id); /** * 根据应收费用ID删除应收费用明细 * * @param receivableFeeId 应收费用ID * @return 结果 */ public int deleteReceivableFeeDetailByReceivableFeeId(Integer receivableFeeId); /** * 根据应收费用ID数组查询应收费用明细列表 * * @param receivableFeeIds 应收费用ID数组 * @return 应收费用明细集合 */ public List<ReceivableFeeDetail> selectReceivableFeeDetailByReceivableFeeIds(Integer[] receivableFeeIds); } } service/src/main/java/com/ruoyi/cwgl/service/impl/PayableFeeManagementServiceImpl.java
@@ -17,6 +17,7 @@ import com.ruoyi.cwgl.mapper.PayableFeeManagementMapper; import com.ruoyi.cwgl.domain.PayableFeeManagement; import com.ruoyi.cwgl.domain.PayableFeeDetail; import com.ruoyi.cwgl.service.IPayableFeeManagementService; import com.ruoyi.cwgl.service.IPayableFeeDetailService; import com.ruoyi.common.core.text.Convert; @@ -49,7 +50,15 @@ @Override public PayableFeeManagement selectPayableFeeManagementById(Integer id) { return payableFeeManagementMapper.selectPayableFeeManagementById(id); PayableFeeManagement payableFeeManagement = payableFeeManagementMapper.selectPayableFeeManagementById(id); if (payableFeeManagement != null) { // 查询对应的费用明细 PayableFeeDetail detail = new PayableFeeDetail(); detail.setPayableFeeId(id); List<PayableFeeDetail> detailList = payableFeeDetailService.selectPayableFeeDetailList(detail); payableFeeManagement.setPayableFeeDetailList(detailList); } return payableFeeManagement; } /** @@ -198,3 +207,5 @@ return payableFeeManagementMapper.deletePayableFeeManagementById(id); } } service/src/main/java/com/ruoyi/cwgl/service/impl/ReceivableFeeDetailServiceImpl.java
@@ -1,195 +1,208 @@ package com.ruoyi.cwgl.service.impl; import java.util.List; import com.ruoyi.common.utils.DateUtils; import javax.annotation.Resource; import org.springframework.transaction.annotation.Transactional; import org.springframework.stereotype.Service; import org.springframework.scheduling.annotation.Async; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.annotation.DataSource; import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.core.service.BaseService; import com.ruoyi.cwgl.mapper.ReceivableFeeDetailMapper; import com.ruoyi.cwgl.domain.ReceivableFeeDetail; import com.ruoyi.cwgl.service.IReceivableFeeDetailService; import com.ruoyi.common.core.text.Convert; /** * 应收费用明细Service业务层处理 * * @author ruoyi * @date 2025-12-17 */ @Service @Transactional(rollbackFor = Exception.class) public class ReceivableFeeDetailServiceImpl extends BaseService<ReceivableFeeDetailMapper, ReceivableFeeDetail> implements IReceivableFeeDetailService { protected final Logger logger = LoggerFactory.getLogger(getClass()); @Resource private ReceivableFeeDetailMapper receivableFeeDetailMapper; /** * 查询应收费用明细 * * @param id 应收费用明细ID * @return 应收费用明细 */ @DataSource(DataSourceType.SLAVE) @Override public ReceivableFeeDetail selectReceivableFeeDetailById(Integer id) { return receivableFeeDetailMapper.selectReceivableFeeDetailById(id); } /** * 查询应收费用明细 记录数 * * @param receivableFeeDetail 应收费用明细 * @return 应收费用明细集合 */ @DataSource(DataSourceType.SLAVE) @Override public int selectReceivableFeeDetailCount(ReceivableFeeDetail receivableFeeDetail) { return receivableFeeDetailMapper.selectReceivableFeeDetailCount(receivableFeeDetail); } /** * 查询应收费用明细列表 * * @param receivableFeeDetail 应收费用明细 * @return 应收费用明细 */ @DataSource(DataSourceType.SLAVE) @Override public List<ReceivableFeeDetail> selectReceivableFeeDetailList(ReceivableFeeDetail receivableFeeDetail) { return receivableFeeDetailMapper.selectReceivableFeeDetailList(receivableFeeDetail); } /** * 查询应收费用明细列表 异步 导出 * * @param receivableFeeDetail 应收费用明细 * @param exportKey 导出功能的唯一标识 * @return 应收费用明细集合 */ @DataSource(DataSourceType.SLAVE) @Async @Override public void export(ReceivableFeeDetail receivableFeeDetail,String exportKey) { super.export(ReceivableFeeDetail.class,exportKey,"receivableFeeDetailData",(pageNum)->{ PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE); return selectReceivableFeeDetailList(receivableFeeDetail); }); } /** * 新增应收费用明细 * * @param receivableFeeDetail 应收费用明细 * @return 结果 */ @Override public int insertReceivableFeeDetail(ReceivableFeeDetail receivableFeeDetail) { receivableFeeDetail.setCreateTime(DateUtils.getNowDate()); return receivableFeeDetailMapper.insertReceivableFeeDetail(receivableFeeDetail); } /** * 新增应收费用明细[批量] * * @param receivableFeeDetails 应收费用明细 * @return 结果 */ @Override public int insertReceivableFeeDetailBatch(List<ReceivableFeeDetail> receivableFeeDetails) { int rows = receivableFeeDetailMapper.insertReceivableFeeDetailBatch(receivableFeeDetails); return rows; } /** * 修改应收费用明细 * * @param receivableFeeDetail 应收费用明细 * @return 结果 */ @Override public int updateReceivableFeeDetail(ReceivableFeeDetail receivableFeeDetail) { receivableFeeDetail.setUpdateTime(DateUtils.getNowDate()); return receivableFeeDetailMapper.updateReceivableFeeDetail(receivableFeeDetail); } /** * 修改应收费用明细[批量] * * @param receivableFeeDetails 应收费用明细 * @return 结果 */ @Override public int updateReceivableFeeDetailBatch(List<ReceivableFeeDetail> receivableFeeDetails){ return receivableFeeDetailMapper.updateReceivableFeeDetailBatch(receivableFeeDetails); } /** * 删除应收费用明细对象 * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteReceivableFeeDetailByIds(String ids) { return deleteReceivableFeeDetailByIds(Convert.toIntArray(ids)); } /** * 删除应收费用明细对象 * * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteReceivableFeeDetailByIds(Integer[] ids) { return receivableFeeDetailMapper.deleteReceivableFeeDetailByIds(ids); } /** * 删除应收费用明细信息 * * @param id 应收费用明细ID * @return 结果 */ @Override public int deleteReceivableFeeDetailById(Integer id) { return receivableFeeDetailMapper.deleteReceivableFeeDetailById(id); } /** * 根据应收费用ID数组查询应收费用明细列表 * * @param receivableFeeIds 应收费用ID数组 * @return 应收费用明细集合 */ @DataSource(DataSourceType.SLAVE) @Override public List<ReceivableFeeDetail> selectReceivableFeeDetailByReceivableFeeIds(Integer[] receivableFeeIds) { return receivableFeeDetailMapper.selectReceivableFeeDetailByReceivableFeeIds(receivableFeeIds); } } package com.ruoyi.cwgl.service.impl; import java.util.List; import com.ruoyi.common.utils.DateUtils; import javax.annotation.Resource; import org.springframework.transaction.annotation.Transactional; import org.springframework.stereotype.Service; import org.springframework.scheduling.annotation.Async; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.annotation.DataSource; import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.core.service.BaseService; import com.ruoyi.cwgl.mapper.ReceivableFeeDetailMapper; import com.ruoyi.cwgl.domain.ReceivableFeeDetail; import com.ruoyi.cwgl.service.IReceivableFeeDetailService; import com.ruoyi.common.core.text.Convert; /** * 应收费用明细Service业务层处理 * * @author ruoyi * @date 2025-12-17 */ @Service @Transactional(rollbackFor = Exception.class) public class ReceivableFeeDetailServiceImpl extends BaseService<ReceivableFeeDetailMapper, ReceivableFeeDetail> implements IReceivableFeeDetailService { protected final Logger logger = LoggerFactory.getLogger(getClass()); @Resource private ReceivableFeeDetailMapper receivableFeeDetailMapper; /** * 查询应收费用明细 * * @param id 应收费用明细ID * @return 应收费用明细 */ @DataSource(DataSourceType.SLAVE) @Override public ReceivableFeeDetail selectReceivableFeeDetailById(Integer id) { return receivableFeeDetailMapper.selectReceivableFeeDetailById(id); } /** * 查询应收费用明细 记录数 * * @param receivableFeeDetail 应收费用明细 * @return 应收费用明细集合 */ @DataSource(DataSourceType.SLAVE) @Override public int selectReceivableFeeDetailCount(ReceivableFeeDetail receivableFeeDetail) { return receivableFeeDetailMapper.selectReceivableFeeDetailCount(receivableFeeDetail); } /** * 查询应收费用明细列表 * * @param receivableFeeDetail 应收费用明细 * @return 应收费用明细 */ @DataSource(DataSourceType.SLAVE) @Override public List<ReceivableFeeDetail> selectReceivableFeeDetailList(ReceivableFeeDetail receivableFeeDetail) { return receivableFeeDetailMapper.selectReceivableFeeDetailList(receivableFeeDetail); } /** * 查询应收费用明细列表 异步 导出 * * @param receivableFeeDetail 应收费用明细 * @param exportKey 导出功能的唯一标识 * @return 应收费用明细集合 */ @DataSource(DataSourceType.SLAVE) @Async @Override public void export(ReceivableFeeDetail receivableFeeDetail,String exportKey) { super.export(ReceivableFeeDetail.class,exportKey,"receivableFeeDetailData",(pageNum)->{ PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE); return selectReceivableFeeDetailList(receivableFeeDetail); }); } /** * 新增应收费用明细 * * @param receivableFeeDetail 应收费用明细 * @return 结果 */ @Override public int insertReceivableFeeDetail(ReceivableFeeDetail receivableFeeDetail) { receivableFeeDetail.setCreateTime(DateUtils.getNowDate()); return receivableFeeDetailMapper.insertReceivableFeeDetail(receivableFeeDetail); } /** * 新增应收费用明细[批量] * * @param receivableFeeDetails 应收费用明细 * @return 结果 */ @Override public int insertReceivableFeeDetailBatch(List<ReceivableFeeDetail> receivableFeeDetails) { int rows = receivableFeeDetailMapper.insertReceivableFeeDetailBatch(receivableFeeDetails); return rows; } /** * 修改应收费用明细 * * @param receivableFeeDetail 应收费用明细 * @return 结果 */ @Override public int updateReceivableFeeDetail(ReceivableFeeDetail receivableFeeDetail) { receivableFeeDetail.setUpdateTime(DateUtils.getNowDate()); return receivableFeeDetailMapper.updateReceivableFeeDetail(receivableFeeDetail); } /** * 修改应收费用明细[批量] * * @param receivableFeeDetails 应收费用明细 * @return 结果 */ @Override public int updateReceivableFeeDetailBatch(List<ReceivableFeeDetail> receivableFeeDetails){ return receivableFeeDetailMapper.updateReceivableFeeDetailBatch(receivableFeeDetails); } /** * 删除应收费用明细对象 * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteReceivableFeeDetailByIds(String ids) { return deleteReceivableFeeDetailByIds(Convert.toIntArray(ids)); } /** * 删除应收费用明细对象 * * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteReceivableFeeDetailByIds(Integer[] ids) { return receivableFeeDetailMapper.deleteReceivableFeeDetailByIds(ids); } /** * 删除应收费用明细信息 * * @param id 应收费用明细ID * @return 结果 */ @Override public int deleteReceivableFeeDetailById(Integer id) { return receivableFeeDetailMapper.deleteReceivableFeeDetailById(id); } /** * 根据应收费用ID删除应收费用明细 * * @param receivableFeeId 应收费用ID * @return 结果 */ @Override public int deleteReceivableFeeDetailByReceivableFeeId(Integer receivableFeeId) { return receivableFeeDetailMapper.deleteReceivableFeeDetailByReceivableFeeId(receivableFeeId); } /** * 根据应收费用ID数组查询应收费用明细列表 * * @param receivableFeeIds 应收费用ID数组 * @return 应收费用明细集合 */ @DataSource(DataSourceType.SLAVE) @Override public List<ReceivableFeeDetail> selectReceivableFeeDetailByReceivableFeeIds(Integer[] receivableFeeIds) { return receivableFeeDetailMapper.selectReceivableFeeDetailByReceivableFeeIds(receivableFeeIds); } } service/src/main/java/com/ruoyi/cwgl/service/impl/ReceivableFeeManagementServiceImpl.java
@@ -78,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; } /** @@ -183,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; } /** @@ -272,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); @@ -282,7 +310,6 @@ result.setTotalReceivableAmount(totalReceivableAmount); result.setTotalAmountRmb(totalReceivableAmount); result.setTotalAmountHkd(totalAmountHkd); result.setDetailList(detailList); result.setIds(ids); return result; @@ -304,7 +331,7 @@ ReceivableBillManagement billManagement = new ReceivableBillManagement(); billManagement.setDocumentCount(statisticsVo.getDocumentCount()); billManagement.setExchangeRate(statisticsVo.getRate()); billManagement.setStatus("DRAFT"); // 默认草稿状态 billManagement.setStatus("0"); // 默认草稿状态 billManagement.setCreateTime(DateUtils.getNowDate()); // 3. 根据账单类型设置币种和总金额 @@ -319,7 +346,8 @@ } else { throw new IllegalArgumentException("无效的账单类型:" + billType); } String noByKey = systemDataNoService.getNoByKey(SystemDataNoEnum.YSZD); billManagement.setSystemNo(noByKey); // 4. 保存主账单记录 int i = receivableBillManagementService.insertReceivableBillManagement(billManagement); service/src/main/resources/mapper/cwgl/ReceivableFeeDetailMapper.xml
@@ -172,6 +172,10 @@ <delete id="deleteReceivableFeeDetailById" parameterType="Integer"> delete from receivable_fee_detail where id = #{id} </delete> <!--根据应收费用ID删除明细--> <delete id="deleteReceivableFeeDetailByReceivableFeeId" parameterType="Integer"> delete from receivable_fee_detail where receivable_fee_id = #{receivableFeeId} </delete> <delete id="deleteReceivableFeeDetailByIds" parameterType="Integer"> delete from receivable_fee_detail where id in <foreach item="id" collection="array" open="(" separator="," close=")">