From 4cb12d21253d754152b7591fe49fa131fed1b3c8 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 23 四月 2026 14:37:28 +0800
Subject: [PATCH] refactor(production): 移除销售台账关联逻辑并优化生产订单创建流程
---
src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationParamServiceImpl.java | 208 +++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 199 insertions(+), 9 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationParamServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationParamServiceImpl.java
index d6eab7c..048519b 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationParamServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderRoutingOperationParamServiceImpl.java
@@ -1,20 +1,210 @@
package com.ruoyi.production.service.impl;
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.common.exception.ServiceException;
+import com.ruoyi.production.bean.dto.ProductionOrderRoutingOperationParamDto;
+import com.ruoyi.production.bean.dto.ProductionOrderRoutingOperationParamSyncDto;
+import com.ruoyi.production.bean.vo.ProductionOrderRoutingOperationParamVo;
+import com.ruoyi.production.mapper.ProductionOrderMapper;
+import com.ruoyi.production.mapper.ProductionOrderRoutingOperationMapper;
import com.ruoyi.production.mapper.ProductionOrderRoutingOperationParamMapper;
+import com.ruoyi.production.pojo.ProductionOrder;
+import com.ruoyi.production.pojo.ProductionOrderRoutingOperation;
import com.ruoyi.production.pojo.ProductionOrderRoutingOperationParam;
import com.ruoyi.production.service.ProductionOrderRoutingOperationParamService;
+import com.ruoyi.technology.mapper.TechnologyRoutingOperationParamMapper;
+import com.ruoyi.technology.pojo.TechnologyRoutingOperationParam;
+import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
-/**
- * <p>
- * 鐢熶骇璁㈠崟宸ヨ壓璺嚎宸ュ簭鍙傛暟琛� 鏈嶅姟瀹炵幇绫�
- * </p>
- *
- * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
- * @since 2026-04-21 03:55:52
- */
+import java.util.List;
+
@Service
-public class ProductionOrderRoutingOperationParamServiceImpl extends ServiceImpl<ProductionOrderRoutingOperationParamMapper, ProductionOrderRoutingOperationParam> implements ProductionOrderRoutingOperationParamService {
+@Transactional(rollbackFor = Exception.class)
+@RequiredArgsConstructor
+public class ProductionOrderRoutingOperationParamServiceImpl extends ServiceImpl<ProductionOrderRoutingOperationParamMapper, ProductionOrderRoutingOperationParam>
+ implements ProductionOrderRoutingOperationParamService {
+ private final ProductionOrderRoutingOperationParamMapper productionOrderRoutingOperationParamMapper;
+ private final ProductionOrderRoutingOperationMapper productionOrderRoutingOperationMapper;
+ private final ProductionOrderMapper productionOrderMapper;
+ private final TechnologyRoutingOperationParamMapper technologyRoutingOperationParamMapper;
+
+ @Override
+ public IPage<ProductionOrderRoutingOperationParamVo> pageProductionOrderRoutingOperationParam(Page<ProductionOrderRoutingOperationParamDto> page,
+ ProductionOrderRoutingOperationParamDto dto) {
+ Page<ProductionOrderRoutingOperationParam> entityPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
+ return this.page(entityPage, buildQueryWrapper(dto))
+ .convert(item -> BeanUtil.copyProperties(item, ProductionOrderRoutingOperationParamVo.class));
+ }
+
+ @Override
+ public List<ProductionOrderRoutingOperationParamVo> listProductionOrderRoutingOperationParam(ProductionOrderRoutingOperationParamDto dto) {
+ return BeanUtil.copyToList(this.list(buildQueryWrapper(dto)), ProductionOrderRoutingOperationParamVo.class);
+ }
+
+ @Override
+ public ProductionOrderRoutingOperationParamVo getProductionOrderRoutingOperationParamInfo(Long id) {
+ ProductionOrderRoutingOperationParam item = this.getById(id);
+ return item == null ? null : BeanUtil.copyProperties(item, ProductionOrderRoutingOperationParamVo.class);
+ }
+
+ @Override
+ public boolean saveProductionOrderRoutingOperationParam(ProductionOrderRoutingOperationParam item) {
+ ProductionOrderRoutingOperation routingOperation = getRoutingOperation(item.getTechnologyRoutingOperationId());
+ fillFromSourceParam(item, routingOperation);
+ validateManualFields(item);
+ checkDuplicate(item);
+ return this.saveOrUpdate(item);
+ }
+
+ @Override
+ public boolean removeProductionOrderRoutingOperationParam(Long id) {
+ return this.removeById(id);
+ }
+
+ @Override
+ public int syncProductionOrderRoutingOperationParam(ProductionOrderRoutingOperationParamSyncDto syncDto) {
+ if (syncDto == null || syncDto.getProductionOrderRoutingOperationId() == null) {
+ throw new ServiceException("productionOrderRoutingOperationId is required");
+ }
+ ProductionOrderRoutingOperation routingOperation = getRoutingOperation(syncDto.getProductionOrderRoutingOperationId());
+ List<TechnologyRoutingOperationParam> sourceParamList = technologyRoutingOperationParamMapper.selectList(
+ Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
+ .eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, routingOperation.getTechnologyRoutingOperationId())
+ .orderByAsc(TechnologyRoutingOperationParam::getId)
+ );
+ boolean replaceExisting = syncDto.getReplaceExisting() == null || syncDto.getReplaceExisting();
+ if (replaceExisting) {
+ productionOrderRoutingOperationParamMapper.delete(
+ Wrappers.<ProductionOrderRoutingOperationParam>lambdaQuery()
+ .eq(ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationId, routingOperation.getId())
+ );
+ }
+ int successCount = 0;
+ for (TechnologyRoutingOperationParam sourceParam : sourceParamList) {
+ boolean exists = productionOrderRoutingOperationParamMapper.selectCount(
+ Wrappers.<ProductionOrderRoutingOperationParam>lambdaQuery()
+ .eq(ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationId, routingOperation.getId())
+ .eq(ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationParamId, sourceParam.getId())
+ ) > 0;
+ if (!replaceExisting && exists) {
+ continue;
+ }
+ ProductionOrderRoutingOperationParam target = new ProductionOrderRoutingOperationParam();
+ target.setTechnologyRoutingOperationId(routingOperation.getId());
+ target.setTechnologyRoutingOperationParamId(sourceParam.getId());
+ target.setProductionOrderId(routingOperation.getProductionOrderId());
+ target.setTechnologyOperationId(sourceParam.getTechnologyOperationId());
+ target.setTechnologyOperationParamId(sourceParam.getTechnologyOperationParamId());
+ target.setParamId(sourceParam.getParamId());
+ target.setParamCode(sourceParam.getParamCode());
+ target.setParamName(sourceParam.getParamName());
+ target.setParamType(sourceParam.getParamType());
+ target.setParamFormat(sourceParam.getParamFormat());
+ target.setUnit(sourceParam.getUnit());
+ target.setIsRequired(sourceParam.getIsRequired());
+ target.setRemark(sourceParam.getRemark());
+ target.setStandardValue(sourceParam.getStandardValue());
+ productionOrderRoutingOperationParamMapper.insert(target);
+ successCount++;
+ }
+ return successCount;
+ }
+
+ private LambdaQueryWrapper<ProductionOrderRoutingOperationParam> buildQueryWrapper(ProductionOrderRoutingOperationParamDto dto) {
+ ProductionOrderRoutingOperationParam query = dto == null ? new ProductionOrderRoutingOperationParam() : dto;
+ return Wrappers.<ProductionOrderRoutingOperationParam>lambdaQuery()
+ .eq(query.getId() != null, ProductionOrderRoutingOperationParam::getId, query.getId())
+ .eq(query.getProductionOrderId() != null, ProductionOrderRoutingOperationParam::getProductionOrderId, query.getProductionOrderId())
+ .eq(query.getTechnologyRoutingOperationId() != null,
+ ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationId, query.getTechnologyRoutingOperationId())
+ .eq(query.getTechnologyOperationId() != null,
+ ProductionOrderRoutingOperationParam::getTechnologyOperationId, query.getTechnologyOperationId())
+ .eq(query.getTechnologyRoutingOperationParamId() != null,
+ ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationParamId, query.getTechnologyRoutingOperationParamId())
+ .eq(query.getTechnologyOperationParamId() != null,
+ ProductionOrderRoutingOperationParam::getTechnologyOperationParamId, query.getTechnologyOperationParamId())
+ .like(query.getParamCode() != null && !query.getParamCode().trim().isEmpty(),
+ ProductionOrderRoutingOperationParam::getParamCode, query.getParamCode())
+ .like(query.getParamName() != null && !query.getParamName().trim().isEmpty(),
+ ProductionOrderRoutingOperationParam::getParamName, query.getParamName())
+ .orderByAsc(ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationId)
+ .orderByAsc(ProductionOrderRoutingOperationParam::getId);
+ }
+
+ private ProductionOrderRoutingOperation getRoutingOperation(Long productionOrderRoutingOperationId) {
+ if (productionOrderRoutingOperationId == null) {
+ throw new ServiceException("productionOrderRoutingOperationId is required");
+ }
+ ProductionOrderRoutingOperation routingOperation = productionOrderRoutingOperationMapper.selectById(productionOrderRoutingOperationId);
+ if (routingOperation == null) {
+ throw new ServiceException("Production order routing operation not found");
+ }
+ return routingOperation;
+ }
+
+ private void fillFromSourceParam(ProductionOrderRoutingOperationParam item, ProductionOrderRoutingOperation routingOperation) {
+ item.setTechnologyRoutingOperationId(routingOperation.getId());
+ item.setProductionOrderId(routingOperation.getProductionOrderId());
+ ProductionOrder productionOrder = productionOrderMapper.selectById(routingOperation.getProductionOrderId());
+ if (productionOrder == null) {
+ throw new ServiceException("Production order not found");
+ }
+ if (item.getTechnologyRoutingOperationParamId() == null) {
+ return;
+ }
+ TechnologyRoutingOperationParam sourceParam = technologyRoutingOperationParamMapper.selectById(item.getTechnologyRoutingOperationParamId());
+ if (sourceParam == null) {
+ throw new ServiceException("Technology routing operation param not found");
+ }
+ if (!routingOperation.getTechnologyRoutingOperationId().equals(sourceParam.getTechnologyRoutingOperationId())) {
+ throw new ServiceException("Source param does not belong to routing operation");
+ }
+ item.setTechnologyOperationId(sourceParam.getTechnologyOperationId());
+ item.setTechnologyOperationParamId(sourceParam.getTechnologyOperationParamId());
+ item.setParamId(sourceParam.getParamId());
+ item.setParamCode(sourceParam.getParamCode());
+ item.setParamName(sourceParam.getParamName());
+ item.setParamType(sourceParam.getParamType());
+ item.setParamFormat(sourceParam.getParamFormat());
+ item.setUnit(sourceParam.getUnit());
+ item.setIsRequired(sourceParam.getIsRequired());
+ if (item.getRemark() == null || item.getRemark().trim().isEmpty()) {
+ item.setRemark(sourceParam.getRemark());
+ }
+ if (item.getStandardValue() == null) {
+ item.setStandardValue(sourceParam.getStandardValue());
+ }
+ }
+
+ private void validateManualFields(ProductionOrderRoutingOperationParam item) {
+ if (item.getParamCode() == null || item.getParamCode().trim().isEmpty()) {
+ throw new ServiceException("paramCode is required");
+ }
+ if (item.getParamName() == null || item.getParamName().trim().isEmpty()) {
+ throw new ServiceException("paramName is required");
+ }
+ }
+
+ private void checkDuplicate(ProductionOrderRoutingOperationParam item) {
+ boolean duplicate = productionOrderRoutingOperationParamMapper.selectCount(
+ Wrappers.<ProductionOrderRoutingOperationParam>lambdaQuery()
+ .eq(ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationId, item.getTechnologyRoutingOperationId())
+ .eq(item.getTechnologyRoutingOperationParamId() != null,
+ ProductionOrderRoutingOperationParam::getTechnologyRoutingOperationParamId, item.getTechnologyRoutingOperationParamId())
+ .eq(item.getTechnologyRoutingOperationParamId() == null && item.getParamCode() != null,
+ ProductionOrderRoutingOperationParam::getParamCode, item.getParamCode())
+ .ne(item.getId() != null, ProductionOrderRoutingOperationParam::getId, item.getId())
+ ) > 0;
+ if (duplicate) {
+ throw new ServiceException("Duplicate production order routing operation param");
+ }
+ }
}
--
Gitblit v1.9.3