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());
}
}