package com.ruoyi.appendix.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.appendix.dto.ProcessRouteItemInstanceDto; import com.ruoyi.appendix.mapper.ProcessRouteItemInstanceMapper; import com.ruoyi.appendix.pojo.ProcessRouteItemInstance; import com.ruoyi.appendix.pojo.ProcessRouteItemParamInstance; import com.ruoyi.appendix.service.ProcessRouteItemInstanceService; import com.ruoyi.appendix.service.ProcessRouteItemParamInstanceService; import com.ruoyi.basic.pojo.BaseParam; import com.ruoyi.basic.service.BaseParamService; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.production.pojo.ProcessRouteItemParam; import com.ruoyi.production.pojo.ProductProcess; import com.ruoyi.production.service.ProcessRouteItemParamService; import com.ruoyi.production.service.ProductProcessService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** *
* 工艺路线子集-附表Service实现类 *
* * @author deslrey * @version 1.0 * @since 2026/03/18 13:08 */ @Slf4j @Service public class ProcessRouteItemInstanceServiceImpl extends ServiceImpl implements ProcessRouteItemInstanceService { @Resource private ProductProcessService productProcessService; @Resource private ProcessRouteItemParamInstanceService processRouteItemParamInstanceService; @Resource private ProcessRouteItemParamService processRouteItemParamService; @Resource private BaseParamService baseParamService; @Override public List getProcessItem(Long orderId) { List list = list(new LambdaQueryWrapper() .eq(ProcessRouteItemInstance::getOrderId, orderId) .orderByAsc(ProcessRouteItemInstance::getDragSort)); return list.stream().map(item -> { ProcessRouteItemInstanceDto dto = new ProcessRouteItemInstanceDto(); BeanUtils.copyProperties(item, dto); if (item.getProcessId() != null) { ProductProcess process = productProcessService.getById(item.getProcessId()); if (process != null) { dto.setProcessName(process.getName()); } } return dto; }).collect(Collectors.toList()); } @Override public void addProcessItem(ProcessRouteItemInstanceDto dto) { if (dto == null) { throw new ServiceException("新增数据不能为空"); } if (dto.getOrderId() == null) { throw new ServiceException("生产订单ID不能为空"); } if (dto.getProcessId() == null) { throw new ServiceException("工序ID不能为空"); } ProcessRouteItemInstance entity = new ProcessRouteItemInstance(); BeanUtils.copyProperties(dto, entity); entity.setId(null); entity.setTenantId(SecurityUtils.getLoginUser().getTenantId()); entity.setCreateTime(LocalDateTime.now()); // 取当前订单下最大 dragSort + 1 ProcessRouteItemInstance maxSortItem = getOne(new LambdaQueryWrapper() .eq(ProcessRouteItemInstance::getOrderId, dto.getOrderId()) .orderByDesc(ProcessRouteItemInstance::getDragSort) .last("limit 1")); entity.setDragSort(maxSortItem != null && maxSortItem.getDragSort() != null ? maxSortItem.getDragSort() + 1 : 1); save(entity); } @Override public void updateProcessItem(ProcessRouteItemInstanceDto dto) { if (dto == null || dto.getId() == null) { throw new ServiceException("更新数据或ID不能为空"); } ProcessRouteItemInstance old = getById(dto.getId()); if (old == null) { throw new ServiceException("数据不存在"); } // 工序变更,删除旧参数附表,迁移新工序参数 if (dto.getProcessId() != null && !dto.getProcessId().equals(old.getProcessId())) { // 删除工艺路线工序参数附表 processRouteItemParamInstanceService.remove(new LambdaQueryWrapper() .eq(ProcessRouteItemParamInstance::getOrderId, old.getOrderId()) .eq(ProcessRouteItemParamInstance::getRouteItemId, old.getId())); // 迁移新工序的 process_route_item_param List routeItemParams = processRouteItemParamService.list( new LambdaQueryWrapper().eq(ProcessRouteItemParam::getRouteItemId, old.getId())); if (!routeItemParams.isEmpty()) { // 批量查询 base_param List paramIds = routeItemParams.stream().map(ProcessRouteItemParam::getParamId) .filter(id -> id != null).distinct().collect(Collectors.toList()); Map baseParamMap = new HashMap<>(); if (!paramIds.isEmpty()) { baseParamService.listByIds(paramIds).forEach(bp -> baseParamMap.put(bp.getId(), bp)); } List newInstances = routeItemParams.stream().map(p -> { ProcessRouteItemParamInstance instance = new ProcessRouteItemParamInstance(); BeanUtils.copyProperties(p, instance, "id"); instance.setOrderId(old.getOrderId()); BaseParam bp = baseParamMap.get(p.getParamId()); if (bp != null) { instance.setParamKey(bp.getParamKey()); instance.setParamName(bp.getParamName()); instance.setParamType(bp.getParamType()); instance.setParamFormat(bp.getParamFormat()); instance.setValueMode(bp.getValueMode()); instance.setUnit(bp.getUnit()); instance.setRemark(bp.getRemark()); } return instance; }).collect(Collectors.toList()); processRouteItemParamInstanceService.saveBatch(newInstances); } } ProcessRouteItemInstance entity = new ProcessRouteItemInstance(); BeanUtils.copyProperties(dto, entity); entity.setUpdateTime(LocalDateTime.now()); updateById(entity); } @Override public void deleteProcessItem(Long id) { if (id == null) { throw new ServiceException("ID不能为空"); } ProcessRouteItemInstance old = getById(id); if (old == null) { throw new ServiceException("数据不存在"); } // 删除工艺路线工序参数附表 processRouteItemParamInstanceService.remove(new LambdaQueryWrapper() .eq(ProcessRouteItemParamInstance::getOrderId, old.getOrderId()) .eq(ProcessRouteItemParamInstance::getRouteItemId, id)); removeById(id); } @Override public void sortProcessItem(ProcessRouteItemInstanceDto dto) { if (dto == null || dto.getId() == null) { throw new ServiceException("数据或ID不能为空"); } ProcessRouteItemInstance old = getById(dto.getId()); if (old == null) { throw new ServiceException("数据不存在"); } List items = list(new LambdaQueryWrapper() .eq(ProcessRouteItemInstance::getOrderId, old.getOrderId()) .orderByAsc(ProcessRouteItemInstance::getDragSort)); Integer targetPosition = dto.getDragSort(); if (targetPosition != null && targetPosition >= 1) { items.removeIf(item -> item.getId().equals(old.getId())); items.add(targetPosition - 1, old); for (int i = 0; i < items.size(); i++) { ProcessRouteItemInstance item = items.get(i); int newSort = i + 1; if (!item.getId().equals(old.getId())) { if (!Integer.valueOf(newSort).equals(item.getDragSort())) { item.setDragSort(newSort); updateById(item); } } else { old.setDragSort(newSort); updateById(old); } } } } }