gongchunyi
3 天以前 f833aea25970ebc7171815fd0b44e45473082691
fix: 产品维护拉取数据时,未更新从平台拉取并且已删除的产品数据
已修改5个文件
67 ■■■■■ 文件已修改
doc/宁夏-中盛建材.sql 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/framework/util/AliDingUtils.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProductMaterialSku.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductMaterialSkuMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/ÄþÏÄ-ÖÐÊ¢½¨²Ä.sql
@@ -537,3 +537,6 @@
ALTER TABLE `product-inventory-management-zsjc`.`production_product_route_item_file`
    MODIFY COLUMN `file_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '文件存储地址' AFTER `file_name`,
    MODIFY COLUMN `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '文件访问地址' AFTER `file_url`;
ALTER TABLE `product-inventory-management-zsjc`.`product_material_sku`
    ADD COLUMN `type` int NULL COMMENT '数据来源(1-宜搭/2-钉钉)' AFTER `update_time`;
src/main/java/com/ruoyi/framework/util/AliDingUtils.java
@@ -46,11 +46,28 @@
     * @return å¯¹åº”表单的数据
     */
    public static <T> JSONArray getFormDataList(AliDingConfig aliDingConfig, String formUuid, String searchFieldJson, IService<T> service, SFunction<T, ?> timeField) {
        return getFormDataList(aliDingConfig, formUuid, searchFieldJson, service, timeField, new LambdaQueryWrapper<>());
    }
    /**
     * æ ¹æ®è¡¨å• ID èŽ·å–å®œæ­æ•°æ®ï¼Œå¸¦è‡ªå®šä¹‰è®°å½•æ•°æŸ¥è¯¢æ¡ä»¶ï¼Œç”¨äºŽåˆ¤æ–­æ˜¯å¦è¿›è¡Œå…¨é‡åŒæ­¥
     */
    public static <T> JSONArray getFormDataList(AliDingConfig aliDingConfig, String formUuid, String searchFieldJson, IService<T> service, SFunction<T, ?> timeField, LambdaQueryWrapper<T> countWrapper) {
        //  èŽ·å– accessToken
        String accessToken = getAccessToken(aliDingConfig);
        //  èŽ·å–æœ€åŽåŒæ­¥æ—¶é—´
        LocalDateTime lastSyncTime = getLastSyncTime(service, timeField);
        log.info("开始同步数据,本地最后修改时间: {}", lastSyncTime);
        //  å…ˆèŽ·å–å®œæ­æ€»æ•°ï¼ˆä¸å¸¦æ—¶é—´å‚æ•°ï¼‰ä¸Žæœ¬åœ°è®°å½•æ•°å¯¹æ¯”
        long remoteTotalCount = getRemoteTotalCount(aliDingConfig, formUuid, searchFieldJson, accessToken);
        long localCount = service.count(countWrapper);
        //  åˆ¤æ–­æ˜¯å¦éœ€è¦å…¨éƒ¨æ›´æ–°
        LocalDateTime lastSyncTime = null;
        if (remoteTotalCount == localCount) {
             lastSyncTime = getLastSyncTime(service, timeField);
             log.info("开始增量同步数据,本地最后修改时间: {}", lastSyncTime);
        } else {
             log.info("本地数据条数({})与远程数据总条数({})不一致,进行全量同步", localCount, remoteTotalCount);
        }
        JSONArray allData = new JSONArray();
        int pageNumber = 1;
@@ -116,6 +133,37 @@
    }
    /**
     * èŽ·å–è¿œç¨‹æŸ¥è¯¢çš„æ€»æ•°é‡ï¼ˆä¸å¸¦æ—¶é—´å‚æ•°é™åˆ¶ï¼‰
     */
    private static long getRemoteTotalCount(AliDingConfig aliDingConfig, String formUuid, String searchFieldJson, String accessToken) {
        JSONObject searchParam = new JSONObject();
        searchParam.put("appType", aliDingConfig.getAppType());
        searchParam.put("systemToken", aliDingConfig.getSystemToken());
        searchParam.put("userId", aliDingConfig.getUserId());
        searchParam.put("formUuid", formUuid);
        searchParam.put("currentPage", 1);
        searchParam.put("pageSize", 1);
        if (StringUtils.isNotEmpty(searchFieldJson)) {
            searchParam.put("searchFieldJson", searchFieldJson);
        }
        String dataRes = HttpUtils.sendPostJson(
                aliDingConfig.getSearchFormDataUrl(),
                searchParam.toJSONString(),
                StandardCharsets.UTF_8.name(),
                null,
                accessToken
        );
        if (StringUtils.isEmpty(dataRes)) {
            return 0;
        }
        JSONObject resultObj = JSON.parseObject(dataRes);
        return resultObj.getLongValue("totalCount");
    }
    /**
     * èŽ·å–é’‰é’‰ AccessToken
     */
    private static String getAccessToken(AliDingConfig aliDingConfig) {
src/main/java/com/ruoyi/production/pojo/ProductMaterialSku.java
@@ -63,4 +63,7 @@
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    @ApiModelProperty("数据来源(1-宜搭/2-钉钉)")
    private Long type;
}
src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java
@@ -106,7 +106,10 @@
            String searchFieldJson = searchConditions.toJSONString();
            JSONArray dataArr = AliDingUtils.getFormDataList(aliDingConfig, aliDingConfig.getMaterialCodeFormUuid(), searchFieldJson, productMaterialSkuService, ProductMaterialSku::getFormModifiedTime);
            LambdaQueryWrapper<ProductMaterialSku> countWrapper = new LambdaQueryWrapper<>();
            countWrapper.eq(ProductMaterialSku::getType, 1L);
            JSONArray dataArr = AliDingUtils.getFormDataList(aliDingConfig, aliDingConfig.getMaterialCodeFormUuid(), searchFieldJson, productMaterialSkuService, ProductMaterialSku::getFormModifiedTime, countWrapper);
            if (dataArr.isEmpty()) {
                log.info("没有更多新数据需要同步");
@@ -169,6 +172,7 @@
            sku.setFormModifiedTime(AliDingUtils.parseUtcTime(item.getString("modifiedTimeGMT")));
            sku.setCreateTime(now);
            sku.setUpdateTime(now);
            sku.setType(1L);
            list.add(sku);
        }
src/main/resources/mapper/production/ProductMaterialSkuMapper.xml
@@ -17,6 +17,7 @@
        <result property="formModifiedTime" column="form_modified_time"/>
        <result property="createTime" column="create_time"/>
        <result property="updateTime" column="update_time"/>
        <result property="type" column="type"/>
    </resultMap>
    <select id="selectSkuWithMaterialPage" resultType="com.ruoyi.production.dto.ProductMaterialSkuDto">