From 1e95e9940de2cab2614959eeac81ea89d7a57450 Mon Sep 17 00:00:00 2001 From: yuxueliang0813 <407010292@qq.com> Date: Wed, 9 Apr 2025 11:29:39 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E4=BA=BA=E5=91=98=E4=B8=8EOA=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E5=A2=9E=E5=8A=A0=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shkd/bamp/base/task/DobeDWpersonTask.java | 46 +++++++----- .../repc/task/DobePersonOARealtionTask.java | 70 +++++++++++++++++++ 2 files changed, 98 insertions(+), 18 deletions(-) create mode 100644 main/java/shkd/repc/task/DobePersonOARealtionTask.java diff --git a/main/java/shkd/bamp/base/task/DobeDWpersonTask.java b/main/java/shkd/bamp/base/task/DobeDWpersonTask.java index 83d4444..2e29f50 100644 --- a/main/java/shkd/bamp/base/task/DobeDWpersonTask.java +++ b/main/java/shkd/bamp/base/task/DobeDWpersonTask.java @@ -48,6 +48,9 @@ public class DobeDWpersonTask extends AbstractTask implements Plugin { //更新启用状态分配规则专用为禁用 private static final String updateDisable = "update t_sec_user set fk_qeug_disable=2179899908641806336 where fenable='0' and fk_qeug_disable=0;"; + //更新人员绑定OA成功的标记 + private static final String updateFlag = "update t_sec_user set fk_qeug_flag='1' where fnumber=?;"; + @Override public void execute(RequestContext requestContext, Map map) throws KDException { OkHttpClient client = new OkHttpClient(); @@ -242,8 +245,12 @@ public class DobeDWpersonTask extends AbstractTask implements Plugin { } if(addList.size() > 0){ UserServiceHelper.add(addList); - List userinfos = new ArrayList<>(); + List userinfos = new ArrayList<>(1); DynamicObject userinfo = null; + String billNo = "person-new-bid"; + String thirdPostjson;//OA绑定返回结果 + JSONObject jsonObject;//OA绑定返回结果json对象 + String oaToken = OAUtils.getOaToken(billNo); //判断执行结果 for (UserParam result : addList) { if (!result.isSuccess()) { @@ -252,27 +259,30 @@ public class DobeDWpersonTask extends AbstractTask implements Plugin { userinfo = BusinessDataServiceHelper.newDynamicObject(entityName);; userinfo.set("number",result.getDataMap().get("number"));//人员编号 userinfo.set("name",result.getDataMap().get("name"));//人员姓名 + userinfos.clear(); userinfos.add(userinfo); + if (!DobeDWUtils.isEmpty(oaToken)) { + thirdPostjson = OAUtils.thirdpartyUser(userinfos, oaToken, billNo); + //处理OA绑定结果,将处理成功的人员打上标记 + if (!DobeDWUtils.isEmpty(thirdPostjson)) { + jsonObject = JSONObject.parseObject(thirdPostjson); + if(jsonObject.getBoolean("success")){ + DB.update(DBRoute.of("sys"), updateFlag, new Object[]{userinfo.getString("number")}); + } + }else{ + log.info("OA绑定返回值为空,人员编号"+userinfo.getString("number")); + } + } } } - //处理OA人员绑定 - if(userinfos.size() > 0){ - String billNo = "person-new-bid"; - //获取token - String oaToken = OAUtils.getOaToken(billNo); - if (!DobeDWUtils.isEmpty(oaToken)) { - OAUtils.thirdpartyUser(userinfos, oaToken, billNo); - } - } - } -// if(updateList.size() > 0){ -// UserServiceHelper.update(updateList); -// //判断执行结果 -// for (UserParam result : updateList) { -// if (!result.isSuccess()) { -// log.info(String.format("人员修改异常:%s", result.getMsg())); + //批量处理OA人员绑定 +// if(userinfos.size() > 0){ +// //获取token +// String oaToken = OAUtils.getOaToken(billNo); +// if (!DobeDWUtils.isEmpty(oaToken)) { +// OAUtils.thirdpartyUser(userinfos, oaToken, billNo); // } // } -// } + } } } \ No newline at end of file diff --git a/main/java/shkd/repc/task/DobePersonOARealtionTask.java b/main/java/shkd/repc/task/DobePersonOARealtionTask.java new file mode 100644 index 0000000..348beec --- /dev/null +++ b/main/java/shkd/repc/task/DobePersonOARealtionTask.java @@ -0,0 +1,70 @@ +package shkd.repc.task; + +import com.alibaba.fastjson.JSONObject; +import kd.bos.context.RequestContext; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.db.DB; +import kd.bos.db.DBRoute; +import kd.bos.exception.KDException; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.schedule.executor.AbstractTask; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.sdk.plugin.Plugin; +import shkd.utils.DobeDWUtils; +import shkd.utils.OAUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 金蝶人员与OA用户绑定后台任务插件 yxl 20250409 + */ +public class DobePersonOARealtionTask extends AbstractTask implements Plugin { + + private static final String entityName = "bos_user";//系统库 表名 t_sec_user + + private static Log logger = LogFactory.getLog(DobePersonOARealtionTask.class); + //更新人员绑定OA成功的标记 + private static final String updateFlag = "update t_sec_user set fk_qeug_flag='1' where fnumber=?;"; + + @Override + public void execute(RequestContext requestContext, Map map) throws KDException { + //查找未绑定成功的人员 + QFilter dwFilter = new QFilter("source", QCP.equals, "dw"); + QFilter enableFilter = new QFilter("qeug_flag", QCP.equals, "0"); + DynamicObject[] dos = BusinessDataServiceHelper.load(entityName,"id,number,name",new QFilter[]{dwFilter.and(enableFilter)}); + if(dos.length > 0){ + logger.info("本次需要绑定用户个数"+dos.length); + DynamicObject userinfo; + List userinfos = new ArrayList<>(1); + String thirdPostjson;//OA绑定返回结果 + JSONObject jsonObject;//OA绑定返回结果json对象 + String billNo = "person-task-bid"; + //获取token,调用OA人员绑定接口 + String oaToken = OAUtils.getOaToken(billNo); + for (int i = 0; i < dos.length; i++) { + userinfo = dos[i]; + userinfos.clear(); + userinfos.add(userinfo); + if (!DobeDWUtils.isEmpty(oaToken)) { + thirdPostjson = OAUtils.thirdpartyUser(userinfos, oaToken, billNo); + //处理OA绑定结果,将处理成功的人员打上标记 + if (!DobeDWUtils.isEmpty(thirdPostjson)) { + jsonObject = JSONObject.parseObject(thirdPostjson); + if(jsonObject.getBoolean("success")){ + DB.update(DBRoute.of("sys"), updateFlag, new Object[]{userinfo.getString("number")}); + } + }else{ + logger.info("OA绑定返回值为空,人员编号"+userinfo.getString("number")); + } + } + } + }else{ + logger.info("现有用户已全部绑定,无需处理"); + } + } +} From 23ffc1857c53a146caf1fe5608e2493ab7e75c5e Mon Sep 17 00:00:00 2001 From: yuxueliang0813 <407010292@qq.com> Date: Wed, 9 Apr 2025 12:40:54 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E4=BA=BA=E5=91=98=E4=B8=8EOA=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=9C=AA=E7=A6=81=E7=94=A8=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/java/shkd/repc/task/DobePersonOARealtionTask.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/main/java/shkd/repc/task/DobePersonOARealtionTask.java b/main/java/shkd/repc/task/DobePersonOARealtionTask.java index 348beec..f5dffd5 100644 --- a/main/java/shkd/repc/task/DobePersonOARealtionTask.java +++ b/main/java/shkd/repc/task/DobePersonOARealtionTask.java @@ -34,9 +34,10 @@ public class DobePersonOARealtionTask extends AbstractTask implements Plugin { @Override public void execute(RequestContext requestContext, Map map) throws KDException { //查找未绑定成功的人员 - QFilter dwFilter = new QFilter("source", QCP.equals, "dw"); - QFilter enableFilter = new QFilter("qeug_flag", QCP.equals, "0"); - DynamicObject[] dos = BusinessDataServiceHelper.load(entityName,"id,number,name",new QFilter[]{dwFilter.and(enableFilter)}); + QFilter dwFilter = new QFilter("source", QCP.equals, "dw");//来自数仓 + QFilter flagFilter = new QFilter("qeug_flag", QCP.equals, "0");//未与OA绑定 + QFilter enableFilter = new QFilter("enable", QCP.equals, "1");//用户未禁用 + DynamicObject[] dos = BusinessDataServiceHelper.load(entityName,"id,number,name",new QFilter[]{dwFilter,enableFilter,flagFilter}); if(dos.length > 0){ logger.info("本次需要绑定用户个数"+dos.length); DynamicObject userinfo; From 80b83942c44378fbf9ebbe14a4f9d91126525cb7 Mon Sep 17 00:00:00 2001 From: ptt <2403326863@qq.com> Date: Thu, 10 Apr 2025 15:02:47 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E5=90=88=E5=90=8C=E6=B8=85=E5=8D=95?= =?UTF-8?q?=E5=90=88=E8=AE=A1=E9=87=91=E9=A2=9D=E4=BF=9D=E7=95=99=E4=B8=A4?= =?UTF-8?q?=E4=BD=8D=E5=B0=8F=E6=95=B0=20=E4=BB=98=E6=AC=BE=E8=AE=A1?= =?UTF-8?q?=E5=88=92=EF=BC=8C=E5=90=88=E5=90=8C=E6=B8=85=E5=8D=95=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E6=97=B6=E4=B8=8D=E5=85=81=E8=AE=B8=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repc/recon/opplugin/ContractOPPlugin.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/main/java/shkd/repc/recon/opplugin/ContractOPPlugin.java b/main/java/shkd/repc/recon/opplugin/ContractOPPlugin.java index 0cbbf9f..c61fecf 100644 --- a/main/java/shkd/repc/recon/opplugin/ContractOPPlugin.java +++ b/main/java/shkd/repc/recon/opplugin/ContractOPPlugin.java @@ -8,9 +8,12 @@ import kd.bos.entity.plugin.AddValidatorsEventArgs; import kd.bos.entity.validate.AbstractValidator; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import java.math.BigDecimal; +import java.math.RoundingMode; public class ContractOPPlugin extends AbstractOperationServicePlugIn { private static final Log logger = LogFactory.getLog(ContractOPPlugin.class); @@ -61,9 +64,28 @@ public class ContractOPPlugin extends AbstractOperationServicePlugIn { } BigDecimal amount = dataEntity.getBigDecimal("amount");//合同金额 // 检查 qeug_amounts 是否大于 amount - if (qeug_amounts.compareTo(amount) > 0) { + if (qeug_amounts.setScale(2, RoundingMode.HALF_UP).compareTo(amount) > 0) { this.addErrorMessage(extendedDataEntity, "合同清单(定额)的金额之和不能大于合同金额"); } + DynamicObjectCollection qeug_orderformentry1 = dataEntity.getDynamicObjectCollection("qeug_orderformentry"); + int qeug_orderformentry = qeug_orderformentry1==null?0:qeug_orderformentry1.size(); + DynamicObjectCollection qeug_invoiceentryinfo1 = dataEntity.getDynamicObjectCollection("qeug_invoiceentryinfo"); + int qeug_invoiceentryinfo = qeug_invoiceentryinfo1==null?0:qeug_invoiceentryinfo1.size(); + if(qeug_orderformentry+qeug_invoiceentryinfo<1){ + this.addErrorMessage(extendedDataEntity, "合同清单不允许为空!"); + } + QFilter qFilter = new QFilter("billno", QCP.equals, dataEntity.getString("billno")); + DynamicObject[] load = BusinessDataServiceHelper.load("recon_conpayplan", "contractbill", qFilter.toArray()); + if (load.length!=0) { + Object pkValue = load[0].getPkValue(); + DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(pkValue, "recon_conpayplan"); + DynamicObjectCollection conpayplanschedule = dynamicObject.getDynamicObjectCollection("conpayplanschedule"); + if(conpayplanschedule==null||conpayplanschedule.size()<1){ + this.addErrorMessage(extendedDataEntity, "付款计划不能为空,若已存在付款计划,请先保存"); + } + }else{ + this.addErrorMessage(extendedDataEntity, "付款计划不能为空,若已存在付款计划,请先保存"); + } } break; case "qeug_attatchment": From 96ac2155d30b501929f80695209a756e0a54a364 Mon Sep 17 00:00:00 2001 From: ptt <2403326863@qq.com> Date: Thu, 10 Apr 2025 15:35:38 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E5=AE=A1=E6=89=B9=E5=A4=84=E7=90=86?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=A0=B7=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wf/plugin/form/ApprovalPagePluginNewDemo.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 main/java/shkd/wfs/wf/plugin/form/ApprovalPagePluginNewDemo.java diff --git a/main/java/shkd/wfs/wf/plugin/form/ApprovalPagePluginNewDemo.java b/main/java/shkd/wfs/wf/plugin/form/ApprovalPagePluginNewDemo.java new file mode 100644 index 0000000..a8c9350 --- /dev/null +++ b/main/java/shkd/wfs/wf/plugin/form/ApprovalPagePluginNewDemo.java @@ -0,0 +1,12 @@ +package shkd.wfs.wf.plugin.form; + +import kd.bos.workflow.taskcenter.plugin.ApprovalPagePluginNew; +import kd.sdk.plugin.Plugin; +import java.util.EventObject; + +public class ApprovalPagePluginNewDemo extends ApprovalPagePluginNew implements Plugin{ + @Override + public void afterCreateNewData(EventObject evt) { + super.showApprovalRecord(this.ISPCSHOWVALUE,Boolean.FALSE,super.isHideYzj(),Boolean.FALSE); + } +} From 34a9b6dfeda37396c8224f562d1112c281d0cf09 Mon Sep 17 00:00:00 2001 From: ptt <2403326863@qq.com> Date: Thu, 10 Apr 2025 15:55:11 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E5=90=88=E5=90=8C=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=EF=BC=8C=E8=8E=B7=E5=8F=96=E5=90=88=E5=90=8C?= =?UTF-8?q?=E6=B8=85=E5=8D=95=E5=AE=9A=E9=A2=9D=E7=9A=84=E9=87=91=E9=A2=9D?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/java/shkd/repc/recon/opplugin/ContractOPPlugin.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/main/java/shkd/repc/recon/opplugin/ContractOPPlugin.java b/main/java/shkd/repc/recon/opplugin/ContractOPPlugin.java index c61fecf..c00d400 100644 --- a/main/java/shkd/repc/recon/opplugin/ContractOPPlugin.java +++ b/main/java/shkd/repc/recon/opplugin/ContractOPPlugin.java @@ -52,6 +52,11 @@ public class ContractOPPlugin extends AbstractOperationServicePlugIn { try { //合同监控列表点击提交会提示找不到:qeug_invoiceentryinfo属性 invoiceentryinfos = dataEntity.getDynamicObjectCollection("qeug_invoiceentryinfo"); + if (!invoiceentryinfos.isEmpty()) { + for (DynamicObject invoiceentryinfo : invoiceentryinfos) { + BigDecimal qeug_amount = invoiceentryinfo.getBigDecimal("qeug_amount"); + } + } }catch (Exception e){ dataEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(),"recon_contractbill"); invoiceentryinfos = dataEntity.getDynamicObjectCollection("qeug_invoiceentryinfo"); From 3c5e789bc9af9a669d0787da90afd6746218ed1a Mon Sep 17 00:00:00 2001 From: ptt <2403326863@qq.com> Date: Thu, 10 Apr 2025 17:24:21 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E9=87=87=E8=B4=AD=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=90=88=E7=BA=A6=E8=A7=84=E5=88=92=E9=87=91?= =?UTF-8?q?=E9=A2=9D=E5=A2=9E=E5=8A=A0=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shkd/repc/rebm/opplugin/PurPlanSubmitOPPlugin.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/main/java/shkd/repc/rebm/opplugin/PurPlanSubmitOPPlugin.java b/main/java/shkd/repc/rebm/opplugin/PurPlanSubmitOPPlugin.java index dbbbd47..d78dce7 100644 --- a/main/java/shkd/repc/rebm/opplugin/PurPlanSubmitOPPlugin.java +++ b/main/java/shkd/repc/rebm/opplugin/PurPlanSubmitOPPlugin.java @@ -39,11 +39,17 @@ public class PurPlanSubmitOPPlugin extends AbstractOperationServicePlugIn { } //合约规划金额 entryentity DynamicObjectCollection entryentity = dataEntity.getDynamicObjectCollection("entryentity"); + boolean isCheckAmount = true; BigDecimal cgxuentry_b = BigDecimal.ZERO; for (DynamicObject dynamicObject : entryentity) { + DynamicObject contract = dynamicObject.getDynamicObject("contract"); + if(contract==null||contract.getPkValue()==null){ + isCheckAmount = false; + break; + } cgxuentry_b = cgxuentry_b.add(dynamicObject.getBigDecimal("planamount")); } - if (cgxuentry_a.compareTo(cgxuentry_b) > 0) { // 如果 cgxuentry_a 大于 cgxuentry_b + if (isCheckAmount && cgxuentry_a.compareTo(cgxuentry_b) > 0) { // 如果 cgxuentry_a 大于 cgxuentry_b this.addErrorMessage(extendedDataEntity, "采购计划明细中的申请金额大于合约规划金额,不允许提交。"); } From 304f189998fb27bd6d0fb09709634b82f915b55e Mon Sep 17 00:00:00 2001 From: ptt <2403326863@qq.com> Date: Thu, 10 Apr 2025 17:29:58 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E9=87=87=E8=B4=AD=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=90=88=E7=BA=A6=E8=A7=84=E5=88=92=E9=87=91?= =?UTF-8?q?=E9=A2=9D=E5=A2=9E=E5=8A=A0=E5=88=A4=E6=96=AD2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shkd/repc/rebm/opplugin/PurPlanSubmitOPPlugin.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/main/java/shkd/repc/rebm/opplugin/PurPlanSubmitOPPlugin.java b/main/java/shkd/repc/rebm/opplugin/PurPlanSubmitOPPlugin.java index d78dce7..43b4279 100644 --- a/main/java/shkd/repc/rebm/opplugin/PurPlanSubmitOPPlugin.java +++ b/main/java/shkd/repc/rebm/opplugin/PurPlanSubmitOPPlugin.java @@ -39,13 +39,14 @@ public class PurPlanSubmitOPPlugin extends AbstractOperationServicePlugIn { } //合约规划金额 entryentity DynamicObjectCollection entryentity = dataEntity.getDynamicObjectCollection("entryentity"); - boolean isCheckAmount = true; + boolean isCheckAmount = false; BigDecimal cgxuentry_b = BigDecimal.ZERO; for (DynamicObject dynamicObject : entryentity) { DynamicObject contract = dynamicObject.getDynamicObject("contract"); if(contract==null||contract.getPkValue()==null){ - isCheckAmount = false; - break; + continue; + }else{ + isCheckAmount = true; } cgxuentry_b = cgxuentry_b.add(dynamicObject.getBigDecimal("planamount")); }