diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java index bd323ad..11e5d71 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java @@ -1,5 +1,6 @@ package shkd.sys.sys.mservice; +import com.alibaba.excel.util.DateUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -28,6 +29,7 @@ import kd.bos.print.core.service.PrtAttach; import kd.bos.print.matchtpl.MatcherTpl; import kd.bos.print.matchtpl.ViewType; import kd.bos.servicehelper.*; +import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.bos.servicehelper.print.NotePrintService; import kd.bos.util.ExceptionUtils; import kd.tmc.bei.business.ocr.impl.ScanServiceImpl; @@ -37,10 +39,8 @@ import kd.tmc.bei.common.helper.ReceiptPrintHelper; import kd.tmc.bei.common.resource.BeiBizResource; import kd.tmc.fbp.common.ofd.OfdConvertUtil; import kd.tmc.fbp.common.util.EmptyUtil; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; +import org.springframework.http.*; +import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; import javax.crypto.Mac; @@ -1119,7 +1119,7 @@ public class ApiService { if ("cas_paybill".equals(billMark)) { if (billNumber.contains("YHZZ")) { xkBillType = "CN_BANKTRANSBILL";// 表单id(付款处理 → 银行转账单:) - }else if (billNumber.contains("SKTKD")) { + } else if (billNumber.contains("SKTKD")) { xkBillType = "AR_REFUNDBILL";// 表单id(付款处理 → 收款退款单:AR_REFUNDBILL) } else if (billNumber.contains("FKD")) { xkBillType = "AP_PAYBILL";// 表单id(付款处理 → 付款单:AP_PAYBILL) @@ -1283,7 +1283,7 @@ public class ApiService { String billNumber = dynamicObject.getString("shkd_businessnumber"); if (billNumber.contains("YHZZ")) { jsonObject.put("FormId", "CN_BANKTRANSBILL");// 表单id(付款处理 → 银行转账单:CN_BANKTRANSBILL) - }else if (billNumber.contains("SKTKD")) { + } else if (billNumber.contains("SKTKD")) { jsonObject.put("FormId", "AR_REFUNDBILL");// 表单id(付款处理 → 收款退款单:AR_REFUNDBILL) } else if (billNumber.contains("FKD")) { jsonObject.put("FormId", "AP_PAYBILL");// 表单id(付款处理 → 付款单:AP_PAYBILL) @@ -1329,4 +1329,71 @@ public class ApiService { " → k3CloudApi.attachmentUpload(jsonObject.toString())报错:" + e.getMessage(); } } + + + /** + * @param url 调用接口 + * @param billTypeCode 单据类型编码 + * @param headMap 请求头 + * @param bodyMap 请求体 + * @param fields 请求体参数名 + * @return + */ + public static ResponseEntity pushLCMasterData(String url, String billTypeCode, Map headMap, Map bodyMap, List fields, Map resultMap) { + // 创建请求头 + HttpHeaders headers = new HttpHeaders(); + + // 添加指定的Headers + headers.add("X-ECC-Current-Tenant", headMap.get("X-ECC-Current-Tenant").toString()); + headers.add("apikey", headMap.get("apikey").toString()); + headers.add("Content-Type", headMap.get("Content-Type").toString()); + headers.add("Authorization", headMap.get("Authorization").toString()); + + // 构建请求体 + Map requestBody = new HashMap<>(); + requestBody.put("businessSystemCode", "JDSK"); + requestBody.put("tableCode", billTypeCode); + + // 创建data数组 + List> data = new ArrayList<>(); + Map dataItem = new HashMap<>(); + + for (String field : fields) { + dataItem.put(field, bodyMap.get(field)); + } + data.add(dataItem); + + requestBody.put("data", data); + + resultMap.put("shkd_request", requestBody); + + // 创建HttpEntity + HttpEntity> httpEntity = new HttpEntity<>(requestBody, headers); + + // 使用RestTemplate发送请求 + RestTemplate restTemplate = new RestTemplate(); + return restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class); + } + + public static void saveThePushLog(Map resultMap) { + String requestUrl = resultMap.get("shkd_requesturl").toString();//请求地址 + String request = resultMap.get("shkd_request").toString();//请求体 + String response = resultMap.get("shkd_response").toString();//响应数据 + String thirdparty = resultMap.get("shkd_thirdpartysys").toString();//第三方系统 + String issuccess = resultMap.get("shkd_issuccess").toString();//是否成功 + String shkd_calldescription = resultMap.get("shkd_calldescription").toString();//调用说明 + DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject("shkd_thirdpartylog"); + // 生成随机UUID + UUID uuid = UUID.randomUUID(); + dynamicObject.set("billno", "Log_" + uuid); + dynamicObject.set("billstatus", "C"); + dynamicObject.set("shkd_calldescription", shkd_calldescription); + dynamicObject.set("shkd_requesturl", requestUrl); + dynamicObject.set("shkd_request", request); + dynamicObject.set("shkd_response", response); + dynamicObject.set("shkd_thirdpartysys", thirdparty); + dynamicObject.set("shkd_issuccess", issuccess); + dynamicObject.set("shkd_logdate", new Date()); + SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); + } } \ No newline at end of file diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java index 43976b9..1661cae 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java @@ -3,11 +3,14 @@ package shkd.sys.sys.plugin.form; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.bes.mq.org.apache.http.impl.cookie.DateUtils; import com.kingdee.bos.webapi.sdk.K3CloudApi; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection; +import kd.bos.entity.MainEntityType; import kd.bos.entity.datamodel.events.PropertyChangedArgs; -import kd.bos.form.IFormView; +import kd.bos.entity.property.ComboProp; import kd.bos.form.control.CodeEdit; import kd.bos.form.control.Toolbar; import kd.bos.form.control.events.ItemClickEvent; @@ -17,20 +20,20 @@ import kd.bos.logging.LogFactory; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; -import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.sdk.plugin.Plugin; -import kd.tmc.fca.common.helper.HandLinkBillHelper; +import kd.sdk.scmc.im.acct.DateHelper; +import org.springframework.http.ResponseEntity; import shkd.sys.sys.mservice.ApiService; +import kd.bd.assistant.plugin.helper.BankCateHelper; -import java.nio.file.Path; -import java.nio.file.Paths; +import java.text.SimpleDateFormat; import java.util.*; import static shkd.sys.sys.mservice.ApiService.*; /** - * 动态表单插件 + * API映射表单插件 */ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { private static final Log logger = LogFactory.getLog(ApiMappingBillPlugin.class); @@ -470,7 +473,187 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { } SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); } + } + if ("shkd_pushlc".equals(itemKey)) { + Map resultMap = new HashMap<>(); + + Map headMap = new HashMap<>(); + Map bodyMap = new HashMap<>(); + List fieldList = new ArrayList<>(); + // 推送单据类型 + String billMark = dataEntity.getDynamicObject("shkd_sourcebill").getString("number"); + // 推送单据编码 + String shkdSourcenumber = dataEntity.getString("shkd_sourcenumber"); + // 查询的字段 + String getfield = dataEntity.getString("shkd_getfield"); + // url + String shkd_url = dataEntity.getString("shkd_url"); + // 单据类型编码 + String djlxbm = dataEntity.getString("shkd_djlxbm"); + String billTypeCode; + if (djlxbm.contains("_")) { + String[] split = djlxbm.split("_"); + billTypeCode = split[0]; + } else { + billTypeCode = djlxbm; + } + + DynamicObjectCollection shkd_heade = dataEntity.getDynamicObjectCollection("shkd_heade"); + for (DynamicObject dynamicObject : shkd_heade) { + headMap.put(dynamicObject.getString("shkd_headcsm"), dynamicObject.getString("shkd_headcsz")); + } + + DynamicObject billObject = null; + + if (getfield.contains("number")) { + billObject = BusinessDataServiceHelper.loadSingle(billMark, getfield, new QFilter("number", QCP.equals, shkdSourcenumber).toArray()); + } + + if (getfield.contains("billno")) { + billObject = BusinessDataServiceHelper.loadSingle(billMark, getfield, new QFilter("billno", QCP.equals, shkdSourcenumber).toArray()); + } + + if (billObject == null) { + this.getView().showTipNotification("未找到符合条件的数据"); + return; + } + + DynamicObjectCollection shkd_mapping = dataEntity.getDynamicObjectCollection("shkd_mapping"); + for (DynamicObject dynamicObject : shkd_mapping) { + fieldList.add(dynamicObject.getString("shkd_jsonzdm")); + String shkd_djzdms = dynamicObject.getString("shkd_djzdms"); + if ("".equals(shkd_djzdms)) { + bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), dynamicObject.getString("shkd_mrz")); + } else if (shkd_djzdms.contains(".")) { + //拆分.前面的字符串和后面的字符串 + String[] split = shkd_djzdms.split("\\."); + DynamicObject split0 = billObject.getDynamicObject(split[0]); + if (split0 == null) { + bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), ""); + } else { + bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), split0.get(split[1]).toString()); + } + } else if ("YHLB".equals(shkd_djzdms)) {//银行 → 银行类别 + String name = billObject.getString("name"); + String number = billObject.getString("number"); + DynamicObject bankCate = BankCateHelper.findBankCate(name, number); + if (bankCate == null) { + bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), ""); + } else { + bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), bankCate.get("name")); + } + + } else if ("JSFSLB".equals(shkd_djzdms)) { + // 获取XXX字段值,这里获取到的是value,而不是key + String value = billObject.getString("settlementtype"); + MainEntityType dataEntityType = (MainEntityType) billObject.getDataEntityType(); + // 获取所有实体字段集合 + DataEntityPropertyCollection properties = dataEntityType.getProperties(); + // 获取所有字段数据模型 + ComboProp comboUnitProp = (ComboProp) properties.get("settlementtype"); + // 根据下拉列表的value获取到key + String key = comboUnitProp.getItemByName(value); + bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), key); + } else if ("ZHXZ".equals(shkd_djzdms)) {//账户查询 → 账户性质 + String value = billObject.getString("acctstyle"); + String key = ""; + switch (value) { + case "basic"://基本存款户 + key = "001"; + break; + case "normal"://一般存款户 + key = "002"; + break; + case "temp"://临时存款户 + key = "003"; + break; + case "spcl"://专用存款户 + key = "004"; + break; + case "fgn_curr"://其他存款户 + key = "005"; + break; + case "D06"://保证金账户 + key = "006"; + break; + } + bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), key); + } else if ("ZHZT".equals(shkd_djzdms)) {//账户查询 → 账户状态 + String value = billObject.getString("acctstatus"); + String key = ""; + switch (value) { + case "normal"://正常 + key = "2"; + break; + case "closed"://已销户 + key = "4"; + break; + } + bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), key); + } else if ("ZLKTZT".equals(shkd_djzdms)) {//账户查询 → 开通直连状态 + String value = billObject.getString("acctstatus"); + String key = ""; + switch (value) { + case "normal"://正常 + key = "2"; + break; + case "closed"://已销户 + key = "4"; + break; + } + bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), key); + } else if ("JNJW".equals(shkd_djzdms)) {//账户查询 → 境内境外 + DynamicObject bank = billObject.getDynamicObject("bank"); + DynamicObject country = bank.getDynamicObject("country"); + String name = country.getString("name"); + if ("中国".equals(name)) { + bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), "1"); + } else { + bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), "2"); + } + } else if ("OPENDATE".equals(shkd_djzdms)) {//现金账户 → 开户日期 + Date date = billObject.getDate("opendate");//转化为2020-10-10格式 + bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), DateUtils.formatDate(date, "yyyy-MM-dd")); + } else if ("OPEN_DATE".equals(shkd_djzdms)) {//现金账户 → 开户日期 + Date date = billObject.getDate("open_date");//转化为2020-10-10格式 + bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), DateUtils.formatDate(date, "yyyy-MM-dd")); + } else { + bodyMap.put(dynamicObject.getString("shkd_jsonzdm"), billObject.getString(shkd_djzdms)); + } + } + + ResponseEntity stringResponseEntity = pushLCMasterData(shkd_url, billTypeCode, headMap, bodyMap, fieldList, resultMap); + String result = stringResponseEntity.getBody(); + + resultMap.put("shkd_calldescription", dataEntity.getString("shkd_name")); + resultMap.put("shkd_requesturl", shkd_url); + resultMap.put("shkd_response", result); + resultMap.put("shkd_thirdpartysys", "浪潮"); + + JSONObject jsonObject = JSON.parseObject(result); + String status = jsonObject.getString("status"); + if ("success".equals(status)) { + JSONArray dataresult = jsonObject.getJSONArray("dataresult"); + JSONObject data = dataresult.getJSONObject(0); + String statusResult = data.getString("status"); + + if ("success".equals(statusResult)) { + resultMap.put("shkd_issuccess", true); + billObject.set("shkd_ispushlc", true); + billObject.set("shkd_pushlcdatetime", new Date()); + SaveServiceHelper.save(new DynamicObject[]{billObject}); + this.getView().showSuccessNotification("推送成功!" + result); + } else { + resultMap.put("shkd_issuccess", false); + this.getView().showTipNotification("推送失败!" + result); + } + }else { + resultMap.put("shkd_issuccess", false); + this.getView().showTipNotification("推送失败!" + result); + } + + saveThePushLog(resultMap); } }