From ec8d7cbe79f8c012f0d855e19fee9dc8cd27608f Mon Sep 17 00:00:00 2001
From: yaowanxin <3588231647@qq.com>
Date: 星期五, 09 一月 2026 16:24:54 +0800
Subject: [PATCH] 1.各生产订单的完成进度统计接口 2.在制品周转情况接口 3.生产报工记录添加上生产时间字段

---
 src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java |    4 +
 src/main/resources/mapper/production/ProductWorkOrderMapper.xml       |    5 +
 src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java     |    4 +
 src/main/resources/mapper/production/ProductOrderMapper.xml           |   12 ++++
 src/main/java/com/ruoyi/home/controller/HomeController.java           |   19 +++++-
 src/main/java/com/ruoyi/home/dto/ProductionProgressDto.java           |   25 ++++++++
 src/main/java/com/ruoyi/production/dto/ProductOrderDto.java           |   17 ++++-
 src/main/java/com/ruoyi/home/service/HomeService.java                 |   10 ++-
 src/main/resources/mapper/production/ProductionProductMainMapper.xml  |    2 
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java        |   53 +++++++++++++++++
 src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java  |    6 ++
 11 files changed, 146 insertions(+), 11 deletions(-)

diff --git a/src/main/java/com/ruoyi/home/controller/HomeController.java b/src/main/java/com/ruoyi/home/controller/HomeController.java
index 6854f2f..62f6715 100644
--- a/src/main/java/com/ruoyi/home/controller/HomeController.java
+++ b/src/main/java/com/ruoyi/home/controller/HomeController.java
@@ -7,11 +7,10 @@
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.home.dto.AnalysisCustomerContractAmountsDto;
-import com.ruoyi.home.dto.HomeBusinessDto;
-import com.ruoyi.home.dto.QualityStatisticsDto;
-import com.ruoyi.home.dto.StatisticsReceivablePayableDto;
+import com.ruoyi.home.dto.*;
 import com.ruoyi.home.service.HomeService;
+import com.ruoyi.production.dto.ProductOrderDto;
+import com.ruoyi.production.dto.ProductWorkOrderDto;
 import com.ruoyi.production.dto.SalesLedgerWorkDto;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -91,4 +90,16 @@
         Long count = homeService.noticesCount();
         return AjaxResult.success(count);
     }
+    @GetMapping("/progressStatistics")
+    @ApiOperation("鍚勭敓浜ц鍗曠殑瀹屾垚杩涘害缁熻")
+    public AjaxResult progressStatistics(){
+        ProductionProgressDto productionProgressDto = homeService.productionProgress();
+        return AjaxResult.success(productionProgressDto);
+    }
+    @GetMapping("/workInProcessTurnover")
+    @ApiOperation("鍦ㄥ埗鍝佸懆杞儏鍐�")
+    public AjaxResult workInProcessTurnover(){
+        Map<Integer, List<ProductWorkOrderDto>> productWorkOrderDtoMap = homeService.workInProcessTurnover();
+        return AjaxResult.success(productWorkOrderDtoMap);
+    }
 }
diff --git a/src/main/java/com/ruoyi/home/dto/ProductionProgressDto.java b/src/main/java/com/ruoyi/home/dto/ProductionProgressDto.java
new file mode 100644
index 0000000..99d9e61
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/ProductionProgressDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.home.dto;
+
+import com.ruoyi.production.dto.ProductOrderDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel
+public class ProductionProgressDto {
+    @ApiModelProperty("鎬昏鍗曟暟")
+    private Integer totalOrderCount;
+
+    @ApiModelProperty("宸插畬鎴愯鍗曟暟")
+    private Integer completedOrderCount;
+    @ApiModelProperty("鏈畬鎴愯鍗曟暟")
+    private Integer uncompletedOrderCount;
+    @ApiModelProperty("鎬讳綋瀹屾垚杩涘害")
+    private BigDecimal completedProgressCount;
+    @ApiModelProperty("璁㈠崟璇︽儏")
+    private List<ProductOrderDto> completedOrderDetails;
+}
diff --git a/src/main/java/com/ruoyi/home/service/HomeService.java b/src/main/java/com/ruoyi/home/service/HomeService.java
index 42a6f27..010e8c1 100644
--- a/src/main/java/com/ruoyi/home/service/HomeService.java
+++ b/src/main/java/com/ruoyi/home/service/HomeService.java
@@ -1,10 +1,9 @@
 package com.ruoyi.home.service;
 
 import com.ruoyi.approve.pojo.ApproveProcess;
