From af96f51d29e2419d413f6171627841b6bb9a76bc Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期一, 22 六月 2026 17:18:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro_河南鹤壁' into dev_pro_河南鹤壁_泽淇实业

---
 src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java |   13 +
 src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java         |  245 +++++++++++++++++++++
 src/main/resources/mapper/basic/CustomerMapper.xml                          |   70 +++--
 src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java                    |   55 ----
 src/main/resources/mapper/basic/SupplierManageMapper.xml                    |  120 ----------
 src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml              |    2 
 src/main/resources/mapper/collaborativeApproval/NoticeMapper.xml            |    2 
 src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java         |   49 ++++
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java              |   34 ++-
 src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java                        |    1 
 src/main/resources/application-sdtx.yml                                     |    5 
 src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java                 |    1 
 src/main/java/com/ruoyi/RuoYiApplication.java                               |    4 
 13 files changed, 374 insertions(+), 227 deletions(-)

diff --git a/src/main/java/com/ruoyi/RuoYiApplication.java b/src/main/java/com/ruoyi/RuoYiApplication.java
index 97efe32..074bcd7 100644
--- a/src/main/java/com/ruoyi/RuoYiApplication.java
+++ b/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -7,11 +7,11 @@
 
 /**
  * 鍚姩绋嬪簭
- * 
+ *
  * @author ruoyi
  */
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
-@EnableScheduling
+//@EnableScheduling
 public class RuoYiApplication
 {
     public static void main(String[] args)
diff --git a/src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java b/src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java
index f871b91..d29ac3b 100644
--- a/src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java
+++ b/src/main/java/com/ruoyi/basic/mapper/CustomerMapper.java
@@ -12,6 +12,7 @@
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 瀹㈡埛妗fMapper鎺ュ彛
@@ -20,55 +21,7 @@
  * @date 2025-05-07
  */
 @Mapper
-public interface CustomerMapper extends BaseMapper<Customer>
-{
-    /**
-     * 鏌ヨ瀹㈡埛妗f
-     *
-     * @param id 瀹㈡埛妗f涓婚敭
-     * @return 瀹㈡埛妗f
-     */
-    Customer selectCustomerById(Long id);
-
-    /**
-     * 鏌ヨ瀹㈡埛妗f鍒楄〃
-     *
-     * @param customer 瀹㈡埛妗f
-     * @return 瀹㈡埛妗f闆嗗悎
-     */
-    List<Customer> selectCustomerList(Customer customer);
-
-    /**
-     * 鏂板瀹㈡埛妗f
-     *
-     * @param customer 瀹㈡埛妗f
-     * @return 缁撴灉
-     */
-    int insertCustomer(Customer customer);
-
-    /**
-     * 淇敼瀹㈡埛妗f
-     *
-     * @param customer 瀹㈡埛妗f
-     * @return 缁撴灉
-     */
-    int updateCustomer(Customer customer);
-
-    /**
-     * 鍒犻櫎瀹㈡埛妗f
-     *
-     * @param id 瀹㈡埛妗f涓婚敭
-     * @return 缁撴灉
-     */
-    int deleteCustomerById(Long id);
-
-    /**
-     * 鎵归噺鍒犻櫎瀹㈡埛妗f
-     *
-     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
-     * @return 缁撴灉
-     */
-    int deleteCustomerByIds(Long[] ids);
+public interface CustomerMapper extends BaseMapper<Customer> {
 
     IPage<CustomerVo> listPage(Page<CustomerDto> page, @Param("c") CustomerDto customer, @Param("loginUserId") Long loginUserId);
 
@@ -77,4 +30,8 @@
     IPage<CustomerTransactionsVo> customewTransactions(Page page, @Param("customerName") String customerName);
 
     IPage<CustomerTransactionsDetailsVo> customewTransactionsDetails(Page page, @Param("customerId") Long customerId);
+
+    List<Map<String, Object>> getShippedAmountByCustomerIds(@Param("customerIds") List<Long> customerIds);
+
+    List<Map<String, Object>> getShippedAmountBySalesLedgerIds(@Param("salesLedgerIds") List<Long> salesLedgerIds);
 }
diff --git a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
index 827e3a2..293566a 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -34,6 +34,7 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.math.BigDecimal;
 import java.time.ZoneId;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -383,12 +384,56 @@
 
     @Override
     public IPage<CustomerTransactionsVo> customewTransactions(Page page, String customerName) {
-        return customerMapper.customewTransactions(page, customerName);
+        IPage<CustomerTransactionsVo> p = customerMapper.customewTransactions(page, customerName);
+        List<CustomerTransactionsVo> records = p.getRecords();
+        if (!CollectionUtils.isEmpty(records)) {
+            List<Long> customerIds = records.stream().map(CustomerTransactionsVo::getCustomerId).collect(Collectors.toList());
+            List<Map<String, Object>> shippedAmountList = customerMapper.getShippedAmountByCustomerIds(customerIds);
+            Map<Long, BigDecimal> shippedAmountMap = new HashMap<>();
+            for (Map<String, Object> map : shippedAmountList) {
+                if (map.get("outboundAmount") != null) {
+                    shippedAmountMap.put(((Number) map.get("customerId")).longValue(), new BigDecimal(String.valueOf(map.get("outboundAmount"))));
+                }
+            }
+            for (CustomerTransactionsVo vo : records) {
+                BigDecimal outboundAmount = shippedAmountMap.getOrDefault(vo.getCustomerId(), BigDecimal.ZERO);
+                vo.setShippedAmount(outboundAmount);
+                BigDecimal contractAmounts = vo.getContractAmounts() == null ? BigDecimal.ZERO : vo.getContractAmounts();
+                BigDecimal unshippedAmount = contractAmounts.subtract(outboundAmount);
+                if (unshippedAmount.compareTo(BigDecimal.ZERO) < 0) {
+                    unshippedAmount = BigDecimal.ZERO;
+                }
+                vo.setUnshippedAmount(unshippedAmount);
+            }
+        }
+        return p;
     }
 
     @Override
     public IPage<CustomerTransactionsDetailsVo> customewTransactionsDetails(Page page, Long customerId) {
-        return customerMapper.customewTransactionsDetails(page, customerId);
+        IPage<CustomerTransactionsDetailsVo> p = customerMapper.customewTransactionsDetails(page, customerId);
+        List<CustomerTransactionsDetailsVo> records = p.getRecords();
+        if (!CollectionUtils.isEmpty(records)) {
+            List<Long> salesLedgerIds = records.stream().map(CustomerTransactionsDetailsVo::getSalesLedgerId).collect(Collectors.toList());
+            List<Map<String, Object>> shippedAmountList = customerMapper.getShippedAmountBySalesLedgerIds(salesLedgerIds);
+            Map<Long, BigDecimal> shippedAmountMap = new HashMap<>();
+            for (Map<String, Object> map : shippedAmountList) {
+                if (map.get("outboundAmount") != null) {
+                    shippedAmountMap.put(((Number) map.get("salesLedgerId")).longValue(), new BigDecimal(String.valueOf(map.get("outboundAmount"))));
+                }
+            }
+            for (CustomerTransactionsDetailsVo vo : records) {
+                BigDecimal outboundAmount = shippedAmountMap.getOrDefault(vo.getSalesLedgerId(), BigDecimal.ZERO);
+                vo.setShippedAmount(outboundAmount);
+                BigDecimal contractAmount = vo.getContractAmount() == null ? BigDecimal.ZERO : vo.getContractAmount();
+                BigDecimal unshippedAmount = contractAmount.subtract(outboundAmount);
+                if (unshippedAmount.compareTo(BigDecimal.ZERO) < 0) {
+                    unshippedAmount = BigDecimal.ZERO;
+                }
+                vo.setUnshippedAmount(unshippedAmount);
+            }
+        }
+        return p;
     }
 
     /**
diff --git a/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
index 613bde2..ec8bb26 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
@@ -16,32 +16,47 @@
 import com.ruoyi.purchase.pojo.PurchaseLedger;
 import com.ruoyi.purchase.vo.SupplierTransactionsDetailsVo;
 import com.ruoyi.purchase.vo.SupplierTransactionsVo;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.quality.pojo.QualityUnqualified;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.stock.mapper.StockInRecordMapper;
+import com.ruoyi.stock.pojo.StockInRecord;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 @RequiredArgsConstructor
-public class SupplierServiceImpl extends ServiceImpl<SupplierManageMapper,SupplierManage> implements ISupplierService {
+public class SupplierServiceImpl extends ServiceImpl<SupplierManageMapper, SupplierManage> implements ISupplierService {
 
     private final SupplierManageMapper supplierMapper;
     private final PurchaseLedgerMapper purchaseLedgerMapper;
+    private final SalesLedgerProductMapper salesLedgerProductMapper;
+    private final StockInRecordMapper stockInRecordMapper;
+    private final QualityInspectMapper qualityInspectMapper;
+    private final QualityUnqualifiedMapper qualityUnqualifiedMapper;
 
     /**
      * 渚涘簲鍟嗘柊澧�
+     *
      * @param supplierManage
      * @return
      */
     @Override
     public void saveSupplier(SupplierManage supplierManage) {
         LambdaQueryWrapper<SupplierManage> supplierManageLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        supplierManageLambdaQueryWrapper.eq(SupplierManage::getSupplierName,supplierManage.getSupplierName());
+        supplierManageLambdaQueryWrapper.eq(SupplierManage::getSupplierName, supplierManage.getSupplierName());
         if (supplierMapper.selectCount(supplierManageLambdaQueryWrapper) > 0) {
             throw new RuntimeException("渚涘簲鍟嗗凡瀛樺湪");
         }
@@ -50,6 +65,7 @@
 
     /**
      * 渚涘簲鍟嗗垹闄�
+     *
      * @param ids
      * @return
      */
@@ -67,6 +83,7 @@
 
     /**
      * 渚涘簲鍟嗚鎯�
+     *
      * @param id
      * @return
      */
@@ -77,6 +94,7 @@
 
     /**
      * 渚涘簲鍟嗕慨鏀�
+     *
      * @param supplierManage
      * @return
      */
@@ -87,17 +105,19 @@
 
     /**
      * 渚涘簲鍟嗗垎椤垫煡璇�
+     *
      * @param page
      * @param supplierManageDto
      * @return
      */
     @Override
     public IPage<SupplierManage> supplierListPage(Page page, SupplierManageDto supplierManageDto) {
-        return supplierMapper.supplierListPage(page,supplierManageDto);
+        return supplierMapper.supplierListPage(page, supplierManageDto);
     }
 
     /**
      * 渚涘簲鍟嗗鍑�
+     *
      * @param response
      * @param supplierManageDto
      */
@@ -115,19 +135,19 @@
             ExcelUtil<SupplierManageExcelDto> util = new ExcelUtil<SupplierManageExcelDto>(SupplierManageExcelDto.class);
             List<SupplierManageExcelDto> list = util.importExcel(file.getInputStream());
             ArrayList<SupplierManage> supplierManages = new ArrayList<>();
-            list.stream().forEach(dto -> {
+            list.forEach(dto -> {
                 SupplierManage supplierManage = new SupplierManage();
-                BeanUtils.copyProperties(dto,supplierManage);
+                BeanUtils.copyProperties(dto, supplierManage);
                 supplierManage.setMaintainTime(LocalDate.now());
                 Long userId = SecurityUtils.getLoginUser().getUser().getUserId();
 
-                supplierManage.setMaintainUserId(Integer.parseInt(userId+""));
+                supplierManage.setMaintainUserId(Integer.parseInt(userId + ""));
                 supplierManages.add(supplierManage);
             });
 
             this.saveOrUpdateBatch(supplierManages);
             return true;
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
         return false;
@@ -135,11 +155,218 @@
 
     @Override
     public IPage<SupplierTransactionsVo> supplierTransactions(Page page, String supplierName) {
-        return supplierMapper.supplierTransactions(page,supplierName);
+        IPage<SupplierTransactionsVo> plPage = supplierMapper.supplierTransactions(page, supplierName);
+        List<SupplierTransactionsVo> resultList = plPage.getRecords();
+        if (resultList.isEmpty()) {
+            return plPage;
+        }
+
+        List<Long> supplierIds = resultList.stream().map(SupplierTransactionsVo::getSupplierId).collect(Collectors.toList());
+
+        List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(new LambdaQueryWrapper<PurchaseLedger>()
+                .in(PurchaseLedger::getSupplierId, supplierIds));
+
+        if (purchaseLedgers.isEmpty()) {
+            for (SupplierTransactionsVo vo : resultList) {
+                vo.setShippedAmount(BigDecimal.ZERO);
+                BigDecimal contractAmount = vo.getContractAmounts() == null ? BigDecimal.ZERO : vo.getContractAmounts();
+                vo.setUnshippedAmount(contractAmount);
+            }
+            return plPage;
+        }
+
+        List<Long> ledgerIds = purchaseLedgers.stream().map(PurchaseLedger::getId).collect(Collectors.toList());
+
+        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
+                .in(SalesLedgerProduct::getSalesLedgerId, ledgerIds)
+                .eq(SalesLedgerProduct::getType, 2));
+
+        //  涓嶈川妫�鐩存帴鍏ュ簱鐨� - 7
+        List<StockInRecord> directInboundRecords = stockInRecordMapper.selectList(new LambdaQueryWrapper<StockInRecord>()
+                .eq(StockInRecord::getRecordType, "7")
+                .eq(StockInRecord::getApprovalStatus, 1)
+                .in(StockInRecord::getRecordId, ledgerIds));
+
+        //  閫氳繃璐ㄦ鍏ュ簱鐨�
+        List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
+                .in(QualityInspect::getPurchaseLedgerId, ledgerIds));
+        List<Long> inspectIds = qualityInspects.stream().map(QualityInspect::getId).collect(Collectors.toList());
+
+        //  璐ㄦ鍚堟牸鍏ュ簱 - 10
+        List<StockInRecord> qualifiedInboundRecords = new ArrayList<>();
+        List<QualityUnqualified> qualityUnqualifieds = new ArrayList<>();
+        if (!inspectIds.isEmpty()) {
+            qualifiedInboundRecords = stockInRecordMapper.selectList(new LambdaQueryWrapper<StockInRecord>()
+                    .eq(StockInRecord::getRecordType, "10")
+                    .eq(StockInRecord::getApprovalStatus, 1)
+                    .in(StockInRecord::getRecordId, inspectIds));
+
+            qualityUnqualifieds = qualityUnqualifiedMapper.selectList(new LambdaQueryWrapper<QualityUnqualified>()
+                    .in(QualityUnqualified::getInspectId, inspectIds));
+        }
+        List<Long> unqualifiedIds = qualityUnqualifieds.stream().map(QualityUnqualified::getId).collect(Collectors.toList());
+
+        //  璐ㄦ涓嶅悎鏍煎叆搴� - 11
+        List<StockInRecord> unqualifiedInboundRecords = new ArrayList<>();
+        if (!unqualifiedIds.isEmpty()) {
+            unqualifiedInboundRecords = stockInRecordMapper.selectList(new LambdaQueryWrapper<StockInRecord>()
+                    .eq(StockInRecord::getRecordType, "11")
+                    .eq(StockInRecord::getApprovalStatus, 1)
+                    .in(StockInRecord::getRecordId, unqualifiedIds));
+        }
+
+        for (SupplierTransactionsVo vo : resultList) {
+            BigDecimal shippedAmount = BigDecimal.ZERO;
+
+            List<PurchaseLedger> currentLedgers = purchaseLedgers.stream().filter(pl -> pl.getSupplierId().equals(vo.getSupplierId())).toList();
+            for (PurchaseLedger ledger : currentLedgers) {
+                Long ledgerId = ledger.getId();
+
+                List<StockInRecord> currentDirectRecords = directInboundRecords.stream().filter(s -> s.getRecordId().equals(ledgerId)).toList();
+                for (StockInRecord sir : currentDirectRecords) {
+                    List<SalesLedgerProduct> currentProducts = salesLedgerProducts.stream().filter(s -> s.getSalesLedgerId().equals(ledgerId)).toList();
+                    for (SalesLedgerProduct slp : currentProducts) {
+                        if (sir.getStockInNum() != null && slp.getTaxInclusiveUnitPrice() != null) {
+                            shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(slp.getTaxInclusiveUnitPrice()));
+                        }
+                    }
+                }
+
+                List<QualityInspect> currentInspects = qualityInspects.stream().filter(q -> q.getPurchaseLedgerId().equals(ledgerId)).toList();
+                for (QualityInspect inspect : currentInspects) {
+                    List<StockInRecord> currentQualifiedRecords = qualifiedInboundRecords.stream().filter(s -> s.getRecordId().equals(inspect.getId())).toList();
+                    for (StockInRecord sir : currentQualifiedRecords) {
+                        BigDecimal minPrice = getMinTaxInclusiveUnitPrice(salesLedgerProducts, ledgerId, sir.getProductModelId());
+                        if (sir.getStockInNum() != null && minPrice != null) {
+                            shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(minPrice));
+                        }
+                    }
+
+                    List<QualityUnqualified> currentUnqualifieds = qualityUnqualifieds.stream().filter(q -> q.getInspectId().equals(inspect.getId())).toList();
+                    for (QualityUnqualified unqualified : currentUnqualifieds) {
+                        List<StockInRecord> currentUnqualifiedRecords = unqualifiedInboundRecords.stream().filter(s -> s.getRecordId().equals(unqualified.getId())).toList();
+                        for (StockInRecord sir : currentUnqualifiedRecords) {
+                            BigDecimal minPrice = getMinTaxInclusiveUnitPrice(salesLedgerProducts, ledgerId, sir.getProductModelId());
+                            if (sir.getStockInNum() != null && minPrice != null) {
+                                shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(minPrice));
+                            }
+                        }
+                    }
+                }
+            }
+
+            BigDecimal contractAmount = vo.getContractAmounts() == null ? BigDecimal.ZERO : vo.getContractAmounts();
+            if (shippedAmount.subtract(contractAmount).compareTo(BigDecimal.ZERO) > 0) {
+                shippedAmount = contractAmount;
+            }
+            vo.setShippedAmount(shippedAmount);
+            vo.setUnshippedAmount(contractAmount.subtract(shippedAmount));
+        }
+
+        return plPage;
     }
 
     @Override
     public IPage<SupplierTransactionsDetailsVo> supplierTransactionsDetails(Page page, Long supplierId) {
-        return supplierMapper.supplierTransactionsDetails(page,supplierId);
+        IPage<SupplierTransactionsDetailsVo> plPage = supplierMapper.supplierTransactionsDetails(page, supplierId);
+
+        List<SupplierTransactionsDetailsVo> resultList = plPage.getRecords();
+        if (resultList.isEmpty()) {
+            return plPage;
+        }
+
+        List<Long> ledgerIds = resultList.stream().map(SupplierTransactionsDetailsVo::getPurchaseLedgerId).collect(Collectors.toList());
+
+        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
+                .in(SalesLedgerProduct::getSalesLedgerId, ledgerIds)
+                .eq(SalesLedgerProduct::getType, 2));
+
+        //  涓嶈川妫�鐩存帴鍏ュ簱鐨� - 7
+        List<StockInRecord> directInboundRecords = stockInRecordMapper.selectList(new LambdaQueryWrapper<StockInRecord>()
+                .eq(StockInRecord::getRecordType, "7")
+                .eq(StockInRecord::getApprovalStatus, 1)
+                .in(StockInRecord::getRecordId, ledgerIds));
+
+        //  閫氳繃璐ㄦ鍏ュ簱鐨�
+        List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
+                .in(QualityInspect::getPurchaseLedgerId, ledgerIds));
+        List<Long> inspectIds = qualityInspects.stream().map(QualityInspect::getId).collect(Collectors.toList());
+
+        //  璐ㄦ鍚堟牸鍏ュ簱 - 10
+        List<StockInRecord> qualifiedInboundRecords = new ArrayList<>();
+        List<QualityUnqualified> qualityUnqualifieds = new ArrayList<>();
+        if (!inspectIds.isEmpty()) {
+            qualifiedInboundRecords = stockInRecordMapper.selectList(new LambdaQueryWrapper<StockInRecord>()
+                    .eq(StockInRecord::getRecordType, "10")
+                    .eq(StockInRecord::getApprovalStatus, 1)
+                    .in(StockInRecord::getRecordId, inspectIds));
+
+            qualityUnqualifieds = qualityUnqualifiedMapper.selectList(new LambdaQueryWrapper<QualityUnqualified>()
+                    .in(QualityUnqualified::getInspectId, inspectIds));
+        }
+        List<Long> unqualifiedIds = qualityUnqualifieds.stream().map(QualityUnqualified::getId).collect(Collectors.toList());
+
+        //  璐ㄦ涓嶅悎鏍煎叆搴� - 11
+        List<StockInRecord> unqualifiedInboundRecords = new ArrayList<>();
+        if (!unqualifiedIds.isEmpty()) {
+            unqualifiedInboundRecords = stockInRecordMapper.selectList(new LambdaQueryWrapper<StockInRecord>()
+                    .eq(StockInRecord::getRecordType, "11")
+                    .eq(StockInRecord::getApprovalStatus, 1)
+                    .in(StockInRecord::getRecordId, unqualifiedIds));
+        }
+
+        for (SupplierTransactionsDetailsVo vo : resultList) {
+            BigDecimal shippedAmount = BigDecimal.ZERO;
+
+            List<StockInRecord> currentDirectRecords = directInboundRecords.stream().filter(s -> s.getRecordId().equals(vo.getPurchaseLedgerId())).toList();
+            for (StockInRecord sir : currentDirectRecords) {
+                List<SalesLedgerProduct> currentProducts = salesLedgerProducts.stream().filter(s -> s.getSalesLedgerId().equals(vo.getPurchaseLedgerId())).toList();
+                for (SalesLedgerProduct slp : currentProducts) {
+                    if (sir.getStockInNum() != null && slp.getTaxInclusiveUnitPrice() != null) {
+                        shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(slp.getTaxInclusiveUnitPrice()));
+                    }
+                }
+            }
+
+            List<QualityInspect> currentInspects = qualityInspects.stream().filter(q -> q.getPurchaseLedgerId().equals(vo.getPurchaseLedgerId())).toList();
+            for (QualityInspect inspect : currentInspects) {
+                List<StockInRecord> currentQualifiedRecords = qualifiedInboundRecords.stream().filter(s -> s.getRecordId().equals(inspect.getId())).toList();
+                for (StockInRecord sir : currentQualifiedRecords) {
+                    BigDecimal minPrice = getMinTaxInclusiveUnitPrice(salesLedgerProducts, vo.getPurchaseLedgerId(), sir.getProductModelId());
+                    if (sir.getStockInNum() != null && minPrice != null) {
+                        shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(minPrice));
+                    }
+                }
+
+                List<QualityUnqualified> currentUnqualifieds = qualityUnqualifieds.stream().filter(q -> q.getInspectId().equals(inspect.getId())).toList();
+                for (QualityUnqualified unqualified : currentUnqualifieds) {
+                    List<StockInRecord> currentUnqualifiedRecords = unqualifiedInboundRecords.stream().filter(s -> s.getRecordId().equals(unqualified.getId())).toList();
+                    for (StockInRecord sir : currentUnqualifiedRecords) {
+                        BigDecimal minPrice = getMinTaxInclusiveUnitPrice(salesLedgerProducts, vo.getPurchaseLedgerId(), sir.getProductModelId());
+                        if (sir.getStockInNum() != null && minPrice != null) {
+                            shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(minPrice));
+                        }
+                    }
+                }
+            }
+
+            BigDecimal contractAmount = vo.getContractAmount() == null ? BigDecimal.ZERO : vo.getContractAmount();
+            if (shippedAmount.subtract(contractAmount).compareTo(BigDecimal.ZERO) > 0) {
+                shippedAmount = contractAmount;
+            }
+            vo.setShippedAmount(shippedAmount);
+            vo.setUnshippedAmount(contractAmount.subtract(shippedAmount));
+        }
+
+        return plPage;
+    }
+
+    private BigDecimal getMinTaxInclusiveUnitPrice(List<SalesLedgerProduct> allSlp, Long salesLedgerId, Long productModelId) {
+        return allSlp.stream()
+                .filter(s -> s.getSalesLedgerId().equals(salesLedgerId) && s.getProductModelId() != null && s.getProductModelId().equals(productModelId))
+                .map(SalesLedgerProduct::getTaxInclusiveUnitPrice)
+                .filter(java.util.Objects::nonNull)
+                .min(BigDecimal::compareTo)
+                .orElse(null);
     }
 }
