From 73ea8162f3b5419d5808657ed04f9500399f59b6 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 24 四月 2026 17:29:32 +0800
Subject: [PATCH] fix(production): 修正生产产品主记录中的调度用户信息
---
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 216 +++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 172 insertions(+), 44 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 fa34114..4487851 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -1,5 +1,7 @@
package com.ruoyi.production.service.impl;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -11,10 +13,11 @@
import com.ruoyi.basic.mapper.ProductModelMapper;
import com.ruoyi.basic.pojo.Product;
import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.common.enums.AuditEnum;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.production.dto.ProductStructureDto;
@@ -22,16 +25,18 @@
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.*;
import com.ruoyi.production.service.ProductionProductMainService;
+import com.ruoyi.production.vo.ProductAuditVo;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.quality.mapper.*;
import com.ruoyi.quality.pojo.*;
import com.ruoyi.quality.service.IQualityInspectService;
import lombok.AllArgsConstructor;
+import org.springframework.aop.framework.AopContext;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -39,6 +44,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.stream.Collectors;
@Service
@@ -91,7 +97,11 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public Boolean addProductMain(ProductionProductMainDto dto) {
+ LocalDateTime now = LocalDateTime.now();
+ ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
+
SysUser user = userMapper.selectUserById(dto.getUserId());
ProductionProductMain productionProductMain = new ProductionProductMain();
//褰撳墠宸ヨ壓璺嚎瀵瑰簲鐨勫伐搴忚鎯�
@@ -133,15 +143,31 @@
}
String productNo = String.format("%s%03d", datePrefix, sequenceNumber);
productionProductMain.setProductNo(productNo);
- productionProductMain.setUserId(dto.getUserId());
- productionProductMain.setUserName(dto.getUserName());
+
+ // 淇敼鐝粍淇℃伅 浠ョ涓�浜轰綔涓哄師鍏坰etUserId setUserName
+ Assert.isTrue(CollUtil.isNotEmpty(dto.getTeamList()),"鐝粍淇℃伅涓嶈兘涓虹┖");
+
+ productionProductMain.setTeamIds(dto.getTeamList().stream().map(ProductionProductMainDto.Team::getUserId).map(String::valueOf).collect(Collectors.joining(",")));
+ productionProductMain.setTeamNames(dto.getTeamList().stream().map(ProductionProductMainDto.Team::getUserName).collect(Collectors.joining(",")));
+
+ productionProductMain.setUserId(dto.getTeamList().get(0).getUserId());
+ productionProductMain.setUserName(dto.getTeamList().get(0).getUserName());
+
+
+
productionProductMain.setProductProcessRouteItemId(dto.getProductProcessRouteItemId());
productionProductMain.setWorkOrderId(dto.getWorkOrderId());
+ productionProductMain.setAuditUserId(dto.getAuditUserId());
+ productionProductMain.setAuditUserName(dto.getAuditUserName());
productionProductMain.setStatus(0);
+ productionProductMain.setStartTime(productWorkOrder.getStartProductTime());
+ productionProductMain.setEndTime(now);
+ productionProductMain.setDeviceId(productProcess.getDeviceId());
+ productionProductMain.setDeviceName(productProcess.getDeviceName());
productionProductMainMapper.insert(productionProductMain);
/*鏂板鎶ュ伐鎶曞叆琛�*/
List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomAndProcess(productProcessRoute.getBomId(), productProcess.getId());
- if (productStructureDtos.size() == 0) {
+ if (productStructureDtos.isEmpty()) {
//濡傛灉璇ュ伐搴忔病鏈変骇鍝佺粨鏋勭殑鎶曞叆鍝�,閭h繖涓姇鍏ュ搧鍜屼骇鍑哄搧鏄悓涓�涓�
ProductStructureDto productStructureDto = new ProductStructureDto();
productStructureDto.setProductModelId(productProcessRouteItem.getProductModelId());
@@ -155,7 +181,7 @@
productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity()));
productionProductInput.setProductMainId(productionProductMain.getId());
productionProductInputMapper.insert(productionProductInput);
- stockUtils.substractStock(productStructureDto.getProductModelId(), productionProductInput.getQuantity(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductMain.getId());
+// stockUtils.substractStock(productStructureDto.getProductModelId(), productionProductInput.getQuantity(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductMain.getId());
}
/*鏂板鎶ュ伐浜у嚭琛�*/
@@ -164,9 +190,131 @@
productionProductOutput.setProductModelId(productProcessRouteItem.getProductModelId());
productionProductOutput.setQuantity(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO);
productionProductOutput.setScrapQty(dto.getScrapQty() != null ? dto.getScrapQty() : BigDecimal.ZERO);
+ productionProductOutput.setReplenishQty(dto.getReplenishQty());
productionProductOutputMapper.insert(productionProductOutput);
//鍚堟牸鏁伴噺=鎶ュ伐鏁伴噺-鎶ュ簾鏁伴噺
BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty());
+ //鍙湁鍚堟牸鏁伴噺>0鎵嶈兘澧炲姞鐩稿簲鏁版嵁
+ if (productQty.compareTo(BigDecimal.ZERO) > 0) {
+ List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
+ /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
+ productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(productQty));
+ if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())) {
+ productWorkOrder.setActualStartTime(LocalDate.now());//瀹為檯寮�濮嬫椂闂�
+ }
+ if (productWorkOrder.getCompleteQuantity().compareTo(productWorkOrder.getPlanQuantity()) == 0) {
+ productWorkOrder.setActualEndTime(LocalDate.now());//瀹為檯缁撴潫鏃堕棿
+ }
+ productWorkOrder.setEndProductTime(now);
+ productWorkOrderMapper.updateById(productWorkOrder);
+ //鐢熶骇璁㈠崟
+ ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
+ if (ObjectUtils.isNull(productOrder.getStartTime())) {
+ productOrder.setStartTime(now);//寮�濮嬫椂闂�
+ }
+ if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
+ //濡傛灉鏄渶鍚庝竴閬撳伐搴忔姤宸ヤ箣鍚庣敓浜ц鍗曞畬鎴愭暟閲�+
+ productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(productQty));
+ if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0) {
+ productOrder.setEndTime(now);//缁撴潫鏃堕棿
+ }
+ }
+ productOrderMapper.updateById(productOrder);
+ }
+
+ //nextAddProductMain(productionProductOutput) // 鐢变簬闇�瑕佸鏍革紝鎵�浠ラ渶瑕佹媶灏佷笅鏉�
+ return true;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void auditProductMain(ProductAuditVo productAuditVo) {
+ ProductionProductMain productionProductMain = productionProductMainMapper.selectById(productAuditVo.getId());
+
+ // 褰撳墠瀹℃壒浜� 瑕佷笌褰撳墠鐧诲綍浜轰负鍚屼竴浜�
+ if(productionProductMain.getAuditUserId() != -1){
+ Assert.isTrue(SecurityUtils.getUserId().equals(productionProductMain.getAuditUserId()), "褰撳墠鐧诲綍鐢ㄦ埛涓嶆槸褰撳墠瀹℃壒浜�");
+ }
+
+
+ // 鐘舵�佸繀椤讳负寰呭鏍哥姸鎬�
+ if (!Objects.equals(productionProductMain.getAuditStatus(), AuditEnum.NO_AUDIT.getCode())) {
+ throw new ServiceException("褰撳墠鐘舵�佸凡瀹℃牳,涓嶈兘閲嶅瀹℃牳");
+ }
+
+ LambdaQueryWrapper<ProductionProductOutput> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ProductionProductOutput::getProductMainId, productionProductMain.getId());
+ queryWrapper.last("limit 1");
+ ProductionProductOutput productionProductOutput = productionProductOutputMapper.selectOne(queryWrapper);
+ ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(productionProductMain.getProductProcessRouteItemId());
+
+
+ switch (productAuditVo.getAuditStatus()) {
+ case NO_AUDIT:
+ throw new ServiceException("淇敼瀹℃牳鐘舵�佸け璐ワ紝涓嶈兘涓烘湭瀹℃牳鐘舵��");
+ case AUDIT_SUCCESS:
+
+ Assert.isTrue(productionProductOutput != null, "娌℃湁鎵惧埌瀵瑰簲鐨勬姤宸ヤ骇鍑鸿褰�");
+ ((ProductionProductMainService) AopContext.currentProxy()).nextAddProductMain(productionProductOutput);
+ break;
+ case AUDIT_FAIL:
+ // 鍑忓皯 鏇存柊宸ュ崟鍜岀敓浜ц鍗�
+ ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionProductMain.getWorkOrderId());
+ ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
+
+ productWorkOrder.setCompleteQuantity(
+ productWorkOrder.getCompleteQuantity()
+ .subtract(productionProductOutput.getQuantity())
+ .max(BigDecimal.ZERO)
+ );
+ List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
+
+
+ if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
+ //濡傛灉鏄渶鍚庝竴閬撳伐搴忔姤宸ヤ箣鍚庣敓浜ц鍗� 闇�瑕佹墸闄�
+ productOrder.setCompleteQuantity(
+ productOrder.getCompleteQuantity()
+ .subtract(productionProductOutput.getQuantity())
+ .max(BigDecimal.ZERO)
+ );
+ if (productOrder.getCompleteQuantity().compareTo(productionProductOutput.getQuantity()) > 0) {
+ productOrder.setEndTime(null);
+ }
+ productOrderMapper.updateById(productOrder);
+ }
+
+ if (productWorkOrder.getCompleteQuantity().compareTo(productionProductOutput.getQuantity()) > 0) {
+ productWorkOrder.setActualEndTime(null);
+ }
+
+ productWorkOrderMapper.updateById(productWorkOrder);
+
+ break;
+ }
+
+ // 淇敼鐘舵��
+ ProductionProductMain updateDate = new ProductionProductMain();
+ updateDate.setId(productionProductMain.getId());
+ updateDate.setAuditStatus(productAuditVo.getAuditStatus().getCode());
+ updateDate.setSureAuditUserId(SecurityUtils.getUserId());
+ updateDate.setSureAuditUserName(SecurityUtils.getUsername());
+ updateDate.setAuditTime(LocalDateTime.now());
+ updateDate.setAuditOpinion(productAuditVo.getAuditOpinion());
+ productionProductMainMapper.updateById(updateDate);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void nextAddProductMain(@NotNull ProductionProductOutput productionProductOutput){
+ //鍚堟牸鏁伴噺=鎶ュ伐鏁伴噺-鎶ュ簾鏁伴噺
+ ProductionProductMain productionProductMain = productionProductMainMapper.selectById(productionProductOutput.getProductMainId());
+ BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty());
+ ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(productionProductMain.getProductProcessRouteItemId());
+ ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId());
+ //宸ヨ壓璺嚎涓綋鍓嶅伐搴忓搴旂殑浜у嚭瑙勬牸鍨嬪彿
+ ProductModel productModel = productModelMapper.selectById(productProcessRouteItem.getProductModelId());
+ SysUser user = userMapper.selectUserById(SecurityUtils.getUserId());
+
//鍙湁鍚堟牸鏁伴噺>0鎵嶈兘澧炲姞鐩稿簲鏁版嵁
if (productQty.compareTo(BigDecimal.ZERO) > 0) {
/*鏂板璐ㄦ*/
@@ -194,7 +342,7 @@
qualityInspect.setProductModelId(productModel.getId());
qualityInspectMapper.insert(qualityInspect);
List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(product.getId(), inspectType, process);
- if (qualityTestStandard.size() > 0) {
+ if (!qualityTestStandard.isEmpty()) {
qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
qualityInspectMapper.updateById(qualityInspect);
qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
@@ -209,55 +357,31 @@
}
}else {
//鐩存帴鍏ュ簱
- stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
+ stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId(),"-","-","-");
}
- /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
- ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
- productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(productQty));
- if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())) {
- productWorkOrder.setActualStartTime(LocalDate.now());//瀹為檯寮�濮嬫椂闂�
- }
- if (productWorkOrder.getCompleteQuantity().compareTo(productWorkOrder.getPlanQuantity()) == 0) {
- productWorkOrder.setActualEndTime(LocalDate.now());//瀹為檯缁撴潫鏃堕棿
- }
- productWorkOrderMapper.updateById(productWorkOrder);
- //鐢熶骇璁㈠崟
- ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
- if (ObjectUtils.isNull(productOrder.getStartTime())) {
- productOrder.setStartTime(LocalDateTime.now());//寮�濮嬫椂闂�
- }
- if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
- //濡傛灉鏄渶鍚庝竴閬撳伐搴忔姤宸ヤ箣鍚庣敓浜ц鍗曞畬鎴愭暟閲�+
- productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(productQty));
- if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0) {
- productOrder.setEndTime(LocalDateTime.now());//缁撴潫鏃堕棿
- }
- }
- productOrderMapper.updateById(productOrder);
+
/*娣诲姞鐢熶骇鏍哥畻 鍖哄垎宸ュ簭鏄浠惰繕鏄鏃�*/
- BigDecimal workHours = (productProcess.getType() == 1)
- ? productProcess.getSalaryQuota().multiply(productQty)
- : productProcess.getSalaryQuota();
+ BigDecimal workHours = productProcess.getSalaryQuota();
SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder()
.productMainId(productionProductMain.getId())
- .schedulingUserId(user.getUserId())
- .schedulingUserName(user.getNickName())
+ .schedulingUserId(productionProductMain.getUserId())
+ .schedulingUserName(userMapper.selectUserById(productionProductMain.getUserId()).getNickName())
.finishedNum(productQty)
.workHours(workHours)
.process(productProcess.getName())
.schedulingDate(LocalDate.now())
- .tenantId(dto.getTenantId())
+ .tenantId(productionProductOutput.getTenantId())
.build();
salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting);
}
+
//濡傛灉鎶ュ簾鏁伴噺>0,闇�瑕佽繘鍏ユ姤搴熺殑搴撳瓨
- if (ObjectUtils.isNotEmpty(dto.getScrapQty())) {
- if (dto.getScrapQty().compareTo(BigDecimal.ZERO) > 0) {
- stockUtils.addUnStock(productModel.getId(), dto.getScrapQty(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), productionProductMain.getId());
+ if (ObjectUtils.isNotEmpty(productionProductOutput.getScrapQty())) {
+ if (productionProductOutput.getScrapQty().compareTo(BigDecimal.ZERO) > 0) {
+ stockUtils.addUnStock(productModel.getId(), productionProductOutput.getScrapQty(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), productionProductMain.getId(),"-","-","-");
}
}
- return true;
}
@Override
@@ -287,9 +411,13 @@
BigDecimal scrapQty = productionProductOutput.getScrapQty() == null ? BigDecimal.ZERO : productionProductOutput.getScrapQty();
BigDecimal completeQty = productWorkOrder.getCompleteQuantity() == null ? BigDecimal.ZERO : productWorkOrder.getCompleteQuantity();
- BigDecimal validQuantity = outputQty.subtract(scrapQty);
+ // 蹇呴』涓哄鏍搁�氳繃鐨勬墠浼氬噺灏戞暟閲�
- productWorkOrder.setCompleteQuantity(completeQty.subtract(validQuantity));
+
+ BigDecimal validQuantity = outputQty.subtract(scrapQty);
+ if(productionProductMain.getAuditStatus() != 2){
+ productWorkOrder.setCompleteQuantity(completeQty.subtract(validQuantity).max(BigDecimal.ZERO));
+ }
productWorkOrder.setActualEndTime(null);
productWorkOrderMapper.updateById(productWorkOrder);
} else {
@@ -335,7 +463,7 @@
//鍒犻櫎涓嶉渶瑕佽川妫�鐨勫悎鏍煎叆搴�
stockUtils.deleteStockInRecord(productionProductMain.getId(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode());
//鍒犻櫎鎶曞叆瀵瑰簲鐨勫嚭搴撹褰�
- stockUtils.deleteStockOutRecord(productionProductMain.getId(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
+// stockUtils.deleteStockOutRecord(productionProductMain.getId(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
// 鍒犻櫎涓昏〃
productionProductMainMapper.deleteById(productionProductMain.getId());
return true;
--
Gitblit v1.9.3