package com.ruoyi.tms.service.impl; import java.util.List; import java.util.stream.Collectors; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.ruoyi.common.utils.DateUtils; import javax.annotation.Resource; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.tms.domain.TmsDispatchOrder; import com.ruoyi.tms.domain.TmsFinanceDetail; import com.ruoyi.tms.domain.TmsQuoteDetail; import com.ruoyi.tms.mapper.TmsDispatchOrderMapper; import com.ruoyi.tms.mapper.TmsFinanceDetailMapper; import com.ruoyi.tms.mapper.TmsQuoteDetailMapper; 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.TmsFinanceMapper; import com.ruoyi.tms.domain.TmsFinance; import com.ruoyi.tms.service.ITmsFinanceService; import com.ruoyi.common.core.text.Convert; /** * 费用主表Service业务层处理 * * @author ruoyi * @date 2025-11-13 */ @Service @Transactional(rollbackFor = Exception.class) public class TmsFinanceServiceImpl extends BaseService implements ITmsFinanceService { protected final Logger logger = LoggerFactory.getLogger(getClass()); @Resource private TmsFinanceMapper tmsFinanceMapper; @Resource private TmsFinanceDetailMapper tmsFinanceDetailMapper; @Resource private TmsQuoteDetailMapper tmsQuoteDetailMapper; @Resource private TmsDispatchOrderMapper tmsDispatchOrderMapper; /** * 查询费用主表 * * @param id 费用主表ID * @return 费用主表 */ @DataSource(DataSourceType.SLAVE) @Override public TmsFinance selectTmsFinanceById(Integer id) { return tmsFinanceMapper.selectTmsFinanceById(id); } /** * 查询费用主表 记录数 * * @param tmsFinance 费用主表 * @return 费用主表集合 */ @DataSource(DataSourceType.SLAVE) @Override public int selectTmsFinanceCount(TmsFinance tmsFinance) { return tmsFinanceMapper.selectTmsFinanceCount(tmsFinance); } /** * 查询费用主表列表 * * @param tmsFinance 费用主表 * @return 费用主表 */ @DataSource(DataSourceType.SLAVE) @Override public List selectTmsFinanceList(TmsFinance tmsFinance) { return tmsFinanceMapper.selectTmsFinanceList(tmsFinance); } /** * 查询费用主表列表 异步 导出 * * @param tmsFinance 费用主表 * @param exportKey 导出功能的唯一标识 * @return 费用主表集合 */ @DataSource(DataSourceType.SLAVE) @Async @Override public void export(TmsFinance tmsFinance,String exportKey) { super.export(TmsFinance.class,exportKey,"tmsFinanceData",(pageNum)->{ PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE); return selectTmsFinanceList(tmsFinance); }); } /** * 新增费用主表 * * @param tmsFinance 费用主表 * @return 结果 */ @Override public int insertTmsFinance(TmsFinance tmsFinance) { tmsFinance.setCreateTime(DateUtils.getNowDate()); return tmsFinanceMapper.insertTmsFinance(tmsFinance); } /** * 新增费用主表[批量] * * @param tmsFinances 费用主表 * @return 结果 */ @Override public int insertTmsFinanceBatch(List tmsFinances) { int rows = tmsFinanceMapper.insertTmsFinanceBatch(tmsFinances); return rows; } @Override public int insertTmsFinanceYFBatch(List tmsFinances) { // 添加主表 int i = tmsFinanceMapper.insertTmsFinanceBatch(tmsFinances); List collect = tmsFinances.stream().map(item -> { Integer quoteId; if (item.getType() == 0) { quoteId = item.getCollectionPlanDetailId(); } else { quoteId = item.getPaymentPlanDetailId(); } TmsQuoteDetail tmsQuoteDetail = tmsQuoteDetailMapper.selectById(quoteId); TmsFinanceDetail tmsFinanceDetail = new TmsFinanceDetail(); tmsFinanceDetail.setFinanceId(item.getId()); tmsFinanceDetail.setFinanceType(item.getType()); tmsFinanceDetail.setFeeType(99); tmsFinanceDetail.setInitialFeeAmount(tmsQuoteDetail.getFreightPrice()); tmsFinanceDetail.setActualFeeAmount(tmsQuoteDetail.getFreightPrice()); tmsFinanceDetail.setDispatchOrderId(item.getDispatchId()); tmsFinanceDetail.setDataSource(0); tmsFinanceDetail.setCreateTime(DateUtils.getNowDate()); tmsFinanceDetail.setCreateBy(SecurityUtils.getUsername()); tmsFinanceDetail.setFeeCreateTime(DateUtils.getNowDate()); tmsFinanceDetail.setCreateId(SecurityUtils.getUserId()); tmsFinanceDetail.setStatus(0); return tmsFinanceDetail; }).collect(Collectors.toList()); return tmsFinanceDetailMapper.insertTmsFinanceDetailBatch( collect); } /** * 修改费用主表 * * @param tmsFinance 费用主表 * @return 结果 */ @Override public int updateTmsFinance(TmsFinance tmsFinance) { tmsFinance.setUpdateTime(DateUtils.getNowDate()); return tmsFinanceMapper.updateTmsFinance(tmsFinance); } /** * 修改费用主表[批量] * * @param tmsFinances 费用主表 * @return 结果 */ @Override public int updateTmsFinanceBatch(List tmsFinances){ return tmsFinanceMapper.updateTmsFinanceBatch(tmsFinances); } /** * 删除费用主表对象 * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteTmsFinanceByIds(String ids) { return deleteTmsFinanceByIds(Convert.toIntArray(ids)); } /** * 删除费用主表对象 * * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteTmsFinanceByIds(Integer[] ids) { return tmsFinanceMapper.deleteTmsFinanceByIds(ids); } /** * 删除费用主表信息 * * @param id 费用主表ID * @return 结果 */ @Override public int deleteTmsFinanceById(Integer id) { return tmsFinanceMapper.deleteTmsFinanceById(id); } @Override public int cancelFinance(Integer id) { // 1、作废,头 TmsFinance tmsFinance = selectTmsFinanceById(id); tmsFinance.setStatus(2); updateTmsFinance(tmsFinance); // 3、将原来的调度单变回为未结算 LambdaUpdateWrapper eq = new LambdaUpdateWrapper() .eq(TmsDispatchOrder::getId, tmsFinance.getDispatchId()); if (tmsFinance.getType() == 0){ eq.set(TmsDispatchOrder::getAccountsReceivableStatus, 0) .set(TmsDispatchOrder::getCollectionPlanId, null); }else if (tmsFinance.getType() == 1){ eq.set(TmsDispatchOrder::getAccountsPayableStatus, 0) .set(TmsDispatchOrder::getPaymentPlanId, null) ; } return tmsDispatchOrderMapper.update(eq); } @Override public int confirmFinance(Integer id) { // 1、作废,头 TmsFinance tmsFinance = selectTmsFinanceById(id); tmsFinance.setStatus(1); tmsFinance.setConfirmBy(SecurityUtils.getUsername()); tmsFinance.setConfirmTime(DateUtils.getNowDate()); return updateTmsFinance(tmsFinance); } }