diff --git a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
index 4c00873..46c6f58 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -61,6 +61,7 @@
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
@@ -497,9 +498,20 @@
 
     @Override
     public ProductionProgressDto productionProgress() {
+        LocalDateTime now = LocalDateTime.now();
+
+        LocalDateTime startOfMonth = now
+                .with(TemporalAdjusters.firstDayOfMonth())
+                .with(LocalTime.MIN);
+
+        LocalDateTime endOfMonth = now
+                .with(TemporalAdjusters.lastDayOfMonth())
+                .with(LocalTime.MAX);
+
+
         ProductionProgressDto productionProgressDto = new ProductionProgressDto();
-        List<ProductionProgressOrderDto> orderDetails = productionOrderMapper.selectProgressOrders(
-                LocalDateTime.now().minusMonths(1), LocalDateTime.now());
+        List<ProductionProgressOrderDto> orderDetails = productionOrderMapper
+                .selectProgressOrders(startOfMonth, endOfMonth);
         productionProgressDto.setCompletedOrderDetails(orderDetails);
         long totalCount = orderDetails.size();
         long count = orderDetails.stream().filter(
@@ -519,7 +531,7 @@
     public ProductionTurnoverDto workInProcessTurnover() {
         ProductionTurnoverDto productionTurnoverDto = new ProductionTurnoverDto();
         List<ProductionTaskStatisticsDto> taskList = productionOperationTaskMapper
-                .selectTaskStatisticsByDate(LocalDate.now().minusMonths(1), LocalDate.now());
+                .selectTaskStatisticsByDate(LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()), LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()));
         long sum = taskList.stream()
                 .filter(task -> defaultDecimal(task.getPlanQuantity()).compareTo(defaultDecimal(task.getCompleteQuantity())) > 0)
                 .map(ProductionTaskStatisticsDto::getPlanQuantity)
@@ -1625,16 +1637,16 @@
     @Override
     public List<MapDto> orderCount() {
         LocalDate now = LocalDate.now();
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
-        String currentStart = now.withDayOfMonth(1).atStartOfDay()
-                .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-        String currentEnd = now.atTime(LocalTime.MAX).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+        LocalDateTime startDateTime = now.with(TemporalAdjusters.firstDayOfMonth()).atStartOfDay();
+        LocalDateTime endDateTime = now.with(TemporalAdjusters.lastDayOfMonth()).atTime(LocalTime.MAX);
 
-        LocalDate lastMonthDate = now.minusMonths(1);
-        String lastStart = lastMonthDate.withDayOfMonth(1).atStartOfDay()
-                .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
-        String lastEnd = lastMonthDate.withDayOfMonth(lastMonthDate.lengthOfMonth()).atTime(LocalTime.MAX)
-                .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+        String currentStart = startDateTime.format(dateTimeFormatter);
+        String currentEnd = endDateTime.format(dateTimeFormatter);
+
+        String lastStart = startDateTime.minusMonths(1).format(dateTimeFormatter);
+        String lastEnd = endDateTime.format(dateTimeFormatter);
 
         int currentCreated = productionOrderMapper.countCreated(currentStart, currentEnd);
         int lastCreated = productionOrderMapper.countCreated(lastStart, lastEnd);
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java b/src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java
index 36a8290..cb4c4d9 100644
--- a/src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/SalesTrendDto.java
@@ -14,6 +14,7 @@
     private String month; // 鏈堜唤锛堝2024-12锛�
     private Integer orderCount; // 璁㈠崟鏁�
     private BigDecimal salesAmount; // 閿�鍞
+    private BigDecimal productQuantity; // 浜у搧閿�鍞暟閲�
     private BigDecimal shipRate;
 
 }
diff --git a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
index 5518290..0270328 100644
--- a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
+++ b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerMapper.java
@@ -66,6 +66,7 @@
             "DATE_FORMAT(sl.entry_date, '%Y-%m') AS month, " +
             "COUNT(DISTINCT sl.id) AS order_count, " +  // 鎬昏鍗曟暟
             "SUM(slp.tax_inclusive_total_price) AS sales_amount, " +  // 閿�鍞
+            "SUM(IFNULL(slp.quantity, 0)) AS product_quantity, " +  // 浜у搧閿�鍞暟閲�
             // 鍙戣揣鐜� = 鍙戣揣璁㈠崟鏁� * 100 / 鎬昏鍗曟暟锛堜繚鐣�2浣嶅皬鏁帮紝閬垮厤闄�0鎶ラ敊锛�
             "ROUND(IF(COUNT(DISTINCT sl.id) = 0, 0, " +
             "SUM(CASE WHEN slp.approve_status = 2 THEN 1 ELSE 0 END) / COUNT(DISTINCT sl.id) * 100), 2) AS ship_rate " +
diff --git a/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java
index 942e089..2ceec4e 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/MetricStatisticsServiceImpl.java
@@ -51,9 +51,16 @@
         map.put("total", new BigDecimal(totalOrders));
         map.put("shipRate", "0.00%");
 
-        //  鍙戣揣鐜�
+        //  浜у搧閿�鍞暟閲�
         List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
                 .eq(SalesLedgerProduct::getType, 1));
