fix: 调整定时任务时间、移除反射获取同步日期、物料类型同步数据存在类型不对应问题、新增更新修改为批次保存
已修改4个文件
55 ■■■■ 文件已修改
src/main/java/com/ruoyi/framework/util/AliDingUtils.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/task/ProductMaterialTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/productionPlan/task/ProductionPlanTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/framework/util/AliDingUtils.java
@@ -152,22 +152,15 @@
        LambdaQueryWrapper<T> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.orderByDesc(timeField).last("LIMIT 1");
        T lastRecord = service.getOne(queryWrapper);
        if (lastRecord == null) {
            return null;
        }
        try {
            Method writeReplace = timeField.getClass().getDeclaredMethod("writeReplace");
            writeReplace.setAccessible(true);
            SerializedLambda lambda = (SerializedLambda) writeReplace.invoke(timeField);
            // 获取方法名
            String methodName = lambda.getImplMethodName();
            // 转字段名
            String fieldName = methodName.substring(3, 4).toLowerCase() + methodName.substring(4);
            Field field = lastRecord.getClass().getDeclaredField(fieldName);
            field.setAccessible(true);
            return (LocalDateTime) field.get(lastRecord);
        } catch (Exception e) {
            throw new RuntimeException("获取最后同步时间失败", e);
        Object value = timeField.apply(lastRecord);
        if (value instanceof LocalDateTime) {
            return (LocalDateTime) value;
        }
        return null;
    }
}
src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java
@@ -82,8 +82,6 @@
        }
        try {
            JSONArray searchConditions = new JSONArray();
            JSONObject statusCondition = new JSONObject();
            statusCondition.put("key", "processInstanceStatus");
@@ -148,6 +146,9 @@
            material.setRemark(formData.getString("textareaField_l92f36f9"));
            String materialType = formData.getString("selectField_l92f36fb");
            if ("板材".equals(materialType) || "砌块".equals(materialType) || "标砖".equals(materialType)) {
                materialType = "成品";
            }
            String inventoryCat = formData.getString("selectField_la154noy");
            material.setMaterialTypeId(getOrCreateConfigId(materialType, MaterialConfigTypeEnum.MATERIAL_TYPE.name()));
            material.setInventoryCategoryId(getOrCreateConfigId(inventoryCat, MaterialConfigTypeEnum.INVENTORY_CAT.name()));
@@ -224,10 +225,11 @@
        if (list == null || list.isEmpty()) {
            return 0;
        }
        int affected = 0;
        List<ProductMaterialSku> toSave = new ArrayList<>();
        List<ProductMaterialSku> toUpdate = new ArrayList<>();
        for (ProductMaterialSku sku : list) {
            LambdaQueryWrapper<ProductMaterialSku> wrapper = new LambdaQueryWrapper<>();
            wrapper.eq(ProductMaterialSku::getProductId, sku.getProductId())
                    .eq(ProductMaterialSku::getModel, sku.getModel());
@@ -240,20 +242,28 @@
            ProductMaterialSku exist = productMaterialSkuService.getOne(wrapper);
            if (exist == null) {
                productMaterialSkuService.save(sku);
                affected++;
                log.info("新增物料规格 {}", sku.getModel());
                toSave.add(sku);
            } else {
                if (exist.getFormModifiedTime() == null || !exist.getFormModifiedTime().equals(sku.getFormModifiedTime())) {
                    sku.setId(exist.getId());
                    sku.setCreateTime(exist.getCreateTime());
                    productMaterialSkuService.updateById(sku);
                    affected++;
                    log.info("更新物料规格 {}", sku.getModel());
                    toUpdate.add(sku);
                }
            }
        }
        int affected = 0;
        if (!toSave.isEmpty()) {
            productMaterialSkuService.saveBatch(toSave);
            affected += toSave.size();
            log.info("批量新增物料规格 {} 条", toSave.size());
        }
        if (!toUpdate.isEmpty()) {
            productMaterialSkuService.updateBatchById(toUpdate);
            affected += toUpdate.size();
            log.info("批量更新物料规格 {} 条", toUpdate.size());
        }
        return affected;
    }
src/main/java/com/ruoyi/production/task/ProductMaterialTask.java
@@ -20,7 +20,7 @@
    @Autowired
    private ProductMaterialService productMaterialService;
    @Scheduled(cron = "0 0 * * * ?")
    @Scheduled(cron = "0 0 0 * * ?")
    public void syncProdDataJob() {
        productMaterialService.syncProductMaterialJob();
    }
src/main/java/com/ruoyi/productionPlan/task/ProductionPlanTask.java
@@ -23,7 +23,7 @@
    @Autowired
    private ProductionPlanService productionPlanService;
    @Scheduled(cron = "0 0 * * * ?")
    @Scheduled(cron = "0 0 0 * * ?")
    public void syncProdDataJob() {
        productionPlanService.syncProdDataJob();
    }