diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/backlogTack/ToDoResendTack.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/backlogTack/ToDoResendTack.java index 0ba958a..5bda77b 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/backlogTack/ToDoResendTack.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/backlogTack/ToDoResendTack.java @@ -27,6 +27,8 @@ import java.util.Iterator; import java.util.Map; import java.util.Objects; +import static shkd.sys.sys.midservice.utils.MobApproveListServiceHelper.allowMobApprove; + public class ToDoResendTack extends AbstractTask { private static final Log logger = LogFactory.getLog(ToDoResendTack.class); @@ -186,6 +188,11 @@ public class ToDoResendTack extends AbstractTask { ErrorCode errorCode = new ErrorCode("error_code", "AES加密出现异常,请联系运维人员排查!"); throw new KDException(errorCode, e); } + //判断是否移动端 + boolean allowMobApprove = allowMobApprove(next.get("fid")); + if(allowMobApprove){ + continue; + } switch (t_status) { case "0": //标题 @@ -233,7 +240,6 @@ public class ToDoResendTack extends AbstractTask { form.append("\"pendingAttr\":"); form.append("\"0\""); form.append("}"); - CreateToDoHandler.get_CreateToDoHandler().sendCreateToDo(form.toString(),title,next.getLong("fid").toString(),userName,next.getString("fbillno")); if(Objects.equals(shkd_type,"0")){ //旧 eoss 环境 CreateToDoHandler.get_CreateToDoHandler().sendCreateToDo(form.toString(),title,next.getLong("fid").toString(),userName,next.getString("fbillno")); diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/servicehandler/BacklogServiceHandle.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/servicehandler/BacklogServiceHandle.java index 8356467..85c6a9b 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/servicehandler/BacklogServiceHandle.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/servicehandler/BacklogServiceHandle.java @@ -22,6 +22,8 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import static shkd.sys.sys.midservice.utils.MobApproveListServiceHelper.allowMobApprove; + /** * @Description: * @Author: FangShiXiao @@ -37,19 +39,24 @@ public class BacklogServiceHandle extends AbstractServiceHandler { public void createToDo(MessageContext ctx, ToDoInfo todoInfo) { logger.info("###创建待办_createToDo"); - Object shkd_type = SystemParamServiceHelper.getPublicParameter("shkd_type"); - if(Objects.equals(shkd_type,"0")){ - //旧 eoss 环境 - getToDoFormal(ctx,todoInfo); - }else if(Objects.equals(shkd_type,"1")){ - //新eoss 环境 - getToDoNew(ctx,todoInfo); - }else if(Objects.equals(shkd_type,"2")){ - //二套环境 - getToDoNew(ctx,todoInfo); - getToDoFormal(ctx,todoInfo); + //判断是否需要发送待办链接、true为不推送,false为推送 + boolean b = allowMobApprove(ctx, todoInfo); + logger.info("###推送结果为:"+b+"(true为不推送,false为推送)"); + if(!b){ + Object shkd_type = SystemParamServiceHelper.getPublicParameter("shkd_type"); + if(Objects.equals(shkd_type,"0")){ + //旧 eoss 环境 + getToDoFormal(ctx,todoInfo); + }else if(Objects.equals(shkd_type,"1")){ + //新eoss 环境 + getToDoNew(ctx,todoInfo); + }else if(Objects.equals(shkd_type,"2")){ + //二套环境 + getToDoNew(ctx,todoInfo); + getToDoFormal(ctx,todoInfo); + } + logger.info("###结束待办_createToDo"); } - logger.info("###结束待办_createToDo"); /* //几个待办 List userIds = todoInfo.getUserIds(); DynamicObjectCollection query = QueryServiceHelper.query("bos_user", "id,name,number" + @@ -107,36 +114,42 @@ public class BacklogServiceHandle extends AbstractServiceHandler { //已办 public void dealToDo(MessageContext ctx, ToDoInfo info){ logger.info("###创建已办_dealToDo"); - Object shkd_type = SystemParamServiceHelper.getPublicParameter("shkd_type"); - if(Objects.equals(shkd_type,"0")){ - //旧 eoss 环境 - getDealFormal(ctx,info); - }else if(Objects.equals(shkd_type,"1")){ - //新 eoss 环境 - getDealNew(ctx,info); - }else if(Objects.equals(shkd_type,"2")){ - //二套环境 - getDealNew(ctx,info); - getDealFormal(ctx,info); + boolean b = allowMobApprove(ctx, info); + logger.info("###推送结果为:"+b+"(true为不推送,false为推送)"); + if(!b){ + Object shkd_type = SystemParamServiceHelper.getPublicParameter("shkd_type"); + if(Objects.equals(shkd_type,"0")){ + //旧 eoss 环境 + getDealFormal(ctx,info); + }else if(Objects.equals(shkd_type,"1")){ + //新 eoss 环境 + getDealNew(ctx,info); + }else if(Objects.equals(shkd_type,"2")){ + //二套环境 + getDealNew(ctx,info); + getDealFormal(ctx,info); + } + logger.info("###结束已办_dealToDo"); } - logger.info("###结束已办_dealToDo"); } //撤销 public void deleteToDo(MessageContext ctx, ToDoInfo info){ - logger.info("###创建撤销_deleteToDo"); - Object shkd_type = SystemParamServiceHelper.getPublicParameter("shkd_type"); - if(Objects.equals(shkd_type,"0")){ - //旧 eoss 环境 - getDeleteFormal(ctx,info); - }else if(Objects.equals(shkd_type,"1")){ - //新 eoss 环境 - getDeleteNew(ctx,info); - }else if(Objects.equals(shkd_type,"2")){ - //二套环境 - getDeleteNew(ctx,info); - getDeleteFormal(ctx,info); - } + boolean b = allowMobApprove(ctx, info); + logger.info("###推送结果为:"+b+"(true为不推送,false为推送)"); + if(!b){ + Object shkd_type = SystemParamServiceHelper.getPublicParameter("shkd_type"); + if(Objects.equals(shkd_type,"0")){ + //旧 eoss 环境 + getDeleteFormal(ctx,info); + }else if(Objects.equals(shkd_type,"1")){ + //新 eoss 环境 + getDeleteNew(ctx,info); + }else if(Objects.equals(shkd_type,"2")){ + //二套环境 + getDeleteNew(ctx,info); + getDeleteFormal(ctx,info); + } /* List userIds = info.getUserIds(); DynamicObjectCollection query = QueryServiceHelper.query("bos_user", "id,name,phone,username", new QFilter[]{new QFilter("id", "in", userIds)}); DynamicObject dynamicObject = QueryServiceHelper.queryOne("wf_hitaskinst", "billno", @@ -152,7 +165,8 @@ public class BacklogServiceHandle extends AbstractServiceHandler { } }*/ - logger.info("###结束撤销_deleteToDo"); + logger.info("###结束撤销_deleteToDo"); + } } /*** diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/utils/MobApproveListServiceHelper.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/utils/MobApproveListServiceHelper.java new file mode 100644 index 0000000..e824032 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/midservice/utils/MobApproveListServiceHelper.java @@ -0,0 +1,89 @@ +package shkd.sys.sys.midservice.utils; + +import com.bes.admin.jeemx.util.ObjectUtil; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.workflow.engine.msg.ctx.MessageContext; +import kd.bos.workflow.engine.msg.info.ToDoInfo; + +import java.util.Iterator; +import java.util.Map; + +/** + * @Author 方世筱 + * @Date 2025/6/20 0020 13:46 + * @Version 1.0 + */ +public class MobApproveListServiceHelper { + public static boolean allowMobApprove(String entityNumber,String billType,String procDefNumber,String nodeKey){ + QFilter[] qFilters = new QFilter[]{ + //实体编码=传入参数 + //生效 + new QFilter("shkd_entitynumber","=",entityNumber), + new QFilter("shkd_enable","=",true) + }; + Map objectDynamicObjectMap = BusinessDataServiceHelper.loadFromCache( + "shkd_mobapprovelist", "id,shkd_nolimitbilltype,shkd_nolimitprocess," + + "shkd_nolimitnode,shkd_billtype,shkd_processnum,shkd_nodenum", qFilters); + if(objectDynamicObjectMap != null && objectDynamicObjectMap.size()>0){ + Iterator> iterator = objectDynamicObjectMap.entrySet().iterator(); + while(iterator.hasNext()){ + Map.Entry next = iterator.next(); + DynamicObject config = next.getValue(); + //限定单据类型且不一致 + if(!config.getBoolean("shkd_nolimitbilltype") && !ObjectUtil.equals(billType,config.getString("shkd_billtype"))){ + continue; + } + //限定流程且不一致 + if(!config.getBoolean("shkd_nolimitprocess") && !ObjectUtil.equals(procDefNumber,config.getString("shkd_processnum"))){ + continue; + } + //限定节点且不一致 + if(!config.getBoolean("shkd_nolimitnode") && !ObjectUtil.equals(nodeKey,config.getString("shkd_nodenum"))){ + continue; + } + //符合条件 + return true; + } + } + + return false; + } + + public static boolean allowMobApprove(MessageContext ctx, ToDoInfo todoInfo){ + String entityNumber=ctx.getEntityNumber(); + String billType = ""; + DynamicObject object = BusinessDataServiceHelper.loadSingleFromCache("wf_hitaskinst", "entityname", + new QFilter[]{new QFilter("id", "=", todoInfo.getTaskId())}); + if(object != null){ + billType = object.getString("entityname"); + } + String elementId = ctx.getElementId(); + int i = elementId.lastIndexOf("_"); + //流程 + String procDefNumber = elementId.substring(0, i); + //节点 + String nodeKey = elementId.substring(i + 1); + return allowMobApprove(entityNumber,billType,procDefNumber,nodeKey); + } + + public static boolean allowMobApprove(Object taskId){ + DynamicObject object = BusinessDataServiceHelper.loadSingleFromCache("wf_hitaskinst", + "entitynumber,entityname,taskdefkey", + new QFilter[]{new QFilter("id", "=", taskId)}); + if(object != null){ + String entityNumber = object.getString("entitynumber"); + String billType = object.getString("entityname"); + String elementId = object.getString("taskdefkey"); + int i = elementId.lastIndexOf("_"); + //流程 + String procDefNumber = elementId.substring(0, i); + //节点 + String nodeKey = elementId.substring(i + 1); + + return allowMobApprove(entityNumber,billType,procDefNumber,nodeKey); + } + return false; + } +} 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 69c3ea6..5606bf6 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 @@ -315,7 +315,8 @@ public class ApiService { case "https://10.1.9.43/iuap-api-auth/yonbip/ctm/api/settlement/feedback": saveResponseBody = pushBill(token, saveUrl, saveRequestBody); jsonObject = JSON.parseObject(saveResponseBody); - if (jsonObject.getJSONObject("data").getIntValue("successnum") > 0) { + code = jsonObject.getString("code"); + if ("200".equals(code)) { if ("TS".equals(dynamic.getString("bankpaystatus"))) { dynamic.set("shkd_pushstatus", "已结算"); } else { diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/PlanningService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/PlanningService.java index 4e2cec6..60e45dc 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/PlanningService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/PlanningService.java @@ -185,12 +185,15 @@ public class PlanningService { * @return */ public static String queryPlanning(String reportPeriod, String reportOrg) { + logger.info("查询计划编制入参:reportPeriod={},reportOrg={}", reportPeriod, reportOrg); DynamicObject[] fpm_member1 = BusinessDataServiceHelper.load("fpm_member", "id,name,number", new QFilter("name", QCP.equals, reportPeriod).toArray()); if (fpm_member1 == null || fpm_member1.length == 0) { + logger.info("查询编报期间:fpm_member1 == null || fpm_member1.length == 0"); return null; } DynamicObject[] fpm_member2 = BusinessDataServiceHelper.load("fpm_member", "id,name,number", new QFilter("name", QCP.equals, reportOrg).toArray()); if (fpm_member2 == null || fpm_member2.length == 0) { + logger.info("查询编报主体:fpm_member2 == null || fpm_member2.length == 0"); return null; } ReportDataQParam reportDataQParam = new ReportDataQParam(); diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/Exp/BalanceExpansion.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/Exp/BalanceExpansion.java index e2df5fd..fa2bd85 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/Exp/BalanceExpansion.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/Exp/BalanceExpansion.java @@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSONObject; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; @@ -24,13 +26,30 @@ public class BalanceExpansion implements IFillBankBalance { @Override public void fillExtBankBalance(DynamicObject bankBalance, String balanceString) { JSONObject jsonObject = JSON.parseObject(balanceString); - logger.info("bankBalance数据:{},balanceString数据:{}", bankBalance, jsonObject); - Object balance = jsonObject.get("depositBalance"); - BigDecimal depositBalance = BigDecimal.ZERO; + Object balanceDateTimeObj = jsonObject.get("balanceDateTime"); + if (balanceDateTimeObj != null && !"".equals(balanceDateTimeObj.toString())) { + String balanceDateTimeStr = balanceDateTimeObj.toString();// 格式为 "yyyy-MM-dd'T'HH:mm:ss"(2025-06-09T14:06:03.064) + LocalDateTime balanceDateTime; + try { + balanceDateTime = LocalDateTime.parse(balanceDateTimeStr, DateTimeFormatter.ISO_LOCAL_DATE_TIME); + } catch (Exception e) { + logger.warn("balanceString数据:{}\n时间格式错误,无法解析:{}", balanceString, e); + return; + } + LocalDateTime now = LocalDateTime.now(); - if (balance != null && !"".equals(balance.toString())) { - depositBalance = new BigDecimal(balance.toString()); + if (now.toLocalDate().isEqual(balanceDateTime.toLocalDate())) { + // 当前日期与 balanceDateTime 是同一天 + // 执行相应的逻辑 + logger.info("bankBalance数据:{},balanceString数据:{}", bankBalance, jsonObject); + Object balance = jsonObject.get("depositBalance"); + BigDecimal depositBalance = BigDecimal.ZERO; + + if (balance != null && !"".equals(balance.toString())) { + depositBalance = new BigDecimal(balance.toString()); + } + bankBalance.set("shkd_depositbalance", depositBalance); + } } - bankBalance.set("shkd_depositbalance", depositBalance); } } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/InterfacePracticePlug.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/InterfacePracticePlug.java index 157463d..4b71b1f 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/InterfacePracticePlug.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/InterfacePracticePlug.java @@ -119,8 +119,8 @@ public class InterfacePracticePlug extends AbstractListPlugin implements Seriali */ @ApiPostMapping(value = "planAdjustment_query", desc = "计划编制查询") public CustomApiResult<@ApiResponseBody("返回参数") String> planAdjustment_query(@ApiParam(value = "查询字段值") HashMap hashMap) { - String reportPeriodName = hashMap.get("reportPeriodName").toString();// 编报期间ID - String reportOrgName = hashMap.get("reportOrgName").toString();// 编报主体ID + String reportPeriodName = hashMap.get("reportPeriodName").toString();// 编报期间ID(name) + String reportOrgName = hashMap.get("reportOrgName").toString();// 编报主体ID(name) String queryPlanning = queryPlanning(reportPeriodName, reportOrgName); return CustomApiResult.fail("404", queryPlanning); } 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 939927c..21a08e0 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 @@ -24,6 +24,7 @@ import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -68,7 +69,7 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { Map billtype = (Map) map.get("billtype"); String billtype_number = billtype.get("number").toString(); if ("cas_paybill_other_BT_S".equals(billtype_number) && "共享系统".equals(shkd_businessname)) { - logger.info("进入付款处理单API"); + logger.info("单据类型 → 其他付款,推送系统 → 共享系统"); // 收款人ID fieldName1 = "payee"; // 付款银行编码 @@ -177,7 +178,7 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { } } else if ("cas_paybill_syn_BT_S".equals(billtype_number) && "共享系统".equals(shkd_businessname)) {// BIP传的跨主体调拨 - logger.info("进入付款处理单API"); + logger.info("单据类型 → 同名转账,推送系统 → 共享系统"); // 收款人ID fieldName1 = "payee"; // 付款银行编码 @@ -286,7 +287,7 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { } } else if ("cas_paybill_span_BT_S".equals(billtype_number) && "共享系统".equals(shkd_businessname)) {// BIP传的同名转账 - logger.info("进入付款处理单API"); + logger.info("单据类型 → 跨主体调拨,推送系统 → 共享系统"); // 收款人ID fieldName1 = "payee"; // 付款银行编码 @@ -395,7 +396,7 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { } } else if ("cas_paybill_other_BT_S".equals(billtype_number) && "XK".equals(shkd_businessname)) {//星空推送的其他单据类型付款单 - logger.info("进入付款处理单API"); + logger.info("单据类型 → 其他付款,推送系统 → XK"); // 收款人ID fieldName1 = "payee"; // 付款银行编码 @@ -429,11 +430,26 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { map.put("payeetype", "bos_org"); map.put("payeeformid", "bos_org"); } else if ("FIN_OTHERS".equals(payeetype)) { - payeetype = "other"; - map.put("payeetype", "other"); - map.put("payeeformid", "other"); + payeetype = "bd_supplier"; + map.put("payeetype", "bd_supplier"); + map.put("payeeformid", "bd_supplier"); } + // 赋值付款金额折本位币 + map.put("localamt", map.get("actpayamt")); + + // 赋值分录应付折本币 + List> entryList = (List>) map.get("entry"); + if (entryList != null && !entryList.isEmpty()) { + Map stringObjectMap = entryList.get(0); + // 获取 e_payableamt 的值 + stringObjectMap.put("e_payablelocamt", stringObjectMap.get("e_payableamt")); + map.put("entry", entryList); + } + + + + Map payeebank = (Map) map.get("payeebank"); String payeebank_number = payeebank.get("number").toString(); DynamicObject[] bd_bebank = BusinessDataServiceHelper.load("bd_bebank", "id,number,provincetxt,citytxt", new QFilter("number", QCP.equals, payeebank_number).toArray()); @@ -470,12 +486,18 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { // 如果为供应商或者客户 if ("bd_supplier".equals(payeetype)) { + logger.info("收款人类型 → 供应商"); Map societycreditcode = new HashMap<>(); societycreditcode.put("societycreditcode", map.get("payeenumber").toString()); map.put("shkd_supplier", societycreditcode); logger.info("收款人ID:{}", map.get("payeenumber")); - DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype.toString(), "id,number,name,societycreditcode,entry_bank,entry_bank.bankaccount,entry_bank.accountname,entry_bank.bank", new QFilter("societycreditcode", QCP.equals, map.get("payeenumber").toString()).toArray()); + DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype.toString(), "id," + + "number,name,societycreditcode,shkd_xknumber,entry_bank,entry_bank.bankaccount,entry_bank.accountname," + + "entry_bank.bank", + new QFilter("societycreditcode", QCP.equals, map.get("payeenumber").toString()) + .or("shkd_xknumber", QCP.equals, map.get("payeenumber").toString()) + .or("name", QCP.equals, map.get("payeename").toString()).toArray()); if (objects.length > 0) { DynamicObjectCollection dynamicObjectCollection = objects[0].getDynamicObjectCollection("entry_bank"); @@ -488,6 +510,7 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { //收款人编码 } } else if ("bd_customer".equals(payeetype)) { + logger.info("收款人类型 → 客户"); Map societycreditcode = new HashMap<>(); societycreditcode.put("societycreditcode", map.get("payeenumber").toString()); map.put("shkd_customer", societycreditcode); @@ -505,13 +528,16 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { //收款人编码 } } else if ("bos_user".equals(payeetype)) { + logger.info("收款人类型 → 人员"); Map user_number = new HashMap<>(); - user_number.put("number", map.get("payernumber").toString()); + user_number.put("number", map.get("payeenumber").toString()); + logger.info("收款人编码:{}", map.get("payeenumber")); 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()); + DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype.toString(), "id,name,number,username", new QFilter("number", QCP.equals, map.get("payeenumber").toString()).toArray()); + logger.info("人员查询,通过人员工号查对应的人员数据长度:{}", objects.length); if (objects.length > 0) { - // 付款人编码 - map.put("payernumber", objects[0].getString("number")); + // 收款人编码 + map.put("payeenumber", objects[0].getString("number")); // 付款人ID map.put(fieldName1, objects[0].getPkValue()); } @@ -531,6 +557,42 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { } } else if ("cas_paybill_span_BT_S".equals(billtype_number) && "XK".equals(shkd_businessname)) {// 星空传的跨主体调拨 + logger.info("单据类型 → 跨主体调拨,推送系统 → XK"); + + if ("BD_Supplier".equals(payeetype)) { + payeetype = "bd_supplier"; + map.put("payeetype", "bd_supplier"); + map.put("payeeformid", "bd_supplier"); + } else if ("BD_Customer".equals(payeetype)) { + payeetype = "bd_customer"; + map.put("payeetype", "bd_customer"); + map.put("payeeformid", "bd_customer"); + } else if ("BD_Empinfo".equals(payeetype)) { + payeetype = "bos_user"; + map.put("payeetype", "bos_user"); + map.put("payeeformid", "bos_user"); + } else if ("ORG_Organizations".equals(payeetype)) { + payeetype = "bos_org"; + map.put("payeetype", "bos_org"); + map.put("payeeformid", "bos_org"); + } else if ("FIN_OTHERS".equals(payeetype)) { + payeetype = "bd_supplier"; + map.put("payeetype", "bd_supplier"); + map.put("payeeformid", "bd_supplier"); + } + + // 赋值付款金额折本位币 + map.put("localamt", map.get("actpayamt")); + + // 赋值分录应付折本币 + List> entryList = (List>) map.get("entry"); + if (entryList != null && !entryList.isEmpty()) { + Map stringObjectMap = entryList.get(0); + // 获取 e_payableamt 的值 + stringObjectMap.put("e_payablelocamt", stringObjectMap.get("e_payableamt")); + map.put("entry", entryList); + } + fieldName1 = "payee";// 收款人ID // 付款银行编码 fieldName2 = "payerbank"; @@ -581,7 +643,42 @@ public class PayBillApiSavePlugin implements ApiSavePlugin { } } else if ("cas_paybill_syn_BT_S".equals(billtype_number) && "XK".equals(shkd_businessname)) {// 星空传的同名转账 - logger.info("同名转账"); + logger.info("单据类型 → 同名转账,推送系统 → XK"); + + if ("BD_Supplier".equals(payeetype)) { + payeetype = "bd_supplier"; + map.put("payeetype", "bd_supplier"); + map.put("payeeformid", "bd_supplier"); + } else if ("BD_Customer".equals(payeetype)) { + payeetype = "bd_customer"; + map.put("payeetype", "bd_customer"); + map.put("payeeformid", "bd_customer"); + } else if ("BD_Empinfo".equals(payeetype)) { + payeetype = "bos_user"; + map.put("payeetype", "bos_user"); + map.put("payeeformid", "bos_user"); + } else if ("ORG_Organizations".equals(payeetype)) { + payeetype = "bos_org"; + map.put("payeetype", "bos_org"); + map.put("payeeformid", "bos_org"); + } else if ("FIN_OTHERS".equals(payeetype)) { + payeetype = "bd_supplier"; + map.put("payeetype", "bd_supplier"); + map.put("payeeformid", "bd_supplier"); + } + + // 赋值付款金额折本位币 + map.put("localamt", map.get("actpayamt")); + + // 赋值分录应付折本币 + List> entryList = (List>) map.get("entry"); + if (entryList != null && !entryList.isEmpty()) { + Map stringObjectMap = entryList.get(0); + // 获取 e_payableamt 的值 + stringObjectMap.put("e_payablelocamt", stringObjectMap.get("e_payableamt")); + map.put("entry", entryList); + } + // 收款人ID fieldName1 = "payee"; // 付款银行编码 diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/TicketRegistration.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/TicketRegistration.java index e86e7f9..eba1b58 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/TicketRegistration.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/api/TicketRegistration.java @@ -25,7 +25,7 @@ public class TicketRegistration implements Serializable, ApiSavePlugin { @Override public List> preHandleRequestData(List> reqData) { - logger.info("进入TicketRegistration"); + logger.info("进入TicketRegistration,接口调用接口参数:{}\n数据长度:{}", reqData, reqData.size()); for (Map map : reqData) { String payeetype = map.get("payeetype").toString(); /** @@ -41,23 +41,28 @@ public class TicketRegistration implements Serializable, ApiSavePlugin { logger.info("进入收票登记"); Map deliver = (Map) map.get("deliver"); String deliveraccountbase = map.get("deliveraccountbase").toString();// 交票人账号 + logger.info("收票登记→收票人账号:{}", deliveraccountbase); String deliver_number = deliver.get("number").toString(); DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype, "id,number," + "name,societycreditcode,entry_bank,entry_bank.bankaccount,entry_bank.accountname,entry_bank.bank", new QFilter("societycreditcode", QCP.equals, deliver_number).toArray()); if (objects.length > 0) { logger.info("进入收票登记→objects.length > 0"); - DynamicObjectCollection dynamicObjectCollection = objects[0].getDynamicObjectCollection("entry_bank"); - dynamicObjectCollection.forEach(dynamicObject -> { - if (dynamicObject.getString("bankaccount").equals(deliveraccountbase)) { - Object bank = dynamicObject.get("bank"); - DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("bd_bebank", "id,number", new QFilter("id", QCP.equals, bank).toArray()); - Map deliveropenbank = new HashMap<>(); - deliveropenbank.put("number", dynamicObjects[0].getString("number")); - map.put("deliveropenbank", deliveropenbank); - map.put("deliveropenbanknum", dynamicObjects[0].getString("number")); - } - }); +// DynamicObjectCollection dynamicObjectCollection = objects[0].getDynamicObjectCollection("entry_bank"); +// +// for (DynamicObject dynamicObject : dynamicObjectCollection) { +// logger.info("进入收票登记→objects.length > 0→dynamicObjectCollection.forEach,\nbankaccount → {}", dynamicObject.getString("bankaccount")); +// if (dynamicObject.getString("bankaccount").equals(deliveraccountbase)) { +// DynamicObject bank = dynamicObject.getDynamicObject("bank"); +// logger.info("进入收票登记→objects.length > 0→dynamicObjectCollection.forEach,bank → {}", bank); +// Map deliveropenbank = new HashMap<>(); +// deliveropenbank.put("number", bank.getString("number")); +// map.put("deliveropenbank", deliveropenbank); +// map.put("deliveropenbanknum", bank.getString("number")); +// // 跳出循环 +// break; +// } +// } Map societycreditcode = new HashMap<>(); societycreditcode.put("number", objects[0].getString("number")); map.put("deliver", societycreditcode); @@ -68,23 +73,29 @@ public class TicketRegistration implements Serializable, ApiSavePlugin { logger.info("进入开票登记"); Map deliver = (Map) map.get("receiver"); String receiveraccount = map.get("receiveraccount").toString();// 收款人账号 + logger.info("开票登记→收款人账号:{}", receiveraccount); String receiver_number = deliver.get("number").toString(); DynamicObject[] objects = BusinessDataServiceHelper.load(payeetype, "id,number," + "name,societycreditcode,entry_bank,entry_bank.bankaccount,entry_bank.accountname,entry_bank.bank", new QFilter("societycreditcode", QCP.equals, receiver_number).toArray()); + if (objects.length > 0) { logger.info("进入开票登记→objects.length > 0"); - DynamicObjectCollection dynamicObjectCollection = objects[0].getDynamicObjectCollection("entry_bank"); - dynamicObjectCollection.forEach(dynamicObject -> { - if (dynamicObject.getString("bankaccount").equals(receiveraccount)) { - Object bank = dynamicObject.get("bank"); - DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("bd_bebank", "id,number", new QFilter("id", QCP.equals, bank).toArray()); - Map receiverbank = new HashMap<>(); - receiverbank.put("number", dynamicObjects[0].getString("number")); - map.put("receiverbank", receiverbank); - map.put("receiverbankno", dynamicObjects[0].getString("number")); - } - }); +// DynamicObjectCollection dynamicObjectCollection = objects[0].getDynamicObjectCollection("entry_bank"); +// +// for (DynamicObject dynamicObject : dynamicObjectCollection) { +// logger.info("进入开票登记→objects.length > 0→dynamicObjectCollection.forEach,\nbankaccount → {}", dynamicObject.getString("bankaccount")); +// if (dynamicObject.getString("bankaccount").equals(receiveraccount)) { +// DynamicObject bank = dynamicObject.getDynamicObject("bank"); +// logger.info("进入开票登记→objects.length > 0→dynamicObjectCollection.forEach,bank → {}", bank); +// Map receiverbank = new HashMap<>(); +// receiverbank.put("number", bank.getString("number")); +// map.put("receiverbank", receiverbank); +// map.put("receiverbankno", bank.getString("number")); +// // 跳出循环 +// break; +// } +// } Map societycreditcode = new HashMap<>(); societycreditcode.put("number", objects[0].getString("number")); map.put("receiver", societycreditcode); diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiTestBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiTestBillPlugin.java index 54d3263..e98536d 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiTestBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiTestBillPlugin.java @@ -123,6 +123,7 @@ public class ApiTestBillPlugin extends AbstractBillPlugIn implements Plugin { Path path = Paths.get(dynamic.getString("filepath")); String upfileName = path.getFileName().toString(); String dataUrl = convertUrlToBase64DataUrl(pdfUrl); + logger.info("pdfUrl:" + dataUrl); this.getView().showTipNotification("dataUrl:" + dataUrl + "\n文件名:" + upfileName); } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PaymentProcessingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PaymentProcessingBillPlugin.java index 8107ed0..d5328b5 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PaymentProcessingBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PaymentProcessingBillPlugin.java @@ -8,6 +8,8 @@ import kd.bos.entity.operate.result.OperationResult; import kd.bos.ext.fi.bei.util.EmptyUtil; import kd.bos.form.control.Toolbar; import kd.bos.form.control.events.ItemClickEvent; +import kd.bos.i18n.mservice.I18nServiceHelper; +import kd.bos.i18n.mservice.utils.AmountConvertResult; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; import kd.bos.orm.query.QCP; @@ -88,6 +90,7 @@ public class PaymentProcessingBillPlugin extends AbstractBillPlugIn implements P } } + public void propertyChanged(PropertyChangedArgs e) { String key = e.getProperty().getName(); ChangeData[] changeData = e.getChangeSet(); @@ -95,13 +98,13 @@ public class PaymentProcessingBillPlugin extends AbstractBillPlugIn implements P Object oldValue = changeData[0].getOldValue(); DynamicObject settleType; Object value = this.getModel().getValue("settletype"); - settleType=value != null ? (DynamicObject)value : null; + settleType = value != null ? (DynamicObject) value : null; if (newValue != oldValue) { DynamicObject applyDo; switch (key) { case "settletype": if (EmptyUtil.isNoEmpty(settleType)) { - if ("电汇".equals(settleType.getString("name"))){ + if ("电汇".equals(settleType.getString("name"))) { this.getView().setVisible(true, new String[]{"settletnumber"}); this.getView().setVisible(true, new String[]{"draftbill"}); } @@ -109,21 +112,35 @@ public class PaymentProcessingBillPlugin extends AbstractBillPlugIn implements P break; case "paymentchannel": if (EmptyUtil.isNoEmpty(settleType)) { - if ("电汇".equals(settleType.getString("name"))){ + if ("电汇".equals(settleType.getString("name"))) { this.getView().setVisible(true, new String[]{"settletnumber"}); this.getView().setVisible(true, new String[]{"draftbill"}); } } break; + case "actpayamt": + // 将 newValue 转换为字符串 + String valueStr = newValue.toString(); + + String formattedValue = String.format("%.2f", Double.parseDouble(valueStr)); + + AmountConvertResult amountConvertResult = I18nServiceHelper.amountConvertUppercase( + "ZH", "CNY", formattedValue, "false"); + + if (amountConvertResult.isSuccess()) { + this.getModel().setValue("shkd_zwamount", amountConvertResult.getResult()); + break; + } } } } + public void afterBindData(EventObject e) { DynamicObject settleType; Object value = this.getModel().getValue("settletype"); - settleType=value != null ? (DynamicObject)value : null; + settleType = value != null ? (DynamicObject) value : null; if (EmptyUtil.isNoEmpty(settleType)) { - if ("电汇".equals(settleType.getString("name"))){ + if ("电汇".equals(settleType.getString("name"))) { this.getView().setVisible(true, new String[]{"settletnumber"}); this.getView().setVisible(true, new String[]{"draftbill"}); } diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/PaymentSlipAssociationFixed.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/PaymentSlipAssociationFixed.java new file mode 100644 index 0000000..4f4b308 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/PaymentSlipAssociationFixed.java @@ -0,0 +1,86 @@ +package shkd.sys.sys.plugin.operation; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.args.AfterOperationArgs; +import kd.bos.i18n.mservice.I18nServiceHelper; +import kd.bos.i18n.mservice.utils.AmountConvertResult; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; + +import java.math.BigDecimal; +import java.util.Date; + +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.fi.cas.helper.CasBotpHelper; +import kd.sdk.plugin.Plugin; + +/** + * 单据操作插件 + * 修复付款单和应收票据关联关系 + */ +public class PaymentSlipAssociationFixed extends AbstractOperationServicePlugIn implements Plugin { + @Override + public void afterExecuteOperationTransaction(AfterOperationArgs e) { + super.afterExecuteOperationTransaction(e); + DynamicObject[] dataEntities = e.getDataEntities(); + DynamicObject dataEntity = dataEntities[0]; + // 付款单 + DynamicObject fkDynamicObject = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), dataEntity.getDynamicObjectType()); + + // 付款金额 + BigDecimal actpayamt = fkDynamicObject.getBigDecimal("actpayamt"); + String formattedValue = String.format("%.2f", Double.parseDouble(actpayamt.toString())); + + // 大写金额 + String shkdZwamount = fkDynamicObject.getString("shkd_zwamount"); + + AmountConvertResult amountConvertResult = I18nServiceHelper.amountConvertUppercase( + "ZH", "CNY", formattedValue, "false"); + + if (amountConvertResult.isSuccess() && !shkdZwamount.equals(amountConvertResult.getResult())) { + fkDynamicObject.set("shkd_zwamount", amountConvertResult.getResult()); + } + + // 来源系统 + Object businessnameObj = fkDynamicObject.get("shkd_businessname"); + + // 付款单关联票据分录 + String blEntryKey = fkDynamicObject.getDataEntityType().getName() + "_bl"; + DynamicObjectCollection dynamicObjectCollection = fkDynamicObject.getDynamicObjectCollection(blEntryKey); + + // 票据关联付款单不为空,说明已经关联了 + if (!dynamicObjectCollection.isEmpty()) { + return; + } + + if (dataEntity.get("settletnumber") != null) { + String settletnumber = dataEntity.getString("settletnumber");//结算号 + DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("cdm_payablebill", "id,draftbillno", new QFilter("draftbillno", QCP.equals, settletnumber).toArray()); + + if (businessnameObj != null && "XK".equals(businessnameObj.toString()) && dynamicObjects.length > 0) { + // 写入付款单关联票据关联关系 + DynamicObject linkRow = new DynamicObject(dynamicObjectCollection.getDynamicObjectType()); + linkRow.set(blEntryKey + "_basedataid", dynamicObjects[0].getPkValue()); + dynamicObjectCollection.add(linkRow); + SaveServiceHelper.save(new DynamicObject[]{fkDynamicObject}); + + // 写入票据关联付款单关联关系 + DynamicObject kpdjDynamicObject = BusinessDataServiceHelper.loadSingle(dynamicObjects[0].getPkValue(), dynamicObjects[0].getDynamicObjectType()); + DynamicObjectCollection releatedcasbillentrys = kpdjDynamicObject.getDynamicObjectCollection("releatedcasbillentrys"); + DynamicObject kpLinkRow = new DynamicObject(releatedcasbillentrys.getDynamicObjectType()); + kpLinkRow.set("rel_billtype", "cas_paybill");// 关联单据类型 + kpLinkRow.set("rel_billno", fkDynamicObject.getString("billno"));// 关联单据编号 + kpLinkRow.set("rel_billid", fkDynamicObject.getPkValue());// 关联单据ID + kpLinkRow.set("rel_bizdate", fkDynamicObject.get("bizdate"));// 出纳单据业务日期 + kpLinkRow.set("rel_billamount", fkDynamicObject.get("actpayamt"));// 关联单据金额 + kpLinkRow.set("rel_createtime", new Date());// 关联信息创建时间 + kpLinkRow.set("rel_modifytime", new Date());// 记录修改时间 + releatedcasbillentrys.add(kpLinkRow); + SaveServiceHelper.save(new DynamicObject[]{kpdjDynamicObject}); + } + } + } +} \ No newline at end of file