zhyManagement/src/main/java/com/management/controller/GoodsPlanController.java

1063 lines
49 KiB
Java
Raw Normal View History

2025-06-11 13:58:36 +08:00
package com.management.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.management.constant.ERPURLConstant;
import com.management.constant.URLConstant;
import com.management.entity.Filter;
import com.management.utils.CrmRequestUtil;
import com.management.utils.KingDeeUtils;
import lombok.extern.slf4j.Slf4j;
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.util.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* 要货计划
*
* @param
* @return null
* @Author weiloong_zhang
*/
@RestController
@RequestMapping("/api/goods_plan")
@Slf4j
public class GoodsPlanController {
private RestTemplate restTemplate = new RestTemplate();
public static void main(String[] args) {
new GoodsPlanController().syncGoodsPlan();
//new GoodsPlanController().updateGoodsPlan();
//new GoodsPlanController().syncTrackingNum();
}
/**
* 同步新增要货计划
*
* @return void
* @Author weiloong_zhang
*/
@PostMapping("/sync/goodsPlan")
public void syncGoodsPlan() {
CrmRequestUtil crmRequestUtil = new CrmRequestUtil();
log.info("开始同步要货计划");
String[] syncStatus = {"option_pending_sync__c", "option_resync__c"};
//要货计划请求
JSONObject getGoodsPlan = crmRequestUtil.getCRMList(Arrays.asList(
//new Filter("IS", "erp_id__c", Arrays.asList("")),
new Filter("EQ", "business_status__c", Arrays.asList("option_normal__c")),
new Filter("IN", "sync_status__c", Arrays.asList(syncStatus)),
new Filter("GT", "create_time", Arrays.asList("1748923200000")),
//new Filter("EQ", "name", Arrays.asList("YHJH20250508-0002")),
new Filter("EQ", "life_status", Arrays.asList("normal"))
), "purchase_plan__c");
JSONObject goodsPlanRes = new JSONObject();
//开始发起请求
try {
goodsPlanRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getGoodsPlan, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
//判断是否请求成功
if (!"success".equals(goodsPlanRes.getString("errorDescription")) || goodsPlanRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
log.info("请求失败或数据不存在");
return;
}
//请求成功
for (Object goodsPlanObj : goodsPlanRes.getJSONObject("data").getJSONArray("dataList")) {
//将Obj转为JSONObject
JSONObject goodsPlanData = JSON.parseObject(JSON.toJSONString(goodsPlanObj));
System.out.println("当前正在处理的要货计划数据为:" + goodsPlanData);
//获取当前单据的唯一id
String goodsPlanId = goodsPlanData.getString("_id");
//获取当前单据名称
String goodsPlanName = goodsPlanData.getString("name");
//获取当前单据的创建时间
//String createTime = goodsPlanData.getString("create_time");
String createTime = goodsPlanData.getString("last_modified_time");
//开始查询该单据是否已经集成过
JSONObject logRes = new JSONObject();
try {
logRes = restTemplate.getForObject("http://localhost:18085/Log/query/log_data?table=send_log_goodsplan&log_type=GP&dataId=" + goodsPlanId + "&mark=" + createTime, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if (!logRes.getJSONArray("data").isEmpty()) {
log.info("当前单据已经集成过了");
continue;
}
log.info("当前单据没有集成过");
//开始封装传输至ERP的请求
log.info("开始封装请求");
Map erpGoodsPlanReq = new HashMap<>();
erpGoodsPlanReq.put("f9w5_crmid", goodsPlanId);
erpGoodsPlanReq.put("billno", goodsPlanName);//单据编号
erpGoodsPlanReq.put("billtype_number", "f9w5_sm_purchaseplan_BT");//单据类型
String orgNum = goodsPlanData.getString("erp_organization__c") != null ? goodsPlanData.getString("erp_organization__c") : "";
erpGoodsPlanReq.put("org_number", orgNum);//组织编码
String businessType = goodsPlanData.getString("business_status__c") != null ? goodsPlanData.getString("business_status__c") : "";
switch (businessType) {
case "option_normal__c":
erpGoodsPlanReq.put("f9w5_busstatus", "A");//业务状态
break;
case "option_close__c":
erpGoodsPlanReq.put("f9w5_busstatus", "B");//业务状态
break;
default:
erpGoodsPlanReq.put("f9w5_busstatus", "A");//业务状态
break;
}
//开始获取需求日期
long biztime = goodsPlanData.getLong("requirement_date__c");
Date date = new Date(biztime);
erpGoodsPlanReq.put("biztime", date);//需求日期
//部门编码
String deptCode = "";
List deptIdList = goodsPlanData.getJSONArray("data_own_department");
//开始查询部门编码
JSONObject deptReq = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "_id", deptIdList)
), "DepartmentObj");
JSONObject deptRes = new JSONObject();
try {
deptRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, deptReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if ("success".equals(deptRes.getString("errorDescription")) && !deptRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
JSONObject deptData = deptRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
deptCode = deptData.getString("field_Vj6sf__c") != null ? deptData.getString("field_Vj6sf__c") : "";
}
//erpGoodsPlanReq.put("dept", "zyierp");//todo 归属部门
erpGoodsPlanReq.put("dept", deptCode);//todo 归属部门
//获取负责人编码
String ownerCode = "";
List ownerIdList = goodsPlanData.getJSONArray("owner");
JSONObject ownerReq = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "user_id", ownerIdList)
), "PersonnelObj");
JSONObject ownerRes = new JSONObject();
try {
ownerRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, ownerReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if ("success".equals(ownerRes.getString("errorDescription")) && !ownerRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
JSONObject ownerData = ownerRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
ownerCode = ownerData.getString("field_T1xid__c") != null ? ownerData.getString("field_T1xid__c") : "";
}
//erpGoodsPlanReq.put("operator", "ID-000011");//todo 负责人
erpGoodsPlanReq.put("operator", ownerCode);//todo 负责人
//根据要货计划查询要货计划明细
JSONObject getGoodsPlanDetail = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "purchase_plan__c", Arrays.asList(goodsPlanId))
), "purchase_plan_details__c");
JSONObject goodsPlanDetailRes = new JSONObject();
try {
goodsPlanDetailRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getGoodsPlanDetail, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("要货计划明细查询结果为:" + goodsPlanDetailRes);
if (!"success".equals(goodsPlanDetailRes.getString("errorDescription")) || goodsPlanDetailRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
log.info("要货计划明细查询失败不存在当前要货计划明细");
continue;
}
log.info("要货计划明细存在,继续向下执行");
//延时执行(非阻塞)
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.schedule(() -> {
System.out.println("延时任务执行");
2025-06-13 18:33:58 +08:00
}, 10, TimeUnit.SECONDS); //10秒后执行
2025-06-11 13:58:36 +08:00
executor.shutdown(); // 关闭线程池
//明细列表
List goodsPlanDetailList = new ArrayList<>();
//用来判断跟踪号是否传输成功
JSONObject trackingNumReason = new JSONObject();
for (Object goodsPlanDetailObj : goodsPlanDetailRes.getJSONObject("data").getJSONArray("dataList")) {
if (!trackingNumReason.isEmpty()) {
log.info("已经存在执行错误的明细,将不再执行本条数据");
continue;
}
JSONObject goodsPlanDetailData = JSON.parseObject(JSON.toJSONString(goodsPlanDetailObj));
System.out.println("当前正在处理的要货计划明细数据为:" + goodsPlanDetailData);
String trackingNum = goodsPlanDetailData.getString("batch_number__c") != null ? goodsPlanDetailData.getString("batch_number__c") : "";
if (trackingNum.equals("")) {
log.info("跟踪号不存在,将不再向下执行");
trackingNumReason.put("status", "false");
trackingNumReason.put("reason", "跟踪号不存在,将不再向下执行");
continue;
}
//跟踪号存在,开始执行
JSONObject syncTrackingNum = syncTrackingNum(trackingNum);
//判断是否执行成功
if (!"success".equals(syncTrackingNum.getString("errorCode"))) {
trackingNumReason.put("status", "false");
trackingNumReason.put("reason", syncTrackingNum.getString("message"));
continue;
}
//开始封装要货计划明细数据
Map erpGoodsPlanDetailReq = new HashMap<>();
erpGoodsPlanDetailReq.put("f9w5_crmentryid", goodsPlanDetailData.getString("_id"));//crm明细id
erpGoodsPlanDetailReq.put("material_number", goodsPlanDetailData.getString("material_id__c__r"));//物料编号
erpGoodsPlanDetailReq.put("entryorg_number", orgNum);//组织编码
erpGoodsPlanDetailReq.put("qty", goodsPlanDetailData.getBigDecimal("quantity__c") != null ? goodsPlanDetailData.getBigDecimal("quantity__c") : 0);//数量
//erpGoodsPlanDetailReq.put("lot_number", goodsPlanDetailData.getString("batch_number__c") != null ? goodsPlanDetailData.getString("batch_number__c") : "");//批号
erpGoodsPlanDetailReq.put("entrycomment", goodsPlanDetailData.getString("remark__c") != null ? goodsPlanDetailData.getString("remark__c") : "");//备注
erpGoodsPlanDetailReq.put("f9w5_contractno", goodsPlanDetailData.getString("sales_contract_number__c__r") != null ? goodsPlanDetailData.getString("sales_contract_number__c__r") : "");//销售合同编号
erpGoodsPlanDetailReq.put("f9w5_tracknumber_number", trackingNum);//跟踪号
2025-06-13 18:33:58 +08:00
//程序版本
String programVersion = goodsPlanDetailData.getString("program_version_number__c") != null ? goodsPlanDetailData.getString("program_version_number__c") : "";
2025-06-11 13:58:36 +08:00
2025-06-13 18:33:58 +08:00
if (programVersion.equals("")) {
log.info("程序版本不存在,将不再向下执行");
continue;
2025-06-11 13:58:36 +08:00
}
2025-06-13 18:33:58 +08:00
erpGoodsPlanDetailReq.put("f9w5_programversion_number", programVersion);//程序版本
//程序版本编码
String programVersionCode = goodsPlanDetailData.getString("platform_name_code__c") != null ? goodsPlanDetailData.getString("platform_name_code__c") : "";
2025-06-11 13:58:36 +08:00
2025-06-13 18:33:58 +08:00
if (programVersionCode.equals("")) {
log.info("程序版本编码不存在,将不再向下执行");
continue;
2025-06-11 13:58:36 +08:00
}
2025-06-13 18:33:58 +08:00
erpGoodsPlanDetailReq.put("f9w5_smplatform_number", programVersionCode);
// //开始查询项目号
// String projectId = goodsPlanDetailData.getString("project_name__c") != null ? goodsPlanDetailData.getString("project_name__c") : "";
//
// //开始查询项目号
// JSONObject getProjectReq = crmRequestUtil.getCRMList(Arrays.asList(
// new Filter("EQ", "_id", Arrays.asList(projectId))
// ), "NewOpportunityObj");
//
// JSONObject projectRes = new JSONObject();
//
// try {
// projectRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getProjectReq, JSONObject.class);
// } catch (RestClientException e) {
// e.printStackTrace();
// }
//
// String projectCode = "";
//
// if ("success".equals(projectRes.getString("errorDescription")) && !projectRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
// JSONObject projectData = projectRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
// projectCode = projectData.getString("opportunity_id__c") != null ? projectData.getString("opportunity_id__c") : "";
// }
//项目号
erpGoodsPlanDetailReq.put("f9w5_project_number", goodsPlanDetailData.getString("project_no__c") != null ? goodsPlanDetailData.getString("project_no__c") : "");//项目号
2025-06-11 13:58:36 +08:00
goodsPlanDetailList.add(erpGoodsPlanDetailReq);
}
//开始封装回写程序
Map backReqMap = new HashMap();
backReqMap.put("_id", goodsPlanId);
backReqMap.put("dataObjectApiName", "purchase_plan__c");
//开始判断
if (!trackingNumReason.isEmpty()) {
log.info("明细封装错误,将不再向下执行");
backReqMap.put("sync_status__c", "option_sync_failure__c");
backReqMap.put("response_info__c", trackingNumReason.getString("reason"));
//开始回写
JSONObject backReq = crmRequestUtil.updateCRM(backReqMap);
JSONObject backRes = new JSONObject();
try {
backRes = restTemplate.postForObject(URLConstant.UPDATE_CRM_CUSTOMIZE, backReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("回写结果为:" + backRes);
continue;
}
2025-06-13 18:33:58 +08:00
//判断明细是否存在
if (goodsPlanDetailList.isEmpty()) {
log.info("明细为空,将不再向下执行");
continue;
}
2025-06-11 13:58:36 +08:00
erpGoodsPlanReq.put("billentry", goodsPlanDetailList);
//开始封装要货计划请求
System.out.println("erp请求为" + JSON.parseObject(JSON.toJSONString(erpGoodsPlanReq)));
Map erpContractData = new HashMap<>();
erpContractData.put("data", Arrays.asList(erpGoodsPlanReq));//请求体
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 goodsPlanReqEntity = new HttpEntity(erpContractData, headers);
System.out.println(JSON.parseObject(JSON.toJSONString(goodsPlanReqEntity)));
//开始向金蝶发起请求
String goodsPlanUrl = ERPURLConstant.ERP_URL + "/ierp/kapi/v2/f9w5/sm/f9w5_sm_purchaseplan/purchaseplanSave";
JSONObject erpGoodsPlanRes = new JSONObject();
try {
erpGoodsPlanRes = restTemplate.postForObject(goodsPlanUrl, goodsPlanReqEntity, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("要货计划结果为:" + JSON.parseObject(JSON.toJSONString(erpGoodsPlanRes)));
//开始封装日志
Map logMap = new HashMap<>();
logMap.put("log_id", UUID.randomUUID().toString().replace("-", ""));
logMap.put("log_type", "GP");
logMap.put("syn_type", "0");
logMap.put("data_name", goodsPlanName);
logMap.put("data_id", goodsPlanId);
logMap.put("mark", createTime);
logMap.put("send_body", JSON.toJSONString(goodsPlanReqEntity));
logMap.put("send_res", JSON.toJSONString(erpGoodsPlanRes));
logMap.put("tableName", "send_log_goodsplan");
//判断是否执行成功
if ("0".equals(erpGoodsPlanRes.getString("errorCode"))) {
//同步成功
logMap.put("log_status", "0");
logMap.put("res_body", "同步成功");
backReqMap.put("erp_id__c", erpGoodsPlanRes.getJSONObject("data").getJSONArray("result").getJSONObject(0).getString("id"));
backReqMap.put("sync_status__c", "option_sync_success__c");
backReqMap.put("response_info__c", "同步成功");
//审核
KingDeeUtils kingDeeUtils = new KingDeeUtils();
kingDeeUtils.audit(erpGoodsPlanRes.getJSONObject("data").getJSONArray("result").getJSONObject(0).getString("id"), "f9w5_sm_purchaseplan");
} else {
//同步失败
logMap.put("log_status", "1");
logMap.put("res_body", "同步失败:" + erpGoodsPlanRes.getString("message"));
backReqMap.put("sync_status__c", "option_sync_failure__c");
backReqMap.put("response_info__c", erpGoodsPlanRes.getString("message"));
}
//开始回写
JSONObject backReq = crmRequestUtil.updateCRM(backReqMap);
System.out.println("回写请求为:" + JSON.parseObject(JSON.toJSONString(backReq)));
JSONObject backRes = new JSONObject();
try {
backRes = restTemplate.postForObject(URLConstant.UPDATE_CRM_CUSTOMIZE, backReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("回写结果为:" + backRes);
//开始记录日志
JSONObject logResMap = new JSONObject();
try {
logResMap = restTemplate.postForObject("http://localhost:18085/Log/insert/log_data", logMap, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("日志插入结果为:" + logResMap);
}
}
/**
* 要货计划更新接口
*
* @return void
* @Author weiloong_zhang
*/
@PostMapping("/update/goodsPlan")
public void updateGoodsPlan() {
CrmRequestUtil crmRequestUtil = new CrmRequestUtil();
log.info("开始同步更新要货计划");
//要货计划请求
JSONObject getGoodsPlan = crmRequestUtil.getCRMList(Arrays.asList(
//new Filter("IS", "erp_id__c", Arrays.asList("")),
new Filter("EQ", "business_status__c", Arrays.asList("option_close__c")),
//new Filter("IN", "sync_status__c", Arrays.asList(syncStatus)),
new Filter("GT", "create_time", Arrays.asList("1748923200000")),
//new Filter("EQ", "name", Arrays.asList("YHJH20250508-0002")),
new Filter("EQ", "life_status", Arrays.asList("normal"))
), "purchase_plan__c");
JSONObject goodsPlanRes = new JSONObject();
//开始发起请求
try {
goodsPlanRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getGoodsPlan, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
//判断是否请求成功
if (!"success".equals(goodsPlanRes.getString("errorDescription")) || goodsPlanRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
log.info("请求失败或数据不存在");
return;
}
//请求成功
for (Object goodsPlanObj : goodsPlanRes.getJSONObject("data").getJSONArray("dataList")) {
//将Obj转为JSONObject
JSONObject goodsPlanData = JSON.parseObject(JSON.toJSONString(goodsPlanObj));
System.out.println("当前正在处理的要货计划数据为:" + goodsPlanData);
//获取当前单据的唯一id
String goodsPlanId = goodsPlanData.getString("_id");
//获取当前单据名称
String goodsPlanName = goodsPlanData.getString("name");
//获取当前单据的最后修改时间
String lastModifyTime = goodsPlanData.getString("last_modified_time");
//开始查询该单据是否已经集成过
JSONObject logRes = new JSONObject();
try {
logRes = restTemplate.getForObject("http://localhost:18085/Log/query/log_data?table=send_log_goodsplan&log_type=GPUP&dataId=" + goodsPlanId + "&mark=" + lastModifyTime, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if (!logRes.getJSONArray("data").isEmpty()) {
log.info("当前单据已经更新过了");
continue;
}
log.info("当前单据没有集成过");
//开始封装传输至ERP的请求
log.info("开始封装请求");
//获取ERPID
String erpId = goodsPlanData.getString("erp_id__c") != null ? goodsPlanData.getString("erp_id__c") : "";
if ("".equals(erpId)) {
log.info("当前单据erp_id__c为空不再向下执行");
continue;
}
log.info("存在ERPID继续向下执行");
Map erpGoodsPlanReq = new HashMap<>();
erpGoodsPlanReq.put("id", erpId);
erpGoodsPlanReq.put("f9w5_crmid", goodsPlanId);
erpGoodsPlanReq.put("billno", goodsPlanName);//单据编号
erpGoodsPlanReq.put("billtype_number", "f9w5_sm_purchaseplan_BT");//单据类型
//组织编码
String orgNum = goodsPlanData.getString("erp_organization__c") != null ? goodsPlanData.getString("erp_organization__c") : "";
erpGoodsPlanReq.put("org_number", orgNum);//组织编码
String businessType = goodsPlanData.getString("business_status__c") != null ? goodsPlanData.getString("business_status__c") : "";
switch (businessType) {
case "option_normal__c":
erpGoodsPlanReq.put("f9w5_busstatus", "A");//业务状态
break;
case "option_close__c":
erpGoodsPlanReq.put("f9w5_busstatus", "B");//业务状态
break;
default:
erpGoodsPlanReq.put("f9w5_busstatus", "A");//业务状态
break;
}
//开始获取需求日期
long biztime = goodsPlanData.getLong("requirement_date__c");
Date date = new Date(biztime);
erpGoodsPlanReq.put("biztime", date);//需求日期
//部门编码
String deptCode = "";
List deptIdList = goodsPlanData.getJSONArray("data_own_department");
//开始查询部门编码
JSONObject deptReq = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "_id", deptIdList)
), "DepartmentObj");
JSONObject deptRes = new JSONObject();
try {
deptRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, deptReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if ("success".equals(deptRes.getString("errorDescription")) && !deptRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
JSONObject deptData = deptRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
deptCode = deptData.getString("field_Vj6sf__c") != null ? deptData.getString("field_Vj6sf__c") : "";
}
erpGoodsPlanReq.put("dept", deptCode);//todo 归属部门
//获取负责人编码
String ownerCode = "";
List ownerIdList = goodsPlanData.getJSONArray("owner");
JSONObject ownerReq = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "user_id", ownerIdList)
), "PersonnelObj");
JSONObject ownerRes = new JSONObject();
try {
ownerRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, ownerReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if ("success".equals(ownerRes.getString("errorDescription")) && !ownerRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
JSONObject ownerData = ownerRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
ownerCode = ownerData.getString("field_T1xid__c") != null ? ownerData.getString("field_T1xid__c") : "";
}
erpGoodsPlanReq.put("operator", ownerCode);//todo 负责人
//根据要货计划查询要货计划明细
JSONObject getGoodsPlanDetail = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "purchase_plan__c", Arrays.asList(goodsPlanId))
), "purchase_plan_details__c");
JSONObject goodsPlanDetailRes = new JSONObject();
try {
goodsPlanDetailRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getGoodsPlanDetail, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("要货计划明细查询结果为:" + goodsPlanDetailRes);
if (!"success".equals(goodsPlanDetailRes.getString("errorDescription")) || goodsPlanDetailRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
log.info("要货计划明细查询失败不存在当前要货计划明细");
continue;
}
log.info("要货计划明细存在,继续向下执行");
//明细列表
List goodsPlanDetailList = new ArrayList<>();
//用来判断跟踪号是否传输成功
JSONObject trackingNumReason = new JSONObject();
for (Object goodsPlanDetailObj : goodsPlanDetailRes.getJSONObject("data").getJSONArray("dataList")) {
JSONObject goodsPlanDetailData = JSON.parseObject(JSON.toJSONString(goodsPlanDetailObj));
System.out.println("当前正在处理的要货计划明细数据为:" + goodsPlanDetailData);
String trackingNum = goodsPlanDetailData.getString("batch_number__c") != null ? goodsPlanDetailData.getString("batch_number__c") : "";
if (trackingNum.equals("")) {
log.info("跟踪号不存在,将不再向下执行");
trackingNumReason.put("status", "false");
trackingNumReason.put("reason", "跟踪号不存在,将不再向下执行");
continue;
}
//跟踪号存在,开始执行
JSONObject syncTrackingNum = syncTrackingNum(trackingNum);
//判断是否执行成功
if (!"success".equals(syncTrackingNum.getString("errorCode"))) {
trackingNumReason.put("status", "false");
trackingNumReason.put("reason", syncTrackingNum.getString("message"));
continue;
}
//开始封装要货计划明细数据
Map erpGoodsPlanDetailReq = new HashMap<>();
erpGoodsPlanDetailReq.put("f9w5_crmentryid", goodsPlanDetailData.getString("_id"));//crm明细id
erpGoodsPlanDetailReq.put("material_number", goodsPlanDetailData.getString("material_id__c__r"));//物料编号
erpGoodsPlanDetailReq.put("entryorg_number", orgNum);//组织编码
erpGoodsPlanDetailReq.put("qty", goodsPlanDetailData.getBigDecimal("quantity__c") != null ? goodsPlanDetailData.getBigDecimal("quantity__c") : 0);//数量
//erpGoodsPlanDetailReq.put("lot_number", goodsPlanDetailData.getString("batch_number__c") != null ? goodsPlanDetailData.getString("batch_number__c") : "");//批号
erpGoodsPlanDetailReq.put("entrycomment", goodsPlanDetailData.getString("remark__c") != null ? goodsPlanDetailData.getString("remark__c") : "");//备注
erpGoodsPlanDetailReq.put("f9w5_contractno", goodsPlanDetailData.getString("sales_contract_number__c__r") != null ? goodsPlanDetailData.getString("sales_contract_number__c__r") : "");//销售合同编号
erpGoodsPlanDetailReq.put("f9w5_tracknumber_number", trackingNum);//跟踪号
//开始查询项目号
String projectId = goodsPlanDetailData.getString("project_name__c") != null ? goodsPlanDetailData.getString("project_name__c") : "";
//开始查询项目号
JSONObject getProjectReq = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "_id", Arrays.asList(projectId))
), "NewOpportunityObj");
JSONObject projectRes = new JSONObject();
try {
projectRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getProjectReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
String projectCode = "";
if ("success".equals(projectRes.getString("errorDescription")) && !projectRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
JSONObject projectData = projectRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
projectCode = projectData.getString("opportunity_id__c") != null ? projectData.getString("opportunity_id__c") : "";
}
erpGoodsPlanDetailReq.put("f9w5_project_number", projectCode);//项目号
goodsPlanDetailList.add(erpGoodsPlanDetailReq);
}
//开始封装回写程序
Map backReqMap = new HashMap();
backReqMap.put("_id", goodsPlanId);
backReqMap.put("dataObjectApiName", "purchase_plan__c");
//开始判断
if (!trackingNumReason.isEmpty()) {
log.info("明细封装错误,将不再向下执行");
backReqMap.put("sync_status__c", "option_sync_failure__c");
backReqMap.put("response_info__c", trackingNumReason.getString("reason"));
//开始回写
JSONObject backReq = crmRequestUtil.updateCRM(backReqMap);
JSONObject backRes = new JSONObject();
try {
backRes = restTemplate.postForObject(URLConstant.UPDATE_CRM_CUSTOMIZE, backReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("回写结果为:" + backRes);
continue;
}
erpGoodsPlanReq.put("billentry", goodsPlanDetailList);
//开始封装要货计划请求
System.out.println("erp请求为" + JSON.parseObject(JSON.toJSONString(erpGoodsPlanReq)));
Map erpContractData = new HashMap<>();
erpContractData.put("data", Arrays.asList(erpGoodsPlanReq));//请求体
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 goodsPlanReqEntity = new HttpEntity(erpContractData, headers);
System.out.println(JSON.parseObject(JSON.toJSONString(goodsPlanReqEntity)));
//开始向金蝶发起请求
String goodsPlanUrl = ERPURLConstant.ERP_URL + "/ierp/kapi/v2/f9w5/sm/f9w5_sm_purchaseplan/purchaseplanSave";
JSONObject erpGoodsPlanRes = new JSONObject();
try {
erpGoodsPlanRes = restTemplate.postForObject(goodsPlanUrl, goodsPlanReqEntity, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("要货计划结果为:" + JSON.parseObject(JSON.toJSONString(erpGoodsPlanRes)));
//开始封装日志
Map logMap = new HashMap<>();
logMap.put("log_id", UUID.randomUUID().toString().replace("-", ""));
logMap.put("log_type", "GPUP");
logMap.put("syn_type", "1");
logMap.put("data_name", goodsPlanName);
logMap.put("data_id", goodsPlanId);
logMap.put("mark", lastModifyTime);
logMap.put("send_body", JSON.toJSONString(goodsPlanReqEntity));
logMap.put("send_res", JSON.toJSONString(erpGoodsPlanRes));
logMap.put("tableName", "send_log_goodsplan");
//判断是否执行成功
if ("0".equals(erpGoodsPlanRes.getString("errorCode"))) {
//同步成功
logMap.put("log_status", "0");
logMap.put("res_body", "同步成功");
backReqMap.put("erp_id__c", erpGoodsPlanRes.getJSONObject("data").getJSONArray("result").getJSONObject(0).getString("id"));
backReqMap.put("sync_status__c", "option_sync_success__c");
backReqMap.put("response_info__c", "同步成功");
} else {
//同步失败
logMap.put("log_status", "1");
logMap.put("res_body", "同步失败:" + erpGoodsPlanRes.getString("message"));
backReqMap.put("sync_status__c", "option_sync_failure__c");
backReqMap.put("response_info__c", erpGoodsPlanRes.getString("message"));
}
//开始回写
JSONObject backReq = crmRequestUtil.updateCRM(backReqMap);
System.out.println("回写请求为:" + JSON.parseObject(JSON.toJSONString(backReq)));
JSONObject backRes = new JSONObject();
try {
backRes = restTemplate.postForObject(URLConstant.UPDATE_CRM_CUSTOMIZE, backReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("回写结果为:" + backRes);
//开始记录日志
JSONObject logResMap = new JSONObject();
try {
logResMap = restTemplate.postForObject("http://localhost:18085/Log/insert/log_data", logMap, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("日志插入结果为:" + logResMap);
}
}
/**
* 跟踪号同步方法
*
* @return java.lang.String
* @Author weiloong_zhang
*/
public JSONObject syncTrackingNum(String trackingNum) {
CrmRequestUtil crmRequestUtil = new CrmRequestUtil();
//String trackingNum = "YHJH2505290005-1";
JSONObject res = new JSONObject();
JSONObject getTrackNum = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "name", Arrays.asList(trackingNum))
), "tracking_number__c");
JSONObject trackingNumRes = new JSONObject();
try {
trackingNumRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getTrackNum, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("跟踪号查询结果为:" + trackingNumRes);
if (!"success".equals(trackingNumRes.getString("errorDescription")) || trackingNumRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
log.info("查询失败或者不存在符合条件数据");
res.put("errorCode", "error");
res.put("message", "跟踪号查询失败或者不存在符合条件数据");
return res;
}
log.info("跟踪号查询成功,继续向下执行");
JSONObject trackingNumData = trackingNumRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
System.out.println("当前正在处理的跟踪号为:" + trackingNumData);
String trackingNumStr = trackingNumData.getString("name");
//开始封装跟踪号数据
Map trackingNumMap = new HashMap();
trackingNumMap.put("number", trackingNumStr);//跟踪号
trackingNumMap.put("status", "C");//数据状态
trackingNumMap.put("sourcebillno", trackingNumData.getString("purchase_plan__c__r") != null ? trackingNumData.getString("purchase_plan__c__r") : "");//todo 来源单据编号
trackingNumMap.put("description", "C");//todo 描述
String lineStr = trackingNumStr.split("-")[1];
trackingNumMap.put("sourcebillentryseq", lineStr);//来源单据分录行号
trackingNumMap.put("f9w5_materialname", trackingNumData.getString("material_name__c") != null ? trackingNumData.getString("material_name__c") : "");//物料名称
String isNeedForProduction = trackingNumData.getString("is_need_for_production__c") != null ? trackingNumData.getString("is_need_for_production__c") : "";
switch (isNeedForProduction) {
case "yes":
trackingNumMap.put("f9w5_isuse", true);//是否需要生产使用该参数
break;
case "no":
trackingNumMap.put("f9w5_isuse", false);//是否需要生产使用该参数
break;
default:
trackingNumMap.put("f9w5_isuse", null);//是否需要生产使用该参数
break;
}
trackingNumMap.put("f9w5_deviceid", trackingNumData.getString("device_id_third__c") != null ? trackingNumData.getString("device_id_third__c") : "");//设备ID第三方编号
trackingNumMap.put("f9w5_apn", trackingNumData.getString("apn_parameters__c") != null ? trackingNumData.getString("apn_parameters__c") : "");//APN参数
trackingNumMap.put("f9w5_ip", trackingNumData.getString("ip_address__c") != null ? trackingNumData.getString("ip_address__c") : "");//ip
trackingNumMap.put("f9w5_port", trackingNumData.getString("port__c") != null ? trackingNumData.getString("port__c") : "");//端口
//是否插卡
String isCard = trackingNumData.getString("is_card_inserted__c") != null ? trackingNumData.getString("is_card_inserted__c") : "";
switch (isCard) {
case "yes":
trackingNumMap.put("f9w5_bindingcard", true);//是否插卡
break;
case "no":
trackingNumMap.put("f9w5_bindingcard", false);//是否插卡
break;
default:
trackingNumMap.put("f9w5_bindingcard", null);//是否插卡
break;
}
//快快拍模式
String snapShot = trackingNumData.getString("snap_mode__c") != null ? trackingNumData.getString("snap_mode__c") : "";
switch (snapShot) {
case "yes":
trackingNumMap.put("f9w5_snapshot", true);//是否插卡
break;
case "no":
trackingNumMap.put("f9w5_snapshot", false);//是否插卡
break;
default:
trackingNumMap.put("f9w5_snapshot", null);//是否插卡
break;
}
//前端智能识别
String isFront = trackingNumData.getString("front_end_intelligent_reco__c") != null ? trackingNumData.getString("front_end_intelligent_reco__c") : "";
switch (isFront) {
case "yes":
trackingNumMap.put("f9w5_frontir", true);//前端智能识别
break;
case "no":
trackingNumMap.put("f9w5_frontir", false);//前端智能识别
break;
default:
trackingNumMap.put("f9w5_frontir", null);//前端智能识别
break;
}
//运行模式修改
String runMode = trackingNumData.getString("operation_mode_update__c") != null ? trackingNumData.getString("operation_mode_update__c") : "";
trackingNumMap.put("f9w5_runmodification", runMode);
//通道拍照时间间隔
trackingNumMap.put("f9w5_channelinterval", trackingNumData.getString("channel_photo_interval__c__r") != null ? trackingNumData.getString("channel_photo_interval__c__r") : "");
//通道图片分辨率/像素
trackingNumMap.put("f9w5_channelpixel", trackingNumData.getString("channel_image_resolution__c__r") != null ? trackingNumData.getString("channel_image_resolution__c__r") : "");
//机芯图片分辨率/像素
trackingNumMap.put("f9w5_movementpixel", trackingNumData.getString("core_image_resolution__c__r") != null ? trackingNumData.getString("core_image_resolution__c__r") : "");
//副机通道号
String auxiliarychannel = trackingNumData.getString("secondary_channel_number__c") != null ? trackingNumData.getString("secondary_channel_number__c") : "";
if (auxiliarychannel.equals("") || auxiliarychannel.equals("option_none__c")) {
auxiliarychannel = "";
}
trackingNumMap.put("f9w5_auxiliarychannel", auxiliarychannel);
//机芯拍照时间间隔
trackingNumMap.put("f9w5_movementinterval", trackingNumData.getString("core_photo_interval__c__r") != null ? trackingNumData.getString("core_photo_interval__c__r") : "");
//副机绑定地址
trackingNumMap.put("f9w5_auxiliaryip", trackingNumData.getString("secondary_device_bound_add__c__r") != null ? trackingNumData.getString("secondary_device_bound_add__c__r") : "");
//副机通道类型
String auxiliarychanneltype = trackingNumData.getString("secondary_channel_type__c__r") != null ? trackingNumData.getString("secondary_channel_type__c__r") : "";
if (auxiliarychanneltype.equals("") || auxiliarychanneltype.equals("option_none__c")) {
auxiliarychanneltype = "";
}
trackingNumMap.put("f9w5_auxiliarytype", auxiliarychanneltype);
//维护时间段
trackingNumMap.put("f9w5_maintenancetime", trackingNumData.getString("maintenance_time_period__c") != null ? trackingNumData.getString("maintenance_time_period__c") : "");
//出厂内外卡选择
trackingNumMap.put("f9w5_inoutcard", trackingNumData.getString("factory_external_card_choi__c__r") != null ? trackingNumData.getString("factory_external_card_choi__c__r") : "");
//出厂平台选择
trackingNumMap.put("f9w5_outplatform", trackingNumData.getString("factory_platform_choice__c__r") != null ? trackingNumData.getString("factory_platform_choice__c__r") : "");
//铭牌
trackingNumMap.put("f9w5_nameplate", trackingNumData.getString("tag_name__c__r") != null ? trackingNumData.getString("tag_name__c__r") : "");
//流量卡
trackingNumMap.put("f9w5_flowcard", trackingNumData.getString("traffic_card__c__r") != null ? trackingNumData.getString("traffic_card__c__r") : "");
//联网模式配置
trackingNumMap.put("f9w5_confignetset", trackingNumData.getString("network_mode_config__c__r") != null ? trackingNumData.getString("network_mode_config__c__r") : "");
//是否开启维护模式
String isMaintenance = trackingNumData.getString("is_maintenance_mode_enable__c") != null ? trackingNumData.getString("is_maintenance_mode_enable__c") : "";
switch (isMaintenance) {
case "yes":
trackingNumMap.put("f9w5_ismaintenance", true);//前端智能识别
break;
case "no":
trackingNumMap.put("f9w5_ismaintenance", false);//前端智能识别
break;
default:
trackingNumMap.put("f9w5_ismaintenance", null);//前端智能识别
break;
}
//物料编码
trackingNumMap.put("f9w5_material_number", trackingNumData.getString("material_code__c__r") != null ? trackingNumData.getString("material_code__c__r") : "");
//平台
trackingNumMap.put("f9w5_smplatform_number", trackingNumData.getString("platform_name_code__c") != null ? trackingNumData.getString("platform_name_code__c") : "");
//todo 来源单据类型.编码
trackingNumMap.put("sourcebilltype_number", "f9w5_sm_purchaseplan_BT");
Map erpTrackReq = new HashMap<>();
erpTrackReq.put("data", Arrays.asList(trackingNumMap));
//开始获取token
String accessToken = new KDTokenController().getKDAccessTokenTest();
if (accessToken == null || accessToken.equals("")) {
log.info("金蝶token为空或不存在");
res.put("errorCode", "error");
res.put("message", "跟踪号金蝶token为空或不存在");
return res;
}
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 contractReqEntity = new HttpEntity(erpTrackReq, headers);
System.out.println(JSON.parseObject(JSON.toJSONString(contractReqEntity)));
String trackingNumUrl = ERPURLConstant.ERP_URL + "/ierp/kapi/v2/f9w5/sbd/bd_tracknumber/bdTracknumberSave";
//开始调用金蝶接口
JSONObject trackingNumERPRes = new JSONObject();
try {
trackingNumERPRes = restTemplate.postForObject(trackingNumUrl, contractReqEntity, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
res.put("errorCode", "error");
res.put("message", "跟踪号新增或更新请求失败");
return res;
}
System.out.println(JSON.parseObject(JSON.toJSONString(trackingNumERPRes)));
if ("0".equals(trackingNumERPRes.getString("errorCode"))) {
log.info("金蝶接口返回成功");
String trackingNumId = trackingNumERPRes.getJSONObject("data").getJSONArray("result").getJSONObject(0).getString("id");
res.put("errorCode", "success");
res.put("message", "请求成功");
} else {
log.info("金蝶接口返回失败");
res.put("errorCode", "error");
res.put("message", "跟踪号新增或更新请求失败" + trackingNumERPRes.getString("message"));
return res;
}
return res;
}
}