chen.lin
1 天以前 11514b301466eb7598073d0126c6d9781daaa3ba
盘点流程
12个文件已修改
158 ■■■■■ 已修改文件
rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/ApiSecurityConfig.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckOrderType.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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));
        }
    }
    /**