+        BigDecimal productQuantityTotal = CollectionUtils.isEmpty(products) ? BigDecimal.ZERO :
+                products.stream()
+                        .map(SalesLedgerProduct::getQuantity)
+                        .filter(Objects::nonNull)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+        map.put("productQuantityTotal", productQuantityTotal);
+
         if (CollectionUtils.isEmpty(products)) {
             return AjaxResult.success(map);
         }
@@ -116,6 +123,7 @@
         List<String> dateList = new ArrayList<>();
         List<BigDecimal> orderCountList = new ArrayList<>();
         List<BigDecimal> salesAmountList = new ArrayList<>();
+        List<BigDecimal> productQuantityList = new ArrayList<>();
         List<BigDecimal> shippingRateList = new ArrayList<>();
 
         Calendar tempCalendar = Calendar.getInstance();
@@ -136,10 +144,12 @@
             if (dto != null) {
                 orderCountList.add(new BigDecimal(dto.getOrderCount()));
                 salesAmountList.add(dto.getSalesAmount() != null ? dto.getSalesAmount() : BigDecimal.ZERO);
+                productQuantityList.add(dto.getProductQuantity() != null ? dto.getProductQuantity() : BigDecimal.ZERO);
                 shippingRateList.add(new BigDecimal(String.valueOf(dto.getShipRate())));
             } else {
                 orderCountList.add(BigDecimal.ZERO);
                 salesAmountList.add(BigDecimal.ZERO);
+                productQuantityList.add(BigDecimal.ZERO);
                 shippingRateList.add(BigDecimal.ZERO);
             }
 
