From ba87fd72f14c5ed0caf14e9d8ff116d254a8c113 Mon Sep 17 00:00:00 2001
From: zhangback <zhangback@163.com>
Date: 星期四, 16 四月 2026 10:11:32 +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