skyouc
2 天以前 8f7af0507c883e5df9f8a4b2eb703946788c3363
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java
@@ -9,16 +9,14 @@
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.entity.WkOrder;
import com.vincent.rsf.server.manager.entity.WkOrderItem;
import com.vincent.rsf.server.manager.entity.Matnr;
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.entity.*;
import com.vincent.rsf.server.manager.entity.excel.CheckOrderTemplate;
import com.vincent.rsf.server.manager.enums.*;
import com.vincent.rsf.server.manager.mapper.CheckOrderMapper;
import com.vincent.rsf.server.manager.service.AsnOrderItemService;
import com.vincent.rsf.server.manager.service.CheckOrderItemService;
import com.vincent.rsf.server.manager.service.CheckOrderService;
import com.vincent.rsf.server.manager.service.MatnrService;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import org.apache.commons.lang3.StringUtils;
@@ -40,6 +38,16 @@
    private CheckOrderItemService checkOrderItemService;
    @Autowired
    private AsnOrderItemService asnOrderItemService;
    @Autowired
    private DeviceSiteService deviceSiteService;
    @Autowired
    private LocItemService locItemService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private LocServiceImpl locService;
    @Autowired
    private TaskItemServiceImpl taskItemService;
    /**
     * @author Ryan
@@ -165,6 +173,162 @@
    }
    /**
     * @param
     * @return
     * @author Ryan
     * @description 修改主单及明细
     * @time 2025/4/29 13:47
     */
    @Override
    public R updateOrderItem(AsnOrderAndItemsParams params, Long loginUserId) {
        WkOrder orders = params.getOrders();
        if (Objects.isNull(orders)) {
            throw new CoolException("主单信息不能为空!!");
        }
        if (Objects.isNull(orders.getId())) {
            throw new CoolException("数据错误:单据ID不能为空!!");
        }
        if (!this.updateById(orders)) {
            throw new CoolException("主单修改失败!!");
        }
        if (Objects.isNull(params.getItems()) || params.getItems().isEmpty()) {
            throw new CoolException("明细参数不能为空!!");
        }
        try {
            svaeOrUpdateOrderItem(params, loginUserId);
        } catch (Exception e) {
            throw new CoolException(e.getMessage());
        }
        return R.ok();
    }
    /**
     * @author Ryan
     * @date 2025/7/16
     * @description: 获取盘点出入站口
     * @version 1.0
     */
    @Override
    public R getSiteNos() {
        List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_CHECK_IN.type);
        List<DeviceSite> sites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>().in(DeviceSite::getType, list).groupBy(DeviceSite::getSite));
        return R.ok().add(sites);
    }
    /**
     * @author Ryan
     * @date 2025/7/16
     * @description: 盘点出库预览
     * @version 1.0
     */
    @Override
    public R genCheckPreview(OrderOutTaskParam param) {
        List<WkOrderItem> orderItems = checkOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, param.getOrderId()));
        if (orderItems.isEmpty()) {
            throw new CoolException("数据错误:盘点单明细不存在!!");
        }
        return R.ok().add(orderItems);
    }
    /**
     * @author Ryan
     * @date 2025/7/16
     * @description: 根据物料码获取所有在库明细
     * @version 1.0
     */
    @Override
    public R getAllLocByMatnr(List<String> matnrs) {
        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);
            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("参数不能为空!!");
        }
        for (CheckOrderParams checkParam : checkParams) {
            if (checkParam.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("当前库位不存在!!");
                }
                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)
                        .setCreateTime(new Date())
                        .setCreateBy(loginUserId)
                        .setBarcode(key);
                if (!taskService.save(task)) {
                    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())
                            .setPlatItemId(checkParam.getPlatItemId());
                    items.add(taskItem);
                });
                if (!taskItemService.saveBatch(items)) {
                    throw new CoolException("任务明细保存失败!!");
                }
            });
        }
        return R.ok();
    }
    /**
     * @author Ryan
     * @date 2025/7/16
     * @description: 取消盘点单据
@@ -218,6 +382,4 @@
            throw new CoolException("计划收货数量修改失败!!");
        }
    }
}