-import com.ruoyi.home.dto.AnalysisCustomerContractAmountsDto;
-import com.ruoyi.home.dto.HomeBusinessDto;
-import com.ruoyi.home.dto.QualityStatisticsDto;
-import com.ruoyi.home.dto.StatisticsReceivablePayableDto;
+import com.ruoyi.home.dto.*;
+import com.ruoyi.production.dto.ProductOrderDto;
+import com.ruoyi.production.dto.ProductWorkOrderDto;
 
 import java.text.ParseException;
 import java.util.List;
@@ -31,4 +30,7 @@
     Map<String, Object> approveAndDeviceTodos();
 
     Long noticesCount();
+
+     ProductionProgressDto productionProgress();
+     Map<Integer, List<ProductWorkOrderDto>> workInProcessTurnover();
 }
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 5630e84..58b6c06 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -1,6 +1,8 @@
 package com.ruoyi.home.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.approve.mapper.ApproveProcessMapper;
 import com.ruoyi.approve.pojo.ApproveProcess;
 import com.ruoyi.collaborativeApproval.mapper.NoticeMapper;
@@ -22,6 +24,14 @@
 import com.ruoyi.procurementrecord.pojo.CustomStorage;
 import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
 import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
+import com.ruoyi.production.dto.ProductOrderDto;
+import com.ruoyi.production.dto.ProductWorkOrderDto;
+import com.ruoyi.production.dto.ProductionProductMainDto;
+import com.ruoyi.production.mapper.ProductOrderMapper;
+import com.ruoyi.production.mapper.ProductWorkOrderMapper;
+import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.pojo.ProductWorkOrder;
 import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.mapper.SysDeptMapper;
 import com.ruoyi.purchase.mapper.PaymentRegistrationMapper;
@@ -98,6 +108,12 @@
 
     @Autowired
     private NoticeMapper noticeMapper;
+    @Autowired
+    private ProductOrderMapper productOrderMapper;
+    @Autowired
+    private ProductionProductMainMapper productionProductMainMapper;
+    @Autowired
+    private ProductWorkOrderMapper productWorkOrderMapper;
 
     @Override
     public HomeBusinessDto business() {
@@ -490,4 +506,41 @@
                 .eq(Notice::getStatus, 1) // 1琛ㄧず鍙戝竷鐘舵��
                 .ge(Notice::getExpirationDate, new Date())); // 杩囨湡鏃堕棿澶т簬绛変簬褰撳墠鏃ユ湡
     }
+
+    @Override
+    public ProductionProgressDto productionProgress() {
+        ProductionProgressDto productionProgressDto = new ProductionProgressDto();
+        List<ProductOrder> productOrderList = productOrderMapper.selectList(new LambdaQueryWrapper<ProductOrder>());
+        List<ProductOrderDto> productOrderDtoList = new ArrayList<>();
+        productOrderList.forEach(productOrder -> {
+            ProductOrderDto productOrderDto = productOrderMapper.productMainByOrderId(productOrder);
+            if (productOrderDto != null && productOrderDto.getPlanQuantity() != null && productOrderDto.getQuantity() != null) {
+                productOrderDto.setCompletionStatus(BigDecimal.valueOf(productOrderDto.getPlanQuantity()-productOrderDto.getQuantity()).divide(BigDecimal.valueOf(productOrderDto.getPlanQuantity()), 2, RoundingMode.HALF_UP));
+            }
+            productOrderDtoList.add(productOrderDto);
+        });
+        productionProgressDto.setCompletedOrderDetails(productOrderDtoList);
+        // 1. 鏌ヨ鎵�鏈夌敓浜ц鍗曪紙鍙牴鎹渶姹傛坊鍔犺繃婊ゆ潯浠讹紝濡傛帓闄ゅ凡鍒犻櫎銆佸凡鍙栨秷鐨勮鍗曪級
+        IPage<ProductOrderDto> productOrderDtoIPage = productOrderMapper.pageProductOrder(new Page<>(1, -1), new ProductOrderDto());
+
+        // 2. 鍒濆鍖栨眹鎬绘暟鎹�
+        int totalCount = productOrderDtoIPage.getRecords().size();
+        int completedCount = (int) productOrderDtoIPage.getRecords().stream().map(productOrderDto -> productOrderMapper.productMainByOrderId(productOrderDto)).filter(productOrderDto1 -> productOrderDto1.getQuantity() != null && productOrderDto1.getQuantity() == 0).count();
+
+        // 6. 璧嬪�兼眹鎬绘暟鎹�
+        productionProgressDto.setTotalOrderCount(totalCount);
+        productionProgressDto.setCompletedOrderCount(completedCount);
+        productionProgressDto.setUncompletedOrderCount(totalCount - completedCount);
+        productionProgressDto.setCompletedProgressCount(BigDecimal.valueOf(completedCount).divide(BigDecimal.valueOf(totalCount), 2, RoundingMode.HALF_UP));
+        return productionProgressDto;
+    }
+    @Override
+    public Map<Integer, List<ProductWorkOrderDto>> workInProcessTurnover() {
+        List<ProductWorkOrderDto> productWorkOrderDtoList = productWorkOrderMapper.selectProductWorkOrderDtoList();
+       //鏍规嵁鐘舵�佸尯鍒嗗伐鍗曠殑鍚勪釜鐘舵��
+        Map<Integer, List<ProductWorkOrderDto>> productWorkOrderDtoMap = productWorkOrderDtoList.stream().collect(Collectors.groupingBy(ProductWorkOrderDto::getStatus));
+
+        return productWorkOrderDtoMap;
+
+    }
 }
