From 6ed4b397bb9dbb9c2d7bb0676339721fa97996bf Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期五, 30 一月 2026 10:32:26 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New' into dev_New

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java         |    7 ++++---
 src/main/resources/mapper/production/ProductOrderMapper.xml                           |    2 +-
 src/main/resources/mapper/sales/SalesLedgerProductMapper.xml                          |    2 +-
 src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java                  |   37 +++++++++++++++++++++++++------------
 src/main/java/com/ruoyi/production/pojo/SalesLedgerProductionAccounting.java          |    2 ++
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |    2 +-
 src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java                 |    1 +
 src/main/java/com/ruoyi/production/pojo/ProductOrder.java                             |    5 +++++
 8 files changed, 40 insertions(+), 18 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
index dae49a7..70c82d8 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
@@ -30,6 +30,11 @@
     /**
      * 閿�鍞彴璐︿骇鍝乮d(sales_ledger_product)
      */
+    private Long saleLedgerProductId;
+
+    /**
+     * 閿�鍞彴璐︿骇鍝乮d(sales_ledger_product)
+     */
     @ApiModelProperty(value = "閿�鍞彴璐︿骇鍝乮d")
     private Long productModelId;
 
diff --git a/src/main/java/com/ruoyi/production/pojo/SalesLedgerProductionAccounting.java b/src/main/java/com/ruoyi/production/pojo/SalesLedgerProductionAccounting.java
index 38a2469..b410df7 100644
--- a/src/main/java/com/ruoyi/production/pojo/SalesLedgerProductionAccounting.java
+++ b/src/main/java/com/ruoyi/production/pojo/SalesLedgerProductionAccounting.java
@@ -101,4 +101,6 @@
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
 
+    private Long ProductMainId;
+
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 553e0d0..6f71f6b 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -227,7 +227,7 @@
                     .salesLedgerWorkId(productionProductMain.getId())
                     .salesLedgerSchedulingId(0L)
                     .salesLedgerId(productOrder.getSalesLedgerId())
-                    .salesLedgerProductId(productOrder.getProductModelId())
+                    .salesLedgerProductId(productOrder.getSaleLedgerProductId())
                     .schedulingUserId(user.getUserId())
                     .schedulingUserName(user.getNickName())
                     .finishedNum(productQty)
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index d2118d1..a793a02 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -270,7 +270,8 @@
     public void addProductionData(SalesLedgerProduct salesLedgerProduct) {
         ProductOrder productOrder = new ProductOrder();
         productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
-        productOrder.setProductModelId(salesLedgerProduct.getId());
+        productOrder.setProductModelId(salesLedgerProduct.getProductModelId());
+        productOrder.setSaleLedgerProductId(salesLedgerProduct.getId());
         productOrder.setNpsNo("SC" + String.format("%08d", salesLedgerProduct.getId()));
         productOrder.setQuantity(salesLedgerProduct.getQuantity());//闇�姹傛暟閲�
         productOrder.setCompleteQuantity(BigDecimal.ZERO);//瀹屾垚鏁伴噺
@@ -346,7 +347,7 @@
         //鎵归噺鏌ヨproductOrder
         List<ProductOrder> productOrders = productOrderMapper.selectList(
                 new LambdaQueryWrapper<ProductOrder>()
-                        .in(ProductOrder::getProductModelId, productIds)
+                        .in(ProductOrder::getSaleLedgerProductId, productIds)
         );
         if (!org.springframework.util.CollectionUtils.isEmpty(productOrders)) {
             List<Long> orderIds = productOrders.stream()
@@ -426,7 +427,7 @@
 
             // 鎵归噺鍒犻櫎productOrder
             productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>()
-                    .in(ProductOrder::getProductModelId, productIds));
+                    .in(ProductOrder::getSaleLedgerProductId, productIds));
         }
     }
 
diff --git a/src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java
index 24abcfc..ff74b0f 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/AnalyticsServiceImpl.java
@@ -94,19 +94,22 @@
             Integer leaveCount = staffLeaveMapper.countLeaveByMonth(monthStart, monthEnd);
             vo.setLeaveCount(leaveCount != null ? leaveCount : 0);
 
-            // 璁$畻娴佸け鐜囷細娴佸け鐜� = 鏈堝害绂昏亴鍛樺伐鏁� / 鏈堝垵鍛樺伐鏁� * 100%
+            // 璁$畻褰撴湡骞冲潎鍦ㄨ亴浜烘暟 = (鏈堝垵鍛樺伐鏁� + 鏈堟湯鍛樺伐鏁�) / 2
+            Double averageStaffCount = (vo.getBeginMonthStaffCount() + vo.getEndMonthStaffCount()) / 2.0;
+
+            // 璁$畻娴佸け鐜囷細娴佸け鐜� = 鏈堝害绂昏亴鍛樺伐鏁� / 褰撴湡骞冲潎鍦ㄨ亴浜烘暟 * 100%
             Double turnoverRate = 0.0;
