Merge remote-tracking branch 'origin/main'

This commit is contained in:
wenlukang1 2025-07-06 16:31:52 +08:00
commit 804723a45f
2 changed files with 226 additions and 150 deletions

View File

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

View File

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