From 60761f72f43b1c805e5e788f7f7a2be2c9991f64 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 17 四月 2026 09:31:38 +0800
Subject: [PATCH] feat: 销售订单新增的生产订单移除工艺路线与BOM,改为查询对应的部件类型
---
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 100 +++++++++++++++++----------------
src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java | 19 +++++-
doc/君歌化工.sql | 14 ++++
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java | 5 -
4 files changed, 82 insertions(+), 56 deletions(-)
diff --git "a/doc/\345\220\233\346\255\214\345\214\226\345\267\245.sql" "b/doc/\345\220\233\346\255\214\345\214\226\345\267\245.sql"
index 446d326..bf29b5d 100644
--- "a/doc/\345\220\233\346\255\214\345\214\226\345\267\245.sql"
+++ "b/doc/\345\220\233\346\255\214\345\214\226\345\267\245.sql"
@@ -16,4 +16,16 @@
ADD COLUMN `product_model_id` bigint NULL COMMENT '浜у搧ID' AFTER `id`,
MODIFY COLUMN `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '宸ュ簭鍚嶇О' AFTER `no`,
MODIFY COLUMN `create_time` datetime NULL DEFAULT NULL COMMENT '褰曞叆鏃堕棿' AFTER `dept_id`,
- MODIFY COLUMN `update_time` datetime NULL DEFAULT NULL COMMENT '鏇存柊鏃堕棿' AFTER `create_time`;
\ No newline at end of file
+ MODIFY COLUMN `update_time` datetime NULL DEFAULT NULL COMMENT '鏇存柊鏃堕棿' AFTER `create_time`;
+
+ALTER TABLE `product-inventory-management-jghg`.`product_process_route_item`
+ ADD COLUMN `planned_work_hours` decimal(15, 2) NULL COMMENT '璁″垝宸ユ椂' AFTER `product_order_id`,
+ MODIFY COLUMN `product_route_id` bigint NULL DEFAULT 0 COMMENT '鐢熶骇璁㈠崟鐨勫伐鑹鸿矾绾縤d' AFTER `product_order_id`;
+
+ALTER TABLE `product-inventory-management-jghg`.`product_work_order`
+ MODIFY COLUMN `product_process_route_item_id` bigint NULL DEFAULT 0 COMMENT '宸ヨ壓璺嚎椤圭洰id' AFTER `id`;
+
+ALTER TABLE `product-inventory-management-jghg`.`product_process_route_item`
+ ADD COLUMN `type` int NULL COMMENT '绫诲瀷1-鍔犲伐锛�2-鍒澘鍐疯姱鍒朵綔銆�3-绠¤矾缁勫銆�4-缃愪綋杩炴帴鍙婅皟璇曪紝5-娴嬭瘯鎵撳帇锛�6-鍏朵粬' AFTER `dept_id`,
+ ADD COLUMN `planner_id` bigint NULL COMMENT '璁″垝浜哄憳ID' AFTER `type`,
+ ADD COLUMN `planner_name` varchar(255) NULL COMMENT '璁″垝浜哄憳濮撳悕' AFTER `planner_id`;
\ No newline at end of file
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 2d3e608..9a58b22 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -145,7 +145,7 @@
@Autowired
private ProductProcessMapper productProcessMapper;
-
+
@Autowired
private AccountExpenseMapper accountExpenseMapper;
@@ -2480,8 +2480,7 @@
}
@Override
- public List<processDataProductionStatisticsDto> processDataProductionStatistics(Integer type,
- List<Long> processIds) {
+ public List<processDataProductionStatisticsDto> processDataProductionStatistics(Integer type, List<Long> processIds) {
LoginUser loginUser = SecurityUtils.getLoginUser();
Long userId = SecurityUtils.isAdmin(loginUser.getUserId()) ? null : loginUser.getUserId();
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java b/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
index 1f7c585..20e0931 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
@@ -4,6 +4,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@@ -22,7 +23,7 @@
@ApiModelProperty(value = "宸ュ簭id")
private Long processId;
- @ApiModelProperty(value ="浜у搧id")
+ @ApiModelProperty(value = "浜у搧id")
private Long productModelId;
@ApiModelProperty(value = "绉熸埛ID")
@@ -35,10 +36,10 @@
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;
- @ApiModelProperty(value ="鎷栧姩鎺掑簭")
+ @ApiModelProperty(value = "鎷栧姩鎺掑簭")
private Integer dragSort;
- @ApiModelProperty(value ="鏄惁璐ㄦ")
+ @ApiModelProperty(value = "鏄惁璐ㄦ")
private Boolean isQuality;
@ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
@@ -48,4 +49,16 @@
@TableField(fill = FieldFill.INSERT)
private Long deptId;
+ @ApiModelProperty("璁″垝宸ユ椂")
+ private BigDecimal plannedWorkHours;
+
+ @ApiModelProperty("閮ㄤ欢绫诲瀷")
+ private Integer type;
+
+ @ApiModelProperty("璁″垝浜哄憳ID")
+ private Long plannerId;
+
+ @ApiModelProperty("璁″垝浜哄憳濮撳悕")
+ private String plannerName;
+
}
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..e4eb0f3 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -73,6 +73,7 @@
private ProcessRouteMapper processRouteMapper;
private ProductProcessRouteMapper productProcessRouteMapper;
+ private ProductProcessMapper productProcessMapper;
private ProductWorkOrderMapper productWorkOrderMapper;
private ProductionProductMainMapper productionProductMainMapper;
@@ -83,7 +84,6 @@
private ShippingInfoServiceImpl shippingInfoService;
private StockUtils stockUtils;
-
@Autowired
@@ -104,14 +104,14 @@
// queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
// .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct);
- if(!CollectionUtils.isEmpty(salesLedgerProducts)){
+ if (!CollectionUtils.isEmpty(salesLedgerProducts)) {
salesLedgerProducts.forEach(item -> {
// 鍙戣揣淇℃伅
ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
.eq(ShippingInfo::getSalesLedgerProductId, item.getId())
.orderByDesc(ShippingInfo::getCreateTime)
.last("limit 1"));
- if(shippingInfo != null){
+ if (shippingInfo != null) {
item.setShippingDate(shippingInfo.getShippingDate());
item.setShippingCarNumber(shippingInfo.getShippingCarNumber());
item.setShippingStatus(shippingInfo.getStatus());
@@ -131,8 +131,8 @@
BigDecimal noInvoiceNum = BigDecimal.ZERO;
BigDecimal noInvoiceAmount = BigDecimal.ZERO;
for (InvoiceRegistrationProductDto registrationProductDto : invoiceRegistrationProductDtoList) {
- if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){
- invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum());
+ if (ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()) {
+ invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum());
invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount());
}
}
@@ -166,7 +166,7 @@
//鍒犻櫎鍙戣揣淇℃伅
List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
.in(ShippingInfo::getSalesLedgerProductId, Arrays.asList(ids)));
- if(!CollectionUtils.isEmpty(shippingInfos)){
+ if (!CollectionUtils.isEmpty(shippingInfos)) {
shippingInfoService.delete(shippingInfos.stream().map(ShippingInfo::getId).collect(Collectors.toList()));
}
@@ -203,12 +203,12 @@
@Transactional(rollbackFor = Exception.class)
public int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct) {
// 寰呭洖娆撅紝浠樻
- if(salesLedgerProduct.getType().equals(1)){
+ if (salesLedgerProduct.getType().equals(1)) {
salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getInvoiceTotal()));
//鏈紑绁ㄦ暟閲�+閲戦
salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
- }else{
+ } else {
salesLedgerProduct.setPendingTicketsTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getTicketsTotal()));
// 鏈潵绁ㄦ暟閲�+閲戦
salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
@@ -276,60 +276,61 @@
productOrder.setCompleteQuantity(BigDecimal.ZERO);//瀹屾垚鏁伴噺
productOrderMapper.insert(productOrder);
- List<ProcessRoute> processRoutes = processRouteMapper.selectList(new QueryWrapper<ProcessRoute>().lambda()
- .eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId())
- .orderByDesc(ProcessRoute::getCreateTime));
- if (processRoutes.size()>0){
- ProcessRoute processRoute = processRoutes.get(0);
- //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
+ // 鏌ヨ璇ヤ骇鍝佸瀷鍙峰搴旂殑宸ュ簭
+ List<ProductProcess> productProcesses = productProcessMapper.selectList(new QueryWrapper<ProductProcess>().lambda()
+ .eq(ProductProcess::getProductModelId, salesLedgerProduct.getProductModelId())
+ .orderByAsc(ProductProcess::getId));
+ if (!CollectionUtils.isEmpty(productProcesses)) {
ProductProcessRoute productProcessRoute = new ProductProcessRoute();
- productProcessRoute.setProductModelId(processRoute.getProductModelId());
- productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode());
+ productProcessRoute.setProductModelId(salesLedgerProduct.getProductModelId());
productProcessRoute.setProductOrderId(productOrder.getId());
- productProcessRoute.setBomId(processRoute.getBomId());
productProcessRouteMapper.insert(productProcessRoute);
- //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎瀛愯〃
- List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+
// 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
- for (ProcessRouteItem processRouteItem : processRouteItems) {
+ // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿锛屼綔涓哄悗缁伐鍗曞彿鐨勮捣濮嬪簭鍙�
+ ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectMax(datePrefix);
+ int sequenceNumber = 1; // 榛樿搴忓彿
+ if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
+ String lastNo = lastWorkOrder.getWorkOrderNo().toString();
+ if (lastNo.startsWith(datePrefix)) {
+ String seqStr = lastNo.substring(datePrefix.length());
+ try {
+ sequenceNumber = Integer.parseInt(seqStr) + 1;
+ } catch (NumberFormatException e) {
+ sequenceNumber = 1;
+ }
+ }
+ }
+
+ // 鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎瀛愯〃 + 宸ュ崟
+ for (int i = 0; i < productProcesses.size(); i++) {
+ ProductProcess process = productProcesses.get(i);
+
ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
- productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
- productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
+ productProcessRouteItem.setProductModelId(salesLedgerProduct.getProductModelId());
+ productProcessRouteItem.setProcessId(process.getId());
productProcessRouteItem.setProductOrderId(productOrder.getId());
productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
- productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
+ productProcessRouteItem.setDragSort(i + 1);
+ productProcessRouteItem.setIsQuality(process.getIsQuality());
+ productProcessRouteItem.setPlannedWorkHours(process.getSalaryQuota());
+
int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
if (insert > 0) {
- // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
- ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectMax(datePrefix);
- int sequenceNumber = 1; // 榛樿搴忓彿
- if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
- String lastNo = lastWorkOrder.getWorkOrderNo().toString();
- if (lastNo.startsWith(datePrefix)) {
- String seqStr = lastNo.substring(datePrefix.length());
- try {
- sequenceNumber = Integer.parseInt(seqStr) + 1;
- } catch (NumberFormatException e) {
- sequenceNumber = 1;
- }
- }
- }
// 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
- String workOrderNoStr ="GD"+ String.format("%s%03d", datePrefix, sequenceNumber);
+ String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
+ sequenceNumber++;
+
ProductWorkOrder productWorkOrder = new ProductWorkOrder();
productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
productWorkOrder.setProductOrderId(productOrder.getId());
productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
productWorkOrder.setWorkOrderNo(workOrderNoStr);
productWorkOrder.setStatus(1);
-
productWorkOrderMapper.insert(productWorkOrder);
}
-
}
- productOrder.setRouteId(processRoute.getId());
- productOrderMapper.updateById(productOrder);
}
}
@@ -431,9 +432,9 @@
IPage<SalesLedgerProductDto> salesLedgerProductDtoIPage = salesLedgerProductMapper.listPage(page, salesLedgerProduct);
salesLedgerProductDtoIPage.getRecords().forEach(item -> {
// 鍒ゆ柇鐘舵��
- if(item.getTaxInclusiveTotalPrice().compareTo(item.getInvoiceTotal()) == 0){
+ if (item.getTaxInclusiveTotalPrice().compareTo(item.getInvoiceTotal()) == 0) {
item.setStatusName("宸插畬鎴愪粯娆�");
- }else{
+ } else {
item.setStatusName("鏈畬鎴愪粯娆�");
}
});
@@ -445,9 +446,9 @@
IPage<SalesLedgerProductDto> salesLedgerProductDtoIPage = salesLedgerProductMapper.listPagePurchaseLedger(page, salesLedgerProduct);
salesLedgerProductDtoIPage.getRecords().forEach(item -> {
// 鍒ゆ柇鐘舵��
- if(item.getTaxInclusiveTotalPrice().compareTo(item.getTicketsTotal()) == 0){
+ if (item.getTaxInclusiveTotalPrice().compareTo(item.getTicketsTotal()) == 0) {
item.setStatusName("宸插畬鎴愪粯娆�");
- }else{
+ } else {
item.setStatusName("鏈畬鎴愪粯娆�");
}
});
@@ -488,6 +489,7 @@
throw new RuntimeException("鍔ㄦ�佹洿鏂颁富琛ㄩ噾棰濆け璐�", e);
}
}
+
@Override
public R judgmentInventory(SalesLedgerProduct salesLedgerProduct) {
//鑾峰彇浜у搧鏈�鏂扮殑宸ヨ壓璺嚎
@@ -506,7 +508,7 @@
//鎵�闇�鏁伴噺
BigDecimal multiply = salesLedgerProduct.getQuantity().multiply(productStructureDto.getUnitQuantity());
- BigDecimal subtract =stockInventory.getQualitity().subtract(stockInventory.getLockedQuantity()).subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
+ BigDecimal subtract = stockInventory.getQualitity().subtract(stockInventory.getLockedQuantity()).subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
if (subtract.compareTo(BigDecimal.ZERO) <= 0) {
count++;
stringBuffer.append(productStructureDto.getProductName())
@@ -517,9 +519,9 @@
.append(System.lineSeparator());
}
}
- if (count>0) {
+ if (count > 0) {
return R.fail(stringBuffer.toString());
- }else {
+ } else {
return R.ok();
}
}
--
Gitblit v1.9.3