-            if (vo.getBeginMonthStaffCount() > 0) {
-                turnoverRate = (double) vo.getLeaveCount() / vo.getBeginMonthStaffCount() * 100;
+            if (averageStaffCount > 0) {
+                turnoverRate = (double) vo.getLeaveCount() / averageStaffCount * 100;
                 // 淇濈暀涓や綅灏忔暟
                 turnoverRate = Math.round(turnoverRate * 100.0) / 100.0;
             }
             vo.setTurnoverRate(turnoverRate);
 
-            // 璁$畻娴佸姩鐜囷細娴佸姩鐜� = (鏈堝害鍏ヨ亴鍛樺伐鏁� + 鏈堝害绂昏亴鍛樺伐鏁�) / 鏈堝垵鍛樺伐鏁� * 100%
+            // 璁$畻娴佸姩鐜囷細娴佸姩鐜� = (鏈堝害鍏ヨ亴鍛樺伐鏁� + 鏈堝害绂昏亴鍛樺伐鏁�) / 褰撴湡骞冲潎鍦ㄨ亴浜烘暟 * 100%
             Double flowRate = 0.0;
-            if (vo.getBeginMonthStaffCount() > 0) {
-                flowRate = (double) (vo.getNewHireCount() + vo.getLeaveCount()) / vo.getBeginMonthStaffCount() * 100;
+            if (averageStaffCount > 0) {
+                flowRate = (double) (vo.getNewHireCount() + vo.getLeaveCount()) / averageStaffCount * 100;
                 // 淇濈暀涓や綅灏忔暟
                 flowRate = Math.round(flowRate * 100.0) / 100.0;
             }
@@ -133,26 +136,36 @@
 
         // 鑾峰彇鏈堝垵鍛樺伐鏁帮紙鍗充笂鏈堟湯鍛樺伐鏁帮級
         Integer beginMonthStaffCount = staffOnJobMapper.countOnJobStaffByDate(monthStartDate.minusDays(1));
+        beginMonthStaffCount = beginMonthStaffCount != null ? beginMonthStaffCount : 0;
+
+        // 鑾峰彇鏈堟湯鍛樺伐鏁�
+        Integer endMonthStaffCount = staffOnJobMapper.countOnJobStaffByDate(monthEndDate);
+        endMonthStaffCount = endMonthStaffCount != null ? endMonthStaffCount : 0;
 
         // 鑾峰彇鏈湀鏂板叆鑱屽憳宸ユ暟
         Integer newHireCount = staffOnJobMapper.countNewHireByMonth(monthStartDate, monthEndDate);
+        newHireCount = newHireCount != null ? newHireCount : 0;
 
         // 鑾峰彇鏈湀绂昏亴鍛樺伐鏁�
         Integer leaveCount = staffLeaveMapper.countLeaveByMonth(monthStartDate, monthEndDate);
+        leaveCount = leaveCount != null ? leaveCount : 0;
 
-        // 璁$畻鎬绘祦鍔ㄧ巼 = (鍏ヨ亴浜烘暟 + 绂昏亴浜烘暟) / 鏈堝垵鍛樺伐鏁� * 100%
+        // 璁$畻褰撴湡骞冲潎鍦ㄨ亴浜烘暟 = (鏈堝垵鍛樺伐鏁� + 鏈堟湯鍛樺伐鏁�) / 2
+        Double averageStaffCount = (beginMonthStaffCount + endMonthStaffCount) / 2.0;
+
+        // 璁$畻鎬绘祦鍔ㄧ巼 = (鍏ヨ亴浜烘暟 + 绂昏亴浜烘暟) / 褰撴湡骞冲潎鍦ㄨ亴浜烘暟 * 100%
         Double totalFlowRate = 0.0;
-        if (beginMonthStaffCount > 0) {
-            totalFlowRate = (double) (newHireCount + leaveCount) / beginMonthStaffCount * 100;
+        if (averageStaffCount > 0) {
+            totalFlowRate = (double) (newHireCount + leaveCount) / averageStaffCount * 100;
             // 淇濈暀涓や綅灏忔暟
             totalFlowRate = Math.round(totalFlowRate * 100.0) / 100.0;
         }
         result.setTotalFlowRate(totalFlowRate);
 
-        // 璁$畻鎬绘祦澶辩巼 = 绂昏亴浜烘暟 / 鏈堝垵鍛樺伐鏁� * 100%
+        // 璁$畻鎬绘祦澶辩巼 = 绂昏亴浜烘暟 / 褰撴湡骞冲潎鍦ㄨ亴浜烘暟 * 100%
         Double totalTurnoverRate = 0.0;
-        if (beginMonthStaffCount > 0) {
-            totalTurnoverRate = (double) leaveCount / beginMonthStaffCount * 100;
+        if (averageStaffCount > 0) {
+            totalTurnoverRate = (double) leaveCount / averageStaffCount * 100;
             // 淇濈暀涓や綅灏忔暟
             totalTurnoverRate = Math.round(totalTurnoverRate * 100.0) / 100.0;
         }
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
index 98e7bdb..d7abe9b 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
@@ -69,6 +69,7 @@
         }
         // 鍒涘缓鍏ヨ亴鏁版嵁
         staffOnJobPrams.setContractExpireTime(staffOnJobPrams.getContractEndTime());
+        staffOnJobPrams.setStaffState(1);
         staffOnJobMapper.insert(staffOnJobPrams);
 
         // 鍒涘缓鍚堝悓璁板綍
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index 70ce815..5f526ea 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -25,7 +25,7 @@
         DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff
         from product_order po
         left join sales_ledger sl on po.sales_ledger_id = sl.id
-        left join sales_ledger_product slp on po.product_model_id = slp.id
+        left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id
         left join product_process_route ppr on po.id = ppr.product_order_id
         left join product_bom pb on pb.id = ppr.bom_id
         <where>
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index 01f0e89..2a1b94a 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -31,7 +31,7 @@
                  left join production_product_main ppm on qi.product_main_id = ppm.id
                  left join product_work_order pwo on ppm.work_order_id = pwo.id
                  left join product_order po on pwo.product_order_id = po.id
-                 left join sales_ledger_product slp on po.product_model_id = slp.id
+                 left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id
         where qi.product_main_id = #{productMainId}
 
 

--
Gitblit v1.9.3