zhyManagement/src/main/java/com/management/controller/GoodsPlanController.java
2025-06-13 18:33:58 +08:00

1063 lines
49 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.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("延时任务执行");
}, 10, TimeUnit.SECONDS); //10秒后执行
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);//跟踪号
//程序版本
String programVersion = goodsPlanDetailData.getString("program_version_number__c") != null ? goodsPlanDetailData.getString("program_version_number__c") : "";
if (programVersion.equals("")) {
log.info("程序版本不存在,将不再向下执行");
continue;
}
erpGoodsPlanDetailReq.put("f9w5_programversion_number", programVersion);//程序版本
//程序版本编码
String programVersionCode = goodsPlanDetailData.getString("platform_name_code__c") != null ? goodsPlanDetailData.getString("platform_name_code__c") : "";
if (programVersionCode.equals("")) {
log.info("程序版本编码不存在,将不再向下执行");
continue;
}
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") : "");//项目号
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;
}
//判断明细是否存在
if (goodsPlanDetailList.isEmpty()) {
log.info("明细为空,将不再向下执行");
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", "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;
}
}