diff --git a/src/main/java/com/management/controller/PreContractController.java b/src/main/java/com/management/controller/PreContractController.java index 1f1667d..706ba4c 100644 --- a/src/main/java/com/management/controller/PreContractController.java +++ b/src/main/java/com/management/controller/PreContractController.java @@ -335,7 +335,7 @@ public class PreContractController { CrmRequestUtil crmRequestUtil = new CrmRequestUtil(); JSONObject preContractBGReq = crmRequestUtil.getCRMList(Arrays.asList( - new Filter("EQ", "name", Arrays.asList("2025-06-11-00002")) + new Filter("EQ", "name", Arrays.asList("2025-06-12-00003")) ), "pre_signed_contract__c__changeObj__c"); JSONObject preContractBGRes = new JSONObject(); @@ -358,7 +358,7 @@ public class PreContractController { //开始截取关键数据 String preContractId = preContractBGData.getString("_id"); - String modifyTime = preContractBGData.getString("last_modified_time"); + String createTime = preContractBGData.getString("create_time"); String YQHTName = preContractBGData.getString("name"); String originalName = preContractBGData.getString("original_data__r"); @@ -366,7 +366,7 @@ public class PreContractController { JSONObject isLogRes = new JSONObject(); try { - isLogRes = restTemplate.getForObject("http://localhost:18085/Log/query/log_data?table=send_log_htxx&log_type=YQHTBG&dataId=" + preContractId + "&mark=" + modifyTime, JSONObject.class); + isLogRes = restTemplate.getForObject("http://localhost:18085/Log/query/log_data?table=send_log_htxx&log_type=YQHTBG&dataId=" + preContractId + "&mark=" + createTime, JSONObject.class); } catch (RestClientException e) { e.printStackTrace(); } @@ -435,7 +435,7 @@ public class PreContractController { //YQBGMap.put("dept", deptERPCode);//部门编码 YQBGMap.put("dept", "ZHY");//部门编码 - List ownerId = preContractBGData.getJSONArray("owner") != null ? preContractBGData.getJSONArray("owner") : new ArrayList<>(); + List ownerId = preContractBGData.getJSONArray("change_owner") != null ? preContractBGData.getJSONArray("change_owner") : new ArrayList<>(); JSONObject getOwner = crmRequestUtil.getCRMList(Arrays.asList( new Filter("EQ", "user_id", ownerId) @@ -520,7 +520,7 @@ public class PreContractController { logMap.put("syn_type", "0"); logMap.put("data_name", YQHTName); logMap.put("data_id", preContractId); - logMap.put("mark", modifyTime); + logMap.put("mark", createTime); logMap.put("send_body", JSON.toJSONString(contractReqEntity)); logMap.put("send_res", JSON.toJSONString(contractRes)); logMap.put("tableName", "send_log_htxx"); @@ -530,7 +530,7 @@ public class PreContractController { //同步成功 logMap.put("log_status", "0"); logMap.put("res_body", "同步成功"); - backReqMap.put("updated_erp_id__c", contractRes.getJSONObject("data").getJSONArray("result").getJSONObject(0).getString("id")); + //backReqMap.put("updated_erp_id__c", contractRes.getJSONObject("data").getJSONArray("result").getJSONObject(0).getString("id")); backReqMap.put("sync_status__c", "option_sync_success__c"); backReqMap.put("response_info__c", "变更同步成功"); diff --git a/src/main/java/com/management/controller/XSHTController.java b/src/main/java/com/management/controller/XSHTController.java index 33d5f8d..9d762ce 100644 --- a/src/main/java/com/management/controller/XSHTController.java +++ b/src/main/java/com/management/controller/XSHTController.java @@ -18,6 +18,7 @@ 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.*; /** @@ -34,8 +35,9 @@ public class XSHTController { private RestTemplate restTemplate = new RestTemplate(); public static void main(String[] args) { - new XSHTController().syncXSHT(); + //new XSHTController().syncXSHT(); //new XSHTController().isComplete(); + new XSHTController().XSHTBGSync(); } /** @@ -166,8 +168,8 @@ public class XSHTController { erpContractReq.put("biztime", date);//签订日期,单据日期 erpContractReq.put("biztimebegin", date);//起始日期 erpContractReq.put("biztimeend", date);//截止日期 - erpContractReq.put("party1st", contractData.getString("account_id__r"));//甲方 - erpContractReq.put("party2nd", contractData.getString("our_company_name__c__r"));//乙方 + erpContractReq.put("party1st", contractData.getString("account_id__r") != null ? contractData.getString("account_id__r") : "");//甲方 + erpContractReq.put("party2nd", contractData.getString("our_company_name__c__r") != null ? contractData.getString("our_company_name__c__r") : "");//乙方 erpContractReq.put("bizmode", "C");//业务模式 A:统谈统签, B:统谈分签,C:分谈分签 erpContractReq.put("totalallamount", 0);//价税合计 erpContractReq.put("deviceqty", 0);//价税合计 @@ -246,23 +248,23 @@ public class XSHTController { JSONObject customerData = customerRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); - erpContractReq.put("customer_number", customerData.getString("account_no"));//合同单位名称 - erpContractReq.put("reccustomer_number", contractData.getString("receiver_customer__c"));//收获客户单位名称 + erpContractReq.put("customer_number", customerData.getString("account_no") != null ? customerData.getString("account_no") : "");//合同单位名称 + erpContractReq.put("reccustomer_number", contractData.getString("receiver_customer__c") != null ? contractData.getString("receiver_customer__c") : "");//收获客户单位名称 //erpContractReq.put("customer_number", "Cus-000001");//合同单位名称 erpContractReq.put("settlecustomer_number", contractData.getString("billing_customer_code__c") != null ? contractData.getString("billing_customer_code__c") : "");//结算客户 erpContractReq.put("payingcustomer_number", contractData.getString("payment_customer_code__c") != null ? contractData.getString("payment_customer_code__c") : "");//付款客户 //获取产品线 - erpContractReq.put("productline_number", contractData.getString("product_line__c"));//产品线 + erpContractReq.put("productline_number", contractData.getString("product_line__c") != null ? contractData.getString("product_line__c") : "");//产品线 //获取具体安装方式 - erpContractReq.put("installationmethod", contractData.getString("installation_method__c"));//安装方式 + erpContractReq.put("installationmethod", contractData.getString("installation_method__c") != null ? contractData.getString("installation_method__c") : "");//安装方式 //行业类型 - erpContractReq.put("industrytype_number", contractData.getString("industry_type__c"));//行业类型 - erpContractReq.put("province", contractData.getString("field_9IuQE__c__r"));//省 - erpContractReq.put("city", contractData.getString("field_9IuQE__c__r"));//市 - erpContractReq.put("county", contractData.getString("field_e9XrV__c"));//县 + erpContractReq.put("industrytype_number", contractData.getString("industry_type__c") != null ? contractData.getString("industry_type__c") : "");//行业类型 + erpContractReq.put("province", contractData.getString("field_9IuQE__c__r") != null ? contractData.getString("field_9IuQE__c__r") : "");//省 + erpContractReq.put("city", contractData.getString("field_9IuQE__c__r") != null ? contractData.getString("field_9IuQE__c__r") : "");//市 + erpContractReq.put("county", contractData.getString("field_e9XrV__c") != null ? contractData.getString("field_e9XrV__c") : "");//县 erpContractReq.put("warranty", contractData.getBigDecimal("warranty_period_months__c") != null ? contractData.getBigDecimal("warranty_period_months__c") : 0);//质保期 //是否招投标 @@ -281,8 +283,8 @@ public class XSHTController { } erpContractReq.put("isbidding", isBidding); - erpContractReq.put("customerpropert", contractData.getString("customer_attribute__c"));//客户属性 - erpContractReq.put("station", contractData.getString("bureau_level__c"));//局级 + erpContractReq.put("customerpropert", contractData.getString("customer_attribute__c") != null ? contractData.getString("customer_attribute__c") : "");//客户属性 + erpContractReq.put("station", contractData.getString("bureau_level__c") != null ? contractData.getString("bureau_level__c") : "");//局级 //款到发货 Boolean delivery = null; @@ -301,10 +303,10 @@ public class XSHTController { erpContractReq.put("delivery", delivery); //项目来源 - erpContractReq.put("projectsource", contractData.getString("project_source__c")); + erpContractReq.put("projectsource", contractData.getString("project_source__c") != null ? contractData.getString("project_source__c") : ""); //销售方式 - erpContractReq.put("salesmethod", contractData.getString("sales_method__c")); + erpContractReq.put("salesmethod", contractData.getString("sales_method__c") != null ? contractData.getString("sales_method__c") : ""); //根据合同号查询合同明细 JSONObject contractDetailReq = crmRequestUtil.getCRMList(Arrays.asList( @@ -503,6 +505,349 @@ public class XSHTController { } + /** + * 销售合同变更 + * + * @return void + * @Author weiloong_zhang + */ + @PostMapping("/sync/XSHTBG") + public void XSHTBGSync() { + CrmRequestUtil crmRequestUtil = new CrmRequestUtil(); + + JSONObject getContract = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "name", Arrays.asList("2025-06-12-00001")) + ), "SaleContractChangeObj"); + + JSONObject contractBGRes = new JSONObject(); + + try { + contractBGRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getContract, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if (!"success".equals(contractBGRes.getString("errorDescription")) || contractBGRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + log.info("未找到销售合同或者查询失败"); + return; + } + + for (Object contractBGObj : contractBGRes.getJSONObject("data").getJSONArray("dataList")) { + JSONObject contractBGData = JSON.parseObject(JSON.toJSONString(contractBGObj)); + + System.out.println("当前销售合同变更数据为:" + contractBGData); + + //开始截取关键数据 + String contractBGId = contractBGData.getString("_id"); + String createTime = contractBGData.getString("create_time"); + String contractBGName = contractBGData.getString("name"); + //原单单据 + String originalContractName = contractBGData.getString("name"); + + //开始查看是否已经同步 + JSONObject isLogRes = new JSONObject(); + + try { + isLogRes = restTemplate.getForObject("http://localhost:18085/Log/query/log_data?table=send_log_htxx&log_type=XSHTBG&dataId=" + contractBGId + "&mark=" + createTime, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if (!isLogRes.getJSONArray("data").isEmpty()) { + log.info("当前数据已经执行过了,将不再向下执行"); + continue; + } + + log.info("日志不存在,将继续向下执行"); + + //开始封装请求体 + Map contractBGMap = new HashMap(); + contractBGMap.put("billno", contractBGName);//合同编号 + + //开始获取商机编号 + String businessId = contractBGData.getString("change_opportunity_name__c") != null ? contractBGData.getString("change_opportunity_name__c") : ""; + + //根据商机唯一性ID获取商机编号 + JSONObject getBusiness = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "_id", Arrays.asList(businessId)) + ), "NewOpportunityObj"); + + JSONObject businessRes = new JSONObject(); + + try { + businessRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getBusiness, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if (!"success".equals(businessRes.getString("errorDescription")) || businessRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + log.info("不存在该商机,将不再向下执行"); + continue; + } + + String projectCode = businessRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0).getString("opportunity_id__c"); + + contractBGMap.put("project", projectCode);//项目号 + + //合同类型 + contractBGMap.put("zhybilltype", contractBGData.getString("change_contract_type__c") != null ? contractBGData.getString("change_contract_type__c") : ""); + //项目名称 + contractBGMap.put("billname", contractBGData.getString("change_project_name__c") != null ? contractBGData.getString("change_project_name__c") : ""); + //来源单据号 + contractBGMap.put("srcbillnumber", contractBGData.getString("original_data__r") != null ? contractBGData.getString("original_data__r") : ""); + //来源单ID + contractBGMap.put("srcsysbillid", contractBGData.getString("original_data") != null ? contractBGData.getString("original_data") : ""); + //CRMID + contractBGMap.put("crmid", contractBGData.getString("original_data") != null ? contractBGData.getString("original_data") : ""); + + //获取部门 + String ownerDept = contractBGData.getString("owner_department_id") != null ? contractBGData.getString("owner_department_id") : ""; + + JSONObject getDept = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "_id", Arrays.asList(ownerDept)) + ), "DepartmentObj"); + + JSONObject deptRes = new JSONObject(); + + try { + deptRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, getDept, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if (!"success".equals(deptRes.getString("errorDescription")) || deptRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + log.info("不存在该部门,将不再向下执行"); + continue; + } + + //开始获取部门 + String deptERPCode = deptRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0).getString("field_Vj6sf__c"); + //contractBGMap.put("dept", deptERPCode);//部门编码 + contractBGMap.put("dept", "ZHY");//部门编码 + + List ownerId = contractBGData.getJSONArray("owner") != null ? contractBGData.getJSONArray("owner") : new ArrayList<>(); + + JSONObject getOwner = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "user_id", ownerId) + ), "PersonnelObj"); + + JSONObject ownerRes = new JSONObject(); + + try { + ownerRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, getOwner, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if (!"success".equals(ownerRes.getString("errorDescription")) || ownerRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + log.info("负责人不存在或者请求失败"); + continue; + } + + System.out.println("负责人数据为:" + ownerRes); + + String ownerUserId = ownerRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0).getString("field_T1xid__c"); + //contractBGMap.put("operator", ownerUserId);//负责人 + contractBGMap.put("operator", "ID-000016");//负责人 + + //是否招投标 + Boolean isBidding = null; + + switch (contractBGData.getString("change_is_bidding__c")) { + case "yes": + isBidding = true; + break; + case "no": + isBidding = false; + break; + default: + isBidding = null; + break; + } + contractBGMap.put("isbidding", isBidding); + //客户属性 + contractBGMap.put("customerpropert", contractBGData.getString("change_customer_attribute__c") != null ? contractBGData.getString("change_customer_attribute__c") : ""); + //付款比例 + contractBGMap.put("payratio", contractBGData.getBigDecimal("change_prepayment_ratio__c") != null ? contractBGData.getBigDecimal("change_prepayment_ratio__c") : BigDecimal.ZERO); + //质保期 + contractBGMap.put("warranty", contractBGData.getBigDecimal("change_warranty_period_months__c") != null ? contractBGData.getBigDecimal("change_warranty_period_months__c") : BigDecimal.ZERO); + //订货客户 + contractBGMap.put("customer", contractBGData.getString("change_billing_customer_code__c") != null ? contractBGData.getString("change_billing_customer_code__c") : ""); + //产品线 + contractBGMap.put("productLine", contractBGData.getString("change_product_line__c") != null ? contractBGData.getString("change_product_line__c") : ""); + //安装方式 + contractBGMap.put("installationmethod", contractBGData.getString("change_installation_method__c") != null ? contractBGData.getString("change_installation_method__c") : ""); + //行业类型 + contractBGMap.put("industrytype", contractBGData.getString("change_industry_type__c") != null ? contractBGData.getString("change_industry_type__c") : ""); + //省 + contractBGMap.put("province", contractBGData.getString("change_field_9IuQE__c__r") != null ? contractBGData.getString("change_field_9IuQE__c__r") : ""); + //市 + contractBGMap.put("city", contractBGData.getString("change_field_cuMW9__c__r") != null ? contractBGData.getString("change_field_cuMW9__c__r") : ""); + //区 + contractBGMap.put("county", contractBGData.getString("change_field_e9XrV__c__r") != null ? contractBGData.getString("change_field_e9XrV__c__r") : ""); + //局级 + contractBGMap.put("station", contractBGData.getString("change_bureau_level__c") != null ? contractBGData.getString("change_bureau_level__c") : ""); + //款到发货 + Boolean delivery = null; + + switch (contractBGData.getString("change_ship_on_payment_received__c")) { + case "yes": + delivery = true; + break; + case "no": + delivery = false; + break; + default: + delivery = null; + break; + } + + contractBGMap.put("delivery", delivery); + //项目来源 + contractBGMap.put("projectsource", contractBGData.getString("change_project_source__c") != null ? contractBGData.getString("change_project_source__c") : ""); + //销售方式 + contractBGMap.put("salesmethod", contractBGData.getString("change_sales_method__c") != null ? contractBGData.getString("change_sales_method__c") : ""); + + //开始查询明细 + JSONObject getContractBGDetail = crmRequestUtil.getCRMList(Arrays.asList( + new Filter("EQ", "changed_data", Arrays.asList(contractBGId)) + ), "SaleContractLineChangeObj"); + + JSONObject contractBGDetailRes = new JSONObject(); + + try { + contractBGDetailRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getContractBGDetail, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + if (!"success".equals(contractBGDetailRes.getString("errorDescription")) || contractBGDetailRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + log.info("合同明细不存在或者请求失败"); + continue; + } + + //请求成功,开始封装 + List contractBGDetailList = new ArrayList(); + + for (Object contractBGDetailObj : contractBGDetailRes.getJSONObject("data").getJSONArray("dataList")) { + JSONObject contractBGDetailData = JSON.parseObject(JSON.toJSONString(contractBGDetailObj)); + + System.out.println("合同明细数据为:" + contractBGDetailData); + + //开始封装合同变更单明细 + Map contractBGDetailMap = new HashMap(); + //商品名称 + contractBGDetailMap.put("goodsname", contractBGDetailData.getString("change_product_name__c") != null ? contractBGDetailData.getString("change_product_name__c") : ""); + //规格型号 + contractBGDetailMap.put("specification", contractBGDetailData.getString("change_specification__c") != null ? contractBGDetailData.getString("change_specification__c") : ""); + //todo 计量单位 + contractBGDetailMap.put("unit", "pcs"); + //数量 + contractBGDetailMap.put("qty", contractBGDetailData.getBigDecimal("change_quantity") != null ? contractBGDetailData.getBigDecimal("change_quantity") : BigDecimal.ZERO); + //含税单价 + contractBGDetailMap.put("priceandtax", contractBGDetailData.getBigDecimal("change_sales_price") != null ? contractBGDetailData.getBigDecimal("change_sales_price") : BigDecimal.ZERO); + //税率 + contractBGDetailMap.put("taxrateid", contractBGDetailData.getString("change_tax_rate_code__c") != null ? contractBGDetailData.getString("change_tax_rate_code__c") : ""); + //行ID + contractBGDetailMap.put("crmentryid", contractBGDetailData.getString("original_detail_data")); + + contractBGDetailList.add(contractBGDetailMap); + } + + contractBGMap.put("entryList", contractBGDetailList); + + //开始获取token + 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 contractReqEntity = new HttpEntity(contractBGMap, headers); + + System.out.println(JSON.parseObject(JSON.toJSONString(contractReqEntity))); + + String contractUrl = ERPURLConstant.ERP_URL + "/ierp/kapi/v2/f9w5/conm/salcontract/change"; + + JSONObject contractRes = new JSONObject(); + + try { + contractRes = restTemplate.postForObject(contractUrl, contractReqEntity, JSONObject.class); + } catch (RestClientException e) { + e.printStackTrace(); + } + + System.out.println(JSON.parseObject(JSON.toJSONString(contractRes))); + + //开始封装回写程序 + Map backReqMap = new HashMap(); + backReqMap.put("_id", contractBGData.getString("original_data")); + backReqMap.put("dataObjectApiName", "SaleContractObj"); + + //开始封装日志 + Map logMap = new HashMap<>(); + logMap.put("log_id", UUID.randomUUID().toString().replace("-", "")); + logMap.put("log_type", "XSHTBG"); + logMap.put("syn_type", "0"); + logMap.put("data_name", contractBGName); + logMap.put("data_id", contractBGId); + logMap.put("mark", createTime); + logMap.put("send_body", JSON.toJSONString(contractReqEntity)); + logMap.put("send_res", JSON.toJSONString(contractRes)); + logMap.put("tableName", "send_log_htxx"); + + //判断是否执行成功 + if ("0".equals(contractRes.getString("errorCode"))) { + //同步成功 + logMap.put("log_status", "0"); + logMap.put("res_body", "同步成功"); + //backReqMap.put("updated_erp_id__c", contractRes.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(contractRes.getJSONObject("data").getJSONArray("result").getJSONObject(0).getString("id"), "conm_salcontract"); + } else { + //同步失败 + logMap.put("log_status", "1"); + logMap.put("res_body", "同步失败:" + contractRes.getString("message")); + backReqMap.put("sync_status__c", "option_sync_failure__c"); + backReqMap.put("response_info__c", "变更失败:" + contractRes.getString("message")); + } + + //开始回写 + 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); + + //开始记录日志 + 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); + } + } + /** * 是否竣工 *