diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/PaymentLinkNotesSave.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/PaymentLinkNotesSave.java new file mode 100644 index 0000000..eba7152 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/PaymentLinkNotesSave.java @@ -0,0 +1,201 @@ +package shkd.sys.sys.plugin.operation; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.metadata.dynamicobject.DynamicCollectionProperty; +import kd.bos.entity.EntityMetadataCache; +import kd.bos.entity.MainEntityType; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.args.AfterOperationArgs; +import kd.bos.entity.plugin.args.BeforeOperationArgs; +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 kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.sdk.plugin.Plugin; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 单据操作插件 + */ +public class PaymentLinkNotesSave extends AbstractOperationServicePlugIn implements Plugin { + private static final Log logger = LogFactory.getLog(PaymentLinkNotesSave.class); + + @Override + public void beforeExecuteOperationTransaction(BeforeOperationArgs e) { + super.beforeExecuteOperationTransaction(e); + } + + @Override + public void afterExecuteOperationTransaction(AfterOperationArgs e) { + super.afterExecuteOperationTransaction(e); + logger.info("进入保存操作代码方法"); + + String operationKey = e.getOperationKey(); + if (!"save".equals(operationKey)) { + logger.info("不是save操作,不处理"); + return; + } + + DynamicObject[] dataEntities = e.getDataEntities(); + DynamicObject dataEntity = dataEntities[0]; + + // 付款单 transamount(转让金额) paybillcurrency(票据币种) draftbillinfo(结算号) + DynamicObject[] fkDynamicObjects = BusinessDataServiceHelper.load(dataEntity.getDynamicObjectType().getName(), + "id,billno,shkd_xkbillstatus,settletype,settletnumber,shkd_businessname,draftbill,bizdate,actpayamt," + + "cas_draftinfo,cas_draftinfo.transamount,cas_draftinfo.paybillcurrency,cas_draftinfo.draftbillinfo", + new QFilter("id", QCP.equals, dataEntity.getPkValue()).toArray()); + DynamicObject fkDynamicObject = fkDynamicObjects[0]; + + // 是否关联票据 + String shkd_xkbillstatus = fkDynamicObject.getString("shkd_xkbillstatus"); + if ("2".equals(shkd_xkbillstatus) || "3".equals(shkd_xkbillstatus) || "4".equals(shkd_xkbillstatus)) { + logger.info("付款单已关联票据,无需再关联"); + return; + } + + // 结算方式为空,则不处理 + DynamicObject settletype = fkDynamicObject.getDynamicObject("settletype"); + if (settletype == null) { + logger.info("结算方式为空,不处理"); + return; + } + String settletype_number = settletype.getString("number");// 结算方式 + + + // 结算号为空,则不处理 + if (fkDynamicObject.get("settletnumber") == null || "".equals(fkDynamicObject.getString("settletnumber"))) { + logger.info("结算号为空,不处理"); + return; + } + String settletnumber = fkDynamicObject.getString("settletnumber");//结算号 + + // 来源系统 + Object businessnameObj = fkDynamicObject.get("shkd_businessname"); + if (businessnameObj == null || !"XK".equals(businessnameObj.toString())) { + logger.info("来源系统不是XK,不处理"); + return; + } + + if ("JSFS06、JSFS07、JSFS19、JSFS20".contains(settletype_number)) { + DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("cdm_payablebill", "id," + + "draftbillno,releatedcasbillentrys,releatedcasbillentrys.rel_billtype,releatedcasbillentrys.rel_billno," + + "releatedcasbillentrys.rel_billid,releatedcasbillentrys.rel_bizdate,releatedcasbillentrys.rel_billamount," + + "releatedcasbillentrys.rel_createtime,releatedcasbillentrys.rel_modifytime,currency,amount", new QFilter("draftbillno", QCP.equals, settletnumber).toArray()); + + if (dynamicObjects.length > 0) { + // 票据币种 + Object currency_id = dynamicObjects[0].getDynamicObject("currency").getPkValue(); + // 转让金额 + BigDecimal amount = dynamicObjects[0].getBigDecimal("amount"); + // 结算号 + Object pkValue = dynamicObjects[0].getPkValue(); + + DynamicObjectCollection releatedcasbillentrys = dynamicObjects[0].getDynamicObjectCollection("releatedcasbillentrys"); + + // 写入付款单关联票据关联关系 + + MainEntityType entityType = EntityMetadataCache.getDataEntityType(fkDynamicObject.getDataEntityType().getName()); + DynamicCollectionProperty currencyProp = (DynamicCollectionProperty) entityType.getProperty("draftbill"); + DynamicObjectCollection collection = new DynamicObjectCollection(currencyProp.getDynamicCollectionItemPropertyType(), fkDynamicObject); + DynamicObject dynamicObject = new DynamicObject(currencyProp.getDynamicCollectionItemPropertyType()); + dynamicObject.set("fbasedataid", dynamicObjects[0]); + dynamicObject.set("fbasedataid_id", dynamicObjects[0].getPkValue()); + collection.add(dynamicObject); + + fkDynamicObject.set("draftbill", collection); + fkDynamicObject.set("shkd_xkbillstatus", "2");// 关联应付票据 + + // 赋值付款单票面信息分录 + DynamicObjectCollection dynamicObjectCollection = fkDynamicObject.getDynamicObjectCollection("cas_draftinfo"); + DynamicObject cas_draftinfo_type = new DynamicObject(dynamicObjectCollection.getDynamicObjectType()); + cas_draftinfo_type.set("transamount", amount);// 转让金额 + cas_draftinfo_type.set("paybillcurrency", currency_id);// 票据币种 + cas_draftinfo_type.set("draftbillinfo", pkValue);// 结算号 + dynamicObjectCollection.add(cas_draftinfo_type); + + fkDynamicObject.set("cas_draftinfo", dynamicObjectCollection); + + + // 写入票据关联付款单关联关系 + 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); + + dynamicObjects[0].set("releatedcasbillentrys", releatedcasbillentrys); + SaveServiceHelper.save(dynamicObjects); + + // 最后保存付款单 + SaveServiceHelper.save(new DynamicObject[]{fkDynamicObject}); + } + } else if ("JSFS09".equals(settletype_number)) { + + // 收票登记:cdm_receivablebill + DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("cdm_receivablebill", "id," + + "draftbillno,releatedcasbillentrys,releatedcasbillentrys.rel_billtype,releatedcasbillentrys.rel_billno," + + "releatedcasbillentrys.rel_billid,releatedcasbillentrys.rel_bizdate,releatedcasbillentrys.rel_billamount," + + "releatedcasbillentrys.rel_createtime,releatedcasbillentrys.rel_modifytime,currency,amount", new QFilter("draftbillno", QCP.equals, settletnumber).toArray()); + + if (dynamicObjects.length > 0) { + // 票据币种 + Object currency_id = dynamicObjects[0].getDynamicObject("currency").getPkValue(); + // 转让金额 + BigDecimal amount = dynamicObjects[0].getBigDecimal("amount"); + // 结算号 + Object pkValue = dynamicObjects[0].getPkValue(); + + DynamicObjectCollection releatedcasbillentrys = dynamicObjects[0].getDynamicObjectCollection("releatedcasbillentrys"); + + // 写入付款单关联票据关联关系 + + MainEntityType entityType = EntityMetadataCache.getDataEntityType(fkDynamicObject.getDataEntityType().getName()); + DynamicCollectionProperty currencyProp = (DynamicCollectionProperty) entityType.getProperty("draftbill"); + DynamicObjectCollection collection = new DynamicObjectCollection(currencyProp.getDynamicCollectionItemPropertyType(), fkDynamicObject); + DynamicObject dynamicObject = new DynamicObject(currencyProp.getDynamicCollectionItemPropertyType()); + dynamicObject.set("fbasedataid", dynamicObjects[0]); + dynamicObject.set("fbasedataid_id", dynamicObjects[0].getPkValue()); + collection.add(dynamicObject); + fkDynamicObject.set("draftbill", collection); + fkDynamicObject.set("shkd_xkbillstatus", "3");// 关联应收票据 + // 赋值付款单票面信息分录 + DynamicObjectCollection dynamicObjectCollection = fkDynamicObject.getDynamicObjectCollection("cas_draftinfo"); + DynamicObject cas_draftinfo_type = new DynamicObject(dynamicObjectCollection.getDynamicObjectType()); + cas_draftinfo_type.set("transamount", amount);// 转让金额 + cas_draftinfo_type.set("paybillcurrency", currency_id);// 票据币种 + cas_draftinfo_type.set("draftbillinfo", pkValue);// 结算号 + dynamicObjectCollection.add(cas_draftinfo_type); + + // 写入票据关联付款单关联关系 + 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); + + dynamicObjects[0].set("releatedcasbillentrys", releatedcasbillentrys); + SaveServiceHelper.save(dynamicObjects); + + // 最后保存付款单 + SaveServiceHelper.save(new DynamicObject[]{fkDynamicObject}); + } + } + } +} \ No newline at end of file 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 index 362926f..d35dd9c 100644 --- 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 @@ -2,30 +2,17 @@ package shkd.sys.sys.plugin.operation; import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.entity.DynamicObject; -import kd.bos.dataentity.entity.DynamicObjectCollection; -import kd.bos.dataentity.metadata.dynamicobject.DynamicCollectionProperty; -import kd.bos.dataentity.metadata.dynamicobject.DynamicProperty; -import kd.bos.entity.EntityMetadataCache; -import kd.bos.entity.MainEntityType; import kd.bos.entity.operate.result.OperationResult; 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.entity.plugin.args.ReturnOperationArgs; 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.util.Date; - import kd.bos.servicehelper.operation.OperationServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; -import kd.fi.cas.helper.CasBotpHelper; import kd.sdk.plugin.Plugin; -import shkd.sys.sys.plugin.form.PaymentProcessingBillPlugin; + +import java.util.List; /** * 单据操作插件 @@ -34,142 +21,30 @@ import shkd.sys.sys.plugin.form.PaymentProcessingBillPlugin; public class PaymentSlipAssociationFixed extends AbstractOperationServicePlugIn implements Plugin { private static final Log logger = LogFactory.getLog(PaymentSlipAssociationFixed.class); @Override - public void afterExecuteOperationTransaction(AfterOperationArgs e) { - super.afterExecuteOperationTransaction(e); + public void onReturnOperation(ReturnOperationArgs e) { + super.onReturnOperation(e); + List successPkIds = e.getOperationResult().getSuccessPkIds();//执行成功的数据 + for (Object successPkId : successPkIds) { + logger.info("进入审核操作代码方法"); + DynamicObject fkDynamicObject = BusinessDataServiceHelper.loadSingle(successPkId, "cas_paybill"); + logger.info("付款单:{}", fkDynamicObject); - logger.info("进入save操作代码方法"); + String shkdXkbillstatus = fkDynamicObject.getString("shkd_xkbillstatus"); - DynamicObject[] dataEntities = e.getDataEntities(); - DynamicObject dataEntity = dataEntities[0]; - - // 是否关联票据 - boolean shkdIsrenotes = dataEntity.getBoolean("shkd_isrenotes"); - if (shkdIsrenotes) { - return; - } - - // 付款单 - DynamicObject fkDynamicObject = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), dataEntity.getDynamicObjectType()); - - // 结算方式为空,则不处理 - DynamicObject settletype = fkDynamicObject.getDynamicObject("settletype"); - if (settletype == null) { - return; - } - String settletype_number = settletype.getString("number");// 结算方式 - - - // 结算号为空,则不处理 - if (dataEntity.get("settletnumber") == null || "".equals(dataEntity.getString("settletnumber"))) { - return; - } - String settletnumber = dataEntity.getString("settletnumber");//结算号 - - // 来源系统 - Object businessnameObj = fkDynamicObject.get("shkd_businessname"); - if (businessnameObj == null || !"XK".equals(businessnameObj.toString())){ - return; - } - - if ("JSFS06、JSFS07、JSFS19、JSFS20".contains(settletype_number)) { - DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("cdm_payablebill", "id," + - "draftbillno,releatedcasbillentrys,releatedcasbillentrys.rel_billtype,releatedcasbillentrys.rel_billno," + - "releatedcasbillentrys.rel_billid,releatedcasbillentrys.rel_bizdate,releatedcasbillentrys.rel_billamount," + - "releatedcasbillentrys.rel_createtime,releatedcasbillentrys.rel_modifytime", new QFilter("draftbillno", QCP.equals, settletnumber).toArray()); - - if (dynamicObjects.length > 0) { - - DynamicObjectCollection releatedcasbillentrys = dynamicObjects[0].getDynamicObjectCollection("releatedcasbillentrys"); - - if (!releatedcasbillentrys.isEmpty()) { - return; - } - - // 写入付款单关联票据关联关系 - - MainEntityType entityType = EntityMetadataCache.getDataEntityType(fkDynamicObject.getDataEntityType().getName()); - DynamicCollectionProperty currencyProp = (DynamicCollectionProperty) entityType.getProperty("draftbill"); - DynamicObjectCollection collection = new DynamicObjectCollection(currencyProp.getDynamicCollectionItemPropertyType(), fkDynamicObject); - DynamicObject dynamicObject = new DynamicObject(currencyProp.getDynamicCollectionItemPropertyType()); - dynamicObject.set("fbasedataid", dynamicObjects[0]); - dynamicObject.set("fbasedataid_id", dynamicObjects[0].getPkValue()); - collection.add(dynamicObject); - - fkDynamicObject.set("draftbill", collection); - fkDynamicObject.set("shkd_isrenotes", true); - - // 写入票据关联付款单关联关系 - 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); - - dynamicObjects[0].set("releatedcasbillentrys", releatedcasbillentrys); - SaveServiceHelper.save(dynamicObjects); - - // 最后保存付款单 - SaveServiceHelper.save(new DynamicObject[]{fkDynamicObject}); - } - } else if ("JSFS09".equals(settletype_number)) { - - // 收票登记:cdm_receivablebill - DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("cdm_receivablebill", "id," + - "draftbillno,releatedcasbillentrys,releatedcasbillentrys.rel_billtype,releatedcasbillentrys.rel_billno," + - "releatedcasbillentrys.rel_billid,releatedcasbillentrys.rel_bizdate,releatedcasbillentrys.rel_billamount," + - "releatedcasbillentrys.rel_createtime,releatedcasbillentrys.rel_modifytime", new QFilter("draftbillno", QCP.equals, settletnumber).toArray()); - - if (dynamicObjects.length > 0) { - - DynamicObjectCollection releatedcasbillentrys = dynamicObjects[0].getDynamicObjectCollection("releatedcasbillentrys"); - - if (!releatedcasbillentrys.isEmpty()) { - return; - } - - // 写入付款单关联票据关联关系 - - MainEntityType entityType = EntityMetadataCache.getDataEntityType(fkDynamicObject.getDataEntityType().getName()); - DynamicCollectionProperty currencyProp = (DynamicCollectionProperty) entityType.getProperty("draftbill"); - DynamicObjectCollection collection = new DynamicObjectCollection(currencyProp.getDynamicCollectionItemPropertyType(), fkDynamicObject); - DynamicObject dynamicObject = new DynamicObject(currencyProp.getDynamicCollectionItemPropertyType()); - dynamicObject.set("fbasedataid", dynamicObjects[0]); - dynamicObject.set("fbasedataid_id", dynamicObjects[0].getPkValue()); - collection.add(dynamicObject); - - fkDynamicObject.set("draftbill", collection); - fkDynamicObject.set("shkd_isrenotes", true); - - // 写入票据关联付款单关联关系 - DynamicObject kpLinkRow = new DynamicObject(releatedcasbillentrys.getDynamicObjectType()); - - kpLinkRow.set("rel_billtype", "cas_recbill");// 关联单据类型 → 收款处理 - 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); - - dynamicObjects[0].set("releatedcasbillentrys", releatedcasbillentrys); - SaveServiceHelper.save(dynamicObjects); - - // 最后保存付款单 - SaveServiceHelper.save(new DynamicObject[]{fkDynamicObject}); - - OperationResult result = OperationServiceHelper.executeOperate("endorse", "cas_paybill", new DynamicObject[]{fkDynamicObject}, OperateOption.create()); - if (result.isSuccess()) { - logger.info("背书成功"); - } else { - logger.info("背书失败"); + // 关联票据状态为(关联应收票据) + if ("3".equals(shkdXkbillstatus)) { + try { + OperationResult result = OperationServiceHelper.executeOperate("pushandsave", "cas_paybill", new Object[]{successPkId}, OperateOption.create()); + if (result.isSuccess()) { + logger.info("背书成功"); + fkDynamicObject.set("billstatus", "D"); + fkDynamicObject.set("shkd_xkbillstatus", "4"); + SaveServiceHelper.save(new DynamicObject[]{fkDynamicObject}); + } else { + logger.info("背书失败"); + } + } catch (Exception exception) { + logger.info("操作调用失败,失败信息:" + exception.getMessage()); } } }