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