skyouc
1 天以前 c96d7cac4e3ed8d8ab3d2ef4fbee8be372f1a3b0
no message
4个文件已修改
205 ■■■■■ 已修改文件
rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | 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/manager/schedules/CheckOrderSchedules.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/check/checkDiff/CheckDiffList.jsx
@@ -107,7 +107,7 @@
                    marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
                }}
                title={"menu.checkDiff"}
                empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
                empty={false}
                filters={filters}
                sort={{ field: "create_time", order: "desc" }}
                actions={(
@@ -124,8 +124,8 @@
                    preferenceKey='checkDiff'
                    bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
                    rowClick={(id, resource, record) => false}
                    expand={() => <CheckDiffPanel />}
                    expandSingle={true}
                    expand={false}
                    expandSingle={false}
                    omit={['id', 'createTime', 'createBy', 'memo']}
                >
                    <NumberField source="id" />
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
@@ -161,17 +161,24 @@
                if (null == diffItem) {
                    return R.error("数据错误,未找到差异单明细");
                }
                diffItem.setCheckQty(ckDiffItem.getCheckQty()).setReason(ckDiffItem.getReason()).setMemo(ckDiffItem.getMemo());
            }
            diffItem.setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_HOLD.val);
            if (!checkDiffItemService.updateById(diffItem)) {
                throw new CoolException("更新差异单明细失败");
            }
            Double checkQty = Math.round((checkDiff.getCheckQty() + diffItem.getCheckQty()) * 10000) / 10000.0;
            checkDiff.setCheckQty(checkQty);
//            Double checkQty = Math.round((checkDiff.getCheckQty() + diffItem.getCheckQty()) * 10000) / 10000.0;
//            checkDiff.setCheckQty(checkQty);
        }
        checkDiff.setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_HOLD.val);
        List<CheckDiffItem> diffItems = checkDiffItemService.list(new LambdaQueryWrapper<CheckDiffItem>()
                .eq(CheckDiffItem::getCheckId, checkDiff.getId()));
        if (diffItems.isEmpty()) {
            throw new CoolException("盘点差异单明细不存在!!");
        }
        Double sum = diffItems.stream().mapToDouble(CheckDiffItem::getCheckQty).sum();
        checkDiff.setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_HOLD.val).setCheckQty(sum);
        if (!checkDiffService.updateById(checkDiff)) {
            throw new CoolException("更新差异单失败");
        }
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/CheckOrderSchedules.java
@@ -52,6 +52,7 @@
    public void genReCheck() {
        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
                .select(Task::getId)
                        .eq(Task::getTaskStatus, TaskStsType.GENERATE_OUT.id)
                .eq(Task::getTaskType, TaskType.TASK_TYPE_CHECK_OUT.type));
        if (tasks.isEmpty()) {
            return;
@@ -59,15 +60,12 @@
        List<CheckDiffItem> list = checkDiffItemService
                .list(new LambdaQueryWrapper<CheckDiffItem>()
                        .select(CheckDiffItem::getTaskItemId));
        if (list.isEmpty()) {
            return;
        }
        Set<Long> taskIds = tasks.stream().map(Task::getId).collect(Collectors.toSet());
        List<Long> itemIds = list.stream().map(CheckDiffItem::getTaskItemId).collect(Collectors.toList());
        List<TaskItem> taskItems = taskItemService
                .list(new LambdaQueryWrapper<TaskItem>()
                        .in(TaskItem::getTaskId, taskIds)
                        .notIn(TaskItem::getId, itemIds));
                        .notIn(!itemIds.isEmpty(), TaskItem::getId, itemIds));
        if (taskItems.isEmpty()) {
            return;
        }