diff --git a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
index 16ea17b..f9fdbbd 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -4,6 +4,8 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 @Data
 public class ProductOrderDto extends ProductOrder {
 
@@ -21,7 +23,16 @@
 
     @ApiModelProperty(value = "瑙勬牸")
     private String specificationModel;
-
-
-
+    @ApiModelProperty(value = "璁″垝鏁伴噺")
+    private Integer planQuantity;
+    @ApiModelProperty(value = "鏁伴噺")
+    private Integer Quantity;
+    @ApiModelProperty(value = "宸ュ崟鍙�")
+    private String workOrderNo;
+    @ApiModelProperty(value = "鏄惁鎶ュ伐")
+    private Integer reportWork;
+    @ApiModelProperty(value = "宸ュ崟鐘舵��")
+    private Integer status;
+    @ApiModelProperty(value = "璁㈠崟瀹屾垚搴�")
+    private BigDecimal completionStatus;
 }
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
index f6aa5ba..545be5d 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
@@ -5,6 +5,7 @@
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 
 @Data
 public class ProductionProductMainDto extends ProductionProductMain {
@@ -25,4 +26,9 @@
 
     @ApiModelProperty(value = "鎶ュ伐id")
     private Long productMainId;
+    @ApiModelProperty(value = "瀹為檯寮�濮嬫椂闂�")
+    private LocalDateTime actualStartTime;
+
+    @ApiModelProperty(value = "瀹為檯缁撴潫鏃堕棿")
+    private LocalDateTime actualEndTime;
 }
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
index c4e4ad5..9ce5878 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
@@ -12,4 +12,8 @@
 public interface ProductOrderMapper extends BaseMapper<ProductOrder> {
 
     IPage<ProductOrderDto> pageProductOrder(Page page, @Param("c") ProductOrderDto productOrder);
+    /**
+     * 鏍规嵁璁㈠崟ID鏌ヨ宸ュ崟鎶ュ伐
+     */
+     ProductOrderDto productMainByOrderId(@Param("c") ProductOrder productOrder);
 }
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
index 1d5242e..93f443e 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
@@ -1,5 +1,6 @@
 package com.ruoyi.production.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -8,6 +9,7 @@
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
 import java.util.Map;
 
 @Mapper
@@ -23,4 +25,6 @@
      * @return
      */
     int rollbackPlanQuantity(@Param("productMainId") Long productMainId);
+
+    List<ProductWorkOrderDto> selectProductWorkOrderDtoList();
 }
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index 616d12f..d4ffc40 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -37,6 +37,18 @@
             </if>
         </where>
     </select>
+    <select id="productMainByOrderId" resultType="com.ruoyi.production.dto.ProductOrderDto">
+        select
+            po.*,
+            pwo.work_order_no,
+            pwo.report_work,
+            pwo.status,
+            pwo.quantity,
+            pwo.plan_quantity
+        from product_order po
+        left join product_work_order pwo on po.id = pwo.product_order_id
+        where po.id = #{c.id}
+    </select>
 
 
 </mapper>
diff --git a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
index cd5d97e..ac0348a 100644
--- a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -39,6 +39,11 @@
             </if>
         </where>
     </select>
+    <select id="selectProductWorkOrderDtoList" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">
+        select *
+        from product_work_order pwo
+        left join product_order po on po.id = pwo.product_order_id
+    </select>
 
     <update id="updatePlanQuantity" parameterType="java.util.Map">
         UPDATE product_work_order
diff --git a/src/main/resources/mapper/production/ProductionProductMainMapper.xml b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
index 3a0542c..d9e4ff4 100644
--- a/src/main/resources/mapper/production/ProductionProductMainMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -16,6 +16,8 @@
         select ppm.*,
                pwo.work_order_no as workOrderNo,
                pwo.status as workOrderStatus,
+               pwo.actual_start_time as actualStartTime,
+               pwo.actual_end_time as actualEndTime,
                u.nick_name as nickName
         from
             production_product_main ppm

--
Gitblit v1.9.3