Merge remote-tracking branch 'origin/main' into main

This commit is contained in:
陈绍鑫 2025-04-16 10:43:55 +08:00
commit aea0c54900
9 changed files with 269 additions and 101 deletions

View File

@ -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;
}
}

View File

@ -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());
}
}

View File

@ -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<DynamicObject> 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<List>
* @param dynamic 源单据对象
*/
private static void processFloor(JSONObject parentJson, String parentKey, List<DynamicObject> currentFloor, List<List<DynamicObject>> floors, DynamicObject dynamic) {
private static void processFloor(JSONObject parentJson, String parentKey, List<DynamicObject> currentFloor, List<List<DynamicObject>> 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<List<DynamicObject>> floors) {
private static void valueAssignment(DynamicObject dynamicObject, DynamicObject billObject, JSONObject jsonObject, List<List<DynamicObject>> 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);
}
}

View File

@ -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});
}
}

View File

@ -175,18 +175,35 @@ public class PayBillApiSavePlugin implements ApiSavePlugin {
objectNumber = objects[0].getString("number");
}
} else if ("bos_user".equals(payeetype)) {
Map<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> number = new HashMap<>();
@ -282,18 +299,32 @@ public class PayBillApiSavePlugin implements ApiSavePlugin {
objectNumber = objects[0].getString("number");
}
} else if ("bos_user".equals(payertype)) {
Map<String, Object> 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<String, Object> 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<String, Object> 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<String, Object> number = new HashMap<>();
@ -346,15 +377,27 @@ public class PayBillApiSavePlugin implements ApiSavePlugin {
map.put("asstact", number);
}
} else if ("bos_user".equals(asstacttype)) {
Map<String, Object> 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<String, Object> number = new HashMap<>();
number.put("number", objects[0].getString("number"));
map.put("asstact", number);
if ("XK".equals(map.get("shkd_businessname").toString())) {
Map<String, Object> 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<String, Object> number = new HashMap<>();
number.put("number", objects[0].getString("number"));
map.put("asstact", number);
}
} else {
Map<String, Object> 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<String, Object> number = new HashMap<>();
number.put("number", objects[0].getString("number"));
map.put("asstact", number);
}
}
}
}

View File

@ -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;

View File

@ -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);
}
}
}

View File

@ -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<DynamicObject> 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<DynamicObject> 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<IOperateInfo> 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;
}
}

View File

@ -39,18 +39,26 @@ public class PushTaskPlugin extends AbstractTask implements Plugin {
List<DynamicObject> 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);
}
});