@@ -90,22 +88,21 @@
                        .setUpdateBy(loginUserId)
                        .setUpdateTime(new Date())
                        .setOrderId(order.getId());
                if (!checkDiffService.save(checkDiff)) {
                if (!checkDiffService.saveOrUpdate(checkDiff)) {
                    throw new CoolException("盘点差异单保存失败!!");
                }
            }
            List<TaskItem> items = taskMps.get(orderId);
            List<CheckDiffItem> diffItems = new ArrayList<>();
            CheckDiff finalCheckDiff = checkDiff;
            items.forEach(item -> {
            for (TaskItem item : items) {
                Task task = taskService.getById(item.getTaskId());
                if (Objects.isNull(task)) {
                    throw new CoolException("数据错误:任务不存在!!");
                }
                CheckDiffItem checkDiffItem = new CheckDiffItem();
                BeanUtils.copyProperties(item, checkDiffItem);
                checkDiffItem.setCheckId(finalCheckDiff.getId())
                checkDiffItem.setCheckId(checkDiff.getId())
                        .setTaskItemId(item.getId())
                        .setTaskId(item.getTaskId())
                        .setCreateBy(loginUserId)
@@ -113,23 +110,25 @@
                        .setBarcode(task.getBarcode())
                        .setUpdateBy(loginUserId)
                        .setUpdateTime(new Date())
                        .setOrderCode(finalCheckDiff.getOrderCode());
                        .setOrderCode(checkDiff.getOrderCode());
                diffItems.add(checkDiffItem);
                if (Objects.isNull(finalCheckDiff.getAreaId())) {
                    Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>()
                            .eq(Loc::getCode, task.getOrgLoc())
                            .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_R.type));
                    if (Objects.isNull(loc)) {
                        throw new CoolException("盘点库位不存在!!");
//                if (Objects.isNull(checkDiff.getAreaId())) {
//                    Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>()
//                            .eq(Loc::getCode, task.getOrgLoc())
//                            .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_R.type));
//                    if (Objects.isNull(loc)) {
//                        throw new CoolException("盘点库位不存在!!");
//                    }
////                    finalCheckDiff.setAreaId(loc.getAreaId()).setAreaName(loc.getAreaId$());
//                }
                    }
                    finalCheckDiff.setAreaId(loc.getAreaId()).setAreaName(loc.getAreaId$());
                    if (!checkDiffService.updateById(finalCheckDiff)) {
                        throw new CoolException("库区信息修改失败!!");
                    }
                }
            });
//            checkDiff.setAreaId(finalCheckDiff.getAreaId()).setAreaName(finalCheckDiff.getAreaName());
//
//            if (!checkDiffService.updateById(checkDiff)) {
//                throw new CoolException("库区信息修改失败!!");
//            }
            if (!checkDiffItemService.saveBatch(diffItems)) {
                throw new CoolException("盘点差异单保存失败!!");
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -33,6 +33,7 @@
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service("taskService")
public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements TaskService {
@@ -683,13 +684,13 @@
        if (taskItems.isEmpty()) {
            throw new CoolException("任务明细不存在!!");
        }
        List<LocItem> items = new ArrayList<>();
        for (TaskItem taskItem : taskItems) {
            LocItem locItem = new LocItem();
            LocItemWorking locWorking = locItemWorkingService.getOne(new LambdaQueryWrapper<LocItemWorking>()
                    .eq(LocItemWorking::getTaskId, taskItem.getTaskId())
                    .eq(StringUtils.isNotBlank(taskItem.getBatch()), LocItemWorking::getBatch, taskItem.getBatch())
//                    .eq(StringUtils.isNotBlank(taskItem.getFieldsIndex()), LocItemWorking::getFieldsIndex, taskItem.getFieldsIndex())
                    .eq(LocItemWorking::getMatnrId, taskItem.getMatnrId()));
            if (Objects.isNull(locWorking)) {
                throw new CoolException("数据错误,作业中库存数据丢失!!");
@@ -787,17 +788,9 @@
                            throw new CoolException("盘点单执行数量修改失败!!");
                        }
                        List<CheckDiffItem> diffItems = checkDiffItemService
                                .list(new LambdaQueryWrapper<CheckDiffItem>()
                                .eq(CheckDiffItem::getTaskItemId, taskItem.getTaskId()));
                        if (!diffItems.isEmpty()) {
                            CheckDiffItem item = diffItems.stream().findFirst().get();
                            List<CheckDiffItem> items = checkDiffItemService.list(new LambdaQueryWrapper<CheckDiffItem>()
                                    .eq(CheckDiffItem::getId, item.getCheckId()));
                            if (items.isEmpty()) {
                                checkDiffService.removeById(item.getCheckId());
                            }
                        }
                        checkDiffItemService.remove(new LambdaQueryWrapper<CheckDiffItem>().eq(CheckDiffItem::getTaskItemId, taskItem.getId()));
                        checkDiffService.removeById(taskItem.getSourceId());
                    });
                }
