diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/handler/CreateToDoHandler.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/handler/CreateToDoHandler.java index 332cc86..b54bced 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/handler/CreateToDoHandler.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/handler/CreateToDoHandler.java @@ -63,16 +63,16 @@ public class CreateToDoHandler { public boolean sendCreateToDoNew(String messageInfo, String title, String appRecordId, String userId, String number) { - logger.info("###进入待办推送接口数据组装"); + logger.info("###新eoss进入待办推送接口数据组装"); try { //调用接口结果 String result = RequestClient.getInstance().callServiceNew(ToDoCenterConstant.URI_send_addNew, messageInfo); - logger.info("###接口返回结果" + result); + logger.info("###新eoss接口返回结果" + result); //接口调用结果 JSONObject jsonObject = JSONObject.parseObject(result); if (jsonObject == null) { RequestClient.getInstance().saveCreateToDoNew(title, ToDoCenterConstant.URI_send_addNew, false, result, messageInfo, appRecordId, userId, number); - logger.info("###响应报文为空"); + logger.info("###新eoss响应报文为空"); return false; } else { if (Objects.equals("success", jsonObject.getString("status"))) { @@ -84,7 +84,7 @@ public class CreateToDoHandler { //调用保存操作 RequestClient.getInstance().saveCreateToDoNew(title, ToDoCenterConstant.URI_send_addNew, false, result, messageInfo, appRecordId, userId, number); //发送失败 - logger.error("###接口调通失败"); + logger.error("###新eoss接口调通失败"); return false; } } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/utils/RequestClient.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/utils/RequestClient.java index 0016ad8..4010932 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/utils/RequestClient.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/utils/RequestClient.java @@ -195,18 +195,18 @@ public class RequestClient { * @param number 单据编码 */ public void saveCreateToDoNew(String title,String url, boolean isTrue,String result,String jsonMessage,String appRecordId,String userId,String number){ - logger.info("###开始调用待办保存日志方法"); + logger.info("###新eoss开始调用待办保存日志方法"); StringBuffer urlStr = new StringBuffer(); urlStr.append(this.protocal).append("://").append(this.newIp); if (!StringUtils.isEmpty(this.newPort)) { urlStr.append(":").append(this.newPort); } urlStr.append(url);; - logger.info("###保存时,环境参数,protocal:"+this.protocal+",ip:"+this.newIp+",this.port:"+this.newPort); + logger.info("###新eoss保存时,环境参数,protocal:"+this.protocal+",ip:"+this.newIp+",this.port:"+this.newPort); try{ DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject("shkd_backlog1"); - logger.info("###保存日志表id"+dynamicObject.getPkValue()); - dynamicObject.set("shkd_url","测试环境:"+urlStr); + logger.info("###新eoss保存日志表id"+dynamicObject.getPkValue()); + dynamicObject.set("shkd_url","新eoss:"+urlStr); CodeRuleInfo codeRule = CodeRuleServiceHelper.getCodeRule(dynamicObject.getDataEntityType().getName(), dynamicObject, null); dynamicObject.set("billno",CodeRuleServiceHelper.getNumber(codeRule,dynamicObject)); dynamicObject.set("shkd_traceid",appRecordId); @@ -221,11 +221,11 @@ public class RequestClient { dynamicObject.set("shkd_number",number); } Object[] save = SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); - logger.info("###保存日志表后id"+dynamicObject.getPkValue()); - logger.info("save结果"+save.toString()); - logger.info("###结束调用待办保存日志方法"); + logger.info("###新eoss保存日志表后id"+dynamicObject.getPkValue()); + logger.info("新eosssave结果"+save.toString()); + logger.info("###新eoss结束调用待办保存日志方法"); }catch (Exception execution){ - logger.info("###保存日志失败"+execution.getMessage()); + logger.info("###新eoss保存日志失败"+execution.getMessage()); } } @@ -285,7 +285,7 @@ public class RequestClient { * @param status 类型 2:已办 5:撤销 */ public void saveDeLToDoNew(Long appRecordId,String userId,String url,boolean isTrue,String result,String jsonMessage,String status,String number){ - logger.info("###开始调用已办、撤销保存日志方法"); + logger.info("###开始新eoss调用已办、撤销保存日志方法"); StringBuffer urlStr = new StringBuffer(); urlStr.append(this.protocal).append("://").append(this.newIp); if (!StringUtils.isEmpty(this.newPort)) { @@ -294,7 +294,7 @@ public class RequestClient { urlStr.append(url); try{ DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject("shkd_backlog1"); - dynamicObject.set("shkd_url","测试环境:"+urlStr.toString()); + dynamicObject.set("shkd_url","新eoss:"+urlStr.toString()); CodeRuleInfo codeRule = CodeRuleServiceHelper.getCodeRule(dynamicObject.getDataEntityType().getName(), dynamicObject, null); dynamicObject.set("billno",CodeRuleServiceHelper.getNumber(codeRule,dynamicObject)); dynamicObject.set("shkd_traceid",appRecordId); @@ -309,11 +309,11 @@ public class RequestClient { dynamicObject.set("shkd_number",number); } Object[] save = SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); - logger.info("###保存日志表id"+dynamicObject.getPkValue()); - logger.info("save结果"+save.toString()); - logger.info("###结束调用已办、撤销保存日志方法"); + logger.info("###新eoss保存日志表id"+dynamicObject.getPkValue()); + logger.info("新eosssave结果"+save.toString()); + logger.info("###新eoss结束调用已办、撤销保存日志方法"); }catch (Exception execution){ - logger.info("###保存日志失败"+execution.getMessage()); + logger.info("###新eoss保存日志失败"+execution.getMessage()); } } 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 574e46d..349399e 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 @@ -46,6 +46,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; + import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.Files; @@ -190,6 +191,8 @@ public class ApiService { * * @param dynamic 某个单据的 某条需要推送的数据 注:映射字段必须包含在其中,缺失字段会报错 * @param systemName 推送系统标识 + * @param dynamicObjects 反写单据数据 + * @param requestBody 请求体数据 * @return 推送结果 */ public static String paymentSlipsJson(DynamicObject dynamic, String systemName, List dynamicObjects, String requestBody) { @@ -244,6 +247,7 @@ public class ApiService { jsonObject = JSON.parseObject(saveResponseBody); code = jsonObject.getString("code"); if ("200".equals(code)) { + LogService.newLog("INFO", "付款单", dynamic.getString("billno"), "付款处理 → BIP保存接口 → 成功", "请求数据:" + saveRequestBody + "\n推送成功接口返回数据:" + saveResponseBody); logger.info("付款处理 → BIP保存接口 → 成功\n失败单据编号:{}\n推送失败接口返回数据:{}", dynamic.getString("billno"), saveResponseBody); data = jsonObject.getJSONObject("data"); dynamic.set("shkd_businessnumber", data.getString("code")); @@ -260,6 +264,7 @@ public class ApiService { logger.info("付款处理 → BIP提交接口 → 返回结果:{}", submitResponseBody); result = "推送 → 付款处理单 → 成功"; } else { + LogService.newLog("ERROR", "付款单", dynamic.getString("billno"), "付款处理 → BIP保存接口 → 失败", "请求数据:" + saveRequestBody + "\n推送失败接口返回数据:" + saveResponseBody); logger.info("付款处理 → BIP保存接口 → 失败\n失败单据编号:{}\n推送失败接口返回数据:{}", dynamic.getString("billno"), saveResponseBody); result = "推送 → 付款处理单 → 失败"; } @@ -272,6 +277,8 @@ public class ApiService { jsonObject = JSON.parseObject(saveResponseBody); code = jsonObject.getString("code"); if ("200".equals(code)) { + LogService.newLog("INFO", "收款单", dynamic.getString("billno"), "收款处理 → BIP保存接口 → 成功", "请求数据:" + saveRequestBody + "\n推送成功接口返回数据:" + saveResponseBody); + logger.info("收款处理 → BIP保存接口 → 成功\n失败单据编号:{}\n推送失败接口返回数据:{}", dynamic.getString("billno"), saveResponseBody); data = jsonObject.getJSONObject("data"); dynamic.set("shkd_businessnumber", data.getString("code")); @@ -287,7 +294,9 @@ public class ApiService { logger.info("收款处理 → BIP提交接口 → 返回结果:{}", submitResponseBody); result = "推送 → 收款处理 → 成功"; } else { - logger.info("收款处理 → BIP保存接口 → 成功\n失败单据编号:{}\n推送失败接口返回数据:{}", dynamic.getString("billno"), saveResponseBody); + LogService.newLog("ERROR", "收款单", dynamic.getString("billno"), "收款处理 → BIP保存接口 → 失败", "请求数据:" + saveRequestBody + "\n推送失败接口返回数据:" + saveResponseBody); + + logger.info("收款处理 → BIP保存接口 → 失败\n失败单据编号:{}\n推送失败接口返回数据:{}", dynamic.getString("billno"), saveResponseBody); result = "推送 → 收款处理 → 失败"; } @@ -301,9 +310,13 @@ public class ApiService { dynamic.set("shkd_pushstatus", "已推送"); dynamic.set("shkd_businessname", "共享系统"); dynamicObjects.add(dynamic); + LogService.newLog("INFO", "银行收付处理", dynamic.getString("billno"), "银行收付处理 → BIP推送接口 → 成功", "请求数据:" + saveRequestBody + "\n推送成功接口返回数据:" + saveResponseBody); + logger.info("银行收付处理 → BIP推送接口 → 成功\n成功单据编号:{}\n成功请求体:{}\n推送成功接口返回数据:{}", dynamic.getString("billno"), saveRequestBody, saveResponseBody); result = "推送 → 银行收付处理 → 成功"; } else { + LogService.newLog("ERROR", "银行收付处理", dynamic.getString("billno"), "银行收付处理 → BIP推送接口 → 失败", "请求数据:" + saveRequestBody + "\n推送失败接口返回数据:" + saveResponseBody); + logger.info("银行收付处理 → BIP推送接口 → 失败\n失败单据编号:{}\n失败请求体:{}\n推送失败接口返回数据:{}", dynamic.getString("billno"), saveRequestBody, saveResponseBody); result = "推送 → 银行收付处理 → 失败"; } @@ -318,20 +331,21 @@ public class ApiService { jsonObject = JSON.parseObject(saveResponseBody); code = jsonObject.getString("code"); if ("200".equals(code)) { - if ("TF、NC、OF".contains(dynamic.getString("bankpaystatus"))) { - dynamic.set("billstatus", "A"); - dynamic.set("shkd_pushstatus", "结算失败"); - } else if ("TS".equals(dynamic.getString("bankpaystatus"))) { + if ("TS".equals(dynamic.getString("bankpaystatus"))) { dynamic.set("shkd_pushstatus", "已结算"); } else { dynamic.set("shkd_pushstatus", "结算失败"); } dynamicObjects.add(dynamic); + LogService.newLog("INFO", "付款单(结算结果)", dynamic.getString("billno"), "付款处理(支付结果) → BIP推送接口 → 成功", "请求数据:" + saveRequestBody + "\n推送成功接口返回数据:" + saveResponseBody); + logger.info("付款处理(支付结果) → BIP推送接口 → 成功\n成功单据编号:{}\n成功请求体:{}\n推送成功接口返回数据:{}", dynamic.getString("billno"), saveRequestBody, saveResponseBody); result = "推送 → 付款处理(支付结果) → 成功,返回信息:"; } else { + LogService.newLog("ERROR", "付款单(结算结果)", dynamic.getString("billno"), "付款处理(支付结果) → BIP推送接口 → 失败", "请求数据:" + saveRequestBody + "\n推送失败接口返回数据:" + saveResponseBody); + logger.info("付款处理(支付结果) → BIP推送接口 → 失败\n失败单据编号:{}\n失败请求体:{}\n推送失败接口返回数据:{}", dynamic.getString("billno"), saveRequestBody, saveResponseBody); result = "推送 → 付款处理(支付结果) → 失败,返回信息:" + JSON.parseObject(saveResponseBody).getString("message"); @@ -372,8 +386,12 @@ public class ApiService { String attachmentRequestBody = getAttachmentRequestBody(hashMap); String pushResult = pushBill(token, "https://10.1.9.43/iuap-api-auth//yonbip/ctm/bank/tran/update", attachmentRequestBody); logger.info("电子回单查询 → BIP推送附件接口 → 请求返回结果:\n{}", pushResult); + LogService.newLog("INFO", "电子回单", dynamic.getString("billno"), "电子回单查询 → BIP推送接口 → 成功", "请求数据:" + saveRequestBody + "\n推送成功接口返回数据:" + saveResponseBody + "\n推送附件URL:" + pdfUrl + "\n推送附件接口返回数据:" + pushResult); + result = "推送 → 电子回单和附件 → 成功"; } else { + LogService.newLog("ERROR", "电子回单", dynamic.getString("billno"), "电子回单查询 → BIP推送接口 → 失败", "请求数据:" + saveRequestBody + "\n推送失败接口返回数据:" + saveResponseBody); + logger.info("电子回单查询 → BIP推送接口 → 失败\n失败单据编号:{}\n失败请求体:{}\n推送失败接口返回数据:{}", dynamic.getString("billno"), saveRequestBody, saveResponseBody); result = "推送 → 电子回单和附件 → 失败"; @@ -423,13 +441,13 @@ public class ApiService { JSONArray jsonArray = new JSONArray(); JSONObject json = new JSONObject(); for (DynamicObject dynamicObject : dynamicObjectCollection) { - valueAssignment(dynamicObject, dynamic, json, floors); + valueAssignment(dynamicObject, dynamic, json, floors, 0); } jsonArray.add(json); return jsonArray.toJSONString(); } else { JSONObject resultJson = new JSONObject(); - processFloor(resultJson, "data", floors.get(0), floors, dynamic); + processFloor(resultJson, "data", floors.get(0), floors, dynamic, 0); return resultJson.toJSONString(); } } @@ -443,33 +461,33 @@ public class ApiService { * @param floors 所有楼层对象(List) * @param dynamic 源单据对象 */ - private static void processFloor(JSONObject parentJson, String parentKey, List currentFloor, List> floors, DynamicObject dynamic) { + private static void processFloor(JSONObject parentJson, String parentKey, List currentFloor, List> floors, DynamicObject dynamic, int i) { logger.info("进入processFloor方法"); if (currentFloor.isEmpty()) { logger.info("currentFloor.isEmpty()"); return; } - if (currentFloor.size() == 1 && "object".equals(currentFloor.get(0).getString("shkd_tartype"))) { + if (currentFloor.size() == 1 && "对象".equals(currentFloor.get(0).getString("shkd_tartype"))) { parentJson.put(parentKey, new JSONObject()); - processFloor(parentJson.getJSONObject(parentKey), parentKey, getChildren(floors, currentFloor.get(0).getString("shkd_tarfield")), floors, dynamic); + processFloor(parentJson.getJSONObject(parentKey), parentKey, getChildren(floors, currentFloor.get(0).getString("shkd_tarfield")), floors, dynamic, 0); return; } - if ("arrayList".equals(currentFloor.get(0).getString("shkd_tartype"))) { + if ("数组".equals(currentFloor.get(0).getString("shkd_tartype"))) { logger.info("进入数组"); JSONArray jsonArray = new JSONArray(); //目前JSONArray都是一层 JSONObject json = new JSONObject(); for (DynamicObject dynamicObject : currentFloor) { - valueAssignment(dynamicObject, dynamic, json, floors); + valueAssignment(dynamicObject, dynamic, json, floors, 0); } jsonArray.add(json); parentJson.put(parentKey, jsonArray); } else { logger.info("进入对象"); for (DynamicObject dynamicObject : currentFloor) { - valueAssignment(dynamicObject, dynamic, parentJson, floors); + valueAssignment(dynamicObject, dynamic, parentJson, floors, i); } } } @@ -482,7 +500,7 @@ public class ApiService { * @param jsonObject JSON对象 * @param floors 层集合 */ - private static void valueAssignment(DynamicObject dynamicObject, DynamicObject billObject, JSONObject jsonObject, List> floors) { + private static void valueAssignment(DynamicObject dynamicObject, DynamicObject billObject, JSONObject jsonObject, List> floors, int i) { String key = dynamicObject.getString("shkd_tarfield"); Object value = null; @@ -580,7 +598,7 @@ public class ApiService { } else if (parts.length == 2) { if ("entry".equals(parts[0])) { DynamicObjectCollection dynamicObjectCollection1 = billObject.getDynamicObjectCollection(parts[0]); - value = dynamicObjectCollection1.get(0).get(parts[1]); + value = dynamicObjectCollection1.get(i).get(parts[1]); } else { DynamicObject object = billObject.getDynamicObject(parts[0]); if (object != null) { @@ -590,7 +608,7 @@ public class ApiService { } else if (parts.length == 3) { if ("entry".equals(parts[0])) { DynamicObjectCollection dynamicObjectCollection1 = billObject.getDynamicObjectCollection(parts[0]); - DynamicObject object = dynamicObjectCollection1.get(0).getDynamicObject(parts[1]); + DynamicObject object = dynamicObjectCollection1.get(i).getDynamicObject(parts[1]); if (object != null) { value = object.get(parts[2]); } @@ -620,13 +638,19 @@ public class ApiService { jsonObject.put(key, new BigDecimal(String.valueOf(value))); } else if ("对象".equals(tartype)) { JSONObject childJson = new JSONObject(); - processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, billObject); + processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, billObject, 0); jsonObject.put(key, childJson); } else if ("数组".equals(tartype)) { JSONArray childJsonArray = new JSONArray(); - JSONObject childJson = new JSONObject(); - processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, billObject); - childJsonArray.add(childJson); + + DynamicObjectCollection dynamicObjectCollection = billObject.getDynamicObjectCollection("entry"); + logger.info("分录长度:" + dynamicObjectCollection.size()); + for (int j = 0; j < dynamicObjectCollection.size(); j++) { + JSONObject childJson = new JSONObject(); + processFloor(childJson, key, getChildren(floors, dynamicObject.getString("shkd_tarfield")), floors, billObject, j); + childJsonArray.add(childJson); + } + jsonObject.put(key, childJsonArray); } } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/LogService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/LogService.java new file mode 100644 index 0000000..e8923f4 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/LogService.java @@ -0,0 +1,29 @@ +package shkd.sys.sys.mservice; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; + +/** + * @Description + * @Author Tao + * @Date 2025/4/9 + */ +public class LogService { + /** + * @param shkd_loglevel 日志级别 + * @param shkd_billtype 单据类型 + * @param shkd_billnumber 推送单据编码 + * @param shkd_logdetails 日志摘要 + * @param shkd_logdetails_tag 日志详情 + */ + public static void newLog(String shkd_loglevel, String shkd_billtype, String shkd_billnumber, String shkd_logdetails, String shkd_logdetails_tag) { + DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject("shkd_log"); + dynamicObject.set("shkd_loglevel", shkd_loglevel); + dynamicObject.set("shkd_billtype", shkd_billtype); + dynamicObject.set("shkd_billnumber", shkd_billnumber); + dynamicObject.set("shkd_logdetails", shkd_logdetails);// 大文本摘要 + dynamicObject.set("shkd_logdetails_tag", shkd_logdetails_tag);// 大文本内容 + SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); + } +} diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/PayBillApiSavePlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/PayBillApiSavePlugin.java index 2cd8d5f..02ebb36 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/PayBillApiSavePlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/PayBillApiSavePlugin.java @@ -175,18 +175,35 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { objectNumber = objects[0].getString("number"); } } else if ("bos_user".equals(payeetype)) { - Map username = new HashMap<>(); - username.put("username", map.get("payeenumber").toString()); - map.put("shkd_user", username); - DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype.toString(), "id,name,number,username", new QFilter("username", QCP.equals, map.get("payeenumber").toString()).toArray()); - if (objects.length > 0) { - // 收款人编码 - map.put("payeenumber", objects[0].getString("number")); - // 收款人ID - map.put(fieldName1, objects[0].getPkValue()); - //收款人编码 - objectNumber = objects[0].getString("number"); + if (map.get("shkd_businessname").toString().equals("XK")) { + Map user_number = new HashMap<>(); + user_number.put("number", map.get("payeenumber").toString()); + map.put("shkd_user", user_number); + + DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype.toString(), "id,name,number,username", new QFilter("number", QCP.equals, map.get("payeenumber").toString()).toArray()); + if (objects.length > 0) { + // 收款人编码 + map.put("payeenumber", objects[0].getString("number")); + // 收款人ID + map.put(fieldName1, objects[0].getPkValue()); + //收款人编码 + objectNumber = objects[0].getString("number"); + } + } else { + Map username = new HashMap<>(); + username.put("username", map.get("payeenumber").toString()); + map.put("shkd_user", username); + + DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype.toString(), "id,name,number,username", new QFilter("username", QCP.equals, map.get("payeenumber").toString()).toArray()); + if (objects.length > 0) { + // 收款人编码 + map.put("payeenumber", objects[0].getString("number")); + // 收款人ID + map.put(fieldName1, objects[0].getPkValue()); + //收款人编码 + objectNumber = objects[0].getString("number"); + } } } else if ("bos_org".equals(payeetype)) { Map number = new HashMap<>(); @@ -282,18 +299,32 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { objectNumber = objects[0].getString("number"); } } else if ("bos_user".equals(payertype)) { - Map username = new HashMap<>(); - username.put("username", map.get("payernumber").toString()); - map.put("shkd_user", username); - - DynamicObject[] objects = BusinessDataServiceHelper.load(payertype.toString(), "id,name,number,username", new QFilter("username", QCP.equals, map.get("payernumber").toString()).toArray()); - if (objects.length > 0) { - // 付款人编码 - map.put("payernumber", objects[0].getString("number")); - // 付款人ID - map.put(fieldName1, objects[0].getPkValue()); - // 付款人编码 - objectNumber = objects[0].getString("number"); + if (map.get("shkd_businessname").toString().equals("XK")) { + Map user_number = new HashMap<>(); + user_number.put("number", map.get("payernumber").toString()); + map.put("shkd_user", user_number); + DynamicObject[] objects = BusinessDataServiceHelper.load(payertype.toString(), "id,name,number,username", new QFilter("number", QCP.equals, map.get("payernumber").toString()).toArray()); + if (objects.length > 0) { + // 付款人编码 + map.put("payernumber", objects[0].getString("number")); + // 付款人ID + map.put(fieldName1, objects[0].getPkValue()); + // 付款人编码 + objectNumber = objects[0].getString("number"); + } + } else { + Map username = new HashMap<>(); + username.put("username", map.get("payernumber").toString()); + map.put("shkd_user", username); + DynamicObject[] objects = BusinessDataServiceHelper.load(payertype.toString(), "id,name,number,username", new QFilter("username", QCP.equals, map.get("payernumber").toString()).toArray()); + if (objects.length > 0) { + // 付款人编码 + map.put("payernumber", objects[0].getString("number")); + // 付款人ID + map.put(fieldName1, objects[0].getPkValue()); + // 付款人编码 + objectNumber = objects[0].getString("number"); + } } } else if ("bos_org".equals(payertype)) { Map number = new HashMap<>(); @@ -346,15 +377,27 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { map.put("asstact", number); } } else if ("bos_user".equals(asstacttype)) { - Map username = new HashMap<>(); - username.put("username", asstact.get("number").toString()); - map.put("shkd_user", username); - logger.info("人员用户名:{}", asstact.get("number").toString()); - DynamicObject[] objects = BusinessDataServiceHelper.load("bos_user", "id,name,number,username", new QFilter("username", QCP.equals, asstact.get("number").toString()).toArray()); - if (objects.length > 0) { - Map number = new HashMap<>(); - number.put("number", objects[0].getString("number")); - map.put("asstact", number); + if ("XK".equals(map.get("shkd_businessname").toString())) { + Map user_number = new HashMap<>(); + user_number.put("number", asstact.get("number").toString()); + map.put("shkd_user", user_number); + DynamicObject[] objects = BusinessDataServiceHelper.load("bos_user", "id,name,number,username", new QFilter("number", QCP.equals, asstact.get("number").toString()).toArray()); + if (objects.length > 0) { + Map number = new HashMap<>(); + number.put("number", objects[0].getString("number")); + map.put("asstact", number); + } + } else { + Map username = new HashMap<>(); + username.put("username", asstact.get("number").toString()); + map.put("shkd_user", username); + logger.info("人员用户名:{}", asstact.get("number").toString()); + DynamicObject[] objects = BusinessDataServiceHelper.load("bos_user", "id,name,number,username", new QFilter("username", QCP.equals, asstact.get("number").toString()).toArray()); + if (objects.length > 0) { + Map number = new HashMap<>(); + number.put("number", objects[0].getString("number")); + map.put("asstact", number); + } } } } 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 8a8bd5c..c8e0137 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 @@ -213,12 +213,11 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { // 付款处理 case "cas_paybill": DynamicObject[] objects1 = BusinessDataServiceHelper.load("cas_paybill", - "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + - "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,org.number,org.name,bizdate," + - "description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus" - , new QFilter("billno", QCP.equals, billNumber) - .and("org.name", QCP.in, new String[]{"四川川投能源股份有限公司", "川投(攀枝花)新能源开发有限公司", "四川川投屏山书楼抽水蓄能开发有限公司", "四川天彭电力开发有限公司"})//目前四家公司 - .toArray()); + "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,entry.e_actamt,settletype," + + "payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype," + + "org,bizdate,description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname," + + "billstatus,bankpaystatus" + , new QFilter("billno", QCP.equals, billNumber).toArray()); billObject = objects1[0]; logger.info("获取付款处理推送对象 → billObject:{}", billObject); break; diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/LogBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/LogBillPlugin.java new file mode 100644 index 0000000..80564ba --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/LogBillPlugin.java @@ -0,0 +1,52 @@ +package shkd.sys.sys.plugin.form; + +import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.form.control.Toolbar; +import kd.bos.form.control.events.ItemClickEvent; +import kd.bos.form.field.RichTextEdit; +import kd.sdk.plugin.Plugin; +import shkd.sys.sys.mservice.LogService; + +import java.util.EventObject; + +/** + * 单据界面插件 + */ +public class LogBillPlugin extends AbstractBillPlugIn implements Plugin { + @Override + public void registerListener(EventObject e) { +// super.registerListener(e); + + // 获取工具栏,监听整个工具栏 + Toolbar save = this.getView().getControl("tbmain"); + // 监听工具栏这个按钮的点击事件 + save.addItemClickListener(this); + + // 获取除了工具栏上的其他按钮 + // Button save = this.getView().getControl("qwz5_baritemap"); + // save.addClickListener(this); // 添加出菜单栏点击事件监听 + } + + @Override + public void itemClick(ItemClickEvent evt) { + super.itemClick(evt); + // 获取键 + String key = evt.getItemKey(); + + if ("shkd_setlog".equals(key)) { + LogService.newLog("INFO", "付款单", "FKD-20250409-0001", "付款单 → 推送至BIP → 成功", "风听到了海豚和云的笑声。云是个爱哭鬼,可是风还是特别喜欢她,风推着她跑啊跑得,把她带到每个好玩儿的地方去。她哭的时候风就呼啊呼把她的眼泪吹干了,后来风没有留住云,她变成了雨,去到了海里陪海豚征服湛蓝的世界去了,风还是一遍一遍地吹动海面。因为风还是特别喜欢她。"); + } + } + + @Override + public void afterBindData(EventObject e) { + super.afterBindData(e); + DynamicObject dataEntity = this.getModel().getDataEntity(true); + if (dataEntity.get("shkd_logdetails_tag") != null) { + String shkdLogdetailsTag = dataEntity.getString("shkd_logdetails_tag"); + RichTextEdit edit = this.getView().getControl("shkd_richtexteditorap"); + edit.setText(shkdLogdetailsTag); + } + } +} \ No newline at end of file diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/HitBackOperationServicePlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/HitBackOperationServicePlugin.java index 05eaa06..885ec53 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/HitBackOperationServicePlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/HitBackOperationServicePlugin.java @@ -1,6 +1,8 @@ package shkd.sys.sys.plugin.operation; +import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.operate.result.OperationResult; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.args.AfterOperationArgs; import kd.bos.entity.plugin.args.BeforeOperationArgs; @@ -9,10 +11,12 @@ 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.operation.OperationServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.sdk.plugin.Plugin; import scala.collection.mutable.StringBuilder; import shkd.sys.sys.mservice.ApiService; +import kd.bos.entity.operate.result.IOperateInfo; import shkd.sys.sys.plugin.form.ApiMappingBillPlugin; import java.util.ArrayList; @@ -28,6 +32,7 @@ public class HitBackOperationServicePlugin extends AbstractOperationServicePlugI /** * 单据操作前 打回操作 + * * @param args */ @Override @@ -38,41 +43,52 @@ public class HitBackOperationServicePlugin extends AbstractOperationServicePlugI Arrays.stream(entities).forEach(dynamicObject -> { pkValue.add(dynamicObject.getPkValue()); }); - DynamicObject[] objects = BusinessDataServiceHelper.load("cas_paybill", "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum," + - "payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description," + - "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus" + DynamicObject[] objects = BusinessDataServiceHelper.load("cas_paybill", + "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype," + + "payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype," + + "org,bizdate,description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname," + + "billstatus,bankpaystatus" , new QFilter("id", QCP.in, pkValue) - .and("billstatus", QCP.equals, "C")//已审核 + .and("billstatus", QCP.in, "A、C") .and("shkd_businessname", QCP.equals, "共享系统").toArray()); if (objects == null || objects.length == 0) { args.setCancel(true); - args.setCancelMessage("选择打回单据必须为BIP推送单据"); + args.setCancelMessage("打回失败\n" + + "1、选择打回单据必须为BIP推送单据\n" + + "2、只能打回提交、已审核的单据\n" + + "(若有其他问题,可找业务老师咨询)" + ); } else { StringBuilder stringBuilder = new StringBuilder(); + List dynamicObjects = new ArrayList<>(); for (DynamicObject dynamicObject : objects) { - String bankpaystatus = dynamicObject.getString("bankpaystatus"); if (!"未结算".equals(dynamicObject.getString("shkd_pushstatus"))) { args.setCancel(true); args.setCancelMessage("打回失败,该单据结算结果已被推送"); return; } - if ("TF、NC、OF".contains(bankpaystatus)) { - List dynamicObjects = new ArrayList<>(); - String result = ApiService.paymentSlipsJson(dynamicObject, "BIPNO", dynamicObjects, null); + OperationResult sumbit = OperationServiceHelper.executeOperate("unsubmit", "cas_paybill", dynamicObjects.toArray(new DynamicObject[0]), OperateOption.create()); + List allErrorOrValidateInfo = sumbit.getAllErrorOrValidateInfo(); + if (allErrorOrValidateInfo.isEmpty()) { + String result = ApiService.paymentSlipsJson(dynamicObject, "BIPRE", dynamicObjects, null); logger.info("result信息:{}", result); if (result.contains("成功")) { SaveServiceHelper.save(dynamicObjects.toArray(new DynamicObject[0])); - stringBuilder.append(result); - return; + } else { args.setCancel(true); args.setCancelMessage(result); return; } + return; } else { + allErrorOrValidateInfo.forEach(operateInfo -> { + DynamicObject object = BusinessDataServiceHelper.loadSingle(operateInfo.getPkValue(), "cas_paybill"); + stringBuilder.append("单据编号:" + object.get("billno") + "," + operateInfo.getMessage() + "\n"); + }); args.setCancel(true); - args.setCancelMessage("打回失败,请确认银行支付状态"); + args.setCancelMessage(stringBuilder.toString()); return; } } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java index 649df0f..e7027b9 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java @@ -39,18 +39,26 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { List dynamicObjectList = new ArrayList<>(); if (billMark != null) { switch (billMark.toString()) { + //BIP推过来,系统为共享系统,推送状态未结算 + //司库推BIP → 只能通过能源公司和来源系统判断:,且推送系统为空(推送后返回系统为能源共享,推送状态为) + // 已结算、未结算、结算失败、未推送 // 付款处理 case "cas_paybill": - DynamicObject[] objects1 = BusinessDataServiceHelper.load("cas_paybill", "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus" - , new QFilter("bizdate", QCP.large_equals, calculateTheDate(2)) - .and("shkd_pushstatus", QCP.not_equals, "已结算") - .and("shkd_pushstatus", QCP.not_equals, "结算失败") + DynamicObject[] objects1 = BusinessDataServiceHelper.load("cas_paybill", + "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,entry.e_actamt,settletype," + + "payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype," + + "org,bizdate,description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname," + + "billstatus,bankpaystatus" + , new QFilter("bizdate", QCP.large_equals, getFirstDayOfMonth(3)) .and("billstatus", QCP.equals, "D").toArray()); Arrays.stream(objects1).forEach(dynamicObject -> { DynamicObject org = dynamicObject.getDynamicObject("org"); - if ("SIG1040100、SIG1090000、SIG000101135、SIG1041000、SIG1040802、SIG1040804、SIG1040803、SIG1040801、SIG1040400".contains(org.getString("number"))) { + if (("SIG1040100、SIG1040901、SIG1040201、SIG1090000、SIG1040700、SIG000101135、SIG1040600、SIG1040300、" + + "SIG000100079、SIG000003001、SIG1041000、SIG1040802、SIG000101558、SIG1040808、SIG1040804、" + + "SIG1040803、SIG1040801、SIG1040400、SIG104010101、SIG104010102、SIG1040202、SIG1040203、" + + "SIG1040204、SIG1040902、SIG000101822、SIG000101799").contains(org.getString("number"))) { ApiService.paymentSlipsJson(dynamicObject, "BIP", dynamicObjectList, null); } }); @@ -69,16 +77,10 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { //OF 银企异常 DynamicObject[] objects4 = BusinessDataServiceHelper.load("cas_paybill", "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus" , new QFilter("bizdate", QCP.large_equals, calculateTheDate(10)) - .and("bankpaystatus", QCP.in, new String[]{"TS", "TF", "NC", "OF"}) + .and("bankpaystatus", QCP.equals, "TS") .and("shkd_pushstatus", QCP.equals, "未结算") .and(new QFilter("shkd_businessname", QCP.equals, "共享系统")).toArray()); - - DynamicObject[] objects5 = BusinessDataServiceHelper.load("cas_paybill", "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype,org,bizdate,description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,billstatus,bankpaystatus" - , new QFilter("bankpaystatus", QCP.equals, "TS") - .and("shkd_pushstatus", QCP.equals, "结算失败") - .and(new QFilter("shkd_businessname", QCP.equals, "共享系统")).toArray()); dynamicObjects = Arrays.asList(objects4); - dynamicObjects.addAll(Arrays.asList(objects5)); dynamicObjects.forEach(dynamicObject -> ApiService.paymentSlipsJson(dynamicObject, "BIPNO", dynamicObjectList, null)); SaveServiceHelper.save(dynamicObjectList.toArray(new DynamicObject[0])); break; @@ -111,7 +113,10 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { Arrays.stream(objects3).forEach(dynamicObject -> { DynamicObject companys = dynamicObject.getDynamicObject("company"); - if (("SIG1040100、SIG1040901、SIG1040201、SIG1090000、SIG1040700、SIG000101135、SIG1040600、SIG1040300、SIG000100079、SIG000003001、SIG1041000、SIG1040802、SIG000101558、SIG1040808、SIG1040804、SIG1040803、SIG1040801、SIG1040400、SIG104010101、SIG104010102、SIG1040202、SIG1040203、SIG1040204、SIG1040902、SIG000101822、SIG000101799").contains(companys.getString("number"))) { + if (("SIG1040100、SIG1040901、SIG1040201、SIG1090000、SIG1040700、SIG000101135、SIG1040600、SIG1040300、" + + "SIG000100079、SIG000003001、SIG1041000、SIG1040802、SIG000101558、SIG1040808、SIG1040804、" + + "SIG1040803、SIG1040801、SIG1040400、SIG104010101、SIG104010102、SIG1040202、SIG1040203、" + + "SIG1040204、SIG1040902、SIG000101822、SIG000101799").contains(companys.getString("number"))) { ApiService.paymentSlipsJson(dynamicObject, "BIP", dynamicObjectList, null); } });