@@ -150,6 +160,7 @@
         map.put("dateList", dateList);
         map.put("orderCountList", orderCountList);
         map.put("salesAmountList", salesAmountList);
+        map.put("productQuantityList", productQuantityList);
         map.put("shippingRateList", shippingRateList);
         return AjaxResult.success(map);
     }
diff --git a/src/main/resources/application-sdtx.yml b/src/main/resources/application-sdtx.yml
index ceff5df..8a4eae5 100644
--- a/src/main/resources/application-sdtx.yml
+++ b/src/main/resources/application-sdtx.yml
@@ -1,4 +1,3 @@
-
 # 椤圭洰鐩稿叧閰嶇疆
 ruoyi:
   # 鍚嶇О
@@ -261,8 +260,8 @@
   temp-dir: /javaWork/product-inventory-management/file/temp/uploads   # 涓存椂鐩綍 鍚庢湡鍒犻櫎
   upload-dir: /javaWork/product-inventory-management/file/prod/uploads # 姝e紡鐩綍 鍚庢湡鍒犻櫎
   path: /javaWork/product-inventory-management/file/path/uploads # 涓婁紶鐩綍
-  urlPrefix: /common # 閾炬帴鍓嶇紑
-  domain: http://127.0.0.1:7003 # 鍩熷悕鍓嶇紑
+  urlPrefix: /prod-api/common # 閾炬帴鍓嶇紑
+  domain: http://36.213.156.184:9001 # 鍩熷悕鍓嶇紑
   expired: 120 # 杩囨湡鏃堕棿(鍗曚綅:鍒嗛挓)
   useLimit: 10 # 浣跨敤娆℃暟
   compress: true # 鏄惁鍘嬬缉
