700 lines
27 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.management.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.management.constant.CertificateConstant;
import com.management.constant.URLConstant;
import com.management.entity.Filter;
import com.management.utils.CrmRequestUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* 部门集成
*
* @param
* @return null
* @Author weiloong_zhang
*/
@RestController
@RequestMapping("/zy/api/dept")
@Slf4j
public class DeptController {
@Autowired
private KDTokenController kdTokenController;
private RestTemplate restTemplate = new RestTemplate();
public static void main(String[] args) {
// new DeptController().syncDept();
new DeptController().syncDeptUp();
}
/**
* 部门同步,新增接口
*
* @return void
* @Author weiloong_zhang
*/
@PostMapping("/sync_create")
public void syncDept() {
CrmRequestUtil crmRequestUtil = new CrmRequestUtil();
//获取当前时间
LocalDateTime now = LocalDateTime.now();
log.info("当前时间:{}", now);
//获取两天前的时间
LocalDateTime twoDaysAgo = now.minusDays(2);
//将时间转换样式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String twoDaysAgoStr = twoDaysAgo.format(formatter);
//开始查询部门(暂时使用固定值)
Map data = new HashMap<>();
data.put("createtime", "2025-06-01 00:00:00");
data.put("enable", "1");
// data.put("number", Arrays.asList("ZHY002.005.003.004"));
// data.put("level", "3");
Map deptReq = new HashMap<>();
deptReq.put("data", data);
deptReq.put("pageNo", 1);
deptReq.put("pageSize", 1999);
String accessToken = new KDTokenController().getKDAccessTokenTest();
if (accessToken == null || accessToken.equals("")) {
log.info("金蝶token为空或不存在");
return;
}
String uuid = UUID.randomUUID().toString().replace("-", "");
//开始封装请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("accessToken", accessToken);
headers.set("Idempotency-Key", uuid);
HttpEntity deptReqEntity = new HttpEntity(deptReq, headers);
//开始发起请求
//请求地址
String deptUrl = "https://lxr2.zhydsp.cn:40448/ierp/kapi/v2/f9w5/base/bos_adminorg/adminOrgQuery";
String deptRes = "";
try {
deptRes = restTemplate.postForObject(deptUrl, deptReqEntity, String.class);
} catch (RestClientException e) {
e.printStackTrace();
}
//将请求到的数据转换为JSONObject
JSONObject deptResObj = JSON.parseObject(deptRes);
//开始执行判断
if (deptResObj.getBooleanValue("status") != true || deptResObj.getJSONObject("data").isEmpty() || deptResObj.getJSONObject("data").getJSONArray("rows").isEmpty()) {
log.info("金蝶部门数据请求失败或者为空");
return;
}
//数据不为空,开始遍历数据
JSONArray deptRows = deptResObj.getJSONObject("data").getJSONArray("rows");
for (Object deptObj : deptRows) {
JSONObject deptData = JSON.parseObject(JSON.toJSONString(deptObj));
log.info("当前正在操作的数据为:{}", deptData);
//获取部门数据
//部门id
String deptId = deptData.getString("id");
//获取最后更新时间
String createTime = deptData.getString("createtime");
//查询日志
JSONObject getLog = new JSONObject();
try {
getLog = restTemplate.getForObject("http://localhost:18085/Log/query/log_data?table=send_log_bmxx&log_type=DEPT&dataId=" + deptId + "&mark=" + createTime, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if ("success".equals(getLog.getString("message")) && !getLog.getJSONArray("data").isEmpty()) {
log.info("当前部门已经新建过了,将不再向下执行");
continue;
}
log.info("没有集成过,将继续向下执行");
//部门名称
String deptName = deptData.getString("name");
if (deptName.contains("")) {
deptName = deptName.replace("", "_");
}
//父部门编码
JSONObject structureObj = deptData.getJSONArray("structure").getJSONObject(0);
String parentDeptCode = structureObj.getString("viewparent_id");
String parentDeptName = structureObj.getString("viewparent_name");
//部门编码
String deptCode = deptData.getString("number");
//开始封装数据
Map deptSyncReq = new HashMap<>();
deptSyncReq.put("name", deptName);
deptSyncReq.put("erp_id__c", deptId);
deptSyncReq.put("field_Vj6sf__c", deptCode);
deptSyncReq.put("field_v711K__c", parentDeptName);
deptSyncReq.put("field_31u4r__c", parentDeptCode);
deptSyncReq.put("owner", Arrays.asList("FSUID_50D3C26809B163F663DC8557268A8D44"));
deptSyncReq.put("dataObjectApiName", "DepartmentObj");
//查找父编码
//根据金蝶部门父编码查询crm部门父编码
JSONObject parentDeptReq = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "erp_id__c", Arrays.asList(parentDeptCode))
), "DepartmentObj");
JSONObject parentDeptRes = new JSONObject();
try {
parentDeptRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, parentDeptReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println(parentDeptRes);
if (!"success".equals(parentDeptRes.getString("errorDescription"))) {
log.info("查询失败");
continue;
}
if (parentDeptRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
log.info("父编码为空,将不再向下执行");
continue;
}
//获取父部门和父编码
JSONObject parentDeptData = parentDeptRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
String parentDeptId = parentDeptData.getString("_id");
deptSyncReq.put("parent_id", Arrays.asList(parentDeptId));
//判断部门是否在crm中存在
//请求封装
JSONObject deptIsExistReq = crmRequestUtil.getCRMList(Arrays.asList(
//new Filter("EQ", "name", Arrays.asList(deptName)),
new Filter("EQ", "erp_id__c", Arrays.asList(deptId))
//new Filter("EQ", "field_v711K__c", Arrays.asList(parentDeptName)),
//new Filter("EQ", "field_31u4r__c", Arrays.asList(parentDeptCode))
), "DepartmentObj");
//开始发起请求
JSONObject deptIsExistRes = new JSONObject();
try {
deptIsExistRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, deptIsExistReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if ("success".equals(deptIsExistRes.getString("errorDescription")) && !deptIsExistRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
//部门已经存在,将直接进行数据更新
log.info("部门已经存在,将直接进行数据更新");
String dept_id = deptIsExistRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0).getString("_id");
deptSyncReq.put("_id", dept_id);
//开始执行更新
JSONObject deptUpReq = crmRequestUtil.updateCRM(deptSyncReq);
JSONObject deptUpRes = new JSONObject();
try {
deptUpRes = restTemplate.postForObject(URLConstant.UPDATE_CRM_MAIN, deptUpReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
log.info("部门更新状态为:{}", deptUpRes);
continue;
}
//crm中不存在该部门继续进行新增
//开始执行新建
JSONObject deptCreateReq = crmRequestUtil.createCRM(deptSyncReq);
JSONObject deptCreateRes = new JSONObject();
try {
deptCreateRes = restTemplate.postForObject(URLConstant.CREATE_CRM_MAIN, deptCreateReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
log.info("部门创建状态为:{}", deptCreateRes);
//开始封装日志
Map logMap = new HashMap<>();
logMap.put("log_id", UUID.randomUUID().toString().replace("-", ""));
logMap.put("log_type", "DEPT");
logMap.put("syn_type", "0");
logMap.put("data_name", deptName);
logMap.put("data_id", deptId);
logMap.put("mark", createTime);
logMap.put("send_body", JSON.toJSONString(deptCreateReq));
logMap.put("send_res", JSON.toJSONString(deptCreateRes));
logMap.put("tableName", "send_log_bmxx");
//判断
if ("success".equals(deptCreateRes.getString("errorDescription"))) {
logMap.put("log_status", "0");
logMap.put("res_body", "同步成功");
} else {
logMap.put("log_status", "1");
logMap.put("res_body", "同步失败" + deptCreateRes.getString("errorMessage"));
}
JSONObject logRes = new JSONObject();
try {
logRes = restTemplate.postForObject("http://localhost:18085/Log/insert/log_data", logMap, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
log.info("日志上传状态为:{}", logRes);
}
}
/**
* 部门更新接口
*
* @return void
* @Author weiloong_zhang
*/
@PostMapping("/sync_up")
public void syncDeptUp() {
CrmRequestUtil crmRequestUtil = new CrmRequestUtil();
//获取当前时间
LocalDateTime now = LocalDateTime.now();
log.info("当前时间:{}", now);
//获取两天前的时间
LocalDateTime twoDaysAgo = now.minusDays(2);
//将时间转换样式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String twoDaysAgoStr = twoDaysAgo.format(formatter);
//开始查询部门(暂时使用固定值)
Map data = new HashMap<>();
data.put("modifytime", "2025-06-01 00:00:00");
data.put("enable", "1");
// data.put("number", Arrays.asList("ZHY002.005.001.006"));
// data.put("level", "3");
Map deptReq = new HashMap<>();
deptReq.put("data", data);
deptReq.put("pageNo", 1);
deptReq.put("pageSize", 1000);
String accessToken = new KDTokenController().getKDAccessTokenTest();
if (accessToken == null || accessToken.equals("")) {
log.info("金蝶token为空或不存在");
return;
}
//开始封装请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("accessToken", accessToken);
HttpEntity deptReqEntity = new HttpEntity(deptReq, headers);
//开始发起请求
//请求地址
String deptUrl = "https://lxr2.zhydsp.cn:40448/ierp/kapi/v2/f9w5/base/bos_adminorg/adminOrgQuery";
String deptRes = "";
try {
deptRes = restTemplate.postForObject(deptUrl, deptReqEntity, String.class);
} catch (RestClientException e) {
e.printStackTrace();
}
//将请求到的数据转换为JSONObject
JSONObject deptResObj = JSON.parseObject(deptRes);
System.out.println("请求结果为:" + deptRes);
//开始执行判断
if (deptResObj.getBooleanValue("status") != true || deptResObj.getJSONObject("data").isEmpty() || deptResObj.getJSONObject("data").getJSONArray("rows").isEmpty()) {
log.info("金蝶部门数据请求失败或者为空");
return;
}
//数据不为空,开始遍历数据
JSONArray deptRows = deptResObj.getJSONObject("data").getJSONArray("rows");
for (Object deptObj : deptRows) {
JSONObject deptData = JSON.parseObject(JSON.toJSONString(deptObj));
log.info("当前正在操作的数据为:{}", deptData);
//获取部门数据
//部门id
String deptId = deptData.getString("id");
//获取最后更新时间
String modifyTime = deptData.getString("modifytime");
//查询日志
JSONObject getLog = new JSONObject();
try {
getLog = restTemplate.getForObject("http://localhost:18085/Log/query/log_data?table=send_log_bmxx&log_type=DEPTUP&dataId=" + deptId + "&mark=" + modifyTime, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if ("success".equals(getLog.getString("message")) && !getLog.getJSONArray("data").isEmpty()) {
log.info("当前部门已经更新过了,将不再向下执行");
continue;
}
log.info("没有集成过,将继续向下执行");
//部门名称
String deptName = deptData.getString("name");
if (deptName.contains("")) {
deptName = deptName.replace("", "_");
}
//父部门编码
JSONObject structureObj = deptData.getJSONArray("structure").getJSONObject(0);
String parentDeptCode = structureObj.getString("viewparent_id");
String parentDeptName = structureObj.getString("viewparent_name");
//部门编码
String deptCode = deptData.getString("number");
//开始封装数据
Map deptSyncReq = new HashMap<>();
deptSyncReq.put("name", deptName);
deptSyncReq.put("erp_id__c", deptId);
deptSyncReq.put("field_Vj6sf__c", deptCode);
deptSyncReq.put("field_v711K__c", parentDeptName);
deptSyncReq.put("field_31u4r__c", parentDeptCode);
deptSyncReq.put("owner", Arrays.asList("FSUID_50D3C26809B163F663DC8557268A8D44"));
deptSyncReq.put("dataObjectApiName", "DepartmentObj");
//查找父编码
//根据金蝶部门父编码查询crm部门父编码
JSONObject parentDeptReq = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "erp_id__c", Arrays.asList(parentDeptCode))
), "DepartmentObj");
JSONObject parentDeptRes = new JSONObject();
try {
parentDeptRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, parentDeptReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if (!"success".equals(parentDeptRes.getString("errorDescription")) || parentDeptRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
log.info("父编码为空,将不再向下执行");
continue;
}
//获取父部门和父编码
JSONObject parentDeptData = parentDeptRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
String parentDeptId = parentDeptData.getString("_id");
deptSyncReq.put("parent_id", Arrays.asList(parentDeptId));
//判断部门是否在crm中存在
//请求封装
JSONObject deptIsExistReq = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "name", Arrays.asList(deptName)),
new Filter("EQ", "field_v711K__c", Arrays.asList(parentDeptName)),
new Filter("EQ", "field_31u4r__c", Arrays.asList(parentDeptCode))
), "DepartmentObj");
//开始发起请求
JSONObject deptIsExistRes = new JSONObject();
try {
deptIsExistRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, deptIsExistReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if ("success".equals(deptIsExistRes.getString("errorDescription")) && deptIsExistRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
//数据不存在,将不再向下执行
log.info("部门不存在,将不再向下执行");
continue;
}
//数据存在,将继续向下执行更新
//部门已经存在,将直接进行数据更新
log.info("部门已经存在,将直接进行数据更新");
String dept_id = deptIsExistRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0).getString("_id");
deptSyncReq.put("_id", dept_id);
//开始执行更新
JSONObject deptUpReq = crmRequestUtil.updateCRM(deptSyncReq);
JSONObject deptUpRes = new JSONObject();
try {
deptUpRes = restTemplate.postForObject(URLConstant.UPDATE_CRM_MAIN, deptUpReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
//开始封装日志
Map logMap = new HashMap<>();
logMap.put("log_id", UUID.randomUUID().toString().replace("-", ""));
logMap.put("log_type", "DEPTUP");
logMap.put("syn_type", "1");
logMap.put("data_name", deptName);
logMap.put("data_id", deptId);
logMap.put("mark", modifyTime);
logMap.put("send_body", JSON.toJSONString(deptUpReq));
logMap.put("send_res", JSON.toJSONString(deptUpRes));
logMap.put("tableName", "send_log_bmxx");
//判断
if ("success".equals(deptUpRes.getString("errorDescription"))) {
logMap.put("log_status", "0");
logMap.put("res_body", "同步成功");
} else {
logMap.put("log_status", "1");
logMap.put("res_body", "同步失败");
}
JSONObject logRes = new JSONObject();
try {
logRes = restTemplate.postForObject("http://localhost:18085/Log/insert/log_data", logMap, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
log.info("日志上传状态为:{}", logRes);
}
}
/**
* 部门删除同步
*
* @return void
* @Author weiloong_zhang
*/
@PostMapping("/sync_delete")
public void syncDeptDel() {
CrmRequestUtil crmRequestUtil = new CrmRequestUtil();
//获取当前时间
LocalDateTime now = LocalDateTime.now();
log.info("当前时间:{}", now);
//获取两天前的时间
LocalDateTime twoDaysAgo = now.minusDays(2);
//将时间转换样式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String twoDaysAgoStr = twoDaysAgo.format(formatter);
//开始查询部门(暂时使用固定值)
Map data = new HashMap<>();
data.put("modifytime", "2020-01-01 00:00:00");
data.put("enable", "2");
//data.put("number", Arrays.asList("ZHY003.002"));
// data.put("level", "3");
Map deptReq = new HashMap<>();
deptReq.put("data", data);
deptReq.put("pageNo", 1);
deptReq.put("pageSize", 1000);
String accessToken = kdTokenController.getKDAccessTokenTest();
if (accessToken == null || accessToken.equals("")) {
log.info("金蝶token为空或不存在");
return;
}
//开始封装请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("accessToken", accessToken);
HttpEntity deptReqEntity = new HttpEntity(deptReq, headers);
//开始发起请求
//请求地址
String deptUrl = "https://lxr2.zhydsp.cn:40448/ierp/kapi/v2/f9w5/base/bos_adminorg/adminOrgQuery";
String deptRes = "";
try {
deptRes = restTemplate.postForObject(deptUrl, deptReqEntity, String.class);
} catch (RestClientException e) {
e.printStackTrace();
}
//将请求到的数据转换为JSONObject
JSONObject deptResObj = JSON.parseObject(deptRes);
System.out.println("请求结果为:" + deptRes);
//开始执行判断
if (deptResObj.getBooleanValue("status") != true || deptResObj.getJSONObject("data").isEmpty() || deptResObj.getJSONObject("data").getJSONArray("rows").isEmpty()) {
log.info("金蝶部门数据请求失败或者为空");
return;
}
//数据不为空,开始遍历数据
JSONArray deptRows = deptResObj.getJSONObject("data").getJSONArray("rows");
for (Object deptObj : deptRows) {
JSONObject deptData = JSON.parseObject(JSON.toJSONString(deptObj));
log.info("当前正在操作的数据为:{}", deptData);
//获取部门数据
//部门id
String deptId = deptData.getString("id");
//获取最后更新时间
String modifyTime = deptData.getString("modifytime");
//查询日志
JSONObject getLog = new JSONObject();
try {
getLog = restTemplate.getForObject("http://localhost:18085/Log/query/log_data?table=send_log_bmxx&log_type=DEPTDEL&dataId=" + deptId + "&mark=" + modifyTime, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if ("success".equals(getLog.getString("message")) && !getLog.getJSONArray("data").isEmpty()) {
log.info("当前部门已经执行过了,将不再向下执行");
continue;
}
log.info("没有集成过,将继续向下执行");
//部门名称
String deptName = deptData.getString("name");
//父部门编码
JSONObject structureObj = deptData.getJSONArray("structure").getJSONObject(0);
//父级全称
String parentDeptName = structureObj.getString("viewparent_name");
String parentDeptCode = structureObj.getString("viewparent_id");
//开始查询CRM
JSONObject crmReq = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "name", Arrays.asList(deptName)),
new Filter("EQ", "field_v711K__c", Arrays.asList(parentDeptName)),
new Filter("EQ", "field_31u4r__c", Arrays.asList(parentDeptCode))
), "DepartmentObj");
JSONObject crmRes = new JSONObject();
try {
crmRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, crmReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if (!"success".equals(crmRes.getString("errorDescription"))) {
log.info("请求失败");
continue;
}
if (crmRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
log.info("未查询到数据");
continue;
}
//数据存在,执行作废
JSONObject crmData = crmRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
String crmId = crmData.getString("_id");
//开始封装作废数据
Map delData = new HashMap<>();
delData.put("object_data_id", crmId);
delData.put("dataObjectApiName", "DepartmentObj");
Map delReq = new HashMap<>();
delReq.put("corpAccessToken", crmRequestUtil.getCRMToken());
delReq.put("currentOpenUserId", CertificateConstant.CURRENT_OPEN_USERID);
delReq.put("corpId", CertificateConstant.CORP_ID);
delReq.put("data", delData);
//开始请求作废接口
JSONObject delRes = new JSONObject();
try {
delRes = restTemplate.postForObject("https://open.fxiaoke.com/cgi/crm/custom/v2/data/invalid", delReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
//开始封装日志
Map logMap = new HashMap<>();
logMap.put("log_id", UUID.randomUUID().toString().replace("-", ""));
logMap.put("log_type", "DEPTDEL");
logMap.put("syn_type", "2");
logMap.put("data_name", deptName);
logMap.put("data_id", deptId);
logMap.put("mark", modifyTime);
logMap.put("send_body", JSON.toJSONString(delReq));
logMap.put("send_res", JSON.toJSONString(delRes));
logMap.put("tableName", "send_log_bmxx");
//判断
if ("success".equals(delRes.getString("errorDescription"))) {
logMap.put("log_status", "0");
logMap.put("res_body", "同步成功");
} else {
logMap.put("log_status", "1");
logMap.put("res_body", "同步失败" + delRes.getString("errorMessage"));
}
JSONObject logRes = new JSONObject();
try {
logRes = restTemplate.postForObject("http://localhost:18085/Log/insert/log_data", logMap, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
log.info("日志上传状态为:{}", logRes);
}
}
}