chen.lin
3 天以前 4c66319211f9f7e496dfc32718dbd7aefed4ca88
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java
@@ -8,8 +8,7 @@
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.common.utils.ExcelUtil;
import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams;
import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam;
import com.vincent.rsf.server.manager.controller.params.*;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.entity.excel.CheckOrderTemplate;
import com.vincent.rsf.server.manager.enums.*;
@@ -40,6 +39,14 @@
    private DeviceSiteService deviceSiteService;
    @Autowired
    private LocItemService locItemService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private LocServiceImpl locService;
    @Autowired
    private TaskItemServiceImpl taskItemService;
    @Autowired
    private CheckOrderService checkOrderService;
    /**
     * @author Ryan
@@ -215,7 +222,9 @@
     */
    @Override
    public R genCheckPreview(OrderOutTaskParam param) {
        List<WkOrderItem> orderItems = checkOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, param.getOrderId()));
        List<WkOrderItem> orderItems = checkOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
                .eq(WkOrderItem::getOrderId, param.getOrderId())
                .eq(WkOrderItem::getDeleted, 0));
        if (orderItems.isEmpty()) {
            throw new CoolException("数据错误:盘点单明细不存在!!");
        }
@@ -229,14 +238,156 @@
     * @version 1.0
     */
    @Override
    public R getAllLocByMatnr(List<String> matnrs) {
    public R getAllLocByMatnr(CheckLocQueryParams matnrs) {
        if (Objects.isNull(matnrs.getMatnrCode()) && matnrs.getMatnrCode().isEmpty()) {
            throw new CoolException("参数不能为空!!");
        }
        List<LocItem> locItems = locItemService.listByMatnr(matnrs);
        if (locItems.isEmpty()) {
            return R.ok();
        if (!locItems.isEmpty()) {
            List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_CHECK_IN.type);
            DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
                    .in(DeviceSite::getType, list)
                    .groupBy(DeviceSite::getSite)
                    .last("limit 1"));
            if (Objects.isNull(deviceSite)) {
                throw new CoolException("库口不为空!!");
            }
            locItems.forEach(locItem -> {
                locItem.setSiteNo(deviceSite.getSite());
            });
        }
        return R.ok().add(locItems);
    }
    /**
     * @author Ryan
     * @date 2025/7/17
     * @description: 生成盘点任务
     * @version 1.0
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R genCheckOutTask(List<CheckOrderParams> checkParams, Long loginUserId) {
        if (checkParams.isEmpty()) {
            throw new CoolException("参数不能为空!!");
        }
        List<Map.Entry<CheckOrderParams, CheckOrderItemParams>> flatList = new ArrayList<>();
        for (CheckOrderParams cp : checkParams) {
            if (cp.getItems() == null || cp.getItems().isEmpty()) {
                continue;
            }
            for (CheckOrderItemParams ip : cp.getItems()) {
                flatList.add(new AbstractMap.SimpleEntry<>(cp, ip));
            }
        }
        Map<String, List<Map.Entry<CheckOrderParams, CheckOrderItemParams>>> byBarcode = flatList.stream()
                .collect(Collectors.groupingBy(e -> e.getValue().getBarcode()));
        for (String key : byBarcode.keySet()) {
            List<Map.Entry<CheckOrderParams, CheckOrderItemParams>> entries = byBarcode.get(key);
            Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getDeleted, 0).eq(Loc::getBarcode, key));
            if (Objects.isNull(loc)) {
                throw new CoolException("当前库位不存在!!");
            }
            Task task1 = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getDeleted, 0).eq(Task::getBarcode, key));
            if (!Objects.isNull(task1)) {
                throw new CoolException("托盘任务已存在!!");
            }
            CheckOrderItemParams checkItem = entries.get(0).getValue();
            Task task = new Task();
            String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null);
            if (StringUtils.isBlank(ruleCode)) {
                throw new CoolException("任务号不能为空!!");
            }
            task.setOrgLoc(loc.getCode())
                    .setTaskCode(ruleCode)
                    .setTargSite(checkItem.getSiteNo())
                    .setResource(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val)
                    .setTaskType(TaskType.TASK_TYPE_CHECK_OUT.type)
                    .setTaskStatus(TaskStsType.MISSION_INITIAL.id)
                    .setCreateTime(new Date())
                    .setUpdateBy(loginUserId)
                    .setUpdateTime(new Date())
                    .setCreateBy(loginUserId)
                    .setBarcode(key);
            if (!taskService.save(task)) {
                throw new CoolException("盘点任务生成失败!!");
            }
            List<TaskItem> items = new ArrayList<>();
            for (Map.Entry<CheckOrderParams, CheckOrderItemParams> e : entries) {
                CheckOrderParams cp = e.getKey();
                CheckOrderItemParams item = e.getValue();
                TaskItem taskItem = new TaskItem();
                taskItem.setTaskId(task.getId())
                        .setOrderType(OrderType.ORDER_CHECK.type)
                        .setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type))
                        .setAnfme(item.getAnfme())
                        .setWorkQty(0.0)
                        .setBatch(cp.getBatch())
                        .setMaktx(cp.getMaktx())
                        .setMatnrCode(cp.getMatnrCode())
                        .setPlatOrderCode(cp.getPlatOrderCode())
                        .setPlatWorkCode(cp.getPlatWorkCode())
                        .setUnit(cp.getStockUnit())
                        .setSpec(cp.getSpec())
                        .setModel(cp.getModel())
                        .setFieldsIndex(cp.getFieldsIndex())
                        .setMatnrId(cp.getMatnrId())
                        .setCreateBy(loginUserId)
                        .setSource(cp.getId())
                        .setSourceId(cp.getOrderId())
                        .setSourceCode(cp.getOrderCode())
                        .setCreateTime(new Date())
                        .setUpdateBy(loginUserId)
                        .setUpdateTime(new Date())
                        .setOrderItemId(cp.getId())
                        .setOrderId(cp.getOrderId())
                        .setPlatItemId(cp.getPlatItemId());
                items.add(taskItem);
                if (!checkOrderItemService.update(new LambdaUpdateWrapper<WkOrderItem>()
                        .eq(WkOrderItem::getId, cp.getId())
                        .setSql("work_qty = work_qty + " + item.getAnfme())
                        .set(WkOrderItem::getWorkQty, item.getAnfme()))) {
                    throw new CoolException("盘点明细修改失败!!");
                }
            }
            if (!taskItemService.saveBatch(items)) {
                throw new CoolException("任务明细保存失败!!");
            }
            loc.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
            if (!locService.updateById(loc)) {
                throw new CoolException("库位预约出库失败!!");
            }
        }
        Set<Long> checkItemIds = checkParams.stream().map(CheckOrderParams::getOrderId).collect(Collectors.toSet());
        checkItemIds.forEach(orderId -> {
                WkOrder order = this.getById(orderId);
                if (Objects.isNull(order)) {
                    throw new CoolException("数据错误:单据不存在!!");
                }
                List<WkOrderItem> orderItems = checkOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
                        .eq(WkOrderItem::getOrderId, orderId)
                        .eq(WkOrderItem::getDeleted, 0));
                if (orderItems.isEmpty()) {
                    throw new CoolException("数据错误:单据明细不存在!!");
                }
                Double sum = orderItems.stream().mapToDouble(WkOrderItem::getWorkQty).sum();
        return null;
                if (order.getAnfme().compareTo(sum) <= 0) {
                    order.setWorkQty(sum).setExceStatus(CheckExceStatus.CHECK_ORDER_STATUS_EXCE_DONE.val);
                } else {
                    order.setWorkQty(sum).setExceStatus(CheckExceStatus.CHECK_ORDER_STATUS_EXCE_ING.val);
                }
                if (!this.updateById(order)) {
                    throw new CoolException("盘点单信息修改失败!!");
                }
            });
        return R.ok();
    }
    /**
@@ -286,7 +437,8 @@
            }
        });
        List<WkOrderItem> orderItems = checkOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
                .eq(WkOrderItem::getOrderId, params.getOrders().getId()));
                .eq(WkOrderItem::getOrderId, params.getOrders().getId())
                .eq(WkOrderItem::getDeleted, 0));
        Double sum = orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum();
        orders.setAnfme(sum);
        if (!this.updateById(orders)) {