diff --git a/src/main/resources/mapper/basic/CustomerMapper.xml b/src/main/resources/mapper/basic/CustomerMapper.xml
index e9683da..46b7bf7 100644
--- a/src/main/resources/mapper/basic/CustomerMapper.xml
+++ b/src/main/resources/mapper/basic/CustomerMapper.xml
@@ -112,23 +112,8 @@
     <select id="customewTransactions" resultType="com.ruoyi.sales.vo.CustomerTransactionsVo">
         select T1.customer_id,
                c.customer_name,
-               T1.contractAmounts,
-               IFNULL(T3.outboundAmount, 0) AS shippedAmount,
-               GREATEST(T1.contractAmounts - IFNULL(T3.outboundAmount, 0), 0) AS unshippedAmount
+               T1.contractAmounts
         from (select customer_id, sum(contract_amount) as contractAmounts from sales_ledger group by customer_id) T1
-        left join (
-            SELECT
-                sl.customer_id,
-                sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount
-            FROM stock_out_record sor
-            LEFT join shipping_info s on sor.record_id = s.id
-            LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
-            LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id
-            WHERE sor.record_type='13'
-                and sor.approval_status=1
-                and slp.type = 1
-            group by sl.customer_id
-        ) T3 on T3.customer_id=T1.customer_id
         left join customer c on T1.customer_id = c.id
         <where>
             <if test="customerName!=null and customerName!=''">
