From a34f7d669aa91045dc661bceae9a78793b989410 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期三, 25 三月 2026 16:58:23 +0800
Subject: [PATCH] 提交质检时,如果合格率低于标准合格率,发送通知给管理员
---
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 102 insertions(+), 7 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index b3f75b0..bbce752 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -3,6 +3,7 @@
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.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -24,6 +25,7 @@
import com.ruoyi.production.service.ProductionProductMainService;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.project.system.service.ISysNoticeService;
import com.ruoyi.quality.mapper.*;
import com.ruoyi.quality.pojo.*;
import com.ruoyi.quality.service.IQualityInspectService;
@@ -33,12 +35,11 @@
import com.ruoyi.production.mapper.ProductionProductMainMapper;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.stream.Collectors;
@Service
@@ -84,6 +85,7 @@
private StockUtils stockUtils;
+ private ISysNoticeService sysNoticeService;
@Override
public IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto) {
@@ -98,6 +100,41 @@
ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(dto.getProductProcessRouteItemId());
if (productProcessRouteItem == null) {
throw new RuntimeException("宸ヨ壓璺嚎椤逛笉瀛樺湪");
+ }
+ // 鏄惁鑳芥姤宸ワ細 1. 绗竴涓伐搴忚兘鎶ュ伐 2. 涓婁竴涓伐搴忓凡鎶ュ伐 3. 涔嬪墠鐨勫伐搴忔湭琚殧绂�
+ //妫�鏌ヤ笂涓�涓伐搴忔槸鍚﹀凡鎶ュ伐
+ Integer currentDragSort = productProcessRouteItem.getDragSort();
+ if (currentDragSort != null && currentDragSort > 1) {
+ boolean isPreviousReported = productionProductMainMapper.checkPreviousProcessReported(
+ productProcessRouteItem.getProductRouteId(),
+ currentDragSort
+ );
+ if (!isPreviousReported) {
+ throw new RuntimeException("涓婁竴涓伐搴忓皻鏈姤宸ワ紝涓嶈兘杩涜褰撳墠宸ュ簭鎶ュ伐");
+ }
+
+ // 鏌ヨ鎵�鏈変箣鍓嶇殑宸ュ簭锛堟帓搴忓彿灏忎簬褰撳墠宸ュ簭锛�
+ List<ProductProcessRouteItem> previousItems = productProcessRouteItemMapper.selectList(
+ Wrappers.<ProductProcessRouteItem>lambdaQuery()
+ .eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId())
+ .lt(ProductProcessRouteItem::getDragSort, currentDragSort)
+ );
+ if (CollectionUtils.isNotEmpty(previousItems)) {
+ // 鎻愬彇涔嬪墠宸ュ簭鐨勫悕绉板垪琛�
+ List<String> previousProcessNames = new ArrayList<>();
+ for (ProductProcessRouteItem item : previousItems) {
+ ProductProcess process = productProcessMapper.selectById(item.getProcessId());
+ if (process != null) {
+ previousProcessNames.add(process.getName());
+ }
+ }
+
+ // 妫�鏌ヤ箣鍓嶇殑宸ュ簭鏄惁鏈夎闅旂鐨勪笉鍚堟牸璁板綍
+ List<QualityUnqualified> unqualifiedList = qualityUnqualifiedMapper.selectUnqualifiedByProcessNames(previousProcessNames);
+ if (CollectionUtils.isNotEmpty(unqualifiedList)) {
+ throw new RuntimeException("涔嬪墠鐨勫伐搴忓凡琚殧绂伙紝涓嶈兘杩涜褰撳墠宸ュ簭鎶ュ伐");
+ }
+ }
}
//褰撳墠鍏蜂綋宸ュ簭
ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId());
@@ -148,7 +185,7 @@
productStructureDtos.add(productStructureDto);
}
for (ProductStructureDto productStructureDto : productStructureDtos) {
-
+ System.out.println(productStructureDto.getProductModelId());
ProductionProductInput productionProductInput = new ProductionProductInput();
productionProductInput.setProductModelId(productStructureDto.getProductModelId());
productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity()));
@@ -163,7 +200,12 @@
productionProductOutput.setProductModelId(productProcessRouteItem.getProductModelId());
productionProductOutput.setQuantity(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO);
productionProductOutput.setScrapQty(dto.getScrapQty() != null ? dto.getScrapQty() : BigDecimal.ZERO);
+ productionProductOutput.setOtherData(dto.getOtherData() != null ? dto.getOtherData() : "");
productionProductOutputMapper.insert(productionProductOutput);
+
+ ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
+ ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
+
//鍚堟牸鏁伴噺=鎶ュ伐鏁伴噺-鎶ュ簾鏁伴噺
BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty());
List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
@@ -189,6 +231,7 @@
qualityInspect.setProcess(process);
qualityInspect.setInspectState(0);
qualityInspect.setInspectType(inspectType);
+ qualityInspect.setDefectiveQuantity(BigDecimal.ZERO);
qualityInspect.setProductMainId(productionProductMain.getId());
qualityInspect.setProductModelId(productModel.getId());
qualityInspectMapper.insert(qualityInspect);
@@ -218,7 +261,6 @@
}
}
/*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
- ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(productQty));
if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())) {
productWorkOrder.setActualStartTime(LocalDate.now());//瀹為檯寮�濮嬫椂闂�
@@ -228,7 +270,6 @@
}
productWorkOrderMapper.updateById(productWorkOrder);
//鐢熶骇璁㈠崟
- ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
if (ObjectUtils.isNull(productOrder.getStartTime())) {
productOrder.setStartTime(LocalDateTime.now());//寮�濮嬫椂闂�
}
@@ -351,4 +392,58 @@
public ArrayList<Long> listMain(List<Long> idList) {
return productionProductMainMapper.listMain(idList);
}
-}
+
+ @Override
+ public List<ProductionProductMainDto> getByProductWorkOrderId(Long productWorkOrderId) {
+ List<ProductionProductMainDto> productionProductMainDtos = productionProductMainMapper.getByProductWorkOrderId(productWorkOrderId);
+
+ if (productionProductMainDtos == null || productionProductMainDtos.isEmpty()) {
+ return productionProductMainDtos;
+ }
+
+ // 鏀堕泦鎵�鏈変骇鍝佷富璁板綍ID
+ List<Long> productMainIds = productionProductMainDtos.stream()
+ .map(ProductionProductMainDto::getId)
+ .collect(Collectors.toList());
+
+ // 鎵归噺鏌ヨ鎵�鏈夌浉鍏崇殑璐ㄦ璁板綍
+ List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
+ Wrappers.<QualityInspect>lambdaQuery()
+ .in(QualityInspect::getProductMainId, productMainIds)
+ );
+
+ if (!qualityInspects.isEmpty()) {
+ // 鏀堕泦鎵�鏈夎川妫�璁板綍ID
+ List<Long> inspectIds = qualityInspects.stream()
+ .map(QualityInspect::getId)
+ .collect(Collectors.toList());
+
+ // 鎵归噺鏌ヨ鎵�鏈夌浉鍏崇殑涓嶅悎鏍煎鐞嗚褰�
+ List<QualityUnqualified> qualityUnqualifieds = qualityUnqualifiedMapper.selectList(
+ Wrappers.<QualityUnqualified>lambdaQuery()
+ .in(QualityUnqualified::getInspectId, inspectIds)
+ );
+
+ // 鏋勫缓璐ㄦID鍒颁笉鍚堟牸澶勭悊璁板綍鐨勬槧灏�
+ Map<Long, QualityUnqualified> inspectIdToUnqualifiedMap = qualityUnqualifieds.stream()
+ .collect(Collectors.toMap(QualityUnqualified::getInspectId, q -> q, (q1, q2) -> q1));
+
+ // 鏋勫缓浜у搧涓籌D鍒拌川妫�璁板綍鐨勬槧灏�
+ Map<Long, QualityInspect> productMainIdToInspectMap = qualityInspects.stream()
+ .collect(Collectors.toMap(QualityInspect::getProductMainId, q -> q, (q1, q2) -> q1));
+
+ // 鍏宠仈澶勭悊缁撴灉鍒颁骇鍝佷富璁板綍
+ productionProductMainDtos.forEach(p -> {
+ QualityInspect qualityInspect = productMainIdToInspectMap.get(p.getId());
+ if (qualityInspect != null) {
+ QualityUnqualified qualityUnqualified = inspectIdToUnqualifiedMap.get(qualityInspect.getId());
+ if (qualityUnqualified != null) {
+ p.setDealResult(qualityUnqualified.getDealResult() == null ? "" : qualityUnqualified.getDealResult());
+ }
+ }
+ });
+ }
+
+ return productionProductMainDtos;
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.3