| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.route.vo.process.MesProProcessOutputItemVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.pro.route.vo.process.MesProRouteProcessSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProcessDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProductBomDO; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.Comparator; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | |
| | | |
| | | // 2. 插入 |
| | | MesProRouteProcessDO routeProcess = BeanUtils.toBean(createReqVO, MesProRouteProcessDO.class); |
| | | if (CollUtil.isNotEmpty(createReqVO.getOutputItemIds())) { |
| | | routeProcess.setOutputItemId( |
| | | createReqVO.getOutputItemIds().stream() |
| | | .map(String::valueOf) |
| | | .collect(Collectors.joining(","))); |
| | | } |
| | | // 产出配置(含归属产品)序列化为 JSON 存入 output_item_id;兼容旧的 outputItemIds 平铺格式 |
| | | routeProcess.setOutputItemId(serializeOutputs(createReqVO.getOutputs(), createReqVO.getOutputItemIds())); |
| | | routeProcessMapper.insert(routeProcess); |
| | | |
| | | // 3. 更新工序链 |
| | |
| | | |
| | | // 2. 更新 |
| | | MesProRouteProcessDO updateObj = BeanUtils.toBean(updateReqVO, MesProRouteProcessDO.class); |
| | | if (CollUtil.isNotEmpty(updateReqVO.getOutputItemIds())) { |
| | | updateObj.setOutputItemId( |
| | | updateReqVO.getOutputItemIds().stream() |
| | | .map(String::valueOf) |
| | | .collect(Collectors.joining(","))); |
| | | // 产出配置:只要前端显式传了 outputs / outputItemIds 就覆盖(传空数组表示清空) |
| | | if (updateReqVO.getOutputs() != null || updateReqVO.getOutputItemIds() != null) { |
| | | String serialized = serializeOutputs(updateReqVO.getOutputs(), updateReqVO.getOutputItemIds()); |
| | | updateObj.setOutputItemId(serialized == null ? "" : serialized); |
| | | } |
| | | routeProcessMapper.updateById(updateObj); |
| | | |
| | |
| | | routeProcessMapper.deleteByRouteId(routeId); |
| | | } |
| | | |
| | | /** |
| | | * 产出配置序列化到 output_item_id 字段(JSON 数组) |
| | | * 格式:[{"itemId":231,"productId":231}] |
| | | */ |
| | | private String serializeOutputs(List<MesProProcessOutputItemVO> outputs, List<Long> outputItemIds) { |
| | | List<Map<String, Object>> list = new ArrayList<>(); |
| | | if (CollUtil.isNotEmpty(outputs)) { |
| | | for (MesProProcessOutputItemVO vo : outputs) { |
| | | if (vo == null || vo.getItemId() == null) { |
| | | continue; |
| | | } |
| | | Map<String, Object> m = new LinkedHashMap<>(); |
| | | m.put("itemId", vo.getItemId()); |
| | | if (vo.getProductId() != null) { |
| | | m.put("productId", vo.getProductId()); |
| | | } |
| | | list.add(m); |
| | | } |
| | | } else if (CollUtil.isNotEmpty(outputItemIds)) { |
| | | for (Long id : outputItemIds) { |
| | | if (id == null) { |
| | | continue; |
| | | } |
| | | Map<String, Object> m = new LinkedHashMap<>(); |
| | | m.put("itemId", id); |
| | | list.add(m); |
| | | } |
| | | } |
| | | if (list.isEmpty()) { |
| | | return null; |
| | | } |
| | | return cn.hutool.json.JSONUtil.toJsonStr(list); |
| | | } |
| | | |
| | | } |