From 855009dc2173e9ddefcfc4b3901fbe255fe82752 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 27 三月 2026 16:56:51 +0800
Subject: [PATCH] yys 1.修改bug
---
src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java | 303 ++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 276 insertions(+), 27 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
index 14426c4..85c21ce 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -1,20 +1,42 @@
package com.ruoyi.production.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.enums.FileNameType;
+import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.production.dto.ProductOrderDto;
+import com.ruoyi.production.dto.ProductStructureDto;
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.*;
-import com.ruoyi.production.service.ProcessRouteService;
import com.ruoyi.production.service.ProductOrderService;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
+import com.ruoyi.stock.dto.StockInventoryDto;
+import com.ruoyi.stock.service.impl.StockInventoryServiceImpl;
+import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.File;
+import java.io.IOException;
+import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
+import java.util.stream.Collectors;
@Service
public class ProductOrderServiceImpl extends ServiceImpl<ProductOrderMapper, ProductOrder> implements ProductOrderService {
@@ -29,6 +51,9 @@
private ProductProcessRouteMapper productProcessRouteMapper;
@Autowired
+ private ProductStructureRecordMapper productStructureRecordMapper;
+
+ @Autowired
private ProcessRouteItemMapper processRouteItemMapper;
@Autowired
@@ -37,10 +62,48 @@
@Autowired
private ProductWorkOrderMapper productWorkOrderMapper;
+ @Autowired
+ private ProductionProductMainMapper productionProductMainMapper;
+
+ @Autowired
+ private ProductionProductOutputMapper productionProductOutputMapper;
+
+ @Autowired
+ private ProductionProductInputMapper productionProductInputMapper;
+
+ @Autowired
+ private QualityInspectMapper qualityInspectMapper;
+
+ @Autowired
+ private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
+
+ @Autowired
+ private StockUtils stockUtils;
+
+ @Autowired
+ private StockInventoryServiceImpl stockInventoryService;
+
+ @Autowired
+ private CommonFileServiceImpl commonFileService;
@Override
public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) {
- return productOrderMapper.pageProductOrder(page, productOrder);
+ IPage<ProductOrderDto> productOrderDtoIPage = productOrderMapper.pageProductOrder(page, productOrder);
+ productOrderDtoIPage.getRecords().forEach(productOrderDto -> {
+ // 鑾峰彇浜у搧鍚堟牸搴撳瓨
+ StockInventoryDto stockInventoryDto = new StockInventoryDto();
+ stockInventoryDto.setProductModelId(productOrderDto.getProductModelId());
+ stockInventoryDto.setProductType(1);
+ Page page1 = new Page<>(1,1);
+ IPage<StockInventoryDto> stockInventoryDtoIPage = stockInventoryService.pagestockInventory(page1,stockInventoryDto);
+ if(stockInventoryDtoIPage.getTotal() > 0){
+ productOrderDto.setInventoryQuantity(stockInventoryDtoIPage.getRecords().get(0).getQualitity());
+ }
+ // 闄勪欢
+ productOrderDto.setSalesLedgerFiles(commonFileService.getFileListByBusinessId(productOrderDto.getId()
+ , FileNameType.PRODUCT_ORDER.getValue()));
+ });
+ return productOrderDtoIPage;
}
@Override
@@ -53,52 +116,238 @@
productProcessRoute.setProductOrderId(productOrder.getId());
productProcessRoute.setBomId(processRoute.getBomId());
productProcessRouteMapper.insert(productProcessRoute);
+ // 缁戝畾鐢熶骇bom娓呭崟
+ List<ProductStructureRecord> productStructureDtos = productOrder.getProductStructureRecords();
+ productStructureDtos.forEach(item ->{
+ item.setProductOrderId(productOrder.getId());
+ productStructureRecordMapper.insert(item);
+ });
//鏂板鐢熶骇璁㈠崟涓嬬殑宸ヨ壓璺嚎瀛愯〃
- List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+ List<ProductProcessRouteItem> processRouteItems = productOrder.getProcessRouteItems();
// 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
- for (ProcessRouteItem processRouteItem : processRouteItems) {
- ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
- productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
- productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
+ for (ProductProcessRouteItem productProcessRouteItem : processRouteItems) {
+ productProcessRouteItem.setProductModelId(productOrder.getProductModelId());
productProcessRouteItem.setProductOrderId(productOrder.getId());
productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
if (insert > 0) {
// 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
- QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>();
- queryWrapper.likeRight("work_order_no", datePrefix)
- .orderByDesc("work_order_no")
- .last("LIMIT 1");
- ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper);
- 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 = String.format("%s%03d", datePrefix, sequenceNumber);
+ ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectMax(datePrefix);
+ String workOrderNoStr = getWorkOrderNoStr(lastWorkOrder, datePrefix); // 宸ュ崟鍙�
ProductWorkOrder productWorkOrder = new ProductWorkOrder();
productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
productWorkOrder.setProductOrderId(productOrder.getId());
- productWorkOrder.setPlanQuantity(productOrder.getQuantity());
+ ProductOrder order = productOrderMapper.selectById(productOrder.getId());
+ productWorkOrder.setPlanQuantity(BigDecimal.valueOf(productProcessRouteItem.getPlanNum()));
productWorkOrder.setWorkOrderNo(workOrderNoStr);
+ productWorkOrder.setPlanStartTime(productProcessRouteItem.getPlanStartTime());
+ productWorkOrder.setPlanEndTime(productProcessRouteItem.getPlanEndTime());
productWorkOrder.setStatus(1);
+ productWorkOrder.setUserPower(productProcessRouteItem.getUserPower());
productWorkOrderMapper.insert(productWorkOrder);
}
}
return productOrderMapper.updateById(productOrder);
}
+ @NotNull
+ private static String getWorkOrderNoStr(ProductWorkOrder lastWorkOrder, String datePrefix) {
+ int sequenceNumber = 1; // 榛樿搴忓彿
+ if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
+ String lastNo = lastWorkOrder.getWorkOrderNo();
+ 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);
+ return workOrderNoStr;
+ }
+
@Override
public List<ProcessRoute> listProcessRoute(Long productModelId) {
return productOrderMapper.listProcessRoute(productModelId);
}
+
+ @Override
+ public List<ProductStructureDto> listProcessBom(Long orderId) {
+ return productOrderMapper.listProcessBom(orderId);
+ }
+
+ @Override
+ public Boolean addProductOrder(ProductOrder productOrder) throws IOException {
+ String string = generateNextOrderNo(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")));
+ productOrder.setNpsNo(string);
+ productOrder.setCompleteQuantity(BigDecimal.ZERO);
+ productOrder.setStatus("寰呯敓浜�");
+ this.save(productOrder);
+ if (ObjectUtils.isNotEmpty(productOrder.getRouteId())) {
+ this.bindingRoute(productOrder);
+ }
+ if(CollectionUtils.isNotEmpty(productOrder.getTempFileIds())){
+ commonFileService.migrateTempFilesToFormal(productOrder.getId(), productOrder.getTempFileIds());
+ }
+ return true;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean delete(Long[] idList) {
+ //鎵归噺鏌ヨproductOrder
+ List<ProductOrder> productOrders = productOrderMapper.selectList(
+ new LambdaQueryWrapper<ProductOrder>()
+ .in(ProductOrder::getId, Arrays.asList(idList))
+ );
+ if (!org.springframework.util.CollectionUtils.isEmpty(productOrders)) {
+ List<Long> ids = productOrders.stream().map(ProductOrder::getId).collect(Collectors.toList());
+
+ // 鎵归噺鏌ヨprocessRouteItems
+ List<ProductProcessRouteItem> allRouteItems = productProcessRouteItemMapper.selectList(
+ new LambdaQueryWrapper<ProductProcessRouteItem>()
+ .in(ProductProcessRouteItem::getProductOrderId, ids)
+ );
+
+ if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(allRouteItems)) {
+ // 鑾峰彇瑕佸垹闄ょ殑宸ュ簭椤笽D
+ List<Long> routeItemIds = allRouteItems.stream()
+ .map(ProductProcessRouteItem::getId)
+ .collect(Collectors.toList());
+
+ // 鏌ヨ鍏宠仈鐨勫伐鍗旾D
+ List<ProductWorkOrder> workOrders = productWorkOrderMapper.selectList(
+ new LambdaQueryWrapper<ProductWorkOrder>()
+ .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds)
+ );
+ if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(workOrders)) {
+ List<Long> workOrderIds = workOrders.stream()
+ .map(ProductWorkOrder::getId)
+ .collect(Collectors.toList());
+
+ // 鏌ヨ鍏宠仈鐨勭敓浜т富琛↖D
+ List<ProductionProductMain> productMains = productionProductMainMapper.selectList(
+ new LambdaQueryWrapper<ProductionProductMain>()
+ .in(ProductionProductMain::getWorkOrderId, workOrderIds)
+ );
+ List<Long> productMainIds = productMains.stream()
+ .map(ProductionProductMain::getId)
+ .collect(Collectors.toList());
+
+ // 鍒犻櫎浜у嚭琛ㄣ�佹姇鍏ヨ〃鏁版嵁
+ if (!com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(productMainIds)) {
+ productionProductOutputMapper.deleteByProductMainIds(ids);
+ productionProductInputMapper.deleteByProductMainIds(ids);
+ List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
+ new LambdaQueryWrapper<QualityInspect>()
+ .in(QualityInspect::getProductMainId, productMainIds)
+ );
+ //鍒犻櫎鍑哄簱璁板綍
+ for (Long productMainId : productMainIds) {
+ //鍒犻櫎鐢熶骇鍑哄簱璁板綍
+ stockUtils.deleteStockOutRecord(productMainId, StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
+ //鍒犻櫎鎶ュ簾鐨勫叆搴撹褰�
+ stockUtils.deleteStockInRecord(productMainId, StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode());
+ }
+ qualityInspects.forEach(qualityInspect -> {
+ //inspectState=1 宸叉彁浜� 涓嶈兘鍒犻櫎
+ if (qualityInspect.getInspectState() == 1) {
+ throw new RuntimeException("宸叉彁浜ょ殑妫�楠屽崟涓嶈兘鍒犻櫎");
+ }
+ });
+ qualityInspectMapper.deleteByProductMainIds(productMainIds);
+ salesLedgerProductionAccountingMapper.delete(new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
+ .in(SalesLedgerProductionAccounting::getProductMainId, productMainIds));
+ }
+
+ // 鍒犻櫎鐢熶骇涓昏〃鏁版嵁
+ productionProductMainMapper.deleteByWorkOrderIds(workOrderIds);
+
+ // 鍒犻櫎宸ュ崟鏁版嵁
+ productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>()
+ .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds));
+ }
+ }
+ // 鎵归噺鍒犻櫎processRouteItem
+ productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>()
+ .in(ProductProcessRouteItem::getProductOrderId, ids));
+
+ // 鎵归噺鍒犻櫎productProcessRoute
+ productProcessRouteMapper.delete(new LambdaQueryWrapper<ProductProcessRoute>()
+ .in(ProductProcessRoute::getProductOrderId, ids));
+
+ // 鎵归噺鍒犻櫎productOrder
+ productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>()
+ .in(ProductOrder::getId, ids));
+ // 鍒犻櫎闄勪欢
+ commonFileService.deleteByBusinessIds(ids, FileNameType.PRODUCT_ORDER.getValue());
+ // 鍒犻櫎鐢熶骇璁㈠崟-鐗╂枡娓呭崟
+ productStructureRecordMapper.delete(new LambdaQueryWrapper<ProductStructureRecord>()
+ .in(ProductStructureRecord::getProductOrderId, ids));
+ }
+
+ return true;
+ }
+
+ @Override
+ public Object startOrPause(ProductOrderDto item) {
+ ProductOrder productOrder = productOrderMapper.selectById(item.getId());
+ if(productOrder == null){
+ throw new ServiceException("鐢熶骇璁㈠崟涓嶅瓨鍦�");
+ }
+ int i;
+ if(item.getOperation().equals(1)){
+ i = 2;
+ } else {
+ i = 1;
+ }
+ productOrder.setStatus(item.getOperation() == 1 ? "鐢熶骇涓�" : "寰呯敓浜�");
+ productOrderMapper.updateById(productOrder);
+ List<ProductWorkOrder> productWorkOrders = productWorkOrderMapper.selectList(new LambdaQueryWrapper<ProductWorkOrder>()
+ .eq(ProductWorkOrder::getProductOrderId, productOrder.getId()));
+ if(CollectionUtils.isNotEmpty(productWorkOrders)){
+
+ productWorkOrders.forEach(productWorkOrder -> {
+ productWorkOrder.setStatus(i);
+ productWorkOrderMapper.updateById(productWorkOrder);
+ });
+ }
+ return "鎿嶄綔鎴愬姛";
+ }
+
+ //鑾峰彇褰撳墠鐢熶骇璁㈠崟鍙�
+ public String getMaxOrderNoByDate(String datePrefix) {
+ QueryWrapper<ProductOrder> queryWrapper = new QueryWrapper<>();
+ // 鍖归厤浠� SC + 鏃ユ湡寮�澶寸殑璁㈠崟鍙�
+ queryWrapper.likeRight("nps_no", "SC" + datePrefix);
+ // 鎸夎鍗曞彿鍊掑簭鎺掑垪
+ queryWrapper.orderByDesc("nps_no");
+ queryWrapper.last("LIMIT 1");
+
+ ProductOrder latestOrder = this.getOne(queryWrapper);
+ return latestOrder != null ? latestOrder.getNpsNo() : null;
+ }
+
+ public String generateNextOrderNo(String datePrefix) {
+ String maxOrderNo = getMaxOrderNoByDate(datePrefix);
+ int sequence = 1; // 榛樿璧峰搴忓彿
+ if (maxOrderNo != null && !maxOrderNo.isEmpty()) {
+ // 鎻愬彇娴佹按鍙烽儴鍒嗭紙鍋囪鏍煎紡涓� SC + 鏃ユ湡 + 娴佹按鍙凤級
+ String sequenceStr = maxOrderNo.substring(("SC" + datePrefix).length());
+ try {
+ sequence = Integer.parseInt(sequenceStr) + 1;
+ } catch (NumberFormatException e) {
+ // 寮傚父鎯呭喌涓嬮噸缃负1
+ sequence = 1;
+ }
+ }
+ // 鐢熸垚鏂拌鍗曞彿
+ return "SC" + datePrefix + String.format("%04d", sequence);
+ }
+
+
}
--
Gitblit v1.9.3