@@ -142,24 +127,45 @@
         select sl.id salesLedgerId,
                sl.sales_contract_no,
                sl.execution_date,
-               sl.contract_amount,
-               IFNULL(T2.outboundAmount, 0) AS shippedAmount,
-               GREATEST(sl.contract_amount - IFNULL(T2.outboundAmount, 0), 0) AS unshippedAmount
+               sl.contract_amount
         from sales_ledger sl
-        left join (
-            SELECT
-                sl.id,
-                sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount
-            FROM stock_out_record sor
-                     left join shipping_info s on sor.record_id = s.id
-                     LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
-                     LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id
-            WHERE sor.record_type='13'
-              and sor.approval_status=1
-              and slp.type = 1
-            group by  sl.id
-        )T2 on T2.id = sl.id
         where sl.customer_id = #{customerId}
         order by sl.execution_date
     </select>
+
+    <select id="getShippedAmountByCustomerIds" resultType="java.util.Map">
+        SELECT
+            sl.customer_id as customerId,
+            sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount
+        FROM stock_out_record sor
+        LEFT join shipping_info s on sor.record_id = s.id
+        LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
+        LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id
+        WHERE sor.record_type='13'
+            and sor.approval_status=1
+            and slp.type = 1
+            and sl.customer_id IN
+            <foreach collection="customerIds" item="customerId" open="(" separator="," close=")">
+                #{customerId}
+            </foreach>
+        group by sl.customer_id
+    </select>
+
+    <select id="getShippedAmountBySalesLedgerIds" resultType="java.util.Map">
+        SELECT
+            sl.id as salesLedgerId,
+            sum(sor.stock_out_num * slp.tax_inclusive_unit_price) as outboundAmount
+        FROM stock_out_record sor
+        LEFT join shipping_info s on sor.record_id = s.id
+        LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
+        LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id
+        WHERE sor.record_type='13'
+            and sor.approval_status=1
+            and slp.type = 1
+            and sl.id IN
+            <foreach collection="salesLedgerIds" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        group by sl.id
+    </select>
 </mapper>
