| | |
| | | FilterRegistrationBean<AppIdAuthenticationFilter> registrationBean = new FilterRegistrationBean<>(); |
| | | |
| | | registrationBean.setFilter(appIdAuthenticationFilter); |
| | | registrationBean.addUrlPatterns("/api/*", "/erp/*", "/mes/*", "/agv/*"); // 拦截API请求、ERP请求、MES请求、管理AGV任务请求 |
| | | registrationBean.addUrlPatterns("/api/*", "/agv/*"); // 拦截API请求、ERP请求、MES请求、管理AGV任务请求 |
| | | // registrationBean.addUrlPatterns("/api/*", "/erp/*", "/mes/*", "/agv/*"); // 拦截API请求、ERP请求、MES请求、管理AGV任务请求 |
| | | registrationBean.setName("apiAuthenticationFilter"); |
| | | registrationBean.setOrder(1); // 设置过滤器优先级 |
| | | |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public R saveCheckDiff(SaveCheckDiffParams params, Long loginUserId) { |
| | | if (params.getCheckDiffItems() == null || params.getCheckDiffItems().isEmpty()) { |
| | | throw new CoolException("盘点明细不能为空"); |
| | | } |
| | | Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getContainer()).last("limit 1")); |
| | | if (null == task) { |
| | | throw new CoolException("数据错误,未找到容器码对应盘点任务"); |
| | | } |
| | | |
| | | CheckDiff checkDiff = checkDiffService.getById(params.getCheckId()); |
| | | if (null == checkDiff) { |
| | | return R.error("未找到盘点差异单"); |
| | | } |
| | | if (checkDiff.getExceStatus().equals(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val)) { |
| | | return R.error("该盘点单已完成"); |
| | | } |
| | | Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getContainer()).last("limit 1")); |
| | | if (null == task) { |
| | | throw new CoolException("数据错误,未找到容器码对应盘点任务"); |
| | | } |
| | | for (CheckDiffItem ckDiffItem : params.getCheckDiffItems()) { |
| | | CheckDiffItem diffItem = new CheckDiffItem(); |
| | |
| | | if (checkDiffItems.isEmpty()) { |
| | | throw new CoolException("此条码不在当前盘点单中"); |
| | | } |
| | | |
| | | return R.ok(Cools.add("checkDiffItems",checkDiffItems).add("checkDiff",checkDiff)); |
| | | return R.ok(Cools.add("checkDiffItems", checkDiffItems).add("checkDiff", checkDiff)); |
| | | } |
| | | } |
| | |
| | | |
| | | flowStepInstanceService.updateById(flowStepInstance); |
| | | taskService.updateById(task); |
| | | // 盘点再入库任务经 WCS 上报变为 100(库存更新完成)时,同步将盘点差异单置为已审核 |
| | | if (TaskType.TASK_TYPE_CHECK_IN.type.equals(task.getTaskType()) |
| | | && flowStepInstance.getWmsNextTaskStatus() != null |
| | | && flowStepInstance.getWmsNextTaskStatus().equals(TaskStsType.UPDATED_IN.id)) { |
| | | taskService.markCheckDiffApprovedWhenCheckInDone(task); |
| | | } |
| | | if (flowStepInstance.getWmsNextTaskStatus() != 9999) { |
| | | FlowStepInstance nextFlowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>() |
| | | .eq(FlowStepInstance::getStatus, (short)0) |
| | |
| | | |
| | | |
| | | @ResponseBody |
| | | @ExceptionHandler(RuntimeException.class) |
| | | public R runtimeExceptionHandler(RuntimeException e, HttpServletResponse response) { |
| | | CommonUtil.addCrossHeaders(response); |
| | | Throwable cause = e.getCause(); |
| | | if (cause instanceof CoolException) { |
| | | return R.error(cause.getMessage()); |
| | | } |
| | | logger.error(e.getMessage(), e); |
| | | return R.error(Constants.RESULT_ERROR_MSG); |
| | | } |
| | | |
| | | @ResponseBody |
| | | @ExceptionHandler(Throwable.class) |
| | | public R exceptionHandler(Throwable e, HttpServletResponse response) { |
| | | logger.error(e.getMessage(), e); |
| | |
| | | if (!diffItems.isEmpty()) { |
| | | Map<Integer, List<CheckDiffItem>> listMap = diffItems.stream().collect(Collectors.groupingBy(CheckDiffItem::getExceStatus)); |
| | | List<CheckDiffItem> checkDiffItems = listMap.get(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val); |
| | | if (diffItems.size() == checkDiffItems.size()) { |
| | | if (checkDiffItems != null && diffItems.size() == checkDiffItems.size()) { |
| | | if (!checkDiffService.update(new LambdaUpdateWrapper<CheckDiff>() |
| | | .eq(CheckDiff::getId, checkDiffItem.getCheckId()) |
| | | .set(CheckDiff::getExceStatus, CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val))) { |
| | | throw new CoolException("盘点单状态更新失败!!"); |
| | | } |
| | | |
| | | if (!checkOrderService.update(new LambdaUpdateWrapper<WkOrder>().eq(WkOrder::getId, checkDiffItem.getCheckId()) |
| | | .set(WkOrder::getExceStatus, CheckExceStatus.CHECK_ORDER_STATUS_EXCE_DONE.val))) { |
| | | throw new CoolException("盘点单执行状态修改失败!!"); |
| | | // 仅在有单时更新盘点单(WkOrder)执行状态;无单盘点无盘点单,不更新 |
| | | CheckDiff checkDiff = checkDiffService.getById(checkDiffItem.getCheckId()); |
| | | if (checkDiff != null && checkDiff.getOrderId() != null) { |
| | | if (!checkOrderService.update(new LambdaUpdateWrapper<WkOrder>() |
| | | .eq(WkOrder::getId, checkDiff.getOrderId()) |
| | | .set(WkOrder::getExceStatus, CheckExceStatus.CHECK_ORDER_STATUS_EXCE_DONE.val))) { |
| | | throw new CoolException("盘点单执行状态修改失败!!"); |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | if (!checkDiffService.update(new LambdaUpdateWrapper<CheckDiff>() |
| | | .eq(CheckDiff::getId, checkDiffItem.getCheckId()) |
| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.vincent.rsf.framework.common.Cools; |
| | | import com.vincent.rsf.framework.common.R; |
| | | import com.vincent.rsf.framework.exception.CoolException; |
| | | import com.vincent.rsf.server.common.constant.Constants; |
| | | import com.vincent.rsf.server.common.utils.ExcelUtil; |
| | | import com.vincent.rsf.server.common.annotation.OperationLog; |
| | |
| | | |
| | | try { |
| | | locItemService.generateTask(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val, map, getLoginUserId()); |
| | | } catch (CoolException e) { |
| | | throw e; |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | |
| | | // ); |
| | | |
| | | public BigDecimal getAbleQty(){ |
| | | BigDecimal anfmeDec = new BigDecimal(this.anfme.toString()); |
| | | BigDecimal workQtyDec = new BigDecimal(this.workQty.toString()); |
| | | BigDecimal qtyDec = new BigDecimal(this.qty.toString()); |
| | | BigDecimal anfmeDec = this.anfme != null ? new BigDecimal(this.anfme.toString()) : BigDecimal.ZERO; |
| | | BigDecimal workQtyDec = this.workQty != null ? new BigDecimal(this.workQty.toString()) : BigDecimal.ZERO; |
| | | BigDecimal qtyDec = this.qty != null ? new BigDecimal(this.qty.toString()) : BigDecimal.ZERO; |
| | | |
| | | return anfmeDec.subtract(workQtyDec).subtract(qtyDec); |
| | | } |
| | |
| | | CHECK_ORDER_TYPE_DIFF("4", "差异盘点"), |
| | | CHECK_ORDER_TYPE_CIRCLE("5", "循环盘点"), |
| | | CHECK_ORDER_TYPE_TIMER("6", "定期盘点"), |
| | | CHECK_ORDER_TYPE_NORM("7", "标准盘点"), |
| | | ; |
| | | |
| | | CheckOrderType(String type, String desc) { |
| | |
| | | return CheckOrderType.CHECK_ORDER_TYPE_CIRCLE.type; |
| | | } else if (desc.equals(CheckOrderType.CHECK_ORDER_TYPE_TIMER.desc)) { |
| | | return CheckOrderType.CHECK_ORDER_TYPE_TIMER.type; |
| | | } else if (desc.equals(CheckOrderType.CHECK_ORDER_TYPE_NORM.desc)) { |
| | | return CheckOrderType.CHECK_ORDER_TYPE_NORM.type; |
| | | } |
| | | return null; |
| | | } |
| | |
| | | // @Scheduled(cron = "0/3 * * * * ?") |
| | | public void completeInStock() throws Exception { |
| | | try{ |
| | | List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id).select(Task::getId)); |
| | | List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().select(Task::getId).eq(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id)); |
| | | if (tasks.isEmpty()) { |
| | | return; |
| | | } |
| | |
| | | |
| | | void complateInTask(List<Task> tasks) throws Exception; |
| | | |
| | | /** |
| | | * 盘点再入库完成后,将关联的盘点差异单置为已审核(有单按 orderId,无单按 出库任务号 orderCode) |
| | | */ |
| | | void markCheckDiffApprovedWhenCheckInDone(Task checkInTask); |
| | | |
| | | Task taskToTop(Long id, Long loginUserId) throws Exception; |
| | | |
| | | Task operateComplete(Long id, Long loginUserId); |
| | |
| | | package com.vincent.rsf.server.manager.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.vincent.rsf.framework.exception.CoolException; |
| | | import com.vincent.rsf.server.api.controller.erp.params.TaskInParam; |
| | | import com.vincent.rsf.server.api.entity.dto.InTaskMsgDto; |
| | |
| | | private BasStationService basStationService; |
| | | @Autowired |
| | | private LocItemWorkingService locItemWorkingService; |
| | | @Autowired |
| | | private CheckDiffService checkDiffService; |
| | | @Autowired |
| | | private CheckDiffItemService checkDiffItemService; |
| | | |
| | | |
| | | /** |
| | |
| | | if (!taskItemService.saveBatch(taskItems)) { |
| | | throw new CoolException("任务明细生成失败!!"); |
| | | } |
| | | |
| | | // 无单盘点:提取出库时即生成盘点差异单,便于 PDA 按差异单校验 |
| | | if (map.getType().equals(Constants.TASK_TYPE_OUT_CHECK)) { |
| | | Date now = new Date(); |
| | | double sumAnfme = taskItems.stream().mapToDouble(ti -> ti.getAnfme() != null ? ti.getAnfme() : 0).sum(); |
| | | CheckDiff checkDiff = new CheckDiff(); |
| | | checkDiff.setOrderCode(task.getTaskCode()) |
| | | .setOrderId(null) |
| | | .setCheckType(0) |
| | | .setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_INIT.val) |
| | | .setAnfme(sumAnfme) |
| | | .setCheckQty(0D) |
| | | .setStatus(1) |
| | | .setDeleted(0) |
| | | .setTenantId(task.getTenantId()) |
| | | .setCreateBy(loginUserId) |
| | | .setCreateTime(now) |
| | | .setUpdateBy(loginUserId) |
| | | .setUpdateTime(now); |
| | | if (loc.getAreaId() != null) { |
| | | checkDiff.setAreaId(loc.getAreaId()).setAreaName(loc.getAreaId$()); |
| | | } |
| | | if (!checkDiffService.save(checkDiff)) { |
| | | throw new CoolException("无单盘点差异单创建失败!!"); |
| | | } |
| | | List<CheckDiffItem> diffItems = new ArrayList<>(); |
| | | for (TaskItem ti : taskItems) { |
| | | CheckDiffItem diffItem = new CheckDiffItem(); |
| | | diffItem.setCheckId(checkDiff.getId()) |
| | | .setOrderCode(task.getTaskCode()) |
| | | .setTaskId(task.getId()) |
| | | .setTaskItemId(ti.getId()) |
| | | .setBarcode(task.getBarcode()) |
| | | .setAnfme(ti.getAnfme() != null ? ti.getAnfme() : 0D) |
| | | .setCheckQty(ti.getAnfme() != null ? ti.getAnfme() : 0D) |
| | | .setMatnrCode(ti.getMatnrCode()) |
| | | .setMaktx(ti.getMaktx()) |
| | | .setBatch(ti.getBatch()) |
| | | .setSpec(ti.getSpec()) |
| | | .setModel(ti.getModel()) |
| | | .setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_INIT.val) |
| | | .setStatus(1) |
| | | .setDeleted(0) |
| | | .setTenantId(task.getTenantId()) |
| | | .setCreateBy(loginUserId) |
| | | .setCreateTime(now) |
| | | .setUpdateBy(loginUserId) |
| | | .setUpdateTime(now); |
| | | diffItems.add(diffItem); |
| | | } |
| | | if (!checkDiffItemService.saveBatch(diffItems)) { |
| | | throw new CoolException("无单盘点差异明细创建失败!!"); |
| | | } |
| | | taskItemService.update(new LambdaUpdateWrapper<TaskItem>() |
| | | .set(TaskItem::getSourceCode, task.getTaskCode()) |
| | | .eq(TaskItem::getTaskId, task.getId())); |
| | | } |
| | | }); |
| | | } |
| | | |
| | |
| | | if (!taskService.updateById(task)) { |
| | | throw new CoolException("任务状态修改失败!!"); |
| | | } |
| | | // 盘点再入库任务结束:将关联的盘点差异单置为已审核 |
| | | if (TaskType.TASK_TYPE_CHECK_IN.type.equals(task.getTaskType())) { |
| | | markCheckDiffApprovedWhenCheckInDone(task); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 盘点再入库完成后,将关联的盘点差异单置为已审核(有单按 orderId,无单按 出库任务号 orderCode) |
| | | */ |
| | | @Override |
| | | public void markCheckDiffApprovedWhenCheckInDone(Task checkInTask) { |
| | | List<TaskItem> items = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, checkInTask.getId()).last("limit 1")); |
| | | Long orderId = items.isEmpty() ? null : items.get(0).getOrderId(); |
| | | CheckDiff checkDiff = null; |
| | | if (orderId != null && !orderId.equals(0L)) { |
| | | checkDiff = checkDiffService.getOne(new LambdaQueryWrapper<CheckDiff>().eq(CheckDiff::getOrderId, orderId).last("limit 1")); |
| | | } else { |
| | | Task outTask = taskService.getOne(new LambdaQueryWrapper<Task>() |
| | | .eq(Task::getBarcode, checkInTask.getBarcode()) |
| | | .eq(Task::getTaskType, TaskType.TASK_TYPE_CHECK_OUT.type) |
| | | .last("limit 1")); |
| | | if (outTask != null) { |
| | | checkDiff = checkDiffService.getOne(new LambdaQueryWrapper<CheckDiff>() |
| | | .eq(CheckDiff::getOrderCode, outTask.getTaskCode()) |
| | | .and(w -> w.isNull(CheckDiff::getOrderId).or().eq(CheckDiff::getOrderId, 0)) |
| | | .last("limit 1")); |
| | | } |
| | | } |
| | | if (checkDiff != null && !CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val.equals(checkDiff.getExceStatus())) { |
| | | checkDiffService.update(new LambdaUpdateWrapper<CheckDiff>() |
| | | .eq(CheckDiff::getId, checkDiff.getId()) |
| | | .set(CheckDiff::getExceStatus, CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val)); |
| | | } |
| | | } |
| | | |
| | | /** |