| | |
| | | package com.ruoyi.tms.service.impl; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Collections; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.ruoyi.common.core.domain.AjaxResult; |
| | | import com.ruoyi.common.enums.SystemDataNoEnum; |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import javax.annotation.Resource; |
| | | |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | 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.domain.vo.FinanceDetailItem; |
| | | import com.ruoyi.tms.domain.vo.FinanceDetailRow; |
| | | import com.ruoyi.tms.mapper.TmsDispatchOrderMapper; |
| | | import com.ruoyi.tms.mapper.TmsFinanceMapper; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | private TmsDispatchOrderMapper tmsDispatchOrderMapper; |
| | | @Autowired |
| | | ISystemDataNoService systemDataNoService; |
| | | |
| | | @Autowired |
| | | private ISysUserService userService; |
| | | /** |
| | | * 查询费用明细 |
| | | * |
| | |
| | | return tmsFinanceDetailMapper.selectTmsFinanceDetailList(tmsFinanceDetail); |
| | | } |
| | | |
| | | @Override |
| | | public List<TmsFinanceDetail> getTmsFinanceDetailList(Integer dispatchId) { |
| | | Integer deviceId = userService.getDeviceId(SecurityUtils.getUserId()); |
| | | if (deviceId == null){ |
| | | return null; |
| | | } |
| | | LambdaQueryWrapper<TmsFinanceDetail> eq = new LambdaQueryWrapper<TmsFinanceDetail>() |
| | | |
| | | .eq(TmsFinanceDetail::getFinanceType, 2) |
| | | .eq(TmsFinanceDetail::getCreateId, SecurityUtils.getUserId()); |
| | | if (dispatchId !=null){ |
| | | eq.eq(TmsFinanceDetail::getDispatchOrderId, dispatchId); |
| | | } |
| | | List<TmsFinanceDetail> 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; |
| | | } |
| | | |
| | | /** |
| | | * 查询费用明细列表 异步 导出 |
| | | * |
| | |
| | | @Override |
| | | public int insertTmsFinanceDetail(TmsFinanceDetail tmsFinanceDetail) |
| | | { |
| | | TmsFinance tmsFinance = tmsFinanceMapper.selectOne(new LambdaQueryWrapper<TmsFinance>() |
| | | .eq(TmsFinance::getType, tmsFinanceDetail.getFinanceType()) |
| | | .eq(TmsFinance::getDispatchId, tmsFinanceDetail.getDispatchOrderId()) |
| | | .ne(TmsFinance::getStatus, 2) |
| | | .last("limit 1") |
| | | ); |
| | | if (tmsFinance == null){ |
| | | // TmsFinance tmsFinance = tmsFinanceMapper.selectOne(new LambdaQueryWrapper<TmsFinance>() |
| | | // .eq(TmsFinance::getType, tmsFinanceDetail.getFinanceType()) |
| | | // .eq(TmsFinance::getDispatchId, tmsFinanceDetail.getDispatchOrderId()) |
| | | // .ne(TmsFinance::getStatus, 2) |
| | | // .last("limit 1") |
| | | // ); |
| | | |
| | | 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); |
| | | |
| | | //if (StringUtils.isNotEmpty(tmsFinanceDetail.getFeeType())){ |
| | | addItem(tmsFinanceDetail); |
| | | // } |
| | | |
| | | // 1、查询当前调度单对应的费用 |
| | | // List<FinanceDetailItem> items = tmsFinanceDetail.getItems(); |
| | | // |
| | | // if (items != null && !items.isEmpty()){ |
| | | // items.forEach(item->{ |
| | | // TmsFinanceDetail tmsFinanceDetailNew = BeanUtil.copyProperties(tmsFinanceDetail, TmsFinanceDetail.class); |
| | | // BeanUtil.copyProperties(item, tmsFinanceDetailNew); |
| | | // tmsFinanceDetailNew.setActualFeeAmount(item.getPrice().multiply(BigDecimal.valueOf(item.getCount()))); |
| | | // addItem(tmsFinance, tmsFinanceDetailNew); |
| | | // }); |
| | | // } |
| | | return 1; |
| | | } |
| | | |
| | | @Override |
| | | public int saveTmsFinanceDetail(TmsFinanceDetail tmsFinanceDetail) { |
| | | if (StringUtils.isNotEmpty(tmsFinanceDetail.getFeeType() ) && |
| | | tmsFinanceDetail.getActualFeeAmount() != null){ |
| | | insertTmsFinanceDetail(tmsFinanceDetail); |
| | | } |
| | | tmsFinanceDetail.setFinanceId(tmsFinance.getId()); |
| | | List<FinanceDetailRow> rowItems = tmsFinanceDetail.getRowItems(); |
| | | if (rowItems != null && !rowItems.isEmpty()){ |
| | | |
| | | for (FinanceDetailRow rowItem : rowItems){ |
| | | if (rowItem.getIsYF() != null && rowItem.getIsYF() == 0){ |
| | | rowItem.setYfPrice(null); |
| | | rowItem.setYfCurrency(null); |
| | | rowItem.setYfServiceProviderId(null); |
| | | rowItem.setYfServiceProviderType(null); |
| | | rowItem.setYfServiceProviderIdType(null); |
| | | rowItem.setYfServiceProviderName(null); |
| | | } |
| | | TmsFinanceDetail tmsFinanceDetailNew = BeanUtil.copyProperties(rowItem, TmsFinanceDetail.class); |
| | | tmsFinanceDetailMapper.updateTmsFinanceDetail(tmsFinanceDetailNew); |
| | | } |
| | | } |
| | | return 1; |
| | | |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public int saveTmsFinanceDetail2(List<TmsFinanceDetail> tmsFinanceDetails) { |
| | | String username = SecurityUtils.getUsername(); |
| | | Long userId = SecurityUtils.getUserId(); |
| | | Date nowDate = DateUtils.getNowDate(); |
| | | for (TmsFinanceDetail tmsFinanceDetail : tmsFinanceDetails) { |
| | | if (StringUtils.isNotEmpty(tmsFinanceDetail.getFeeType() ) && |
| | | tmsFinanceDetail.getActualFeeAmount() != null) { |
| | | tmsFinanceDetail.setCreateBy(username); |
| | | tmsFinanceDetail.setInitialFeeAmount(tmsFinanceDetail.getActualFeeAmount()); |
| | | tmsFinanceDetail.setCreateId(userId); |
| | | tmsFinanceDetail.setFeeCreateTime(nowDate); |
| | | tmsFinanceDetail.setCreateTime(nowDate); |
| | | }else { |
| | | throw new ServiceException("金额或者费用类型不能为空"); |
| | | } |
| | | } |
| | | |
| | | return tmsFinanceDetailMapper.insertTmsFinanceDetailBatch(tmsFinanceDetails); |
| | | |
| | | } |
| | | |
| | | public void addItem (TmsFinanceDetail tmsFinanceDetail){ |
| | | // if (tmsFinance == null){ |
| | | // |
| | | // TmsDispatchOrder tmsDispatchOrder = tmsDispatchOrderMapper.selectTmsDispatchOrderById(tmsFinanceDetail.getDispatchOrderId()); |
| | | // if (tmsDispatchOrder == null){ |
| | | // throw new RuntimeException("未找到对应的调度单"); |
| | | // } |
| | | // tmsFinance = BeanUtil.copyProperties(tmsDispatchOrder,TmsFinance.class); |
| | | // SystemDataNoEnum systemDataNoEnum = tmsFinanceDetail.getFinanceType() == 0 ? SystemDataNoEnum.YFD : |
| | | // tmsFinanceDetail.getFinanceType() == 1 ? SystemDataNoEnum.YSD : SystemDataNoEnum.OF; |
| | | // tmsFinance.setSystemCode(systemDataNoService.getNoByKey(systemDataNoEnum)); |
| | | // 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); |
| | | tmsFinanceDetailMapper.insertTmsFinanceDetail(tmsFinanceDetail); |
| | | } |
| | | |
| | | /** |
| | |
| | | @Override |
| | | public int updateTmsFinanceDetail(TmsFinanceDetail tmsFinanceDetail) |
| | | { |
| | | Integer financeId = tmsFinanceDetail.getFinanceId(); |
| | | TmsFinance tmsFinance = tmsFinanceMapper.selectTmsFinanceById(financeId); |
| | | if (tmsFinance == null){ |
| | | throw new RuntimeException("未找到对应的费用单"); |
| | | } |
| | | tmsFinanceDetail.setUpdateBy(SecurityUtils.getUsername()); |
| | | tmsFinanceDetail.setUpdateTime(DateUtils.getNowDate()); |
| | | return tmsFinanceDetailMapper.updateTmsFinanceDetail(tmsFinanceDetail); |
| | | tmsFinanceDetailMapper.updateTmsFinanceDetail(tmsFinanceDetail); |
| | | // 查询该费用单下所有状态为0的费用明细的实际费用金额总和 |
| | | List<TmsFinanceDetail> detailList = tmsFinanceDetailMapper.selectList(new LambdaQueryWrapper<TmsFinanceDetail>() |
| | | .eq(TmsFinanceDetail::getFinanceId, financeId) |
| | | .eq(TmsFinanceDetail::getStatus, 0) |
| | | ); |
| | | // 计算总和 |
| | | // 计算总和 |
| | | double totalAmount = detailList.stream() |
| | | .mapToDouble(detail -> detail.getActualFeeAmount().doubleValue()) |
| | | .sum(); |
| | | |
| | | TmsFinance tmsFinance1 = new TmsFinance() {{ |
| | | setId(financeId); |
| | | setTotalAmount(new BigDecimal(totalAmount)); |
| | | }}; |
| | | return tmsFinanceMapper.updateTmsFinance(tmsFinance1); |
| | | } |
| | | |
| | | @Override |
| | | public AjaxResult cancelFinanceDetail(Integer id) { |
| | | |
| | | TmsFinanceDetail tmsFinanceDetail = tmsFinanceDetailMapper.selectById(id); |
| | | if (tmsFinanceDetail == null){ |
| | | return AjaxResult.error("未找到对应的费用明细"); |
| | | } |
| | | tmsFinanceDetail.setStatus(1); |
| | | tmsFinanceDetail.setUpdateBy(SecurityUtils.getUsername()); |
| | | tmsFinanceDetailMapper.updateTmsFinanceDetail(tmsFinanceDetail); |
| | | |
| | | |
| | | // 查询该费用单下所有状态为0的费用明细的实际费用金额总和 |
| | | List<TmsFinanceDetail> detailList = tmsFinanceDetailMapper.selectList(new LambdaQueryWrapper<TmsFinanceDetail>() |
| | | .eq(TmsFinanceDetail::getFinanceId, tmsFinanceDetail.getFinanceId()) |
| | | .eq(TmsFinanceDetail::getStatus, 0) |
| | | ); |
| | | // 计算总和 |
| | | // 计算总和 |
| | | double totalAmount = detailList.stream() |
| | | .mapToDouble(detail -> detail.getActualFeeAmount().doubleValue()) |
| | | .sum(); |
| | | |
| | | TmsFinance tmsFinance1 = new TmsFinance() {{ |
| | | setId( tmsFinanceDetail.getFinanceId()); |
| | | setTotalAmount(new BigDecimal(totalAmount)); |
| | | }}; |
| | | tmsFinanceMapper.updateTmsFinance(tmsFinance1); |
| | | return AjaxResult.success("取消成功"); |
| | | } |
| | | |
| | | /** |