package com.ruoyi.tms.service.impl; import java.util.Collections; import java.util.List; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.enums.SystemDataNoEnum; import com.ruoyi.common.utils.DateUtils; import javax.annotation.Resource; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISystemDataNoService; import com.ruoyi.tms.domain.TmsDispatchOrder; import com.ruoyi.tms.domain.TmsFinance; import com.ruoyi.tms.mapper.TmsDispatchOrderMapper; import com.ruoyi.tms.mapper.TmsFinanceMapper; import org.springframework.beans.factory.annotation.Autowired; 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.tms.mapper.TmsFinanceDetailMapper; import com.ruoyi.tms.domain.TmsFinanceDetail; import com.ruoyi.tms.service.ITmsFinanceDetailService; import com.ruoyi.common.core.text.Convert; /** * 费用明细Service业务层处理 * * @author ruoyi * @date 2025-11-13 */ @Service @Transactional(rollbackFor = Exception.class) public class TmsFinanceDetailServiceImpl extends BaseService implements ITmsFinanceDetailService { protected final Logger logger = LoggerFactory.getLogger(getClass()); @Resource private TmsFinanceDetailMapper tmsFinanceDetailMapper; @Resource private TmsFinanceMapper tmsFinanceMapper; @Resource private TmsDispatchOrderMapper tmsDispatchOrderMapper; @Autowired ISystemDataNoService systemDataNoService; @Autowired private ISysUserService userService; /** * 查询费用明细 * * @param id 费用明细ID * @return 费用明细 */ @DataSource(DataSourceType.SLAVE) @Override public TmsFinanceDetail selectTmsFinanceDetailById(Integer id) { return tmsFinanceDetailMapper.selectTmsFinanceDetailById(id); } /** * 查询费用明细 记录数 * * @param tmsFinanceDetail 费用明细 * @return 费用明细集合 */ @DataSource(DataSourceType.SLAVE) @Override public int selectTmsFinanceDetailCount(TmsFinanceDetail tmsFinanceDetail) { return tmsFinanceDetailMapper.selectTmsFinanceDetailCount(tmsFinanceDetail); } /** * 查询费用明细列表 * * @param tmsFinanceDetail 费用明细 * @return 费用明细 */ @DataSource(DataSourceType.SLAVE) @Override public List selectTmsFinanceDetailList(TmsFinanceDetail tmsFinanceDetail) { return tmsFinanceDetailMapper.selectTmsFinanceDetailList(tmsFinanceDetail); } @Override public List getTmsFinanceDetailList(Integer dispatchId) { Integer deviceId = userService.getDeviceId(SecurityUtils.getUserId()); if (deviceId == null){ return null; } LambdaQueryWrapper eq = new LambdaQueryWrapper() .eq(TmsFinanceDetail::getFinanceType, 2) .eq(TmsFinanceDetail::getCreateId, SecurityUtils.getUserId()); if (dispatchId !=null){ eq.eq(TmsFinanceDetail::getDispatchOrderId, dispatchId); } List tmsFinanceDetails = tmsFinanceDetailMapper.selectList(eq); if (tmsFinanceDetails != null && !tmsFinanceDetails.isEmpty()){ tmsFinanceDetails.forEach(tmsFinanceDetail -> { TmsDispatchOrder tmsDispatchOrder = tmsDispatchOrderMapper.selectById(tmsFinanceDetail.getDispatchOrderId()); if (tmsDispatchOrder != null){ tmsFinanceDetail.setDispatchNo(tmsDispatchOrder.getDispatchNo()); tmsFinanceDetail.setCustomerName(tmsDispatchOrder.getCustomerName()); } }); } return tmsFinanceDetails; } /** * 查询费用明细列表 异步 导出 * * @param tmsFinanceDetail 费用明细 * @param exportKey 导出功能的唯一标识 * @return 费用明细集合 */ @DataSource(DataSourceType.SLAVE) @Async @Override public void export(TmsFinanceDetail tmsFinanceDetail,String exportKey) { super.export(TmsFinanceDetail.class,exportKey,"tmsFinanceDetailData",(pageNum)->{ PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE); return selectTmsFinanceDetailList(tmsFinanceDetail); }); } /** * 新增费用明细 * * @param tmsFinanceDetail 费用明细 * @return 结果 */ @Override public int insertTmsFinanceDetail(TmsFinanceDetail tmsFinanceDetail) { TmsFinance tmsFinance = tmsFinanceMapper.selectOne(new LambdaQueryWrapper() .eq(TmsFinance::getType, tmsFinanceDetail.getFinanceType()) .eq(TmsFinance::getDispatchId, tmsFinanceDetail.getDispatchOrderId()) .ne(TmsFinance::getStatus, 2) .last("limit 1") ); if (tmsFinance == null){ TmsDispatchOrder tmsDispatchOrder = tmsDispatchOrderMapper.selectTmsDispatchOrderById(tmsFinanceDetail.getDispatchOrderId()); if (tmsDispatchOrder == null){ throw new RuntimeException("未找到对应的调度单"); } tmsFinance = BeanUtil.copyProperties(tmsDispatchOrder,TmsFinance.class); tmsFinance.setSystemCode(systemDataNoService.getNoByKey(SystemDataNoEnum.OF)); tmsFinance.setDispatchId(tmsFinanceDetail.getDispatchOrderId()); tmsFinance.setType(tmsFinanceDetail.getFinanceType()); tmsFinance.setStatus(0); tmsFinance.setTotalAmount(tmsFinanceDetail.getActualFeeAmount()); tmsFinance.setCreateBy(SecurityUtils.getUsername()); tmsFinance.setUpdateBy(SecurityUtils.getUsername()); tmsFinance.setCreateTime(DateUtils.getNowDate()); tmsFinance.setUpdateTime(DateUtils.getNowDate()); // 添加费用主表 tmsFinanceMapper.insertTmsFinance(tmsFinance); }else{ tmsFinance.setTotalAmount(tmsFinance. getTotalAmount().add(tmsFinanceDetail.getActualFeeAmount())); tmsFinanceMapper.updateTmsFinance(tmsFinance); } tmsFinanceDetail.setFinanceId(tmsFinance.getId()); tmsFinanceDetail.setCreateBy(SecurityUtils.getUsername()); tmsFinanceDetail.setInitialFeeAmount(tmsFinanceDetail.getActualFeeAmount()); tmsFinanceDetail.setCreateId(SecurityUtils.getUserId()); tmsFinanceDetail.setFeeCreateTime(DateUtils.getNowDate()); tmsFinanceDetail.setCreateTime(DateUtils.getNowDate()); return tmsFinanceDetailMapper.insertTmsFinanceDetail(tmsFinanceDetail); } /** * 新增费用明细[批量] * * @param tmsFinanceDetails 费用明细 * @return 结果 */ @Override public int insertTmsFinanceDetailBatch(List tmsFinanceDetails) { int rows = tmsFinanceDetailMapper.insertTmsFinanceDetailBatch(tmsFinanceDetails); return rows; } /** * 修改费用明细 * * @param tmsFinanceDetail 费用明细 * @return 结果 */ @Override public int updateTmsFinanceDetail(TmsFinanceDetail tmsFinanceDetail) { tmsFinanceDetail.setUpdateTime(DateUtils.getNowDate()); return tmsFinanceDetailMapper.updateTmsFinanceDetail(tmsFinanceDetail); } /** * 修改费用明细[批量] * * @param tmsFinanceDetails 费用明细 * @return 结果 */ @Override public int updateTmsFinanceDetailBatch(List tmsFinanceDetails){ return tmsFinanceDetailMapper.updateTmsFinanceDetailBatch(tmsFinanceDetails); } /** * 删除费用明细对象 * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteTmsFinanceDetailByIds(String ids) { return deleteTmsFinanceDetailByIds(Convert.toIntArray(ids)); } /** * 删除费用明细对象 * * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteTmsFinanceDetailByIds(Integer[] ids) { return tmsFinanceDetailMapper.deleteTmsFinanceDetailByIds(ids); } /** * 删除费用明细信息 * * @param id 费用明细ID * @return 结果 */ @Override public int deleteTmsFinanceDetailById(Integer id) { return tmsFinanceDetailMapper.deleteTmsFinanceDetailById(id); } }