zhyManagement/src/main/java/com/management/tzcontroller/DeliveryReqController.java

501 lines
22 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.tzcontroller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.management.constant.URLConstant;
import com.management.entity.Filter;
import com.management.utils.CrmRequestUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
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.math.BigDecimal;
import java.util.*;
/**
* 发货申请单
*
* @param
* @return null
* @Author weiloong_zhang
*/
@RestController
@RequestMapping("/api/delivery")
@Slf4j
public class DeliveryReqController {
private RestTemplate restTemplate = new RestTemplate();
public static void main(String[] args) {
//new DeliveryReqController().syncDeliveryReq();
new DeliveryReqController().syncRefund();
}
/**
* 同步发货申请单
*
* @return void
* @Author weiloong_zhang
*/
@PostMapping("/sync_delivery")
public void syncDeliveryReq() {
CrmRequestUtil crmRequestUtil = new CrmRequestUtil();
log.info("开始执行发货申请单台账新增");
String[] syncStatus = {"option_pending_sync__c", "option_resync__c"};
JSONObject getDelivery = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("GT", "last_modified_time", Arrays.asList("1748923200000")),
new Filter("EQ", "life_status", Arrays.asList("normal")),
new Filter("EQ", "sync_status__c", Arrays.asList("option_sync_success__c")),
//new Filter("EQ", "name", Arrays.asList("FHSQ202505270013")),
new Filter("IN", "ledger_sync_status__c", Arrays.asList(syncStatus))
), "shipping_application__c");
JSONObject deliveryRes = new JSONObject();
try {
deliveryRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getDelivery, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if (!"success".equals(deliveryRes.getString("errorDescription")) || deliveryRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
log.info("发货申请单为空或者请求失败,将不再向下执行");
return;
}
for (Object deliveryObj : deliveryRes.getJSONObject("data").getJSONArray("dataList")) {
JSONObject deliveryData = JSON.parseObject(JSON.toJSONString(deliveryObj));
System.out.println("当前正在处理的数据为:" + deliveryData);
//开始截取关键数据
String deliveryId = deliveryData.getString("_id");
String deliveryName = deliveryData.getString("name");
String modifiedTime = deliveryData.getString("last_modified_time");
//开始查询是否已经集成过该单据了
JSONObject isLogRes = new JSONObject();
try {
isLogRes = restTemplate.getForObject("http://localhost:18085/Log/query/log_data?table=send_log_tzfhsq&log_type=TZFHSQ&dataId=" + deliveryId + "&mark=" + modifiedTime, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if (!isLogRes.getJSONArray("data").isEmpty()) {
log.info("数据已经存在,将不再继续向下执行");
continue;
}
log.info("数据不存在,将开始向下执行");
//开始封装主表数据
Map deliveryReqMap = new HashMap<>();
deliveryReqMap.put("id", deliveryId);//主表唯一id
deliveryReqMap.put("dispatchNo", deliveryName);//发货单号
deliveryReqMap.put("salesContract", deliveryData.getString("sales_contract_number__c__r") != null ? deliveryData.getString("sales_contract_number__c__r") : "");//销售合同号
deliveryReqMap.put("salesId", deliveryData.getString("sales_contract_number__c") != null ? deliveryData.getString("sales_contract_number__c") : "");//预签合同号
deliveryReqMap.put("preSignContract", deliveryData.getString("pre_signed_contract_id__c__r") != null ? deliveryData.getString("pre_signed_contract_id__c__r") : "");//预签合同号
deliveryReqMap.put("preSignId", deliveryData.getString("pre_signed_contract_id__c") != null ? deliveryData.getString("pre_signed_contract_id__c") : "");
deliveryReqMap.put("project", deliveryData.getString("project_id__c") != null ? deliveryData.getString("project_id__c") : "");//项目号
deliveryReqMap.put("businessType", 0);//业务类型
deliveryReqMap.put("organization", "ZHY");//组织
//开始查询明细数据
JSONObject deliveryDetail = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "shipping_application__c", Arrays.asList(deliveryId))
), "shipping_product__c");
JSONObject deliveryDetailRes = new JSONObject();
try {
deliveryDetailRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, deliveryDetail, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if (!"success".equals(deliveryDetailRes.getString("errorDescription")) || deliveryDetailRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
log.info("发货申请单明细为空或者请求失败,将不再向下执行");
continue;
}
log.info("存在发货明细数据,将继续向下执行");
List deliveryDetailList = new ArrayList();
for (Object deliveryDetailObj : deliveryDetailRes.getJSONObject("data").getJSONArray("dataList")) {
JSONObject deliveryDetailData = JSON.parseObject(JSON.toJSONString(deliveryDetailObj));
System.out.println("当前正在处理的明细数据为:" + deliveryDetailData);
String materialCode = deliveryDetailData.getString("material_code__c__r") != null ? deliveryDetailData.getString("material_code__c__r") : "";
if (!materialCode.startsWith("30")) {
continue;
}
//开始封装数据
Map deliveryDetailMap = new HashMap<>();
deliveryDetailMap.put("id", deliveryDetailData.getString("_id"));//明细id
deliveryDetailMap.put("lot", deliveryDetailData.getString("batch_number__c") != null ? deliveryDetailData.getString("batch_number__c") : "");//批号
deliveryDetailMap.put("trackNo", deliveryDetailData.getString("shipping_tracking_number__c") != null ? deliveryDetailData.getString("shipping_tracking_number__c") : "");//跟踪号
deliveryDetailMap.put("unit", deliveryDetailData.getString("unit__c__r") != null ? deliveryDetailData.getString("unit__c__r") : "");//单位
deliveryDetailMap.put("materialCode", deliveryDetailData.getString("material_code__c__r") != null ? deliveryDetailData.getString("material_code__c__r") : "");//物料编码
deliveryDetailMap.put("quantity", deliveryDetailData.getBigDecimal("current_application_quanti__c") != null ? deliveryDetailData.getBigDecimal("current_application_quanti__c") : new BigDecimal(0));//数量
deliveryDetailList.add(deliveryDetailMap);
}
if (deliveryDetailList.isEmpty()) {
log.info("发货申请单明细为空,将不再向下执行");
continue;
}
deliveryReqMap.put("detailList", deliveryDetailList);//发货申请明细
//开始获取token
String token = new LedgerTokenController().getToken();
if (token == null || "".equals(token)) {
log.info("台账token获取失败将不再向下执行");
continue;
}
//开始封装请求头
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");
headers.set("accessToken", token);
HttpEntity reqEntity = new HttpEntity(Arrays.asList(deliveryReqMap), headers);
//开始发起请求
String deliveryUrl = "http://192.168.9.4:9011/crm/initShipApply";
JSONObject deliveryResult = new JSONObject();
try {
deliveryResult = restTemplate.postForObject(deliveryUrl, reqEntity, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println(JSON.parseObject(JSON.toJSONString(deliveryResult)));
//开始封装回写程序
Map backReqMap = new HashMap();
backReqMap.put("_id", deliveryId);
backReqMap.put("dataObjectApiName", "shipping_application__c");
//开始封装日志
Map logMap = new HashMap<>();
logMap.put("log_id", UUID.randomUUID().toString().replace("-", ""));
logMap.put("log_type", "TZFHSQ");
logMap.put("syn_type", "0");
logMap.put("data_name", deliveryName);
logMap.put("data_id", deliveryId);
logMap.put("mark", modifiedTime);
logMap.put("send_body", JSON.toJSONString(reqEntity));
logMap.put("send_res", JSON.toJSONString(deliveryResult));
logMap.put("tableName", "send_log_tzfhsq");
//判断是否执行成功
if (deliveryResult.getInteger("code") == 0) {
//同步成功
logMap.put("log_status", "0");
logMap.put("res_body", "同步成功");
backReqMap.put("ledger_sync_status__c", "option_sync_success__c");
backReqMap.put("ledger_response_status__c", deliveryResult.getString("msg"));
} else {
//同步失败
logMap.put("log_status", "1");
logMap.put("res_body", "同步失败:" + deliveryResult.getString("msg"));
backReqMap.put("ledger_sync_status__c", "option_sync_failure__c");
backReqMap.put("ledger_response_status__c", deliveryResult.getString("msg"));
}
//开始回写
JSONObject unlockReq = crmRequestUtil.unlockCRM(deliveryId, "shipping_application__c");
//解锁
if ("1".equals(deliveryData.getString("lock_status"))) {
log.info("解锁");
JSONObject unlockRes = new JSONObject();
try {
unlockRes = restTemplate.postForObject(URLConstant.UNLOCK_CRM_URL, unlockReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("解锁" + unlockRes);
}
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);
log.info("上锁");
JSONObject lockRes = new JSONObject();
try {
lockRes = restTemplate.postForObject(URLConstant.LOCK_CRM_URL, unlockReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("上锁" + lockRes);
//开始记录日志
JSONObject logRes = new JSONObject();
try {
logRes = restTemplate.postForObject("http://localhost:18085/Log/insert/log_data", logMap, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("日志插入结果为:" + logRes);
}
}
/**
* 退货申请
*
* @Author weiloong_zhang
*/
@PostMapping
public void syncRefund() {
CrmRequestUtil crmRequestUtil = new CrmRequestUtil();
String[] syncStatus = {"option_pending_sync__c", "option_resync__c"};
JSONObject getRefund = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("GT", "last_modified_time", Arrays.asList("1748923200000")),
new Filter("EQ", "life_status", Arrays.asList("normal")),
new Filter("EQ", "sync_status__c", Arrays.asList("option_sync_success__c")),
//new Filter("EQ", "name", Arrays.asList("FHSQ202505270013")),
new Filter("IN", "ledger_sync_status__c", Arrays.asList(syncStatus))
), "return_application__c");
JSONObject refundRes = new JSONObject();
try {
refundRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getRefund, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if (!"success".equals(refundRes.getString("errorDescription")) || refundRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
log.info("退货申请不存在或者请求失败");
return;
}
for (Object refundObj : refundRes.getJSONObject("data").getJSONArray("dataList")) {
JSONObject refundData = JSON.parseObject(JSON.toJSONString(refundObj));
System.out.println("当前正在处理的数据为:" + refundData);
//开始截取关键数据
String refundId = refundData.getString("_id");//唯一id
String refundName = refundData.getString("name");//单据编号
String modifyTime = refundData.getString("last_modified_time");//创建时间
//判断该单据是否已经集成过
JSONObject isLogRes = new JSONObject();
try {
isLogRes = restTemplate.getForObject("http://localhost:18085/Log/query/log_data?table=send_log_tzfhsq&log_type=TZTHSQ&dataId=" + refundId + "&mark=" + modifyTime, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if (!isLogRes.getJSONArray("data").isEmpty()) {
log.info("数据存在,将不再向下执行");
continue;
}
log.info("数据不存在,将继续向下执行");
//封装退货申请
Map refundReqMap = new HashMap<>();
refundReqMap.put("id", refundId);//主表唯一id
refundReqMap.put("dispatchNo", refundName);//发货单号
refundReqMap.put("salesContract", refundData.getString("sales_contract_number__c__r") != null ? refundData.getString("sales_contract_number__c__r") : "");//销售合同号
refundReqMap.put("salesId", refundData.getString("sales_contract_number__c") != null ? refundData.getString("sales_contract_number__c") : "");//销售合同ID
refundReqMap.put("preSignContract", refundData.getString("pre_signed_contract__c__r") != null ? refundData.getString("pre_signed_contract__c__r") : "");//预签合同号
refundReqMap.put("preSignId", refundData.getString("pre_signed_contract__c") != null ? refundData.getString("pre_signed_contract__c") : "");//预签合同ID
refundReqMap.put("project", refundData.getString("refer_project_id__c") != null ? refundData.getString("refer_project_id__c") : "");//项目号
refundReqMap.put("businessType", 1);//业务类型
refundReqMap.put("organization", "ZHY");//组织
//开始查询明细数据
JSONObject refundDetail = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "field_Ok1G3__c", Arrays.asList(refundId))
), "return_application_details__c");
JSONObject refundDetailRes = new JSONObject();
try {
refundDetailRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, refundDetail, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if (!"success".equals(refundDetailRes.getString("errorDescription")) || refundDetailRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
log.info("退货申请单明细为空或者请求失败,将不再向下执行");
continue;
}
log.info("存在退货明细数据,将继续向下执行");
List refundDetailList = new ArrayList();
for (Object refundDetailObj : refundDetailRes.getJSONObject("data").getJSONArray("dataList")) {
JSONObject refundDetailData = JSON.parseObject(JSON.toJSONString(refundDetailObj));
System.out.println("当前正在处理的明细数据为:" + refundDetailData);
//开始封装数据
Map refundDetailMap = new HashMap<>();
refundDetailMap.put("id", refundDetailData.getString("_id"));//明细id
refundDetailMap.put("lot", refundDetailData.getString("batch_number__c") != null ? refundDetailData.getString("batch_number__c") : "");//批号
refundDetailMap.put("trackNo", refundDetailData.getString("tracking_number__c") != null ? refundDetailData.getString("tracking_number__c") : "");//跟踪号
refundDetailMap.put("unit", refundDetailData.getString("unit__c__r") != null ? refundDetailData.getString("unit__c__r") : "");//单位
refundDetailMap.put("materialCode", refundDetailData.getString("material_id__c__r") != null ? refundDetailData.getString("material_id__c__r") : "");//物料编码
refundDetailMap.put("quantity", refundDetailData.getBigDecimal("quantity__c") != null ? refundDetailData.getBigDecimal("quantity__c") : new BigDecimal(0));//数量
refundDetailList.add(refundDetailMap);
}
refundReqMap.put("detailList", refundDetailList);
//开始获取token
String token = new LedgerTokenController().getToken();
if (token == null || "".equals(token)) {
log.info("台账token获取失败将不再向下执行");
continue;
}
//开始封装请求头
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");
headers.set("accessToken", token);
HttpEntity reqEntity = new HttpEntity(Arrays.asList(refundReqMap), headers);
//开始发起请求
String refundUrl = "http://192.168.9.4:9011/crm/initShipApply";
JSONObject refundResult = new JSONObject();
try {
refundResult = restTemplate.postForObject(refundUrl, reqEntity, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println(JSON.parseObject(JSON.toJSONString(refundResult)));
//开始封装回写程序
Map backReqMap = new HashMap();
backReqMap.put("_id", refundId);
backReqMap.put("dataObjectApiName", "return_application__c");
//开始封装日志
Map logMap = new HashMap<>();
logMap.put("log_id", UUID.randomUUID().toString().replace("-", ""));
logMap.put("log_type", "TZTHSQ");
logMap.put("syn_type", "0");
logMap.put("data_name", refundName);
logMap.put("data_id", refundId);
logMap.put("mark", modifyTime);
logMap.put("send_body", JSON.toJSONString(reqEntity));
logMap.put("send_res", JSON.toJSONString(refundResult));
logMap.put("tableName", "send_log_tzfhsq");
//判断是否执行成功
if (refundResult.getInteger("code") == 0) {
//同步成功
logMap.put("log_status", "0");
logMap.put("res_body", "同步成功");
backReqMap.put("ledger_sync_status__c", "option_sync_success__c");
backReqMap.put("ledger_response_status__c", refundResult.getString("msg"));
} else {
//同步失败
logMap.put("log_status", "1");
logMap.put("res_body", "同步失败:" + refundResult.getString("msg"));
backReqMap.put("ledger_sync_status__c", "option_sync_failure__c");
backReqMap.put("ledger_response_status__c", refundResult.getString("msg"));
}
//开始回写
JSONObject unlockReq = crmRequestUtil.unlockCRM(refundId, "return_application__c");
//解锁
if ("1".equals(refundData.getString("lock_status"))) {
log.info("解锁");
JSONObject unlockRes = new JSONObject();
try {
unlockRes = restTemplate.postForObject(URLConstant.UNLOCK_CRM_URL, unlockReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("解锁" + unlockRes);
}
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);
log.info("上锁");
JSONObject lockRes = new JSONObject();
try {
lockRes = restTemplate.postForObject(URLConstant.LOCK_CRM_URL, unlockReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("上锁" + lockRes);
//开始记录日志
JSONObject logRes = new JSONObject();
try {
logRes = restTemplate.postForObject("http://localhost:18085/Log/insert/log_data", logMap, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("日志插入结果为:" + logRes);
}
}
}