From 2683793796366a4b6361baf4a16e5c65c8dce068 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 21 四月 2026 16:05:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New_pro' into dev_New_pro
---
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 336 +------------------------------------------------------
1 files changed, 11 insertions(+), 325 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 7a67d50..9ec1e06 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -1,334 +1,20 @@
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.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.basic.mapper.ProductMapper;
-import com.ruoyi.basic.mapper.ProductModelMapper;
-import com.ruoyi.basic.pojo.Product;
-import com.ruoyi.basic.pojo.ProductModel;
-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.bean.BeanUtils;
-import com.ruoyi.procurementrecord.utils.StockUtils;
-import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.dto.ProductionProductMainDto;
-import com.ruoyi.production.mapper.*;
-import com.ruoyi.production.pojo.*;
-import com.ruoyi.production.service.ProductionProductMainService;
-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.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import com.ruoyi.production.pojo.ProductionProductMain;
+import com.ruoyi.production.service.ProductionProductMainService;
+import org.springframework.stereotype.Service;
-import java.math.BigDecimal;
-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;
-
+/**
+ * <p>
+ * 鐢熶骇鎶ュ伐琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-04-21 03:55:52
+ */
@Service
-@AllArgsConstructor
-@Transactional(rollbackFor = Exception.class)
public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService {
- private IQualityInspectService qualityInspectService;
- private ProductionProductMainMapper productionProductMainMapper;
-
-
- private ProductWorkOrderMapper productWorkOrderMapper;
-
- private ProductProcessRouteItemMapper productProcessRouteItemMapper;
- private SysUserMapper userMapper;
-
- private ProductionProductOutputMapper productionProductOutputMapper;
-
-
- private ProductModelMapper productModelMapper;
-
- private QualityInspectMapper qualityInspectMapper;
-
- private ProductProcessMapper productProcessMapper;
- private ProductProcessRouteMapper productProcessRouteMapper;
-
- private ProductMapper productMapper;
-
-
- private QualityTestStandardParamMapper qualityTestStandardParamMapper;
- private QualityTestStandardMapper qualityTestStandardMapper;
-
- private QualityInspectParamMapper qualityInspectParamMapper;
-
- private ProductStructureMapper productStructureMapper;
-
- private ProductionProductInputMapper productionProductInputMapper;
-
- private ProductOrderMapper productOrderMapper;
-
- private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
-
- private StockUtils stockUtils;
-
-
- @Override
- public IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto) {
- return productionProductMainMapper.listPageProductionProductMainDto(page, productionProductMainDto);
- }
-
- @Override
- public Boolean addProductMain(ProductionProductMainDto dto) {
- SysUser user = userMapper.selectUserById(dto.getUserId());
- ProductionProductMain productionProductMain = new ProductionProductMain();
- //褰撳墠宸ヨ壓璺嚎瀵瑰簲鐨勫伐搴忚鎯�
- ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(dto.getProductProcessRouteItemId());
- if (productProcessRouteItem == null) {
- throw new RuntimeException("宸ヨ壓璺嚎椤逛笉瀛樺湪");
- }
- //褰撳墠鍏蜂綋宸ュ簭
- ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId());
- //宸ヨ壓璺嚎涓綋鍓嶅伐搴忓搴旂殑浜у嚭瑙勬牸鍨嬪彿
- ProductModel productModel = productModelMapper.selectById(productProcessRouteItem.getProductModelId());
- //鏌ヨ璇ョ敓浜ц鍗曞搴旂殑bom
- ProductProcessRoute productProcessRoute = productProcessRouteMapper.selectById(productProcessRouteItem.getProductRouteId());
- /*鏂板鎶ュ伐涓昏〃*/
- //鏌ヨ鏈�澶ф姤宸ョ紪鍙�
- String datePrefix = "BG" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyMMdd"));
- QueryWrapper<ProductionProductMain> queryWrapper = new QueryWrapper<>();
- queryWrapper.select("MAX(product_no) as maxNo")
- .likeRight("product_no", datePrefix);
- List<Map<String, Object>> resultList = productionProductMainMapper.selectMaps(queryWrapper);
- int sequenceNumber = 1;
- if (resultList != null && !resultList.isEmpty()) {
- Map<String, Object> result = resultList.get(0);
- if (result != null) {
- Object maxNoObj = result.get("maxNo");
- if (maxNoObj != null) {
- String lastNo = maxNoObj.toString();
- System.out.println("lastNo: " + lastNo);
- if (lastNo.startsWith(datePrefix)) {
- try {
- String seqStr = lastNo.substring(datePrefix.length());
- sequenceNumber = Integer.parseInt(seqStr) + 1;
- } catch (NumberFormatException e) {
- sequenceNumber = 1;
- }
- }
- }
- }
- }
- String productNo = String.format("%s%03d", datePrefix, sequenceNumber);
- productionProductMain.setProductNo(productNo);
- productionProductMain.setUserId(dto.getUserId());
- productionProductMain.setUserName(dto.getUserName());
- productionProductMain.setProductProcessRouteItemId(dto.getProductProcessRouteItemId());
- productionProductMain.setWorkOrderId(dto.getWorkOrderId());
- productionProductMain.setStatus(0);
- productionProductMainMapper.insert(productionProductMain);
- /*鏂板鎶ュ伐鎶曞叆琛�*/
- List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomAndProcess(productProcessRoute.getBomId(), productProcess.getId());
- if (productStructureDtos.size() == 0) {
- //濡傛灉璇ュ伐搴忔病鏈変骇鍝佺粨鏋勭殑鎶曞叆鍝�,閭h繖涓姇鍏ュ搧鍜屼骇鍑哄搧鏄悓涓�涓�
- ProductStructureDto productStructureDto = new ProductStructureDto();
- productStructureDto.setProductModelId(productProcessRouteItem.getProductModelId());
- productStructureDto.setUnitQuantity(BigDecimal.ONE);
- productStructureDtos.add(productStructureDto);
- }
- for (ProductStructureDto productStructureDto : productStructureDtos) {
-
- ProductionProductInput productionProductInput = new ProductionProductInput();
- productionProductInput.setProductModelId(productStructureDto.getProductModelId());
- 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());
-
- }
- /*鏂板鎶ュ伐浜у嚭琛�*/
- ProductionProductOutput productionProductOutput = new ProductionProductOutput();
- productionProductOutput.setProductMainId(productionProductMain.getId());
- productionProductOutput.setProductModelId(productProcessRouteItem.getProductModelId());
- productionProductOutput.setQuantity(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO);
- productionProductOutput.setScrapQty(dto.getScrapQty() != null ? dto.getScrapQty() : BigDecimal.ZERO);
- 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()));
- if (productProcessRouteItem.getIsQuality()) {
- //瀵瑰簲鐨勮繃绋嬫鎴栬�呭嚭鍘傛
- int inspectType = 1;
- String process = productProcess.getName();//宸ュ簭
- if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
- //鏈�鍚庝竴閬撳伐搴忕敓鎴愬嚭鍘傛
- inspectType = 2;
- process = null;
- }
- Product product = productMapper.selectById(productModel.getProductId());
- QualityInspect qualityInspect = new QualityInspect();
- qualityInspect.setProductId(product.getId());
- qualityInspect.setProductName(product.getProductName());
- qualityInspect.setModel(productModel.getModel());
- qualityInspect.setUnit(productModel.getUnit());
- qualityInspect.setQuantity(productQty);
- qualityInspect.setProcess(process);
- qualityInspect.setInspectState(0);
- qualityInspect.setInspectType(inspectType);
- qualityInspect.setProductMainId(productionProductMain.getId());
- qualityInspect.setProductModelId(productModel.getId());
- qualityInspectMapper.insert(qualityInspect);
- List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(product.getId(), inspectType, process);
- if (qualityTestStandard.size() > 0) {
- qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
- qualityInspectMapper.updateById(qualityInspect);
- qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
- .eq(QualityTestStandardParam::getTestStandardId, qualityTestStandard.get(0).getId()))//榛樿鑾峰彇鏈�鏂扮殑
- .forEach(qualityTestStandardParam -> {
- QualityInspectParam param = new QualityInspectParam();
- BeanUtils.copyProperties(qualityTestStandardParam, param);
- param.setId(null);
- param.setInspectId(qualityInspect.getId());
- qualityInspectParamMapper.insert(param);
- });
- }
- }else {
- //鐩存帴鍏ュ簱
- stockUtils.addStock(productProcessRouteItem.getProductModelId(), productionProductOutput.getQuantity(), 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);
- /*娣诲姞鐢熶骇鏍哥畻*/
- SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder()
- .productMainId(productionProductMain.getId())
- .schedulingUserId(user.getUserId())
- .schedulingUserName(user.getNickName())
- .finishedNum(productQty)
- .workHours(productProcess.getSalaryQuota())
- .process(productProcess.getName())
- .schedulingDate(LocalDate.now())
- .tenantId(dto.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());
- }
- }
- return true;
- }
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public Boolean removeProductMain(Long id) {
- ProductionProductMain productionProductMain = productionProductMainMapper.selectById(id);
- //璇ユ姤宸ュ搴旂殑宸ヨ壓璺嚎璇︽儏
- ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(productionProductMain.getProductProcessRouteItemId());
- ProductionProductOutput productionProductOutput = productionProductOutputMapper.selectList(Wrappers.<ProductionProductOutput>lambdaQuery().eq(ProductionProductOutput::getProductMainId, productionProductMain.getId())).get(0);
- /*鍒犻櫎鏍哥畻*/
- salesLedgerProductionAccountingMapper.delete(
- new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
- .eq(SalesLedgerProductionAccounting::getProductMainId, productionProductMain.getId())
- );
- /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
- ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionProductMain.getWorkOrderId());
- if (productWorkOrder != null && productionProductOutput != null) {
- BigDecimal outputQty = productionProductOutput.getQuantity() == null ? BigDecimal.ZERO : productionProductOutput.getQuantity();
- 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));
- productWorkOrder.setActualEndTime(null);
- productWorkOrderMapper.updateById(productWorkOrder);
- } else {
- throw new ServiceException("鎿嶄綔澶辫触锛氬伐鍗曚俊鎭垨浜у嚭璁板綍涓嶅瓨鍦�");
- }
-
- //鍒ゆ柇鏄惁鏄渶鍚庝竴閬撳伐搴�
- List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
- if (productProcessRouteItem.getDragSort() != null && productProcessRouteItems != null && productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
- ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
- if (productOrder != null) {
- BigDecimal orderCompleteQty = productOrder.getCompleteQuantity() == null ? BigDecimal.ZERO : productOrder.getCompleteQuantity();
- BigDecimal outputQty = productionProductOutput.getQuantity() != null
- ? productionProductOutput.getQuantity() : BigDecimal.ZERO;
-
- productOrder.setCompleteQuantity(orderCompleteQty.subtract(outputQty));
- productOrder.setEndTime(null);
- productOrderMapper.updateById(productOrder);
- } else {
- throw new ServiceException("鍏宠仈鐨勭敓浜ц鍗曚笉瀛樺湪");
- }
- }
- //鍒犻櫎璐ㄦ
- qualityInspectMapper.selectList(
- new LambdaQueryWrapper<QualityInspect>()
- .eq(QualityInspect::getProductMainId, productionProductMain.getId())
- ).forEach(q -> {
- qualityInspectParamMapper.delete(
- new LambdaQueryWrapper<QualityInspectParam>()
- .eq(QualityInspectParam::getInspectId, q.getId()));
- qualityInspectMapper.deleteById(q.getId());
- stockUtils.deleteStockInRecord(q.getId(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode());
- });
-
- // 鍒犻櫎浜у嚭璁板綍
- productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>()
- .eq(ProductionProductOutput::getProductMainId, productionProductMain.getId()));
- //鍒犻櫎鎶曞叆璁板綍
- productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>()
- .eq(ProductionProductInput::getProductMainId, productionProductMain.getId()));
- //鍒犻櫎鎶ュ簾鐨勫叆搴撹褰�
- stockUtils.deleteStockInRecord(productionProductMain.getId(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode());
- //鍒犻櫎涓嶉渶瑕佽川妫�鐨勫悎鏍煎叆搴�
- stockUtils.deleteStockInRecord(productionProductMain.getId(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode());
- //鍒犻櫎鎶曞叆瀵瑰簲鐨勫嚭搴撹褰�
- stockUtils.deleteStockOutRecord(productionProductMain.getId(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
- // 鍒犻櫎涓昏〃
- productionProductMainMapper.deleteById(productionProductMain.getId());
- return true;
- }
-
- @Override
- public ArrayList<Long> listMain(List<Long> idList) {
- return productionProductMainMapper.listMain(idList);
- }
}
--
Gitblit v1.9.3