rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/ApiSecurityConfig.java
@@ -27,7 +27,8 @@ 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); // 设置过滤器优先级 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
@@ -92,16 +92,20 @@ @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(); @@ -244,7 +248,6 @@ if (checkDiffItems.isEmpty()) { throw new CoolException("此条码不在当前盘点单中"); } return R.ok(Cools.add("checkDiffItems",checkDiffItems).add("checkDiff",checkDiff)); } } rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -1080,6 +1080,12 @@ 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) rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java
@@ -81,6 +81,18 @@ @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); rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java
@@ -93,18 +93,21 @@ 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()) // 仅在有单时更新盘点单(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()) rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java
@@ -5,6 +5,7 @@ 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; @@ -137,6 +138,8 @@ try { locItemService.generateTask(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val, map, getLoginUserId()); } catch (CoolException e) { throw e; } catch (Exception e) { throw new RuntimeException(e); } rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java
@@ -335,9 +335,9 @@ // ); 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); } rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckOrderType.java
@@ -14,6 +14,7 @@ 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) { @@ -37,6 +38,8 @@ 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; } rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -484,7 +484,7 @@ // @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; } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java
@@ -25,6 +25,11 @@ 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); rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
@@ -1,6 +1,7 @@ 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; @@ -53,6 +54,10 @@ private BasStationService basStationService; @Autowired private LocItemWorkingService locItemWorkingService; @Autowired private CheckDiffService checkDiffService; @Autowired private CheckDiffItemService checkDiffItemService; /** @@ -367,6 +372,63 @@ 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())); } }); } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -1132,7 +1132,39 @@ 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)); } } /**