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;
|
|
/**
|
* <br>
|
* 拉取钉钉数据并导入
|
* </br>
|
*
|
* @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) {
|
String params = "appkey=" + aliDingConfig.getAppKey() + "&appsecret=" + aliDingConfig.getAppSecret();
|
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<ProductionPlan> 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());
|
}
|
|
}
|