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 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.math.BigDecimal; import java.util.*; @RestController @RequestMapping("/api/invoice") @Slf4j public class InvoiceController { private RestTemplate restTemplate = new RestTemplate(); public static void main(String[] args) { new InvoiceController().syncInvoice(); //new InvoiceController().syncRedInvoice(); } /** * 发票同步 * * @return void * @Author weiloong_zhang */ @PostMapping("/sync_invoice") public void syncInvoice() { CrmRequestUtil crmRequestUtil = new CrmRequestUtil(); String[] syncStatus = {"option_pending_sync__c", "option_resync__c"}; JSONObject getInvoice = crmRequestUtil.getCRMList(Arrays.asList( //new Filter("IS", "erp_id__c", Arrays.asList("")), new Filter("IN", "sync_status__c", Arrays.asList(syncStatus)), new Filter("EQ", "life_status", Arrays.asList("normal")), //new Filter("EQ", "name", Arrays.asList("20250527-000010")) new Filter("GT", "create_time", Arrays.asList("1748923200000")) ), "InvoiceApplicationObj"); log.info("开始同步创建发票"); JSONObject invoiceRes = new JSONObject(); try { invoiceRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getInvoice, JSONObject.class); } catch (RestClientException e) { e.printStackTrace(); } if (!"success".equals(invoiceRes.getString("errorDescription")) || invoiceRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { log.info("发票查询失败或者不存在"); return; } log.info("单据存在,继续向下执行"); for (Object invoiceObj : invoiceRes.getJSONObject("data").getJSONArray("dataList")) { JSONObject invoiceData = JSON.parseObject(JSON.toJSONString(invoiceObj)); System.out.println("当前正在处理的发票为:" + invoiceData); //开始截取关键数据 //发票CRMID String invoiceId = invoiceData.getString("_id"); //发票名称 String invoiceName = invoiceData.getString("name"); //开票创建时间 //String createTime = invoiceData.getString("create_time"); String createTime = invoiceData.getString("last_modified_time"); //开始判断数据库中是否存在数据 JSONObject isLogRes = new JSONObject(); try { isLogRes = restTemplate.getForObject("http://localhost:18085/Log/query/log_data?table=send_log_invoice&log_type=KP&dataId=" + invoiceId + "&mark=" + createTime, JSONObject.class); } catch (RestClientException e) { e.printStackTrace(); } if (!isLogRes.getJSONArray("data").isEmpty()) { log.info("当前数据已经执行过了,将不再向下执行"); continue; } log.info("日志不存在,将继续向下执行"); //开始封装请求 Map invoiceMap = new HashMap(); String invoiceType = invoiceData.getString("record_type") != null ? invoiceData.getString("record_type") : ""; invoiceMap.put("billsourcetype", "blue"); invoiceMap.put("crmbillno", invoiceName);//单据编号 invoiceMap.put("crmid", invoiceData.getString("sales1_contract__c"));//销售合同CRMID //是否国网 String isGWStr = invoiceData.getString("is_state_grid__c") != null ? invoiceData.getString("is_state_grid__c") : ""; Boolean isGW = null; switch (isGWStr) { case "ubaL12a0M": isGW = true; break; case "tiVjNIMLU": isGW = false; break; default: isGW = null; break; } invoiceMap.put("isgw", isGW);//是否国网 //是否设计建筑服务 String isJZStr = invoiceData.getString("is_involved_construction_s__c") != null ? invoiceData.getString("is_involved_construction_s__c") : ""; Boolean isJZ = null; switch (isJZStr) { case "option_is_yes__c": isJZ = true; break; case "option_is_no__c": isJZ = false; break; default: isJZ = null; break; } invoiceMap.put("isjzfw", isJZ);//是否设计建筑服务 //是否跨地市 String isCityStr = invoiceData.getString("is_cross_city__c") != null ? invoiceData.getString("is_cross_city__c") : ""; Boolean isCity = null; switch (isCityStr) { case "option_is_yes__c": isCity = true; break; case "option_is_no__c": isCity = false; break; default: isCity = null; break; } invoiceMap.put("iskds", isCity);//是否跨地市 invoiceMap.put("jzaddr", invoiceData.getString("field_b11hY__c") != null ? invoiceData.getString("field_b11hY__c") : "");//建筑服务发生地 invoiceMap.put("jzpjname", invoiceData.getString("field_6cxEV__c") != null ? invoiceData.getString("field_6cxEV__c") : "");//建筑服务项目名称 invoiceMap.put("crminvoiceid", invoiceId);//crm开票申请ID //开票类型 String invoiceKinds = invoiceData.getString("invoice_type") != null ? invoiceData.getString("invoice_type") : ""; invoiceMap.put("invoicetype", invoiceKinds); invoiceMap.put("comment", invoiceData.getString("remark") != null ? invoiceData.getString("remark") : "");//发票备注 invoiceMap.put("buyeremail", invoiceData.getString("invoice_delivery_email__c") != null ? invoiceData.getString("invoice_delivery_email__c") : "2019326567@qq.com");//发票推送邮箱 //开票单位编码 String customerId = invoiceData.getString("invoice_unit__c") != null ? invoiceData.getString("invoice_unit__c") : "TEST0001"; //根据客户唯一id查询客户编码 JSONObject getCustomer = crmRequestUtil.getCRMList(Arrays.asList( new Filter("EQ", "_id", Arrays.asList(customerId)) ), "AccountObj"); JSONObject customerRes = new JSONObject(); try { customerRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getCustomer, JSONObject.class); } catch (RestClientException e) { e.printStackTrace(); } if (!"success".equals(customerRes.getString("errorDescription")) || customerRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { log.info("未找到开票单位或者查询失败"); continue; } JSONObject customerData = customerRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); String customerNumber = customerData.getString("account_no"); invoiceMap.put("asstact_number", customerNumber);//往来户(客户) invoiceMap.put("buyertaxno", invoiceData.getString("tax_id") != null ? invoiceData.getString("tax_id") : "");//纳税人识别号 //开票地址 String invoice_add = invoiceData.getString("invoice_add") != null ? invoiceData.getString("invoice_add") : ""; invoiceMap.put("buyeraddr", invoice_add);//购方地址 //电话 String invoice_phone = invoiceData.getString("invoice_tel") != null ? invoiceData.getString("invoice_tel") : ""; invoiceMap.put("buyerphone", invoice_phone);//购方电话 //开户行 String account_bank = invoiceData.getString("account_bank") != null ? invoiceData.getString("account_bank") : ""; invoiceMap.put("buyerbank", account_bank); //开户账号 String account_bank_no = invoiceData.getString("account_bank_no") != null ? invoiceData.getString("account_bank_no") : ""; invoiceMap.put("buyerbanknumber", account_bank_no); //是否展示地址电话 Boolean isShowTel = invoiceData.getBoolean("show_address_phone__c"); invoiceMap.put("showbuyeraddresstel", isShowTel); //是否展示明细 Boolean isShowDetail = invoiceData.getBoolean("invoice_details_complete__c"); invoiceMap.put("showdetails", isShowDetail); //是否展示开户行及账号 Boolean isShowBank = invoiceData.getBoolean("show_bank_account__c"); invoiceMap.put("showbuyerbank", isShowBank); //是否含软 String isHasSoft = invoiceData.getString("is_contain_soft__c") != null ? invoiceData.getString("is_contain_soft__c") : ""; Boolean isHasSoftBool = false; switch (isHasSoft) { case "v2j71Ak5p": isHasSoftBool = true; break; case "YOZj917km": isHasSoftBool = false; break; } invoiceMap.put("issoftworks", isHasSoftBool); //软著版本编码 invoiceMap.put("softworks_number", invoiceData.getString("positive_number__c") != null ? invoiceData.getString("positive_number__c") : ""); //开始查询明细 JSONObject getInvoiceDetail = crmRequestUtil.getCRMList(Arrays.asList( new Filter("EQ", "invoice_id", Arrays.asList(invoiceId)) ), "InvoiceApplicationLinesObj"); JSONObject invoiceDetailRes = new JSONObject(); try { invoiceDetailRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getInvoiceDetail, JSONObject.class); } catch (RestClientException e) { e.printStackTrace(); } if (!"success".equals(invoiceDetailRes.getString("errorDescription")) || invoiceDetailRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { log.info("发票明细查询失败或者不存在"); continue; } log.info("发票明细查询成功,将继续向下执行"); List entry = new ArrayList<>(); for (Object invoiceDetailObj : invoiceDetailRes.getJSONObject("data").getJSONArray("dataList")) { JSONObject invoiceDetailData = JSON.parseObject(JSON.toJSONString(invoiceDetailObj)); System.out.println("当前正在处理的明细为:" + invoiceDetailData); Map entryMap = new HashMap(); if (invoiceType.equals("default__c")) { //blue传销售合同明细id entryMap.put("crmentryid", invoiceDetailData.getString("sales_contract_details__c")); } else if (invoiceType.equals("record_3pGf2__c")) { //red传开票申请单明细id entryMap.put("crmentryid", invoiceDetailData.getString("_id")); } entryMap.put("crminvoiceentryid", invoiceDetailData.getString("_id"));//开票申请明细id entryMap.put("goodsname", invoiceDetailData.getString("invoice_product_name__c") != null ? invoiceDetailData.getString("invoice_product_name__c") : "");//商品名称 //entryMap.put("softworks_number", invoiceDetailData.getString("invoice_product_num__c") != null ? invoiceDetailData.getString("invoice_product_num__c") : "");//软著编码 entryMap.put("taxratecodeid_number", invoiceDetailData.getString("product_category__c") != null ? invoiceDetailData.getString("product_category__c") : "");//税收分类 entryMap.put("quantity", invoiceDetailData.getBigDecimal("field_9C0j7__c") != null ? invoiceDetailData.getBigDecimal("field_9C0j7__c") : 0);//数量 entryMap.put("taxunitprice", invoiceDetailData.getBigDecimal("tax_inclusive_unit_price__c") != null ? invoiceDetailData.getBigDecimal("tax_inclusive_unit_price__c") : 0);//含税单价 entryMap.put("recamount", invoiceDetailData.getBigDecimal("invoiced_amount") != null ? invoiceDetailData.getBigDecimal("invoiced_amount") : 0);//应收金额-开票小计 entryMap.put("taxrateid_number", invoiceDetailData.getString("tax_rate_code__c") != null ? invoiceDetailData.getString("tax_rate_code__c") : "");//税率编码 entryMap.put("measureunit_number", invoiceDetailData.getString("unit__c") != null ? invoiceDetailData.getString("unit__c") : "");//计量单位 entryMap.put("specification", invoiceDetailData.getString("specification_model__c") != null ? invoiceDetailData.getString("specification_model__c") : "");//规格型号 entry.add(entryMap); } invoiceMap.put("entry", entry); //开始获取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 invoiceReqEntity = new HttpEntity(invoiceMap, headers); System.out.println(JSON.parseObject(JSON.toJSONString(invoiceReqEntity))); String invoiceUrl = ERPURLConstant.ERP_URL + "/ierp/kapi/v2/f9w5/ar/arbusbill/createInvoice"; JSONObject erpInvoiceRes = new JSONObject(); try { erpInvoiceRes = restTemplate.postForObject(invoiceUrl, invoiceReqEntity, JSONObject.class); } catch (RestClientException e) { e.printStackTrace(); } System.out.println(erpInvoiceRes); //开始封装回写程序 Map backReqMap = new HashMap(); backReqMap.put("_id", invoiceId); backReqMap.put("dataObjectApiName", "InvoiceApplicationObj"); //开始封装日志 Map logMap = new HashMap<>(); logMap.put("log_id", UUID.randomUUID().toString().replace("-", "")); logMap.put("log_type", "KP"); logMap.put("syn_type", "0"); logMap.put("data_name", invoiceName); logMap.put("data_id", invoiceId); logMap.put("mark", createTime); logMap.put("send_body", JSON.toJSONString(invoiceReqEntity)); logMap.put("send_res", JSON.toJSONString(erpInvoiceRes)); logMap.put("tableName", "send_log_invoice"); //判断是否执行成功 if ("0".equals(erpInvoiceRes.getString("errorCode"))) { //同步成功 logMap.put("log_status", "0"); logMap.put("res_body", "同步成功"); backReqMap.put("erp_id__c", erpInvoiceRes.getJSONObject("data").getString("pkId")); backReqMap.put("sync_status__c", "option_sync_success__c"); backReqMap.put("response_info__c", "同步成功"); } else { //同步失败 logMap.put("log_status", "1"); logMap.put("res_body", "同步失败:" + erpInvoiceRes.getString("message")); backReqMap.put("sync_status__c", "option_sync_failure__c"); backReqMap.put("response_info__c", erpInvoiceRes.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); } } /** * 红冲发票同步 * * @return void * @Author weiloong_zhang */ @PostMapping public void syncRedInvoice() { CrmRequestUtil crmRequestUtil = new CrmRequestUtil(); String[] syncStatus = {"option_pending_sync__c", "option_resync__c"}; JSONObject getRedInvoice = crmRequestUtil.getCRMList(Arrays.asList( new Filter("IN", "sync_status__c", Arrays.asList(syncStatus)), //new Filter("IS", "field_UB1hE__c", Arrays.asList("")), //new Filter("EQ", "name", Arrays.asList("HCFP2505-0003")), new Filter("GT", "create_time", Arrays.asList("1748923200000")), new Filter("EQ", "life_status", Arrays.asList("normal")) ), "custom_object_example1__c"); JSONObject redInvoiceRes = new JSONObject(); try { redInvoiceRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getRedInvoice, JSONObject.class); } catch (RestClientException e) { e.printStackTrace(); } if (!"success".equals(redInvoiceRes.getString("errorDescription")) || redInvoiceRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { log.info("未找到红冲发票或者查询失败"); return; } for (Object redInvoiceObj : redInvoiceRes.getJSONObject("data").getJSONArray("dataList")) { JSONObject redInvoiceData = JSON.parseObject(JSON.toJSONString(redInvoiceObj)); System.out.println("当前正在处理数据为:" + redInvoiceData); //开始截取关键数据 //唯一性编码 String redInvoiceId = redInvoiceData.getString("_id"); //红冲单号 String redInvoiceName = redInvoiceData.getString("name"); //红冲单创建时间 String createTime = redInvoiceData.getString("create_time"); JSONObject isLogRes = new JSONObject(); try { isLogRes = restTemplate.getForObject("http://localhost:18085/Log/query/log_data?table=send_log_invoice&log_type=REDKP&dataId=" + redInvoiceId + "&mark=" + createTime, JSONObject.class); } catch (RestClientException e) { e.printStackTrace(); } System.out.println("查询日志结果为:" + isLogRes); if (!isLogRes.getJSONArray("data").isEmpty()) { log.info("当前数据已经执行过了,将不再向下执行"); continue; } log.info("日志不存在,将继续向下执行"); Map invoiceMap = new HashMap(); invoiceMap.put("billsourcetype", "red");//单据类型 invoiceMap.put("crmbillno", redInvoiceName);//单据编号 invoiceMap.put("crmid", redInvoiceData.getString("blue_invoice_application__c"));//红冲开票CRMID invoiceMap.put("crminvoiceid", redInvoiceId);//CRM红冲开票申请ID invoiceMap.put("invoicetype", redInvoiceData.getString("invoice_type__c") != null ? redInvoiceData.getString("invoice_type__c") : "");//开票类型 invoiceMap.put("comment", redInvoiceData.getString("invoice_note__c") != null ? redInvoiceData.getString("invoice_note__c") : "");//备注 invoiceMap.put("buyeremail", redInvoiceData.getString("invoice_delivery_email__c") != null ? redInvoiceData.getString("invoice_delivery_email__c") : "2019326567@qq.com");//发票推送邮箱 //开票单位编码 String customerId = redInvoiceData.getString("customer_name__c") != null ? redInvoiceData.getString("customer_name__c") : "TEST0001"; //根据客户唯一id查询客户编码 JSONObject getCustomer = crmRequestUtil.getCRMList(Arrays.asList( new Filter("EQ", "_id", Arrays.asList(customerId)) ), "AccountObj"); JSONObject customerRes = new JSONObject(); try { customerRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getCustomer, JSONObject.class); } catch (RestClientException e) { e.printStackTrace(); } if (!"success".equals(customerRes.getString("errorDescription")) || customerRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { log.info("未找到开票单位或者查询失败"); continue; } JSONObject customerData = customerRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); String customerNumber = customerData.getString("account_no"); invoiceMap.put("asstact_number", customerNumber);//往来户(客户) invoiceMap.put("buyertaxno", redInvoiceData.getString("tax_identification_number__c") != null ? redInvoiceData.getString("tax_identification_number__c") : "");//纳税识别号 invoiceMap.put("buyeraddr", redInvoiceData.getString("invoice_address__c") != null ? redInvoiceData.getString("invoice_address__c") : "");//地址 invoiceMap.put("buyerphone", redInvoiceData.getString("field_SM1Wc__c") != null ? redInvoiceData.getString("field_SM1Wc__c") : "");//电话 invoiceMap.put("showbuyeraddresstel", redInvoiceData.getBooleanValue("show_address_phone__c"));//是否展示地址电话 invoiceMap.put("buyerbank", redInvoiceData.getString("bank_branch__c") != null ? redInvoiceData.getString("bank_branch__c") : "");//开户行 invoiceMap.put("buyerbanknumber", redInvoiceData.getString("account_number__c") != null ? redInvoiceData.getString("account_number__c") : "");//开户行账号 invoiceMap.put("showbuyerbank", redInvoiceData.getBooleanValue("show_bank_account__c"));//是否展示开户行 invoiceMap.put("showdetails", redInvoiceData.getBooleanValue("is_display_invoice_details__c"));//是否展示发票明细(名称、数量、单价、单位、规格) String isSoftWorks = redInvoiceData.getString("is_contain_soft__c"); Boolean isSoftWorksFlag = false; switch (isSoftWorks) { case "v2j71Ak5p": isSoftWorksFlag = true; break; case "YOZj917km": isSoftWorksFlag = false; break; } invoiceMap.put("issoftworks", isSoftWorksFlag);//是否含软 //是否国网 String isGWStr = redInvoiceData.getString("is_state_grid__c") != null ? redInvoiceData.getString("is_state_grid__c") : ""; Boolean isGW = null; switch (isGWStr) { case "ubaL12a0M": isGW = true; break; case "tiVjNIMLU": isGW = false; break; default: isGW = null; break; } invoiceMap.put("isgw", isGW);//是否国网 //是否设计建筑服务 String isJZStr = redInvoiceData.getString("is_involved_construction__c") != null ? redInvoiceData.getString("is_involved_construction__c") : ""; Boolean isJZ = null; switch (isJZStr) { case "option_is_yes__c": isJZ = true; break; case "option_is_no__c": isJZ = false; break; default: isJZ = null; break; } invoiceMap.put("isjzfw", isJZ);//是否设计建筑服务 //是否跨地市 String isCityStr = redInvoiceData.getString("is_cross_city__c") != null ? redInvoiceData.getString("is_cross_city__c") : ""; Boolean isCity = null; switch (isCityStr) { case "option_is_yes__c": isCity = true; break; case "option_is_no__c": isCity = false; break; default: isCity = null; break; } invoiceMap.put("iskds", isCity);//是否跨地市 invoiceMap.put("jzaddr", redInvoiceData.getString("service_occurrence_locatio__c") != null ? redInvoiceData.getString("service_occurrence_locatio__c") : "");//建筑服务发生地 invoiceMap.put("jzpjname", redInvoiceData.getString("project_name__c") != null ? redInvoiceData.getString("project_name__c") : "");//建筑服务项目名称 invoiceMap.put("softworks_number", redInvoiceData.getString("registration_number__c") != null ? redInvoiceData.getString("registration_number__c") : "");//软著版本编码 invoiceMap.put("blueinvoiceno", redInvoiceData.getString("original_invoice_number__c") != null ? redInvoiceData.getString("original_invoice_number__c") : "");//待冲蓝字发票号码 invoiceMap.put("redreason", redInvoiceData.getString("redemption_reason__c") != null ? redInvoiceData.getString("redemption_reason__c") : "");//冲红原因 //开始查询明细数据 JSONObject getInvoiceDetail = crmRequestUtil.getCRMList(Arrays.asList( new Filter("EQ", "red_invoice_application__c", Arrays.asList(redInvoiceId)) ), "red_invoice_details__c"); JSONObject invoiceDetailRes = new JSONObject(); try { invoiceDetailRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, getInvoiceDetail, JSONObject.class); } catch (RestClientException e) { e.printStackTrace(); } if (!"success".equals(invoiceDetailRes.getString("errorDescription")) || invoiceDetailRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { log.info("请求失败或数据不存在"); continue; } log.info("查询明细数据成功,继续向下执行和封装"); List invoiceDetailList = new ArrayList<>(); for (Object invoiceDetailObj : invoiceDetailRes.getJSONObject("data").getJSONArray("dataList")) { JSONObject invoiceDetailData = JSON.parseObject(JSON.toJSONString(invoiceDetailObj)); Map invoiceDetailMap = new HashMap(); invoiceDetailMap.put("crmentryid", invoiceDetailData.getString("invoice_application_detail__c")); invoiceDetailMap.put("crminvoiceentryid", invoiceDetailData.getString("_id")); invoiceDetailMap.put("goodsname", invoiceDetailData.getString("name__c") != null ? invoiceDetailData.getString("name__c") : "");//商品名称 invoiceDetailMap.put("taxratecodeid_number", invoiceDetailData.getString("product_category__c") != null ? invoiceDetailData.getString("product_category__c") : "");//税收分类编码-商品分类编码 BigDecimal quality = invoiceDetailData.getBigDecimal("red_canceled_quantity__c"); if (quality.compareTo(BigDecimal.ZERO) > 0) { quality = quality.negate(); } invoiceDetailMap.put("quality", quality);//数量 invoiceDetailMap.put("taxunitprice", invoiceDetailData.getBigDecimal("tax_inclusive_unit_price__c"));//含税单价 BigDecimal receivablePrice = invoiceDetailData.getBigDecimal("unit_price_taxINCLUDED_tot__c"); if (receivablePrice.compareTo(BigDecimal.ZERO) > 0) { receivablePrice = receivablePrice.negate(); } invoiceDetailMap.put("recamount", receivablePrice);//应收金额 invoiceDetailMap.put("taxrateid_number", invoiceDetailData.getString("tax_rate_code__c"));//税率编码 invoiceDetailMap.put("measureunit_number", invoiceDetailData.getString("unit__c") != null ? invoiceDetailData.getString("unit__c") : "");//计量单位 invoiceDetailMap.put("specification", invoiceDetailData.getString("specification_model__c"));//规格型号 invoiceDetailList.add(invoiceDetailMap); } invoiceMap.put("entry", invoiceDetailList); //开始获取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 invoiceReqEntity = new HttpEntity(invoiceMap, headers); System.out.println(JSON.parseObject(JSON.toJSONString(invoiceReqEntity))); String invoiceUrl = ERPURLConstant.ERP_URL + "/ierp/kapi/v2/f9w5/ar/arbusbill/createInvoice"; JSONObject erpInvoiceRes = new JSONObject(); try { erpInvoiceRes = restTemplate.postForObject(invoiceUrl, invoiceReqEntity, JSONObject.class); } catch (RestClientException e) { e.printStackTrace(); } System.out.println(erpInvoiceRes); //开始封装回写程序 Map backReqMap = new HashMap(); backReqMap.put("_id", redInvoiceId); backReqMap.put("dataObjectApiName", "custom_object_example1__c"); //开始封装日志 Map logMap = new HashMap<>(); logMap.put("log_id", UUID.randomUUID().toString().replace("-", "")); logMap.put("log_type", "REDKP"); logMap.put("syn_type", "0"); logMap.put("data_name", redInvoiceName); logMap.put("data_id", redInvoiceId); logMap.put("mark", createTime); logMap.put("send_body", JSON.toJSONString(invoiceReqEntity)); logMap.put("send_res", JSON.toJSONString(erpInvoiceRes)); logMap.put("tableName", "send_log_invoice"); //判断是否执行成功 if ("0".equals(erpInvoiceRes.getString("errorCode"))) { //同步成功 logMap.put("log_status", "0"); logMap.put("res_body", "同步成功"); backReqMap.put("field_UB1hE__c", erpInvoiceRes.getJSONObject("data").getString("pkId")); backReqMap.put("sync_status__c", "option_sync_success__c"); backReqMap.put("response_info__c", "同步成功"); } else { //同步失败 logMap.put("log_status", "1"); logMap.put("res_body", "同步失败:" + erpInvoiceRes.getString("message")); backReqMap.put("sync_status__c", "option_sync_failure__c"); backReqMap.put("response_info__c", erpInvoiceRes.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); } } }