From 3066a8f5c1f475997bfe23857ba4bae9395900c4 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期四, 13 八月 2026 10:19:24 +0800
Subject: [PATCH] fix: 领料功能修改,移除订单领料,添加工序领料功能,支持按工序查询物料与已领料记录
---
src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java | 185 +++++++++++++++++++++++++++++++++++++++------
1 files changed, 159 insertions(+), 26 deletions(-)
diff --git a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java
index 236d1ee..a400bc1 100644
--- a/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java
+++ b/src/main/java/com/ruoyi/technology/service/impl/TechnologyRoutingOperationServiceImpl.java
@@ -1,39 +1,60 @@
package com.ruoyi.technology.service.impl;
-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.technology.bean.dto.TechnologyRoutingOperationDto;
+import com.ruoyi.technology.bean.dto.TechnologyRoutingOperationParamSyncDto;
+import com.ruoyi.technology.bean.vo.TechnologyRoutingOperationVo;
+import com.ruoyi.technology.mapper.TechnologyOperationMapper;
import com.ruoyi.technology.mapper.TechnologyRoutingMapper;
import com.ruoyi.technology.mapper.TechnologyRoutingOperationMapper;
+import com.ruoyi.technology.mapper.TechnologyRoutingOperationParamMapper;
+import com.ruoyi.technology.pojo.TechnologyOperation;
+import com.ruoyi.technology.pojo.TechnologyRouting;
import com.ruoyi.technology.pojo.TechnologyRoutingOperation;
+import com.ruoyi.technology.pojo.TechnologyRoutingOperationParam;
+import com.ruoyi.technology.service.TechnologyRoutingOperationParamService;
import com.ruoyi.technology.service.TechnologyRoutingOperationService;
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
@Service
@Transactional(rollbackFor = Exception.class)
+@RequiredArgsConstructor
public class TechnologyRoutingOperationServiceImpl extends ServiceImpl<TechnologyRoutingOperationMapper, TechnologyRoutingOperation> implements TechnologyRoutingOperationService {
- @Autowired
- private TechnologyRoutingOperationMapper technologyRoutingOperationMapper;
+ private final TechnologyRoutingOperationMapper technologyRoutingOperationMapper;
- @Autowired
- private TechnologyRoutingMapper technologyRoutingMapper;
+ private final TechnologyRoutingMapper technologyRoutingMapper;
+ private final TechnologyOperationMapper technologyOperationMapper;
+ private final TechnologyRoutingOperationParamMapper technologyRoutingOperationParamMapper;
+ private final TechnologyRoutingOperationParamService technologyRoutingOperationParamService;
@Override
- public IPage<TechnologyRoutingOperation> pageTechnologyRoutingOperation(Page<TechnologyRoutingOperation> page,
- TechnologyRoutingOperation technologyRoutingOperation) {
- return this.page(page, buildQueryWrapper(technologyRoutingOperation));
+ public IPage<TechnologyRoutingOperationVo> pageTechnologyRoutingOperation(Page<TechnologyRoutingOperationDto> page,
+ TechnologyRoutingOperationDto technologyRoutingOperationDto) {
+ return technologyRoutingOperationMapper.pageTechnologyRoutingOperation(page, technologyRoutingOperationDto);
}
@Override
- public List<TechnologyRoutingOperation> listTechnologyRoutingOperation(TechnologyRoutingOperation technologyRoutingOperation) {
- return this.list(buildQueryWrapper(technologyRoutingOperation));
+ public List<TechnologyRoutingOperationVo> listTechnologyRoutingOperation(TechnologyRoutingOperationDto technologyRoutingOperationDto) {
+ return technologyRoutingOperationMapper.listTechnologyRoutingOperation(technologyRoutingOperationDto);
+ }
+
+ @Override
+ public TechnologyRoutingOperationVo getTechnologyRoutingOperationInfo(Long id) {
+ return technologyRoutingOperationMapper.getTechnologyRoutingOperationInfo(id);
}
@Override
@@ -45,7 +66,101 @@
if (technologyRoutingOperation.getDragSort() == null || technologyRoutingOperation.getDragSort() <= 0) {
technologyRoutingOperation.setDragSort(nextDragSort(technologyRoutingOperation.getTechnologyRoutingId()));
}
- return this.save(technologyRoutingOperation);
+ boolean saved = this.save(technologyRoutingOperation);
+ if (saved) {
+ TechnologyRoutingOperationParamSyncDto syncDto = new TechnologyRoutingOperationParamSyncDto();
+ syncDto.setTechnologyRoutingOperationId(technologyRoutingOperation.getId());
+ syncDto.setReplaceExisting(true);
+ technologyRoutingOperationParamService.syncTechnologyRoutingOperationParam(syncDto);
+ }
+ return saved;
+ }
+
+ /**
+ * 鍏ㄩ噺淇濆瓨宸ヨ壓璺嚎宸ュ簭锛�
+ * 1) 鎸夋彁浜ら『搴忎綔涓哄伐搴忛『搴忥紙dragSort 浠� 1 寮�濮嬶級锛�
+ * 2) 姣忛亾宸ュ簭鍙厑璁稿嚭鐜颁竴娆★紝涓庘�滄寜BOM宸ュ簭鍘婚噸鐢熸垚鈥濅繚鎸佷竴鑷达紱
+ * 3) 宸ュ簭浜у嚭瑙勬牸鍥哄畾涓哄伐鑹鸿矾绾跨殑鎴愬搧瑙勬牸锛�
+ * 4) 鏈洖浼犵殑宸ュ簭杩炲悓鍙傛暟蹇収涓�骞跺垹闄ゃ��
+ */
+ @Override
+ public boolean saveRouteOperations(TechnologyRoutingOperationDto dto) {
+ if (dto == null) {
+ throw new ServiceException("鍙傛暟涓嶈兘涓虹┖");
+ }
+ Long technologyRoutingId = dto.getTechnologyRoutingId() != null ? dto.getTechnologyRoutingId() : dto.getRouteId();
+ if (technologyRoutingId == null) {
+ throw new ServiceException("宸ヨ壓璺嚎ID涓嶈兘涓虹┖");
+ }
+ TechnologyRouting technologyRouting = technologyRoutingMapper.selectById(technologyRoutingId);
+ if (technologyRouting == null) {
+ throw new ServiceException("宸ヨ壓璺嚎涓嶅瓨鍦�");
+ }
+ List<TechnologyRoutingOperationDto> operationList = dto.getOperationList() == null
+ ? Collections.emptyList()
+ : dto.getOperationList();
+
+ List<TechnologyRoutingOperation> dbList = this.list(Wrappers.<TechnologyRoutingOperation>lambdaQuery()
+ .eq(TechnologyRoutingOperation::getTechnologyRoutingId, technologyRoutingId));
+ Set<Long> dbIds = dbList.stream().map(TechnologyRoutingOperation::getId).collect(Collectors.toSet());
+
+ Set<Long> submittedIds = new HashSet<>();
+ Set<Long> submittedOperationIds = new HashSet<>();
+ List<TechnologyRoutingOperation> insertList = new ArrayList<>();
+ List<TechnologyRoutingOperation> updateList = new ArrayList<>();
+
+ int dragSort = 1;
+ for (TechnologyRoutingOperationDto item : operationList) {
+ Long technologyOperationId = item.getTechnologyOperationId();
+ if (technologyOperationId == null) {
+ throw new ServiceException("璇蜂负鎵�鏈夊伐搴忛�夋嫨宸ヨ壓宸ュ簭");
+ }
+ TechnologyOperation technologyOperation = technologyOperationMapper.selectById(technologyOperationId);
+ if (technologyOperation == null) {
+ throw new ServiceException("宸ヨ壓宸ュ簭涓嶅瓨鍦�");
+ }
+ if (!submittedOperationIds.add(technologyOperationId)) {
+ throw new ServiceException("鍚屼竴閬撳伐搴忎笉鑳介噸澶嶅嚭鐜板湪宸ヨ壓璺嚎涓細" + technologyOperation.getName());
+ }
+
+ TechnologyRoutingOperation entity = new TechnologyRoutingOperation();
+ entity.setTechnologyRoutingId(technologyRoutingId);
+ entity.setProductModelId(technologyRouting.getProductModelId());
+ entity.setTechnologyOperationId(technologyOperationId);
+ entity.setDragSort(dragSort++);
+ entity.setIsQuality(technologyOperation.getIsQuality());
+ entity.setIsProduction(technologyOperation.getIsProduction());
+ entity.setType(technologyOperation.getType());
+
+ if (item.getId() == null) {
+ insertList.add(entity);
+ } else {
+ if (!dbIds.contains(item.getId())) {
+ throw new ServiceException("宸ヨ壓璺嚎宸ュ簭涓嶅瓨鍦ㄦ垨涓嶅睘浜庡綋鍓嶅伐鑹鸿矾绾�");
+ }
+ entity.setId(item.getId());
+ submittedIds.add(item.getId());
+ updateList.add(entity);
+ }
+ }
+
+ Set<Long> deleteIds = new HashSet<>(dbIds);
+ deleteIds.removeAll(submittedIds);
+ if (!deleteIds.isEmpty()) {
+ // 鍒犻櫎宸ュ簭鏃跺悓鏃舵竻鐞嗗叾鍙傛暟蹇収锛岄伩鍏嶇暀涓嬪绔嬫暟鎹�
+ technologyRoutingOperationParamMapper.delete(Wrappers.<TechnologyRoutingOperationParam>lambdaQuery()
+ .in(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, deleteIds));
+ for (Long deleteId : deleteIds) {
+ removeTechnologyRoutingOperation(deleteId);
+ }
+ }
+ if (!updateList.isEmpty()) {
+ this.updateBatchById(updateList);
+ }
+ for (TechnologyRoutingOperation insert : insertList) {
+ saveTechnologyRoutingOperation(insert);
+ }
+ return true;
}
@Override
@@ -61,20 +176,38 @@
return removed;
}
- private LambdaQueryWrapper<TechnologyRoutingOperation> buildQueryWrapper(TechnologyRoutingOperation technologyRoutingOperation) {
- LambdaQueryWrapper<TechnologyRoutingOperation> queryWrapper = Wrappers.lambdaQuery();
- queryWrapper.eq(technologyRoutingOperation.getId() != null, TechnologyRoutingOperation::getId, technologyRoutingOperation.getId())
- .eq(technologyRoutingOperation.getTechnologyRoutingId() != null,
- TechnologyRoutingOperation::getTechnologyRoutingId, technologyRoutingOperation.getTechnologyRoutingId())
- .eq(technologyRoutingOperation.getProductModelId() != null,
- TechnologyRoutingOperation::getProductModelId, technologyRoutingOperation.getProductModelId())
- .eq(technologyRoutingOperation.getTechnologyOperationId() != null,
- TechnologyRoutingOperation::getTechnologyOperationId, technologyRoutingOperation.getTechnologyOperationId())
- .eq(technologyRoutingOperation.getIsQuality() != null,
- TechnologyRoutingOperation::getIsQuality, technologyRoutingOperation.getIsQuality())
- .orderByAsc(TechnologyRoutingOperation::getDragSort)
- .orderByAsc(TechnologyRoutingOperation::getId);
- return queryWrapper;
+ @Override
+ public int sort(TechnologyRoutingOperation technologyRoutingOperation) {
+ //鏌ヨ琚敼鍔ㄧ殑杩欐潯鏁版嵁
+ TechnologyRoutingOperation oldtechnologyRoutingOperation = technologyRoutingOperationMapper.selectById(technologyRoutingOperation.getId());
+ //鏌ヨ璇ュ伐鑹鸿矾绾跨殑鎵�鏈夊伐搴忓苟鎸夌収椤哄簭鎺掑簭
+ List<TechnologyRoutingOperation> technologyRouteOperations = technologyRoutingOperationMapper.selectList(Wrappers.<TechnologyRoutingOperation>lambdaQuery()
+ .eq(TechnologyRoutingOperation::getTechnologyRoutingId, oldtechnologyRoutingOperation.getTechnologyRoutingId())
+ .orderByAsc(TechnologyRoutingOperation::getDragSort));
+ // 鑾峰彇鐩爣浣嶇疆锛堢Щ鍔ㄥ埌绗嚑涓箣鍚庯級
+ Integer targetPosition = technologyRoutingOperation.getDragSort();
+ if (targetPosition != null && targetPosition >= 0) {
+ // 绉诲姩鍏冪礌鍒版柊鐨勪綅缃�
+ technologyRouteOperations.remove(oldtechnologyRoutingOperation);
+ technologyRouteOperations.add(targetPosition-1, oldtechnologyRoutingOperation);
+ // 鏇存柊鎵�鏈夊彈褰卞搷鐨勬帓搴忓瓧娈�
+ for (int i = 0; i < technologyRouteOperations.size(); i++) {
+ TechnologyRoutingOperation item = technologyRouteOperations.get(i);
+ if (!item.getId().equals(oldtechnologyRoutingOperation.getId())) {
+ // 妫�鏌ユ槸鍚﹂渶瑕佹洿鏂版帓搴忓��
+ if (item.getDragSort() != i+1) {
+ item.setDragSort(i+1);
+ technologyRoutingOperationMapper.updateById(item);
+ }
+ } else {
+ // 鏇存柊鍘熻褰曠殑鏂版帓搴忎綅缃�
+ oldtechnologyRoutingOperation.setDragSort(targetPosition);
+ technologyRoutingOperationMapper.updateById(oldtechnologyRoutingOperation);
+ }
+ }
+ return 1;
+ }
+ return 0;
}
private Integer nextDragSort(Long technologyRoutingId) {
--
Gitblit v1.9.3