From d8adaddf1886dfeb28599ef2e047da905883e42d Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期三, 01 四月 2026 15:08:19 +0800
Subject: [PATCH] 销售看板完成

---
 src/main/java/com/ruoyi/productionPlan/dto/TrackDto.java                             |   18 ++++
 src/main/java/com/ruoyi/productionPlan/mapper/ProductionPlanMapper.java              |    2 
 /dev/null                                                                            |   18 ----
 src/main/java/com/ruoyi/productionPlan/service/ProductOrderPlanService.java          |    2 
 src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java                    |    2 
 src/main/resources/mapper/production/ProductOrderMapper.xml                          |   34 ++++++++
 src/main/java/com/ruoyi/productionPlan/controller/TrackController.java               |   36 +++++++++
 src/main/java/com/ruoyi/productionPlan/dto/OrderDto.java                             |   19 ++++
 src/main/java/com/ruoyi/productionPlan/service/impl/ProductOrderPlanServiceImpl.java |   64 ++++++++++++++++
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java                       |    2 
 10 files changed, 178 insertions(+), 19 deletions(-)

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 b6cc70e..a49482e 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -2528,7 +2528,7 @@
         BigDecimal sum = salesDeliveries.stream()
                 .map(item -> item.getPrice() != null ? new BigDecimal(item.getPrice().toString()) : BigDecimal.ZERO)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
-        long finalPrice = sum.divide(new BigDecimal("1000"), 0, RoundingMode.HALF_UP).longValue();
+        long finalPrice = sum.divide(new BigDecimal("10000"), 0, RoundingMode.HALF_UP).longValue();
         map.put("price", finalPrice);//鍗曚綅w
         //鎬诲彂璐у崟
         map.put("delivery", (long) salesDeliveries.size());
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
index 44d6f62..e49bea7 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
@@ -35,4 +35,6 @@
     IPage<FinishedPageDto> finishedPage(Page page, @Param("c") FinishedPageDto finishedPageDto);
 
     List<FinishedRatioDto> finishedRatio(@Param("productOrderId") Long productOrderId);
+
+    ProductOrderDto getProductOrderDto(@Param("productOrderId") Long productOrderId);
 }