diff --git a/src/main/resources/mapper/basic/SupplierManageMapper.xml b/src/main/resources/mapper/basic/SupplierManageMapper.xml
index 15567ad..93bd608 100644
--- a/src/main/resources/mapper/basic/SupplierManageMapper.xml
+++ b/src/main/resources/mapper/basic/SupplierManageMapper.xml
@@ -73,66 +73,8 @@
     <select id="supplierTransactions" resultType="com.ruoyi.purchase.vo.SupplierTransactionsVo">
         SELECT T1.supplier_id,
                sm.supplier_name,
-               T1.contractAmounts,
-               IFNULL(T3.InboundAmount, 0) AS shippedAmount,
-               T1.contractAmounts - IFNULL(T3.InboundAmount, 0) AS unshippedAmount
+               T1.contractAmounts
         FROM (SELECT supplier_id, SUM(contract_amount) AS contractAmounts FROM purchase_ledger GROUP BY supplier_id) T1
-        LEFT JOIN (
-            SELECT t.supplier_id,
-                   SUM(t.inbound_amount) AS InboundAmount
-            FROM (
-                SELECT sir.stock_in_num * slp.tax_inclusive_unit_price AS inbound_amount, pl.supplier_id
-                FROM stock_in_record sir
-                INNER JOIN sales_ledger_product slp ON slp.sales_ledger_id = sir.record_id
-                INNER JOIN purchase_ledger pl ON pl.id = slp.sales_ledger_id
-                WHERE sir.approval_status = 1 AND sir.record_type = 7 AND slp.type = 2
-                UNION ALL
-                 SELECT
-                   sir.stock_in_num * slp_agg.tax_inclusive_unit_price AS inbound_amount,
-                   pl2.supplier_id
-               FROM stock_in_record sir
-                        INNER JOIN quality_inspect qi
-                                   ON qi.id = sir.record_id
-                        INNER JOIN purchase_ledger pl2
-                                   ON pl2.id = qi.purchase_ledger_id
-                        INNER JOIN (
-                   SELECT
-                       sales_ledger_id,
-                       product_model_id,
-                       MIN(tax_inclusive_unit_price) AS tax_inclusive_unit_price
-                   FROM sales_ledger_product
-                   WHERE type = 2
-                   GROUP BY sales_ledger_id, product_model_id
-               ) slp_agg
-                                   ON slp_agg.sales_ledger_id = pl2.id
-                                       AND slp_agg.product_model_id = sir.product_model_id
-               WHERE sir.approval_status = 1 AND sir.record_type = 10
-               UNION ALL
-               SELECT sir.stock_in_num * slp_agg.tax_inclusive_unit_price AS inbound_amount,
-                      pl2.supplier_id
-               FROM stock_in_record sir
-               INNER JOIN quality_unqualified qu
-        ON qu.id = sir.record_id
-        INNER JOIN quality_inspect qi
-        ON qi.id = qu.inspect_id
-        INNER JOIN purchase_ledger pl2
-        ON pl2.id = qi.purchase_ledger_id
-        INNER JOIN (
-        SELECT
-        sales_ledger_id,
-        product_model_id,
-        MIN(tax_inclusive_unit_price) AS tax_inclusive_unit_price
-        FROM sales_ledger_product
-        WHERE type = 2
-        GROUP BY sales_ledger_id, product_model_id
-        ) slp_agg
-        ON slp_agg.sales_ledger_id = pl2.id
-        AND slp_agg.product_model_id = sir.product_model_id
-        WHERE sir.approval_status = 1
-        AND sir.record_type = 11
-            ) t
-            GROUP BY t.supplier_id
-        ) T3 ON T3.supplier_id = T1.supplier_id
         LEFT JOIN supplier_manage sm ON T1.supplier_id = sm.id
         <where>
             <if test="supplierName!=null and supplierName!=''">