@@ -991,46 +984,78 @@
        if (!this.updateById(task)) {
            throw new CoolException("任务状态更新失败!!");
        }
        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
        for (int i = 0; i < taskItems.size(); i++) {
            TaskItem taskItem = taskItems.get(i);
            LocItemWorking locWorking = locItemWorkingService.getOne(new LambdaQueryWrapper<LocItemWorking>()
                    .eq(LocItemWorking::getTaskId, taskItem.getTaskId())
                    .eq(StringUtils.isNotBlank(taskItem.getBatch()), LocItemWorking::getBatch, taskItem.getBatch())
//                    .eq(StringUtils.isNotBlank(taskItem.getFieldsIndex()), LocItemWorking::getFieldsIndex, taskItem.getFieldsIndex())
                    .eq(LocItemWorking::getMatnrId, taskItem.getMatnrId()));
            if (Objects.isNull(locWorking)) {
        //获取因当前任务出库的所有物料信息
        List<LocItemWorking> tempLocs = locItemWorkingService.list(new LambdaQueryWrapper<LocItemWorking>().eq(LocItemWorking::getTaskId, task.getId()));
        if (tempLocs.isEmpty()) {
                throw new CoolException("数据错误,作业中库存数据丢失!!");
            }
            if (task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)) {
                locWorking.setWorkQty(0.0);
                locWorking.setAnfme(taskItem.getAnfme());
            } else {
                if (locWorking.getAnfme().compareTo(taskItem.getAnfme()) >= 0) {
                    locWorking.setWorkQty(0.0);
                    locWorking.setAnfme(Math.round((locWorking.getAnfme() - taskItem.getAnfme()) * 10000) / 10000.0);
                } else {
                    continue;
                }
            }
            if (!locItemWorkingService.updateById(locWorking)) {
                throw new CoolException("临时库存更新失败!!");
            }
            taskItems.get(i).setAnfme(locWorking.getAnfme());
        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
        if (taskItems.isEmpty()) {
            throw new CoolException("数据错误:任务明细为空!!");
        }
        if (!taskItemService.updateBatchById(taskItems)) {
            throw new CoolException("任务明细更新失败!!");
        tempLocs.forEach(working -> {
            taskItems.forEach(taskItem -> {
                if (taskItem.getMatnrId().equals(working.getMatnrId())) {
                    Double minQty = Math.round((working.getAnfme() - taskItem.getAnfme()) * 10000) / 10000.0;
                    if (minQty.compareTo(0.0) > 0) {
                        taskItem.setAnfme(minQty);
                        if (!taskItemService.updateById(taskItem)) {
                            throw new CoolException("任务明细修改失败!!");
        }
        Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getTargLoc()));
        if (Objects.isNull(one)) {
                    } else {
                        if (!taskItemService.removeById(taskItem)) {
                            throw new CoolException("任务明细修改失败!!");
                        }
                    }
                }
            });
        });
        List<Long> matnrIds = taskItems.stream().map(TaskItem::getMatnrId).collect(Collectors.toList());
        //删除与任务明细重复的库存信息,以任务明细为准
        List<LocItemWorking> itemWorkings = tempLocs.stream()
                .filter(working -> !matnrIds.contains(working.getMatnrId()))
                .collect(Collectors.toList());
        itemWorkings.forEach(working -> {
            TaskItem taskItem = taskItems.stream().findFirst().get();
            taskItem.setMatnrId(working.getMatnrId())
                    .setMaktx(working.getMaktx())
                    .setSpec(working.getSpec())
                    .setAnfme(working.getAnfme())
                    .setBatch(working.getBatch())
                    .setFieldsIndex(working.getFieldsIndex())
                    .setUnit(working.getUnit())
                    .setId(null)
                    .setModel(working.getModel());
            if (!taskItemService.saveOrUpdate(taskItem)) {
                throw new CoolException("临时库存转任务明细失败!!");
            }
        });
        locItemWorkingService.remove(new LambdaQueryWrapper<LocItemWorking>().eq(LocItemWorking::getTaskId, task.getId()));
        Loc loc1 = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc()));
        if (Objects.isNull(loc1)) {
            throw new CoolException("目标库位不存在!!");
        }
        one.setUseStatus(LocStsType.LOC_STS_TYPE_S.type);
        if (!locService.updateById(one)) {
        List<LocItemWorking> workings = new ArrayList<>();
        List<TaskItem> items = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
        items.forEach(taskItem -> {
            LocItemWorking itemWorking = new LocItemWorking();
            BeanUtils.copyProperties(taskItem, itemWorking);
            itemWorking.setTaskId(task.getId()).setLocId(loc1.getId()).setLocCode(loc1.getCode());
            workings.add(itemWorking);
        });
        if (!locItemWorkingService.saveBatch(workings)) {
            throw new CoolException("临时库存更新失败!!");
        }
        loc1.setUseStatus(LocStsType.LOC_STS_TYPE_S.type);
        if (!locService.updateById(loc1)) {
            throw new CoolException("库位预约入库失败!!");
        }
        return task;
@@ -1106,17 +1131,23 @@
                            throw new CoolException("波次明细不存在!!");
                        }
                        try {
                            saveOutStockItem(maps.get(key), null, waveItem, loginUserId);
                        saveOutStockItem(maps.get(key), null, waveItem, null, loginUserId);
                        } catch (Exception e) {
                            throw new CoolException(e.getMessage());
                        }
                    } else if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_ORDER_TYPE.val) || task.getResource().equals(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val)) {
                        WkOrderItem orderItem = asnOrderItemService.getById(key);
                    WkOrderItem orderItem = new WkOrderItem();
                    if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val)) {
                        CheckDiffItem diffItem = checkDiffItemService.getById(key);
                    } else {
                        orderItem = asnOrderItemService.getById(key);
                    }
                        if (Objects.isNull(orderItem)) {
                            throw new CoolException("单据明细不存在!!");
                        }
                        try {
                            saveOutStockItem(maps.get(key), orderItem, null, loginUserId);
                        saveOutStockItem(maps.get(key), orderItem, null, null, loginUserId);
                        } catch (Exception e) {
                            throw new CoolException(e.getMessage());
                        }
