package cn.iocoder.yudao.module.mes.controller.admin.pro.workorder;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.ListUtil;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.process.MesProWorkOrderProcessPageReqVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.process.MesProWorkOrderProcessRespVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.process.MesProWorkOrderProcessSaveReqVO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.process.MesProProcessDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderProcessDO;
|
import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
|
import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService;
|
import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderProcessService;
|
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
import jakarta.annotation.Resource;
|
import jakarta.validation.Valid;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.*;
|
|
import java.util.*;
|
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
|
@Tag(name = "管理后台 - MES 生产工单工序")
|
@RestController
|
@RequestMapping("/mes/pro/work-order-process")
|
@Validated
|
public class MesProWorkOrderProcessController {
|
|
@Resource
|
private MesProWorkOrderProcessService workOrderProcessService;
|
@Resource
|
private MesProProcessService processService;
|
@Resource
|
private MesMdItemService itemService;
|
|
@PostMapping("/create")
|
@Operation(summary = "创建工单工序")
|
@PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
|
public CommonResult<Long> createWorkOrderProcess(@Valid @RequestBody MesProWorkOrderProcessSaveReqVO createReqVO) {
|
return success(workOrderProcessService.createWorkOrderProcess(createReqVO));
|
}
|
|
@PutMapping("/update")
|
@Operation(summary = "更新工单工序")
|
@PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
|
public CommonResult<Boolean> updateWorkOrderProcess(@Valid @RequestBody MesProWorkOrderProcessSaveReqVO updateReqVO) {
|
workOrderProcessService.updateWorkOrderProcess(updateReqVO);
|
return success(true);
|
}
|
|
@DeleteMapping("/delete")
|
@Operation(summary = "删除工单工序")
|
@Parameter(name = "id", description = "编号", required = true)
|
@PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
|
public CommonResult<Boolean> deleteWorkOrderProcess(@RequestParam("id") Long id) {
|
workOrderProcessService.deleteWorkOrderProcess(id);
|
return success(true);
|
}
|
|
@GetMapping("/get")
|
@Operation(summary = "获得工单工序")
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
@PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
|
public CommonResult<MesProWorkOrderProcessRespVO> getWorkOrderProcess(@RequestParam("id") Long id) {
|
MesProWorkOrderProcessDO workOrderProcess = workOrderProcessService.getWorkOrderProcess(id);
|
if (workOrderProcess == null) {
|
return success(null);
|
}
|
return success(buildWorkOrderProcessRespVOList(ListUtil.of(workOrderProcess)).get(0));
|
}
|
|
@GetMapping("/page")
|
@Operation(summary = "获得工单工序分页")
|
@PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
|
public CommonResult<PageResult<MesProWorkOrderProcessRespVO>> getWorkOrderProcessPage(@Valid MesProWorkOrderProcessPageReqVO pageReqVO) {
|
PageResult<MesProWorkOrderProcessDO> pageResult = workOrderProcessService.getWorkOrderProcessPage(pageReqVO);
|
return success(new PageResult<>(buildWorkOrderProcessRespVOList(pageResult.getList()), pageResult.getTotal()));
|
}
|
|
@GetMapping("/list-by-work-order-id")
|
@Operation(summary = "获得工单的工序列表")
|
@Parameter(name = "workOrderId", description = "工单编号", required = true)
|
@PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
|
public CommonResult<List<MesProWorkOrderProcessRespVO>> getWorkOrderProcessListByWorkOrderId(
|
@RequestParam("workOrderId") Long workOrderId) {
|
List<MesProWorkOrderProcessDO> list = workOrderProcessService.getWorkOrderProcessListByWorkOrderId(workOrderId);
|
return success(buildWorkOrderProcessRespVOList(list));
|
}
|
|
@GetMapping("/list-by-product-id")
|
@Operation(summary = "根据产品获取工艺路线工序列表(用于工单预填)")
|
@Parameter(name = "productId", description = "产品编号", required = true)
|
@PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
|
public CommonResult<List<MesProWorkOrderProcessRespVO>> getProcessListByProductId(
|
@RequestParam("productId") Long productId) {
|
List<MesProWorkOrderProcessDO> list = workOrderProcessService.getProcessListByProductId(productId);
|
return success(buildWorkOrderProcessRespVOList(list));
|
}
|
|
@PostMapping("/batch-save")
|
@Operation(summary = "批量保存工单工序(新增+更新+删除)")
|
@PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
|
public CommonResult<Boolean> batchSaveWorkOrderProcess(@Valid @RequestBody List<MesProWorkOrderProcessSaveReqVO> list) {
|
workOrderProcessService.batchSaveWorkOrderProcess(list);
|
return success(true);
|
}
|
|
// ==================== 拼接 VO ====================
|
|
private List<MesProWorkOrderProcessRespVO> buildWorkOrderProcessRespVOList(List<MesProWorkOrderProcessDO> list) {
|
if (CollUtil.isEmpty(list)) {
|
return Collections.emptyList();
|
}
|
// 1. 批量获取关联数据
|
Set<Long> processIds = convertSet(list, MesProWorkOrderProcessDO::getProcessId);
|
processIds.removeAll(Collections.singleton(null)); // 移除 null
|
// 获取 nextProcessId 对应的工序名称
|
Set<Long> nextProcessIds = convertSet(list, MesProWorkOrderProcessDO::getNextProcessId);
|
nextProcessIds.removeAll(Collections.singleton(null));
|
processIds.addAll(nextProcessIds);
|
Map<Long, MesProProcessDO> processMap = CollUtil.isNotEmpty(processIds)
|
? processService.getProcessMap(processIds) : Collections.emptyMap();
|
// 获取产出物料
|
Set<Long> outputItemIds = convertSet(list, MesProWorkOrderProcessDO::getOutputItemId);
|
outputItemIds.removeAll(Collections.singleton(null));
|
Map<Long, MesMdItemDO> itemMap = CollUtil.isNotEmpty(outputItemIds)
|
? itemService.getItemMap(outputItemIds) : Collections.emptyMap();
|
|
// 2. 拼接 VO
|
return BeanUtils.toBean(list, MesProWorkOrderProcessRespVO.class, vo -> {
|
MapUtils.findAndThen(processMap, vo.getProcessId(), process -> {
|
vo.setProcessCode(process.getCode()).setProcessName(process.getName());
|
});
|
MapUtils.findAndThen(processMap, vo.getNextProcessId(), process -> {
|
vo.setNextProcessName(process.getName());
|
});
|
MapUtils.findAndThen(itemMap, vo.getOutputItemId(), item -> {
|
vo.setOutputItemCode(item.getCode()).setOutputItemName(item.getName());
|
});
|
});
|
}
|
|
}
|