@@ -146,66 +88,10 @@
        SELECT pl.id purchaseLedgerId,
               pl.purchase_contract_number,
               pl.execution_date,
-              pl.contract_amount,
-              IFNULL(T2.InboundAmount, 0) AS shippedAmount,
-              pl.contract_amount - IFNULL(T2.InboundAmount, 0) AS unshippedAmount
+              pl.contract_amount
        FROM purchase_ledger pl
-       LEFT JOIN (
-           SELECT t.sales_ledger_id,
-                  SUM(t.inbound_amount) AS InboundAmount
-           FROM (
-               SELECT sir.stock_in_num * slp.tax_inclusive_unit_price AS inbound_amount, slp.sales_ledger_id
-               FROM stock_in_record sir
-               INNER JOIN sales_ledger_product slp ON slp.sales_ledger_id = sir.record_id
-               WHERE sir.approval_status = 1 AND sir.record_type = 7 AND slp.type = 2
-               UNION ALL
-               SELECT
-                   sir.stock_in_num * slp_agg.tax_inclusive_unit_price AS inbound_amount,
-                   slp_agg.sales_ledger_id
-               FROM stock_in_record sir
-                        INNER JOIN quality_inspect qi
-                                   ON qi.id = sir.record_id
-                        INNER JOIN purchase_ledger pl2
-                                   ON pl2.id = qi.purchase_ledger_id
-                        INNER JOIN (
-                   SELECT
-                       sales_ledger_id,
-                       product_model_id,
-                       MIN(tax_inclusive_unit_price) AS tax_inclusive_unit_price
-                   FROM sales_ledger_product
-                   WHERE type = 2
-                   GROUP BY sales_ledger_id, product_model_id
-               ) slp_agg
-                                   ON slp_agg.sales_ledger_id = pl2.id
-                                       AND slp_agg.product_model_id = sir.product_model_id
-               WHERE sir.approval_status = 1 AND sir.record_type = 10
-               UNION ALL
-               SELECT sir.stock_in_num * slp_agg.tax_inclusive_unit_price AS inbound_amount,
-                      slp_agg.sales_ledger_id
-               FROM stock_in_record sir
-                        INNER JOIN quality_unqualified qu
-                                   ON qu.id = sir.record_id
-                        INNER JOIN quality_inspect qi
-                                   ON qi.id = qu.inspect_id
-                        INNER JOIN purchase_ledger pl2
-                                   ON pl2.id = qi.purchase_ledger_id
-                        INNER JOIN (
-                   SELECT
-                       sales_ledger_id,
-                       product_model_id,
-                       MIN(tax_inclusive_unit_price) AS tax_inclusive_unit_price
-                   FROM sales_ledger_product
-                   WHERE type = 2
-                   GROUP BY sales_ledger_id, product_model_id
-               ) slp_agg
-                                   ON slp_agg.sales_ledger_id = pl2.id
-                                       AND slp_agg.product_model_id = sir.product_model_id
-               WHERE sir.approval_status = 1
-                 AND sir.record_type = 11
-           ) t
-           GROUP BY t.sales_ledger_id
-       ) T2 ON T2.sales_ledger_id = pl.id
        WHERE pl.supplier_id = #{supplierId}
     </select>
 
+
 </mapper>
diff --git a/src/main/resources/mapper/collaborativeApproval/NoticeMapper.xml b/src/main/resources/mapper/collaborativeApproval/NoticeMapper.xml
index 08cf865..dcb620a 100644
--- a/src/main/resources/mapper/collaborativeApproval/NoticeMapper.xml
+++ b/src/main/resources/mapper/collaborativeApproval/NoticeMapper.xml
@@ -3,7 +3,7 @@
 <mapper namespace="com.ruoyi.collaborativeApproval.mapper.NoticeMapper">
 
     <select id="listPage" resultType="com.ruoyi.collaborativeApproval.dto.NoticeDTO">
-        select n.*, su.user_name as create_user_name
+        select n.*, su.nick_name as create_user_name
         from notice n
         left join sys_user su on n.create_user = su.user_id
         <where>
diff --git a/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml b/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
index 49380aa..df2d565 100644
--- a/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
+++ b/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
@@ -43,7 +43,9 @@
         <if test="qualityUnqualified.entryDateEnd != null and qualityUnqualified.entryDateEnd != '' ">
             AND  check_time &lt;= DATE_FORMAT(#{qualityUnqualified.entryDateEnd},'%Y-%m-%d')
         </if>
+        order by qu.check_time desc
     </select>
+
     <select id="qualityUnqualifiedExport" resultType="com.ruoyi.quality.pojo.QualityUnqualified">
         SELECT
         *

--
Gitblit v1.9.3