From d8d1973a6f3f5be7ee94e4162666a3c2277bb464 Mon Sep 17 00:00:00 2001 From: itzhang <2019326567@qq.com> Date: Sat, 7 Jun 2025 11:42:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=99=BA=E6=B4=8B=E6=9C=80=E6=96=B0=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../magicboot/constant/ERPURLConstant.java | 1 + .../controller/BankInfoController.java | 8 +- .../controller/DesignController.java | 4 +- .../controller/FrameContractController.java | 5 + .../controller/GoodsPlanController.java | 421 +++++++++++++++++- .../controller/InvoiceController.java | 54 +++ .../controller/KDTokenController.java | 4 +- .../controller/PreContractController.java | 7 +- .../controller/ReimbursementController.java | 2 +- .../controller/TenderingController.java | 2 +- .../magicboot/controller/XSHTController.java | 41 +- .../org/ssssssss/magicboot/task/ZHYTask.java | 2 +- .../magicboot/utils/CrmRequestUtil.java | 2 + 13 files changed, 503 insertions(+), 50 deletions(-) diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/constant/ERPURLConstant.java b/magic-boot/src/main/java/org/ssssssss/magicboot/constant/ERPURLConstant.java index fd21a6a..ce58ed4 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/constant/ERPURLConstant.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/constant/ERPURLConstant.java @@ -2,4 +2,5 @@ package org.ssssssss.magicboot.constant; public class ERPURLConstant { public static final String ERP_URL = "http://192.168.31.233:8022";//erp地址 + public static final String ACCOUNT_ID = "2095345516136108032";//erp地址 } diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/BankInfoController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/BankInfoController.java index f45b707..983fa9f 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/BankInfoController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/BankInfoController.java @@ -55,10 +55,12 @@ public class BankInfoController { //将时间转换样式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String twoDaysAgoStr = twoDaysAgo.format(formatter); + String nowStr = now.format(formatter); //开始查询部门(暂时使用固定值) Map data = new HashMap<>(); - data.put("createtime", twoDaysAgoStr); + data.put("startTime", twoDaysAgoStr); + data.put("endTime", nowStr); //data.put("number", Arrays.asList("ZHY002.005.003.004")); // data.put("level", "3"); @@ -277,10 +279,12 @@ public class BankInfoController { //将时间转换样式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String twoDaysAgoStr = twoDaysAgo.format(formatter); + String nowStr = now.format(formatter); //开始查询部门(暂时使用固定值) Map data = new HashMap<>(); - data.put("modifytime", twoDaysAgoStr); + data.put("startTime", twoDaysAgoStr); + data.put("endTime", nowStr); //data.put("number", Arrays.asList("ZHY002.005.003.004")); // data.put("level", "3"); diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/DesignController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/DesignController.java index dd2b3f1..4f9bca6 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/DesignController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/DesignController.java @@ -223,7 +223,7 @@ public class DesignController { designDocDetailMap.put("materialtype", designDocDetailData.getString("customer_material_type__c"));//客指供应类型 designDocDetailMap.put("crmentryid", designDocDetailData.getString("_id"));//crm明细行id designDocDetailMap.put("entrycomment", designDocDetailData.getString("remark__c") != null ? designDocDetailData.getString("remark__c") : "");//备注 - designDocDetailMap.put("supplier_number", "G08000001");//todo 建议供应商 + designDocDetailMap.put("supplier_number", "G03990003");//todo 建议供应商 designDocList.add(designDocDetailMap); @@ -489,7 +489,7 @@ public class DesignController { List ownerIdList = designDocData.getJSONArray("owner"); JSONObject ownerReq = crmRequestUtil.getCRMList(Arrays.asList( - new Filter("EQ", "_id", ownerIdList) + new Filter("EQ", "user_id", ownerIdList) ), "PersonnelObj"); JSONObject ownerRes = new JSONObject(); diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/FrameContractController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/FrameContractController.java index 13d87a0..0a25b2a 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/FrameContractController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/FrameContractController.java @@ -15,6 +15,7 @@ import org.ssssssss.magicboot.constant.ERPURLConstant; import org.ssssssss.magicboot.constant.URLConstant; import org.ssssssss.magicboot.entity.Filter; import org.ssssssss.magicboot.utils.CrmRequestUtil; +import org.ssssssss.magicboot.utils.KingDeeUtils; import java.util.*; @@ -294,6 +295,10 @@ public class FrameContractController { backReqMap.put("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"); diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/GoodsPlanController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/GoodsPlanController.java index 1eb5b25..e774d82 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/GoodsPlanController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/GoodsPlanController.java @@ -1,6 +1,9 @@ package org.ssssssss.magicboot.controller; import com.alibaba.fastjson.JSON; + +import java.util.concurrent.*; + import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpEntity; @@ -34,8 +37,9 @@ public class GoodsPlanController { private RestTemplate restTemplate = new RestTemplate(); public static void main(String[] args) { - //new GoodsPlanController().syncGoodsPlan(); - new GoodsPlanController().updateGoodsPlan(); + new GoodsPlanController().syncGoodsPlan(); + //new GoodsPlanController().updateGoodsPlan(); + //new GoodsPlanController().syncTrackingNum(); } /** @@ -54,6 +58,7 @@ public class GoodsPlanController { //要货计划请求 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")), @@ -115,7 +120,24 @@ public class GoodsPlanController { erpGoodsPlanReq.put("f9w5_crmid", goodsPlanId); erpGoodsPlanReq.put("billno", goodsPlanName);//单据编号 erpGoodsPlanReq.put("billtype_number", "f9w5_sm_purchaseplan_BT");//单据类型 - erpGoodsPlanReq.put("org_number", "zyierp");//组织编码 + + 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"); @@ -155,13 +177,13 @@ public class GoodsPlanController { List ownerIdList = goodsPlanData.getJSONArray("owner"); JSONObject ownerReq = crmRequestUtil.getCRMList(Arrays.asList( - new Filter("EQ", "_id", ownerIdList) + new Filter("EQ", "user_id", ownerIdList) ), "PersonnelObj"); JSONObject ownerRes = new JSONObject(); try { - ownerRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, ownerReq, JSONObject.class); + ownerRes = restTemplate.postForObject(URLConstant.GET_CUSTOMIZE_LIST_URL, ownerReq, JSONObject.class); } catch (RestClientException e) { e.printStackTrace(); } @@ -196,23 +218,60 @@ public class GoodsPlanController { log.info("要货计划明细存在,继续向下执行"); + //延时执行(非阻塞) + ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); + executor.schedule(() -> { + System.out.println("延时任务执行"); + }, 5, TimeUnit.SECONDS); // 5秒后执行 + 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", "zyierp");//todo 组织编码 + 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);//跟踪号 + erpGoodsPlanDetailReq.put("f9w5_programversion_number", goodsPlanDetailData.getString("program_version_number__c"));//程序版本 //开始查询项目号 String projectId = goodsPlanDetailData.getString("project_name__c") != null ? goodsPlanDetailData.getString("project_name__c") : ""; @@ -243,6 +302,33 @@ public class GoodsPlanController { } + //开始封装回写程序 + 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); //开始封装要货计划请求 @@ -281,11 +367,6 @@ public class GoodsPlanController { System.out.println("要货计划结果为:" + JSON.parseObject(JSON.toJSONString(erpGoodsPlanRes))); - //开始封装回写程序 - Map backReqMap = new HashMap(); - backReqMap.put("_id", goodsPlanId); - backReqMap.put("dataObjectApiName", "purchase_plan__c"); - //开始封装日志 Map logMap = new HashMap<>(); logMap.put("log_id", UUID.randomUUID().toString().replace("-", "")); @@ -361,7 +442,11 @@ public class GoodsPlanController { //要货计划请求 JSONObject getGoodsPlan = crmRequestUtil.getCRMList(Arrays.asList( - new Filter("EQ", "name", Arrays.asList("YHJH20250508-0002")), + //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"); @@ -430,7 +515,25 @@ public class GoodsPlanController { erpGoodsPlanReq.put("f9w5_crmid", goodsPlanId); erpGoodsPlanReq.put("billno", goodsPlanName);//单据编号 erpGoodsPlanReq.put("billtype_number", "f9w5_sm_purchaseplan_BT");//单据类型 - erpGoodsPlanReq.put("org_number", "zyierp");//组织编码 + + //组织编码 + 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"); @@ -461,7 +564,7 @@ public class GoodsPlanController { deptCode = deptData.getString("field_Vj6sf__c") != null ? deptData.getString("field_Vj6sf__c") : ""; } - erpGoodsPlanReq.put("dept", "zyierp");//todo 归属部门 + erpGoodsPlanReq.put("dept", deptCode);//todo 归属部门 //获取负责人编码 String ownerCode = ""; @@ -512,20 +615,43 @@ public class GoodsPlanController { //明细列表 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", "zyierp");//组织编码 + 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") : ""; @@ -556,6 +682,32 @@ public class GoodsPlanController { } + //开始封装回写程序 + 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); //开始封装要货计划请求 @@ -594,11 +746,6 @@ public class GoodsPlanController { System.out.println("要货计划结果为:" + JSON.parseObject(JSON.toJSONString(erpGoodsPlanRes))); - //开始封装回写程序 - Map backReqMap = new HashMap(); - backReqMap.put("_id", goodsPlanId); - backReqMap.put("dataObjectApiName", "purchase_plan__c"); - //开始封装日志 Map logMap = new HashMap<>(); logMap.put("log_id", UUID.randomUUID().toString().replace("-", "")); @@ -653,4 +800,238 @@ public class GoodsPlanController { 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; + } } diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/InvoiceController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/InvoiceController.java index a9caf68..fe887fb 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/InvoiceController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/InvoiceController.java @@ -505,6 +505,60 @@ public class InvoiceController { } 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") : "");//冲红原因 diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/KDTokenController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/KDTokenController.java index f832087..b92b2f5 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/KDTokenController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/KDTokenController.java @@ -157,7 +157,7 @@ public class KDTokenController { appTokenParams.put("appId", "FXXKCRM"); appTokenParams.put("appSecret", "FXXKCRM20251234a!"); appTokenParams.put("tenantid", "zyierp"); - appTokenParams.put("accountId", "2095345516136108032"); + appTokenParams.put("accountId", "2226057923279195136"); //开始发起请求 String appTokenRes = ""; @@ -214,7 +214,7 @@ public class KDTokenController { accessTokenParams.put("usertype", "Mobile"); accessTokenParams.put("apptoken", getKDAppTokenTest()); accessTokenParams.put("tenantid", "zyierp"); - accessTokenParams.put("accountId", "2095345516136108032"); + accessTokenParams.put("accountId", "2226057923279195136"); accessTokenParams.put("language", "zh_CN"); //开始向金蝶发起请求 diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/PreContractController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/PreContractController.java index 2dc8c1f..4c5154b 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/PreContractController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/PreContractController.java @@ -67,8 +67,10 @@ public class PreContractController { e.printStackTrace(); } + System.out.println("查询结果为:" + preContractRes); + //判断查询是否成功 - if (!"success".equals(preContractRes.getString("errorDescription")) && preContractRes.getJSONObject("data").getJSONArray("records").isEmpty()) { + if (!"success".equals(preContractRes.getString("errorDescription")) || preContractRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { log.info("查询失败或者没有符合条件的单据"); return; } @@ -125,6 +127,7 @@ public class PreContractController { erpContractReq.put("party1st", preContractData.getString("contract_unit_name__c__r"));//甲方 erpContractReq.put("party2nd", preContractData.getString("our_company_name__c"));//乙方 erpContractReq.put("bizmode", "C");//业务模式 A:统谈统签, B:统谈分签,C:分谈分签 + erpContractReq.put("isentrysumamt", false);//isentrysumamt //部门编码 String deptCode = ""; @@ -463,7 +466,7 @@ public class PreContractController { List ownerIdList = preContractBGData.getJSONArray("owner"); JSONObject ownerReq = crmRequestUtil.getCRMList(Arrays.asList( - new Filter("EQ", "_id", ownerIdList) + new Filter("EQ", "user_id", ownerIdList) ), "PersonnelObj"); JSONObject ownerRes = new JSONObject(); diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/ReimbursementController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/ReimbursementController.java index 22f47e4..fbfddf3 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/ReimbursementController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/ReimbursementController.java @@ -377,7 +377,7 @@ public class ReimbursementController { Map expensesMap = new HashMap<>(); expensesMap.put("data", data); expensesMap.put("pageNo", 1); - expensesMap.put("pageSize", 1); + expensesMap.put("pageSize", 1999); //开始获取金蝶token String accessToken = new KDTokenController().getKDAccessTokenTest(); diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/TenderingController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/TenderingController.java index 5eb2171..13f7685 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/TenderingController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/TenderingController.java @@ -62,7 +62,7 @@ public class TenderingController { e.printStackTrace(); } - if (!"success".equals(tenderingRes.getString("errorDescription")) && tenderingRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + if (!"success".equals(tenderingRes.getString("errorDescription")) || tenderingRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { log.info("投标费用请求失败或者没有符合条件的数据"); return; } diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/XSHTController.java b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/XSHTController.java index 9b9d4f2..8058dba 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/controller/XSHTController.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/controller/XSHTController.java @@ -67,7 +67,7 @@ public class XSHTController { } //判断查询是否成功 - if (!"success".equals(ContractRes.getString("errorDescription")) && ContractRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { + if (!"success".equals(ContractRes.getString("errorDescription")) || ContractRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) { log.info("查询失败或者没有符合条件的单据"); return; } @@ -129,6 +129,25 @@ public class XSHTController { String projectCode = projectRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0).getString("opportunity_id__c"); + //合同种类 + String contractType = contractData.getString("contract_zl__c") != null ? contractData.getString("contract_zl__c") : ""; + + if (contractType.equals("")) { + log.info("合同种类不存在,将不再向下执行"); + continue; + } + + String contractMainType = ""; + String contractTypeStr = ""; + + if (contractType.equals("option_sales_contract_details__c")) { + contractMainType = "XSHT-QD01"; + contractTypeStr = "020"; + } else if (contractType.equals("option_sales_contract_total_amoun__c")) { + contractMainType = "XSHT-QD02"; + contractTypeStr = "020-1"; + } + //开始封装传输至ERP的请求 Map erpContractReq = new HashMap<>(); erpContractReq.put("billno", contractData.getString("name"));//合同编号 @@ -138,7 +157,7 @@ public class XSHTController { //erpContractReq.put("project_number", "SJ20250424-0033");//项目号 erpContractReq.put("billtype_number", "conm_salcontract_BT_QD");//单据类型 erpContractReq.put("billname", contractData.getString("project_name__c") != null ? contractData.getString("project_name__c") : "销售合同");//合同名称 - erpContractReq.put("type_number", "XSHT-QD01");//合同类型 + erpContractReq.put("type_number", contractMainType);//合同类型 erpContractReq.put("contparties_number", contractData.getString("our_company_name__c") != null ? contractData.getString("our_company_name__c") : "");//合同主体 erpContractReq.put("createorg_number", contractData.getString("our_company_name__c") != null ? contractData.getString("our_company_name__c") : "");//销售组织编码 erpContractReq.put("org_number", contractData.getString("our_company_name__c") != null ? contractData.getString("our_company_name__c") : "");//销售组织编码 @@ -228,7 +247,7 @@ public class XSHTController { JSONObject customerData = customerRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0); erpContractReq.put("customer_number", customerData.getString("account_no"));//合同单位名称 - erpContractReq.put("reccustomer_number", customerData.getString("account_no"));//收获客户单位名称 + erpContractReq.put("reccustomer_number", 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") : "");//付款客户 @@ -287,22 +306,6 @@ public class XSHTController { //销售方式 erpContractReq.put("salesmethod", contractData.getString("sales_method__c")); - //合同种类 - String contractType = contractData.getString("contract_zl__c") != null ? contractData.getString("contract_zl__c") : ""; - - if (contractType.equals("")) { - log.info("合同种类不存在,将不再向下执行"); - continue; - } - - String contractTypeStr = ""; - - if (contractType.equals("option_sales_contract_details__c")) { - contractTypeStr = "020"; - } else if (contractType.equals("option_sales_contract_total_amoun__c")) { - contractTypeStr = "020-1"; - } - //根据合同号查询合同明细 JSONObject contractDetailReq = crmRequestUtil.getCRMList(Arrays.asList( new Filter("EQ", "sale_contract_id", Arrays.asList(contractId)) diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/task/ZHYTask.java b/magic-boot/src/main/java/org/ssssssss/magicboot/task/ZHYTask.java index 6f06ce7..3ce92a7 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/task/ZHYTask.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/task/ZHYTask.java @@ -28,7 +28,7 @@ public class ZHYTask { @Autowired BankInfoController bankInfoController; - @Scheduled(cron = "0 0/1 * * * ?") + @Scheduled(cron = "*/45 * * * * ?") private void configureTasks() throws Exception { System.out.println("开始同步数据"); preContractController.syncContract(); diff --git a/magic-boot/src/main/java/org/ssssssss/magicboot/utils/CrmRequestUtil.java b/magic-boot/src/main/java/org/ssssssss/magicboot/utils/CrmRequestUtil.java index e5b4a7f..686954c 100644 --- a/magic-boot/src/main/java/org/ssssssss/magicboot/utils/CrmRequestUtil.java +++ b/magic-boot/src/main/java/org/ssssssss/magicboot/utils/CrmRequestUtil.java @@ -114,6 +114,8 @@ public class CrmRequestUtil { request.put("corpAccessToken", corpAccessToken); request.put("currentOpenUserId", CertificateConstant.CURRENT_OPEN_USERID); request.put("corpId", CertificateConstant.CORP_ID); + request.put("triggerWorkFlow", "false"); + request.put("triggerApprovalFlow", "false"); request.put("data", objectData); JSONObject requestJSON = new JSONObject(request);