diff --git a/src/main/java/com/ruoyi/productionPlan/controller/ProductOrderPlanController.java b/src/main/java/com/ruoyi/productionPlan/controller/ProductOrderPlanController.java
deleted file mode 100644
index a789215..0000000
--- a/src/main/java/com/ruoyi/productionPlan/controller/ProductOrderPlanController.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.ruoyi.productionPlan.controller;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  鍓嶇鎺у埗鍣�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-03-11 03:02:58
- */
-@RestController
-@RequestMapping("/productOrderPlan")
-public class ProductOrderPlanController {
-
-}
diff --git a/src/main/java/com/ruoyi/productionPlan/controller/TrackController.java b/src/main/java/com/ruoyi/productionPlan/controller/TrackController.java
new file mode 100644
index 0000000..b11c29b
--- /dev/null
+++ b/src/main/java/com/ruoyi/productionPlan/controller/TrackController.java
@@ -0,0 +1,36 @@
+package com.ruoyi.productionPlan.controller;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.productionPlan.pojo.ProductOrderPlan;
+import com.ruoyi.productionPlan.service.ProductOrderPlanService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-11 03:02:58
+ */
+@RestController
+@RequestMapping("/track")
+@Api(tags = "杩借釜杩涘害")
+public class TrackController {
+
+    @Autowired
+    private ProductOrderPlanService productOrderPlanService;
+
+    @GetMapping("/trackProgressByNo")
+    @ApiOperation("鏍规嵁涓荤敓浜ц鍒掓煡璇㈣繘搴�")
+    public AjaxResult trackProgressByNo(String applyNo) {
+        return AjaxResult.success(productOrderPlanService.trackProgressByNo(applyNo));
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/productionPlan/dto/OrderDto.java b/src/main/java/com/ruoyi/productionPlan/dto/OrderDto.java
new file mode 100644
index 0000000..5f9a16b
--- /dev/null
+++ b/src/main/java/com/ruoyi/productionPlan/dto/OrderDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.productionPlan.dto;
+
+import com.ruoyi.production.dto.ProductOrderDto;
+import com.ruoyi.production.pojo.ProductionProductMain;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("鐢熶骇璁″垝杩借釜杩涘害鐨勮鍗曚俊鎭�")
+public class OrderDto {
+
+    //鐢熶骇璁㈠崟淇℃伅
+    private ProductOrderDto productOrderDto;
+
+    //鎶ュ伐璇︽儏
+    private List<ProductionProductMain> productionProductMains;
+}
diff --git a/src/main/java/com/ruoyi/productionPlan/dto/TrackDto.java b/src/main/java/com/ruoyi/productionPlan/dto/TrackDto.java
new file mode 100644
index 0000000..e0013f4
--- /dev/null
+++ b/src/main/java/com/ruoyi/productionPlan/dto/TrackDto.java
@@ -0,0 +1,18 @@
+package com.ruoyi.productionPlan.dto;
+
+import com.ruoyi.productionPlan.pojo.ProductionPlan;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("鐢熶骇璁″垝杩借釜杩涘害鐨勮繑鍥炴暟鎹�")
+public class TrackDto {
+
+    //鐢熶骇璁″垝鐨勪俊鎭�
+    private ProductionPlanDto productionPlanDto;
+
+    //璁㈠崟淇℃伅
+    private List<OrderDto> orderDtoList;
+}
diff --git a/src/main/java/com/ruoyi/productionPlan/mapper/ProductionPlanMapper.java b/src/main/java/com/ruoyi/productionPlan/mapper/ProductionPlanMapper.java
index 042ef22..d0b9bd1 100644
--- a/src/main/java/com/ruoyi/productionPlan/mapper/ProductionPlanMapper.java
+++ b/src/main/java/com/ruoyi/productionPlan/mapper/ProductionPlanMapper.java
@@ -6,6 +6,7 @@
 import com.ruoyi.productionPlan.dto.ProductionPlanDto;
 import com.ruoyi.productionPlan.dto.ProductionPlanSummaryDto;
 import com.ruoyi.productionPlan.pojo.ProductionPlan;
+import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -19,6 +20,7 @@
  * @version 1.0
  * @since 2026/03/10 9:56
  */
+@Mapper
 public interface ProductionPlanMapper extends BaseMapper<ProductionPlan> {
     IPage<ProductionPlanDto> listPage(Page page, @Param("c") ProductionPlanDto productionPlanDto);
 
diff --git a/src/main/java/com/ruoyi/productionPlan/service/ProductOrderPlanService.java b/src/main/java/com/ruoyi/productionPlan/service/ProductOrderPlanService.java
index 675aeb0..94a8d10 100644
--- a/src/main/java/com/ruoyi/productionPlan/service/ProductOrderPlanService.java
+++ b/src/main/java/com/ruoyi/productionPlan/service/ProductOrderPlanService.java
@@ -1,5 +1,6 @@
 package com.ruoyi.productionPlan.service;
 
+import com.ruoyi.productionPlan.dto.TrackDto;
 import com.ruoyi.productionPlan.pojo.ProductOrderPlan;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -13,4 +14,5 @@
  */
 public interface ProductOrderPlanService extends IService<ProductOrderPlan> {
 
+    TrackDto trackProgressByNo(String applyNo);
 }
diff --git a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductOrderPlanServiceImpl.java b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductOrderPlanServiceImpl.java
index fd80560..7325c59 100644
--- a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductOrderPlanServiceImpl.java
+++ b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductOrderPlanServiceImpl.java
@@ -1,10 +1,26 @@
 package com.ruoyi.productionPlan.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.production.dto.ProductOrderDto;
+import com.ruoyi.production.mapper.ProductOrderMapper;
+import com.ruoyi.production.mapper.ProductionOrderRouteMapper;
+import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import com.ruoyi.production.pojo.ProductionProductMain;
+import com.ruoyi.productionPlan.dto.OrderDto;
+import com.ruoyi.productionPlan.dto.ProductionPlanDto;
+import com.ruoyi.productionPlan.dto.TrackDto;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.productionPlan.mapper.ProductionPlanMapper;
 import com.ruoyi.productionPlan.pojo.ProductOrderPlan;
 import com.ruoyi.productionPlan.mapper.ProductOrderPlanMapper;
 import com.ruoyi.productionPlan.service.ProductOrderPlanService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +33,52 @@
 @Service
 public class ProductOrderPlanServiceImpl extends ServiceImpl<ProductOrderPlanMapper, ProductOrderPlan> implements ProductOrderPlanService {
 
+    @Autowired
+    private ProductOrderPlanMapper productOrderPlanMapper;
+
+    @Autowired
+    private ProductionPlanMapper productionPlanMapper;
+
+    @Autowired
+    private ProductOrderMapper productOrderMapper;
+
+    @Autowired
+    private ProductionProductMainMapper productionProductMainMapper;
+
+    @Override
+    public TrackDto trackProgressByNo(String applyNo) {
+        TrackDto trackDto = new TrackDto();
+        //鐢熶骇璁″垝鏁版嵁
+        ProductionPlanDto planDto = new ProductionPlanDto();
+        planDto.setApplyNo(applyNo);
+        ProductionPlanDto productionPlanDto = productionPlanMapper.listPage(new Page(1, -1), planDto).getRecords().get(0);
+        trackDto.setProductionPlanDto(productionPlanDto);
+        //鐢熶骇璁㈠崟鏁版嵁
+        List<OrderDto> orderDtos = listByApplyNo(productionPlanDto);
+        trackDto.setOrderDtoList(orderDtos);
+        return trackDto;
+    }
+
+    private List<OrderDto> listByApplyNo(ProductionPlanDto productionPlanDto) {
+        List<OrderDto> orderDtos = new ArrayList<>();
+        //1.鍏堟煡璇㈣鐢熶骇璁″垝涓嬫墍鏈夊叧鑱旂殑鐢熶骇璁㈠崟
+        List<ProductOrderPlan> productOrderPlans = productOrderPlanMapper.selectList(Wrappers.<ProductOrderPlan>lambdaQuery()
+                .eq(ProductOrderPlan::getProductionPlanId, productionPlanDto.getId()));
+        if (CollectionUtils.isEmpty(productOrderPlans)){
+            return null;
+        }
+        productOrderPlans.forEach(productOrderPlan -> {
+            OrderDto orderDto = new OrderDto();
+            //鐢熶骇璁㈠崟淇℃伅
+            ProductOrderDto productOrderDto=productOrderMapper.getProductOrderDto(productOrderPlan.getProductOrderId());
+            orderDto.setProductOrderDto(productOrderDto);
+            //鎶ュ伐璇︽儏
+            List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(Wrappers.<ProductionProductMain>lambdaQuery()
+                    .eq(ProductionProductMain::getProductOrderId, productOrderPlan.getProductOrderId())
+                    .orderByAsc(ProductionProductMain::getReportingTime));
+            orderDto.setProductionProductMains(productionProductMains);
+            orderDtos.add(orderDto);
+        });
+        return orderDtos;
+    }
 }
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index 201652f..a66c81f 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -57,6 +57,9 @@
         LEFT JOIN product_material_sku pms ON pms.id = po.product_material_sku_id
         LEFT JOIN product_material pm ON pm.id = pms.product_id
         <where>
+             <if test="c.id != null">
+                AND po.id = #{c.id}
+            </if>
             <if test="c.npsNo != null and c.npsNo != ''">
                 AND po.nps_no LIKE CONCAT('%', #{c.npsNo}, '%')
             </if>
@@ -229,4 +232,35 @@
                  ppi.unit)A
         
     </select>
+    <select id="getProductOrderDto" resultType="com.ruoyi.production.dto.ProductOrderDto">
+        SELECT
+            po.id,
+            po.nps_no,
+            po.tenant_id,
+            po.create_time,
+            po.update_time,
+            po.route_id,
+            po.quantity,
+            po.complete_quantity,
+            po.start_time,
+            po.end_time,
+            po.plan_complete_time,
+            po.status,
+            pm.product_name,
+            po.strength AS strength,
+            pr.process_route_code AS processRouteCode,
+            pr.description,
+            pb.id AS bomId,
+            pb.bom_no AS bomNo,
+            ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,
+            pms.model,
+            pms.material_code AS materialCode,
+            pms.id AS productId
+        FROM product_order po
+                 LEFT JOIN production_order_route pr ON po.route_id = pr.id
+                 LEFT JOIN product_bom pb ON pr.bom_id = pb.id
+                 LEFT JOIN product_material_sku pms ON pms.id = po.product_material_sku_id
+                 LEFT JOIN product_material pm ON pm.id = pms.product_id
+        WHERE po.id = #{productOrderId}
+    </select>
 </mapper>

--
Gitblit v1.9.3