From 5abcde36961125cbf436f91b8c17610a6b5f8308 Mon Sep 17 00:00:00 2001
From: sen <sen@qq.com>
Date: 星期三, 15 四月 2026 12:15:08 +0800
Subject: [PATCH] 修改调度单必填校验
---
tms/src/main/java/com/ruoyi/tms/service/impl/TmsFinanceDetailServiceImpl.java | 294 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 262 insertions(+), 32 deletions(-)
diff --git a/tms/src/main/java/com/ruoyi/tms/service/impl/TmsFinanceDetailServiceImpl.java b/tms/src/main/java/com/ruoyi/tms/service/impl/TmsFinanceDetailServiceImpl.java
index 14b546d..9c9efac 100644
--- a/tms/src/main/java/com/ruoyi/tms/service/impl/TmsFinanceDetailServiceImpl.java
+++ b/tms/src/main/java/com/ruoyi/tms/service/impl/TmsFinanceDetailServiceImpl.java
@@ -1,17 +1,26 @@
package com.ruoyi.tms.service.impl;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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;
@@ -52,7 +61,8 @@
private TmsDispatchOrderMapper tmsDispatchOrderMapper;
@Autowired
ISystemDataNoService systemDataNoService;
-
+ @Autowired
+ private ISysUserService userService;
/**
* 鏌ヨ璐圭敤鏄庣粏
*
@@ -92,6 +102,96 @@
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()){
+ enrichDispatchInfo(tmsFinanceDetails);
+ }
+ return tmsFinanceDetails;
+ }
+
+ @Override
+ public Map<String, Object> getTmsFinanceDetailListPage(Integer dispatchId, Integer pageNum, Integer pageSize) {
+ Integer deviceId = userService.getDeviceId(SecurityUtils.getUserId());
+ if (deviceId == null) {
+ Map<String, Object> empty = new HashMap<>();
+ empty.put("rows", Collections.emptyList());
+ empty.put("total", 0);
+ empty.put("totalAmount", BigDecimal.ZERO);
+ return empty;
+ }
+
+ LambdaQueryWrapper<TmsFinanceDetail> wrapper = new LambdaQueryWrapper<TmsFinanceDetail>()
+ .eq(TmsFinanceDetail::getFinanceType, 2)
+ .eq(TmsFinanceDetail::getCreateId, SecurityUtils.getUserId());
+ if (dispatchId != null) {
+ wrapper.eq(TmsFinanceDetail::getDispatchOrderId, dispatchId);
+ }
+ // 鎸夊垱寤烘椂闂村�掑簭
+ wrapper.orderByDesc(TmsFinanceDetail::getFeeCreateTime);
+
+ // 鏌ユ�婚噾棰濓紙涓嶅垎椤碉級
+ List<TmsFinanceDetail> allRecords = tmsFinanceDetailMapper.selectList(
+ new LambdaQueryWrapper<TmsFinanceDetail>()
+ .select(TmsFinanceDetail::getActualFeeAmount)
+ .eq(TmsFinanceDetail::getFinanceType, 2)
+ .eq(TmsFinanceDetail::getCreateId, SecurityUtils.getUserId())
+ .eq(dispatchId != null, TmsFinanceDetail::getDispatchOrderId, dispatchId)
+ );
+ BigDecimal totalAmount = allRecords.stream()
+ .map(TmsFinanceDetail::getActualFeeAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 鍒嗛〉鏌ヨ
+ Page<TmsFinanceDetail> page = new Page<>(pageNum, pageSize);
+ Page<TmsFinanceDetail> result = tmsFinanceDetailMapper.selectPage(page, wrapper);
+
+ List<TmsFinanceDetail> rows = result.getRecords();
+ if (rows != null && !rows.isEmpty()) {
+ enrichDispatchInfo(rows);
+ }
+
+ Map<String, Object> map = new HashMap<>();
+ map.put("rows", rows);
+ map.put("total", result.getTotal());
+ map.put("totalAmount", totalAmount);
+ return map;
+ }
+
+ /**
+ * 濉厖璋冨害鍗曚俊鎭紙璋冨害鍗曞彿銆佸鎴峰悕绉帮級
+ */
+ private void enrichDispatchInfo(List<TmsFinanceDetail> list) {
+ // 鎵归噺鏌ヨ璋冨害鍗曪紝閬垮厤 N+1
+ Set<Integer> orderIds = new HashSet<>();
+ list.forEach(d -> { if (d.getDispatchOrderId() != null) orderIds.add(d.getDispatchOrderId()); });
+ if (orderIds.isEmpty()) return;
+
+ List<TmsDispatchOrder> orders = tmsDispatchOrderMapper.selectBatchIds(orderIds);
+ Map<Integer, TmsDispatchOrder> orderMap = new HashMap<>();
+ orders.forEach(o -> orderMap.put(o.getId(), o));
+
+ list.forEach(d -> {
+ TmsDispatchOrder order = orderMap.get(d.getDispatchOrderId());
+ if (order != null) {
+ d.setDispatchNo(order.getDispatchNo());
+ d.setCustomerName(order.getCustomerName());
+ }
+ });
+ }
+
/**
* 鏌ヨ璐圭敤鏄庣粏鍒楄〃 寮傛 瀵煎嚭
*
@@ -120,42 +220,114 @@
@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);
}
/**
@@ -180,8 +352,66 @@
@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 int updateTmsFinanceDetail2(TmsFinanceDetail tmsFinanceDetail)
+ {
+ return tmsFinanceDetailMapper.updateTmsFinanceDetail(tmsFinanceDetail);
+ }
+
+ @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("鍙栨秷鎴愬姛");
}
/**
--
Gitblit v1.8.0