| | |
| | | import cn.hutool.core.collection.ListUtil; |
| | | import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| | | import cn.iocoder.yudao.module.mes.service.pro.feedback.dto.MesTaskParamSnapshot; |
| | | import cn.iocoder.yudao.module.mes.service.pro.feedback.dto.MesFeedbackParamSnapshot; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProcessDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO; |
| | | 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.md.unitmeasure.MesMdUnitMeasureService; |
| | | import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; |
| | |
| | | import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProcessService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderProcessService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | |
| | | @Resource |
| | | private MesProRouteProcessService routeProcessService; |
| | | @Resource |
| | | private MesProWorkOrderProcessService workOrderProcessService; |
| | | @Resource |
| | | private MesProTaskService taskService; |
| | | |
| | | @Resource |
| | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "获得生产报工") |
| | | @Parameter(name = "id", description = "编号", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('mes:pro-feedback:query')") |
| | | public CommonResult<MesProFeedbackRespVO> getFeedback(@RequestParam("id") Long id) { |
| | | MesProFeedbackDO feedback = feedbackService.getFeedback(id); |
| | | if (feedback == null) { |
| | |
| | | |
| | | @GetMapping("/page") |
| | | @Operation(summary = "获得生产报工分页") |
| | | @PreAuthorize("@ss.hasPermission('mes:pro-feedback:query')") |
| | | public CommonResult<PageResult<MesProFeedbackRespVO>> getFeedbackPage(@Valid MesProFeedbackPageReqVO pageReqVO) { |
| | | PageResult<MesProFeedbackDO> pageResult = feedbackService.getFeedbackPage(pageReqVO); |
| | | return success(new PageResult<>(buildFeedbackRespVOList(pageResult.getList()), pageResult.getTotal())); |
| | | } |
| | | |
| | | @GetMapping("/param-config") |
| | | @Operation(summary = "获得生产任务冻结的参数采集配置") |
| | | public CommonResult<Map<String, Object>> getParamConfig(@RequestParam("taskId") Long taskId) { |
| | | MesProTaskDO task = taskService.validateTaskExists(taskId); |
| | | Map<String, Object> result = new LinkedHashMap<>(); |
| | | result.put("mode", task.getParamCollectMode() == null ? 0 : task.getParamCollectMode()); |
| | | result.put("template", JsonUtils.parseObject(task.getParamTemplateSnapshot(), MesTaskParamSnapshot.class)); |
| | | result.put("shared", JsonUtils.parseObject(task.getParamSharedSnapshot(), MesFeedbackParamSnapshot.class)); |
| | | return success(result); |
| | | } |
| | | |
| | | @GetMapping("/list-by-task") |
| | | @Operation(summary = "按任务获得报工历史列表") |
| | | @Parameter(name = "taskId", description = "任务编号", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('mes:pro-feedback:query')") |
| | | public CommonResult<List<MesProFeedbackRespVO>> getFeedbackListByTask(@RequestParam("taskId") Long taskId) { |
| | | List<MesProFeedbackDO> list = feedbackService.getFeedbackListByTaskId(taskId); |
| | | return success(buildFeedbackRespVOList(list)); |
| | |
| | | .remark("").build() |
| | | ); |
| | | // 输出 |
| | | ExcelUtils.write(response, "生产报工导入模板.xls", "生产报工列表", MesProFeedbackImportExcelVO.class, list); |
| | | ExcelUtils.writeTemplate(response, "生产报工导入模板.xls", "生产报工列表", MesProFeedbackImportExcelVO.class, list); |
| | | } |
| | | |
| | | @PostMapping("/import") |
| | |
| | | @GetMapping("/trace/{id}") |
| | | @Operation(summary = "获得报工追溯信息", description = "报工 + 产出/产出明细 + 消耗/消耗明细 + IPQC检验") |
| | | @Parameter(name = "id", description = "报工编号", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('mes:pro-feedback:query')") |
| | | public CommonResult<MesProFeedbackTraceRespVO> getFeedbackTrace(@PathVariable("id") Long id) { |
| | | MesProFeedbackDO feedback = feedbackService.getFeedback(id); |
| | | if (feedback == null) { |
| | |
| | | |
| | | @GetMapping("/summary") |
| | | @Operation(summary = "作业成果汇总统计", description = "按时间范围汇总已批准报工数量/合格数量,按工单类型、日期分组") |
| | | @PreAuthorize("@ss.hasPermission('mes:pro-feedback:query')") |
| | | public CommonResult<MesProFeedbackSummaryRespVO> getFeedbackSummary( |
| | | @RequestParam(value = "beginDate", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate beginDate, |
| | | @RequestParam(value = "endDate", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate, |
| | |
| | | // 1.6 工序 |
| | | Map<Long, MesProProcessDO> processMap = processService.getProcessMap( |
| | | new ArrayList<>(convertSet(list, MesProFeedbackDO::getProcessId))); |
| | | // 1.7 工序的 checkFlag:批量查询后直接构建 routeId -> processId -> checkFlag 的双层 Map |
| | | // 1.7 工序的 checkFlag:工单工序快照优先,工艺路线兜底 |
| | | Set<Long> workOrderIds = convertSet(list, MesProFeedbackDO::getWorkOrderId); |
| | | Map<Long, Map<Long, Boolean>> workOrderProcessCheckFlagMap = new HashMap<>(); |
| | | if (CollUtil.isNotEmpty(workOrderIds)) { |
| | | List<MesProWorkOrderProcessDO> allWorkOrderProcesses = |
| | | workOrderProcessService.getWorkOrderProcessListByWorkOrderIds(workOrderIds); |
| | | for (MesProWorkOrderProcessDO wp : allWorkOrderProcesses) { |
| | | workOrderProcessCheckFlagMap |
| | | .computeIfAbsent(wp.getWorkOrderId(), k -> new HashMap<>()) |
| | | .put(wp.getProcessId(), Boolean.TRUE.equals(wp.getCheckFlag())); |
| | | } |
| | | } |
| | | List<MesProRouteProcessDO> allRouteProcesses = routeProcessService.getRouteProcessListByRouteIds(routeIds); |
| | | Map<Long, Map<Long, Boolean>> routeProcessCheckFlagMap = new HashMap<>(); |
| | | for (MesProRouteProcessDO rp : allRouteProcesses) { |
| | |
| | | // 工序 |
| | | findAndThen(processMap, vo.getProcessId(), process -> |
| | | vo.setProcessCode(process.getCode()).setProcessName(process.getName())); |
| | | // checkFlag |
| | | findAndThen(routeProcessCheckFlagMap, vo.getRouteId(), processCheckMap -> |
| | | findAndThen(processCheckMap, vo.getProcessId(), vo::setCheckFlag)); |
| | | // checkFlag:工单工序快照优先,工艺路线兜底 |
| | | Boolean checkFlag = null; |
| | | Map<Long, Boolean> workOrderCheckFlags = workOrderProcessCheckFlagMap.get(vo.getWorkOrderId()); |
| | | if (workOrderCheckFlags != null) { |
| | | checkFlag = workOrderCheckFlags.get(vo.getProcessId()); |
| | | } |
| | | if (checkFlag == null) { |
| | | Map<Long, Boolean> routeCheckFlags = routeProcessCheckFlagMap.get(vo.getRouteId()); |
| | | checkFlag = routeCheckFlags != null ? routeCheckFlags.get(vo.getProcessId()) : null; |
| | | } |
| | | if (checkFlag != null) { |
| | | vo.setCheckFlag(checkFlag); |
| | | } |
| | | // 工单 |
| | | findAndThen(workOrderMap, vo.getWorkOrderId(), wo -> |
| | | vo.setWorkOrderCode(wo.getCode()).setWorkOrderName(wo.getName())); |