From adb589891e12a843601fdbd848bb8a6c107ec3b1 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期三, 11 三月 2026 11:06:50 +0800
Subject: [PATCH] 合并下发生产计划
---
src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java | 7 +
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 12 ++--
src/main/java/com/ruoyi/productionPlan/controller/ProductionPlanController.java | 12 +++-
src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java | 53 +++++++++++++++++
src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanDto.java | 20 ++++++
doc/宁夏-中盛建材.sql | 12 ++++
src/main/java/com/ruoyi/productionPlan/service/ProductionPlanService.java | 7 ++
src/main/java/com/ruoyi/productionPlan/enums/DataSourceTypeEnum.java | 4
src/main/java/com/ruoyi/production/pojo/ProductOrder.java | 37 +++++-------
9 files changed, 129 insertions(+), 35 deletions(-)
diff --git "a/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql" "b/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql"
index ba7e338..ab5e37f 100644
--- "a/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql"
+++ "b/doc/\345\256\201\345\244\217-\344\270\255\347\233\233\345\273\272\346\235\220.sql"
@@ -82,3 +82,15 @@
`update_user` int NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) COMMENT = '鑳芥簮绫诲瀷-鑳借�楁妱琛ㄦ槑缁哶闄勪欢';
+
+alter table product_order
+drop column sales_ledger_id,
+drop column sale_ledger_product_id,
+drop column product_model_id;
+
+alter table production_plan
+ add assigned_quantity DECIMAL(10, 4) default 0 not null COMMENT '涓嬪彂鏁伴噺';
+
+alter table product_order
+ add plan_complete_time datetime(0) NULL DEFAULT NULL COMMENT '璁″垝瀹屾垚鏃堕棿',
+ add combine_production_plan_ids varchar(500) default '' not null;
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
index 5286cd3..0e06718 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
@@ -11,6 +11,7 @@
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
+import java.util.List;
@Data
@TableName("product_order")
@@ -20,24 +21,6 @@
@TableId(value = "id", type = IdType.AUTO)
private Long id;
-
- /**
- * 閿�鍞彴璐d
- */
- @ApiModelProperty(value = "閿�鍞彴璐d")
- private Long salesLedgerId;
-
- /**
- * 閿�鍞彴璐︿骇鍝乮d(sales_ledger_product)
- */
- @ApiModelProperty(value = "閿�鍞彴璐︿骇鍝乮d")
- private Long saleLedgerProductId;
-
- /**
- * 浜у搧瑙勬牸id
- */
- @ApiModelProperty(value = "浜у搧瑙勬牸id")
- private Long productModelId;
/**
* 妯$増鐨勫伐鑹鸿矾绾縤d
@@ -51,6 +34,20 @@
@ApiModelProperty(value = "鐢熶骇璁㈠崟鍙�")
@Excel(name = "鐢熶骇璁㈠崟鍙�")
private String npsNo;
+
+ /**
+ * 鍚堝苟鐢熶骇璁″垝ids
+ */
+ @ApiModelProperty(value = "鍚堝苟鐢熶骇璁″垝ids")
+ private String combineProductionPlanIds;
+
+ /**
+ * 璁″垝瀹屾垚鏃堕棿
+ */
+ @ApiModelProperty(value = "璁″垝瀹屾垚鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime planCompleteTime;
/**
* 绉熸埛id
@@ -73,7 +70,6 @@
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
-
/**
* 闇�姹傛暟閲�
@@ -100,7 +96,4 @@
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
-
-
-
}
diff --git a/src/main/java/com/ruoyi/productionPlan/controller/ProductionPlanController.java b/src/main/java/com/ruoyi/productionPlan/controller/ProductionPlanController.java
index af1965b..5abb115 100644
--- a/src/main/java/com/ruoyi/productionPlan/controller/ProductionPlanController.java
+++ b/src/main/java/com/ruoyi/productionPlan/controller/ProductionPlanController.java
@@ -6,13 +6,13 @@
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.productionPlan.dto.ProductionPlanDto;
import com.ruoyi.productionPlan.service.ProductionPlanService;
+import com.ruoyi.staff.dto.StaffLeaveDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
+import java.util.List;
/**
* <br>
@@ -43,4 +43,10 @@
productionPlanService.loadProdData();
return AjaxResult.success();
}
+
+ @PostMapping("/combine")
+ @Log(title = "鍚堝苟鐢熶骇璁″垝", businessType = BusinessType.INSERT)
+ public AjaxResult combine(@RequestBody ProductionPlanDto productionPlanDto) {
+ return AjaxResult.success(productionPlanService.combine(productionPlanDto));
+ }
}
diff --git a/src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanDto.java b/src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanDto.java
index b65004d..e416d5b 100644
--- a/src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanDto.java
+++ b/src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanDto.java
@@ -1,6 +1,26 @@
package com.ruoyi.productionPlan.dto;
+import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.productionPlan.pojo.ProductionPlan;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
public class ProductionPlanDto extends ProductionPlan {
+ @ApiModelProperty(value = "鐢熶骇璁″垝id闆嗗悎")
+ private List<Long> ids;
+
+ @ApiModelProperty(value = "涓嬪彂鏁伴噺")
+ private BigDecimal totalAssignedQuantity;
+
+ @ApiModelProperty(value = "璁″垝瀹屾垚鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime planCompleteTime;
}
diff --git a/src/main/java/com/ruoyi/productionPlan/enums/DataSourceTypeEnum.java b/src/main/java/com/ruoyi/productionPlan/enums/DataSourceTypeEnum.java
index d14ccc7..10edbd4 100644
--- a/src/main/java/com/ruoyi/productionPlan/enums/DataSourceTypeEnum.java
+++ b/src/main/java/com/ruoyi/productionPlan/enums/DataSourceTypeEnum.java
@@ -14,8 +14,8 @@
@Getter
public enum DataSourceTypeEnum {
- SALES_ORDER(1, "閿�鍞鍗�"),
- PRODUCTION_FORECAST(2, "鐢熶骇棰勬祴");
+ SALES_ORDER(1, "鍚屾"),
+ PRODUCTION_FORECAST(2, "鏂板");
private final Integer code;
private final String desc;
diff --git a/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java b/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
index a432f40..1bd9b0c 100644
--- a/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
+++ b/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
@@ -178,9 +178,9 @@
private Integer dataSyncType;
/**
- * 鏁版嵁鏉ユ簮绫诲瀷锛�1=閿�鍞鍗� 2=閿�鍞娴�
+ * 鏁版嵁鏉ユ簮绫诲瀷锛�1=鍚屾 2=鏂板
*/
- @ApiModelProperty("鏁版嵁鏉ユ簮绫诲瀷锛�1=閿�鍞鍗� 2=閿�鍞娴�")
+ @ApiModelProperty("鏁版嵁鏉ユ簮绫诲瀷锛�1=鍚屾 2=鏂板")
private Integer dataSourceType;
/**
@@ -202,4 +202,7 @@
*/
@ApiModelProperty("totalCount")
private Integer totalCount;
+
+ @ApiModelProperty(value = "涓嬪彂鏁伴噺")
+ private BigDecimal assignedQuantity;
}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/productionPlan/service/ProductionPlanService.java b/src/main/java/com/ruoyi/productionPlan/service/ProductionPlanService.java
index 7d26b9b..4302d93 100644
--- a/src/main/java/com/ruoyi/productionPlan/service/ProductionPlanService.java
+++ b/src/main/java/com/ruoyi/productionPlan/service/ProductionPlanService.java
@@ -6,6 +6,8 @@
import com.ruoyi.productionPlan.dto.ProductionPlanDto;
import com.ruoyi.productionPlan.pojo.ProductionPlan;
+import java.util.List;
+
/**
* <br>
* 閿�鍞敓浜ч渶姹傛帴鍙�
@@ -27,4 +29,9 @@
* 瀹氭椂鍚屾
*/
void syncProdDataJob();
+
+ /**
+ * 鍚堝苟鐢熶骇璁″垝
+ */
+ boolean combine(ProductionPlanDto productionPlanDto);
}
diff --git a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
index 9cdd367..595db7e 100644
--- a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
+++ b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
@@ -7,9 +7,12 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.pojo.Product;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.framework.config.AliDingConfig;
+import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.service.ProductOrderService;
import com.ruoyi.productionPlan.dto.ProductionPlanDto;
import com.ruoyi.productionPlan.mapper.ProductionPlanMapper;
import com.ruoyi.productionPlan.pojo.ProductionPlan;
@@ -19,6 +22,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.time.Instant;
import java.time.LocalDateTime;
@@ -50,6 +54,9 @@
@Autowired
private ProductionPlanMapper productionPlanMapper;
+ @Autowired
+ private ProductOrderService productOrderService;
+
/**
* 鍚屾閿侊紝纭繚鎵嬪姩鍜屽畾鏃朵换鍔′笉鍚屾椂鎵ц
*/
@@ -77,6 +84,52 @@
}
/**
+ * 鍚堝苟鐢熶骇璁″垝
+ */
+ @Override
+ public boolean combine(ProductionPlanDto productionPlanDto) {
+ if (productionPlanDto.getIds() == null || productionPlanDto.getIds().isEmpty()) {
+ return false;
+ }
+
+ // 鏌ヨ涓荤敓浜ц鍒�
+ List<ProductionPlan> plans = productionPlanMapper.selectBatchIds(productionPlanDto.getIds());
+
+ // 鏍¢獙鏄惁瀛樺湪涓嶅悓鐨勪骇鍝佸悕绉�
+ String firstProductName = plans.get(0).getProductName();
+ if (plans.stream().anyMatch(p -> !p.getProductName().equals(firstProductName))) {
+ log.warn("鍚堝苟澶辫触锛屽瓨鍦ㄤ笉鍚岀殑浜у搧鍚嶇О");
+ return false;
+ }
+
+ // 鏍¢獙鏄惁瀛樺湪涓嶅悓鐨勪骇鍝佽鏍�
+ String firstProductSpec = plans.get(0).getProductSpec();
+ if (plans.stream().anyMatch(p -> !p.getProductSpec().equals(firstProductSpec))) {
+ log.warn("鍚堝苟澶辫触锛屽瓨鍦ㄤ笉鍚岀殑浜у搧瑙勬牸");
+ return false;
+ }
+
+
+ // 鍙犲姞鏂规暟
+ BigDecimal totalVolume = plans.stream()
+ .map(ProductionPlan::getVolume)
+ .filter(v -> v != null)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 鍒涘缓鐢熶骇璁㈠崟
+ ProductOrder productOrder = new ProductOrder();
+ // 鍚堝苟鐢熶骇璁″垝ids
+ String combineIds = StringUtils.join(productionPlanDto.getIds(), ",");
+ productOrder.setCombineProductionPlanIds(combineIds);
+ // 涓嬪彂鏁伴噺
+ productOrder.setQuantity(productionPlanDto.getTotalAssignedQuantity());
+ productOrder.setPlanCompleteTime(productionPlanDto.getPlanCompleteTime());
+ productOrderService.addProductOrder(productOrder);
+
+ return true;
+ }
+
+ /**
* 鍚屾鏁版嵁
*/
@Transactional(rollbackFor = Exception.class)
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 68b52cb..373beb4 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -267,9 +267,9 @@
*/
public void addProductionData(SalesLedgerProduct salesLedgerProduct) {
ProductOrder productOrder = new ProductOrder();
- productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
- productOrder.setProductModelId(salesLedgerProduct.getProductModelId());
- productOrder.setSaleLedgerProductId(salesLedgerProduct.getId());
+// productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
+// productOrder.setProductModelId(salesLedgerProduct.getProductModelId());
+// productOrder.setSaleLedgerProductId(salesLedgerProduct.getId());
String string = productOrderServiceImpl.generateNextOrderNo(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")));
productOrder.setNpsNo(string);
productOrder.setQuantity(salesLedgerProduct.getQuantity());//闇�姹傛暟閲�
@@ -340,7 +340,7 @@
//鎵归噺鏌ヨproductOrder
List<ProductOrder> productOrders = productOrderMapper.selectList(
new LambdaQueryWrapper<ProductOrder>()
- .in(ProductOrder::getSaleLedgerProductId, productIds)
+// .in(ProductOrder::getSaleLedgerProductId, productIds)
);
if (!org.springframework.util.CollectionUtils.isEmpty(productOrders)) {
List<Long> orderIds = productOrders.stream()
@@ -421,8 +421,8 @@
.in(ProductProcessRoute::getProductOrderId, orderIds));
// 鎵归噺鍒犻櫎productOrder
- productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>()
- .in(ProductOrder::getSaleLedgerProductId, productIds));
+// productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>()
+// .in(ProductOrder::getSaleLedgerProductId, productIds));
}
}
--
Gitblit v1.9.3