@@ -1126,7 +1157,7 @@
                });
        } else {
            try {
                saveOutStockItem(taskItems, null, null, loginUserId);
                saveOutStockItem(taskItems, null, null, null, loginUserId);
            } catch (Exception e) {
                throw new CoolException(e.getMessage());
            }
@@ -1173,7 +1204,22 @@
     * @version 1.0
     */
    @Transactional(rollbackFor = Exception.class)
    public void saveOutStockItem(List<TaskItem> taskItems, WkOrderItem orderItem, WaveItem waveItem, Long loginUserId) throws Exception {
    public void saveOutStockItem(List<TaskItem> taskItems, CheckDiffItem diffItem, Long loginUserId) {
        try {
            saveOutStockItem(taskItems, null, null, diffItem, loginUserId);
        } catch (Exception e) {
            throw new CoolException(e);
        }
    }
    /**
     * @author Ryan
     * @date 2025/5/20
     * @description: 出库信息保存至库存明细表
     * @version 1.0
     */
    @Transactional(rollbackFor = Exception.class)
    public void saveOutStockItem(List<TaskItem> taskItems, WkOrderItem orderItem, WaveItem waveItem, CheckDiffItem diffItem, Long loginUserId) throws Exception {
        Stock stock = new Stock();
        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_CODE, null);
        if (StringUtils.isBlank(ruleCode)) {
@@ -1192,6 +1238,9 @@
            WkOrder wkOrder = asnOrderService.getById(orderItem.getOrderId());
            stock.setWkType(Short.parseShort(wkOrder.getWkType()))
                    .setType(OrderType.ORDER_OUT.type);
        } else if (!Objects.isNull(diffItem)) {
            stock.setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type))
                    .setType(OrderType.ORDER_CHECK.type);
        } else {
            //TODO 生成波次时需要将波次号写入单据,通过物料,批次,动态字段等唯一值反查单据信息
            stock.setSourceId(waveItem.getId()).setType(OrderType.ORDER_OUT.type);