chen.lin
3 天以前 4c66319211f9f7e496dfc32718dbd7aefed4ca88
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java
@@ -8,10 +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.CheckOrderItemParams;
import com.vincent.rsf.server.manager.controller.params.CheckOrderParams;
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.*;
@@ -225,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("数据错误:盘点单明细不存在!!");
        }
@@ -239,7 +238,10 @@
     * @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()) {
            List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_CHECK_IN.type);
@@ -269,94 +271,107 @@
        if (checkParams.isEmpty()) {
            throw new CoolException("参数不能为空!!");
        }
        for (CheckOrderParams checkParam : checkParams) {
            if (checkParam.getItems().isEmpty()) {
        List<Map.Entry<CheckOrderParams, CheckOrderItemParams>> flatList = new ArrayList<>();
        for (CheckOrderParams cp : checkParams) {
            if (cp.getItems() == null || cp.getItems().isEmpty()) {
                continue;
            }
            Map<String, List<CheckOrderItemParams>> listMap = checkParam.getItems().stream()
                    .collect(Collectors.groupingBy(CheckOrderItemParams::getBarcode));
            listMap.keySet().forEach(key -> {
                Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, key));
                if (Objects.isNull(loc)) {
                    throw new CoolException("当前库位不存在!!");
                }
                Task task1 = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, key));
                if (!Objects.isNull(task1)) {
                    throw new CoolException("托盘任务已存在!!");
                }
                List<CheckOrderItemParams> itemParams = listMap.get(key);
                CheckOrderItemParams checkItem = itemParams.stream().findFirst().get();
                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.GENERATE_OUT.id)
            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())
                        .setCreateBy(loginUserId)
                        .setBarcode(key);
                        .setOrderItemId(cp.getId())
                        .setOrderId(cp.getOrderId())
                        .setPlatItemId(cp.getPlatItemId());
                items.add(taskItem);
                if (!taskService.save(task)) {
                    throw new CoolException("盘点任务生成失败!!");
                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("盘点明细修改失败!!");
                }
                List<TaskItem> items = new ArrayList<>();
                itemParams.forEach(item -> {
                    TaskItem taskItem = new TaskItem();
                    taskItem.setTaskId(task.getId())
                            .setOrderId(checkParam.getOrderId())
                            .setOrderType(OrderType.ORDER_CHECK.type)
                            .setAnfme(item.getAnfme())
                            .setWorkQty(0.0)
                            .setBatch(checkParam.getBatch())
                            .setMaktx(checkParam.getMaktx())
                            .setMatnrCode(checkParam.getMatnrCode())
                            .setPlatOrderCode(checkParam.getPlatOrderCode())
                            .setPlatWorkCode(checkParam.getPlatWorkCode())
                            .setSpec(checkParam.getSpec())
                            .setModel(checkParam.getModel())
                            .setFieldsIndex(checkParam.getFieldsIndex())
                            .setMatnrId(checkParam.getMatnrId())
                            .setCreateBy(loginUserId)
                            .setCreateTime(new Date())
                            .setUpdateBy(loginUserId)
                            .setUpdateTime(new Date())
                            .setOrderItemId(checkItem.getId())
                            .setOrderId(checkParam.getOrderId())
                            .setPlatItemId(checkParam.getPlatItemId());
                    items.add(taskItem);
            }
            if (!taskItemService.saveBatch(items)) {
                throw new CoolException("任务明细保存失败!!");
            }
                    if (!checkOrderItemService.update(new LambdaUpdateWrapper<WkOrderItem>()
                            .eq(WkOrderItem::getId, checkParam.getId())
                            .setSql("work_qty = work_qty + " + item.getAnfme())
                            .set(WkOrderItem::getWorkQty, checkItem.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("库位预约出库失败!!");
            }
        }
                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 -> {
        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));
                List<WkOrderItem> orderItems = checkOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
                        .eq(WkOrderItem::getOrderId, orderId)
                        .eq(WkOrderItem::getDeleted, 0));
                if (orderItems.isEmpty()) {
                    throw new CoolException("数据错误:单据明细不存在!!");
                }
@@ -372,7 +387,6 @@
                    throw new CoolException("盘点单信息修改失败!!");
                }
            });
        }
        return R.ok();
    }
@@ -423,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)) {