| | |
| | | package com.ruoyi.tms.service.impl; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Collections; |
| | | 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.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.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; |
| | | } |
| | | |
| | | /** |
| | | * 查询费用明细列表 异步 导出 |
| | | * |
| | |
| | | .ne(TmsFinance::getStatus, 2) |
| | | .last("limit 1") |
| | | ); |
| | | |
| | | |
| | | if (StringUtils.isNotEmpty(tmsFinanceDetail.getFeeType())){ |
| | | addItem(tmsFinance, 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; |
| | | } |
| | | |
| | | |
| | | public void addItem (TmsFinance tmsFinance, TmsFinanceDetail tmsFinanceDetail){ |
| | | if (tmsFinance == null){ |
| | | |
| | | TmsDispatchOrder tmsDispatchOrder = tmsDispatchOrderMapper.selectTmsDispatchOrderById(tmsFinanceDetail.getDispatchOrderId()); |
| | |
| | | throw new RuntimeException("未找到对应的调度单"); |
| | | } |
| | | tmsFinance = BeanUtil.copyProperties(tmsDispatchOrder,TmsFinance.class); |
| | | tmsFinance.setSystemCode(systemDataNoService.getNoByKey(SystemDataNoEnum.OF)); |
| | | 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); |
| | |
| | | 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("取消成功"); |
| | | } |
| | | |
| | | /** |