package com.ruoyi.productionPlan.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.http.HttpUtils; import com.ruoyi.framework.config.AliDingConfig; import com.ruoyi.productionPlan.pojo.ProductionPlan; import com.ruoyi.productionPlan.service.ProductionPlanService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.nio.charset.StandardCharsets; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.ArrayList; import java.util.List; /** *
* 拉取钉钉数据并导入 *
* * @author deslrey * @version 1.0 * @since 2026/03/09 17:31 */ @Slf4j @Service public class ProdDemandService { @Autowired private ProductionPlanService productionPlanService; @Autowired private AliDingConfig aliDingConfig; @Transactional(rollbackFor = Exception.class) public void LoadProdDemandData(Integer currentPage, Integer pageSize) { System.out.println("aliDingConfig = " + aliDingConfig); String params = "appkey=" + "dingjnydbagc9ol7cwq4" + "&appsecret=" + "fO07qSZC5SMLw9It3Ydd3BuoFyVbRlsWXUnVr2kwPJXz0OpUntCAO5dqnr8G7zq5"; String tokenRes = HttpUtils.sendGet(aliDingConfig.getAccessTokenUrl(), params); JSONObject tokenObj = JSON.parseObject(tokenRes); String accessToken = tokenObj.getString("access_token"); if (StringUtils.isEmpty(accessToken)) { log.error("获取钉钉 AccessToken 失败,返回结果:{}", tokenRes); return; } log.info("成功获取钉钉 AccessToken: {}", accessToken); JSONObject searchParam = new JSONObject(); searchParam.put("appType", aliDingConfig.getAppType()); searchParam.put("systemToken", aliDingConfig.getSystemToken()); searchParam.put("userId", aliDingConfig.getUserId()); searchParam.put("formUuid", aliDingConfig.getFormUuid()); if (currentPage == null || currentPage <= 0) { currentPage = 1; } searchParam.put("currentPage", currentPage); if (pageSize == null || pageSize <= 0) { pageSize = 1; } searchParam.put("pageSize", pageSize); String dataRes = HttpUtils.sendPostJson( aliDingConfig.getSearchFormDataUrl(), searchParam.toJSONString(), StandardCharsets.UTF_8.name(), null, accessToken ); if (StringUtils.isEmpty(dataRes)) { log.error("拉取宜搭表单数据为空!"); return; } JSONObject resultObj = JSON.parseObject(dataRes); JSONArray dataArr = resultObj.getJSONArray("data"); if (dataArr == null || dataArr.isEmpty()) { log.warn("没有获取到表单数据"); return; } List list = new ArrayList<>(); for (int i = 0; i < dataArr.size(); i++) { JSONObject item = dataArr.getJSONObject(i); String formInstanceId = item.getString("formInstanceId"); String serialNo = item.getString("serialNo"); String title = item.getString("title"); JSONObject originator = item.getJSONObject("originator"); String originatorUserId = originator.getString("userId"); String originatorName = originator.getJSONObject("userName").getString("nameInChinese"); JSONObject formData = item.getJSONObject("formData"); String projectName = formData.getString("textField_lbkozohg"); String batchNo = formData.getString("textField_l7fytfco"); String contactPerson = formData.getString("textareaField_l7fytfcy"); JSONArray tableArr = formData.getJSONArray("tableField_l7fytfcn"); if (tableArr == null) { continue; } for (int j = 0; j < tableArr.size(); j++) { JSONObject row = tableArr.getJSONObject(j); ProductionPlan plan = new ProductionPlan(); plan.setFormInstanceId(formInstanceId); plan.setSerialNo(serialNo); plan.setTitle(title); plan.setOriginatorUserId(originatorUserId); plan.setOriginatorName(originatorName); plan.setProjectName(projectName); plan.setBatchNo(batchNo); plan.setContactPerson(contactPerson); plan.setMaterialCode(row.getString("textField_l9xo62q5")); plan.setMaterialCategory(row.getString("textField_l9xo62q7")); plan.setSpecDesc(row.getString("textField_l9xo62q8")); plan.setGradeType(row.getString("radioField_m9urarr2")); plan.setLength(row.getBigDecimal("numberField_lb7lgatg")); plan.setWidth(row.getBigDecimal("numberField_lb7lgath")); plan.setThickness(row.getBigDecimal("numberField_lb7lgati")); plan.setQuantity(row.getInteger("numberField_lb7lgatj")); plan.setVolume(row.getBigDecimal("numberField_l7fytfd3")); // 日期 JSONArray dateArr = row.getJSONArray("cascadeDateField_lfxqqluw"); if (dateArr != null && dateArr.size() == 2) { long start = dateArr.getLongValue(0); long end = dateArr.getLongValue(1); plan.setDateStart(Instant.ofEpochMilli(start) .atZone(ZoneId.systemDefault()) .toLocalDateTime()); plan.setDateEnd(Instant.ofEpochMilli(end) .atZone(ZoneId.systemDefault()) .toLocalDateTime()); } plan.setDataSyncType(2); plan.setDataSourceType(1); plan.setCreateTime(LocalDateTime.now()); list.add(plan); } } if (!list.isEmpty()) { productionPlanService.saveBatch(list); } log.info("同步生产需求数据完成,共 {} 条", list.size()); } }