提交人:陈绍鑫

日期:2025/7/02 17:00
内容:取消生单自动取消业务处理
This commit is contained in:
陈绍鑫 2025-07-02 16:24:10 +08:00
parent dc61586112
commit 6b5e26b5c6
2 changed files with 396 additions and 0 deletions

View File

@ -0,0 +1,333 @@
package shkd.sys.sys.plugin.form;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.data.BusinessDataReader;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.metadata.IDataEntityType;
import kd.bos.entity.botp.ConvertBill;
import kd.bos.entity.botp.ConvertOpType;
import kd.bos.entity.botp.ConvertRuleCache;
import kd.bos.entity.botp.ConvertRuleElement;
import kd.bos.entity.botp.runtime.ConvertOpParameter;
import kd.bos.entity.botp.runtime.ConvertOpRule;
import kd.bos.entity.botp.runtime.ConvertOperationResult;
import kd.bos.entity.botp.runtime.DrawArgs;
import kd.bos.entity.datamodel.IBillModel;
import kd.bos.entity.datamodel.IRefrencedataProvider;
import kd.bos.entity.datamodel.ListSelectedRow;
import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.entity.operate.result.OperationResult;
import kd.bos.form.IPageCache;
import kd.bos.form.control.Toolbar;
import kd.bos.form.events.BeforeDoOperationEventArgs;
import kd.bos.form.field.RefBillEdit;
import kd.bos.form.field.events.BeforeF7SelectEvent;
import kd.bos.form.field.events.BeforeF7SelectListener;
import kd.bos.form.operate.AbstractOperate;
import kd.bos.form.operate.botp.Push;
import kd.bos.list.ListShowParameter;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.botp.ConvertServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.fi.cas.util.EmptyUtil;
import kd.sdk.plugin.Plugin;
import java.util.*;
public class PaymentDealBillPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener {
private static final Log logger = LogFactory.getLog(PaymentProcessingBillPlugin.class);
public static final List<String> update_sk = Arrays.asList("payeename","payeebanknum","recaccbankname","payeecurrency","payeebank","payeebankname","recbanknumber");//拉单需要更新的收款方
public static final List<String> update_fk = Arrays.asList("org", "payeracctbank", "payerbank");//拉单需要更新的付款方
public static final List<String> update_qt = Arrays.asList("paymenttype");//拉单需要更新的其他字段
@Override
public void registerListener(EventObject e) {
Toolbar tbmain = this.getView().getControl("tbmain");
tbmain.addItemClickListener(this);
RefBillEdit shkd_ywcl = this.getView().getControl("shkd_ywcl");//业务处理
shkd_ywcl.addBeforeF7SelectListener(this);
}
public void propertyChanged(PropertyChangedArgs e) {
String key = e.getProperty().getName();
ChangeData[] changeData = e.getChangeSet();
Object newValue = changeData[0].getNewValue();
Object oldValue = changeData[0].getOldValue();
DynamicObject settleType;
Object value = this.getModel().getValue("settletype");
settleType=value != null ? (DynamicObject)value : null;
if (newValue != oldValue) {
DynamicObject applyDo;
switch (key) {
case "settletype":
if (EmptyUtil.isNoEmpty(settleType)) {
if ("电汇".equals(settleType.getString("name"))){
this.getView().setVisible(true, new String[]{"settletnumber"});
this.getView().setVisible(true, new String[]{"draftbill"});
}
}
break;
case "paymentchannel":
if (EmptyUtil.isNoEmpty(settleType)) {
if ("电汇".equals(settleType.getString("name"))){
this.getView().setVisible(true, new String[]{"settletnumber"});
this.getView().setVisible(true, new String[]{"draftbill"});
}
}
break;
}
}
if ("shkd_ywcl".equals(key)){
if (newValue != oldValue) {
if (newValue!=null){
if(oldValue!=null){
DynamicObject cdm_drafttradebill=(DynamicObject)oldValue;
List<Long> ids = new ArrayList<>();
ids.add(cdm_drafttradebill.getLong("id"));
OperationResult operationResult = OperationServiceHelper.executeOperate("canceldrawbill",
"cdm_drafttradebill",
ids.toArray(new Object[]{}), OperateOption.create());//取消完成
if (operationResult.isSuccess()){
//成功
logger.info("单据编号"+cdm_drafttradebill.getString("billno")+"取消完成成功");
}else {
//失败
logger.info("单据编号"+cdm_drafttradebill.getString("billno")+"取消完成失败");
this.getView().showSuccessNotification("单据编号"+cdm_drafttradebill.getString("billno")+"取消确认完成失败,请检查并手动取消完成");
}
this.getModel().setValue("draftbill",null);
this.getModel().setValue("settletnumber",null);
}
this.getView().invokeOperation("drawauto");
}else {
DynamicObject cdm_drafttradebill=(DynamicObject)oldValue;
List<Long> ids = new ArrayList<>();
ids.add(cdm_drafttradebill.getLong("id"));
OperationResult operationResult = OperationServiceHelper.executeOperate("canceldrawbill",
"cdm_drafttradebill",
ids.toArray(new Object[]{}), OperateOption.create());//取消完成
if (operationResult.isSuccess()){
//成功
logger.info("单据编号"+cdm_drafttradebill.getString("billno")+"取消完成成功");
}else {
//失败
logger.info("单据编号"+cdm_drafttradebill.getString("billno")+"取消完成失败");
this.getView().showSuccessNotification("单据编号"+cdm_drafttradebill.getString("billno")+"取消确认完成失败,请检查并手动取消完成");
}
this.getModel().setValue("draftbill",null);
this.getModel().setValue("settletnumber",null);
}
}
}
}
public void afterBindData(EventObject e) {
DynamicObject settleType;
Object value = this.getModel().getValue("settletype");
settleType=value != null ? (DynamicObject)value : null;
if (EmptyUtil.isNoEmpty(settleType)) {
if ("电汇".equals(settleType.getString("name"))){
this.getView().setVisible(true, new String[]{"settletnumber"});
this.getView().setVisible(true, new String[]{"draftbill"});
}
}
}
@Override
public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
String name = beforeF7SelectEvent.getProperty().getName();
if (name.equals("shkd_ywcl")) {
ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
DynamicObject dataEntity = this.getModel().getDataEntity();
DynamicObject org = dataEntity.getDynamicObject("org");//付款人公司
QFilter qFilter = new QFilter("company.id", QFilter.equals, org.getLong("id"));
qFilter.and(new QFilter("tradetype", QFilter.equals, "redeem"));
showParameter.getListFilterParameter().setFilter(qFilter);
}
}
@Override
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
AbstractOperate draw = (AbstractOperate)args.getSource();
if("drawauto".equals(draw.getOperateKey())){
ConvertOpParameter convertOpParameter = buildParameter(draw);
ListSelectedRowCollection srcRows = new ListSelectedRowCollection();
DynamicObject shkd_ywcl = (DynamicObject) this.getModel().getValue("shkd_ywcl");
if(shkd_ywcl==null){
return;
}
ListSelectedRow row = new ListSelectedRow(shkd_ywcl.get("id"), true);
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(shkd_ywcl.get("id"), "cdm_drafttradebill");
String billno = dynamicObject.getString("billno");
String status = dynamicObject.getString("status");
Long org = dynamicObject.getLong("org");
row.setBillNo(billno);//单据编号
row.setBillStatus(status);//单据状态
row.setMainOrgId(org);//组织ID
row.setBillTypeID(0L);
row.setRowKey(0);
row.setPageIndex(0);
srcRows.add(row);
doDraw(convertOpParameter,srcRows,(DynamicObject)this.getModel().getValue("shkd_ywcl"));
args.setCancel(true);
}
}
public void doDraw(ConvertOpParameter opParameter, ListSelectedRowCollection srcRows,DynamicObject cdm_drafttradebill) {
if (srcRows != null && srcRows.size() != 0) {
String sourceEntityNumber = opParameter.getDefSourceBill();
String ruleId = opParameter.getDefRuleId();
DrawArgs args = new DrawArgs();
args.setSourceEntityNumber(sourceEntityNumber);
args.setTargetEntityNumber(opParameter.getEntityNumber());
args.addCustomParam("botp_requiredatamutex", String.valueOf(true));
args.getSelectedRows().addAll(srcRows);
args.setTargetPageId(opParameter.getTargetBillPageId());
args.setRuleId(ruleId);
args.setBuildConvReport(true);
args.getClearEntrys().addAll(opParameter.getClearEntrys());
args.getCustomParams().putAll(opParameter.getCustomParams());
ConvertOperationResult result = ConvertServiceHelper.draw(args);
if (result.isSuccess() && result.getCachePageIds().size() != 0) {
IPageCache iPageCache =this.getPageCache();
IRefrencedataProvider refProvider = new IRefrencedataProvider() {
@Override
public void fillReferenceData(Object[] dataEntitys, IDataEntityType type) {
BusinessDataReader.loadRefence(dataEntitys, type);
}
};
List<DynamicObject> dataEntitys = result.loadTargetDataObjects(refProvider,this.getView().getModel().getDataEntityType());
DynamicObject dynamicObject = dataEntitys.get(0);
if (cdm_drafttradebill!=null){
dynamicObject.set("shkd_ywcl",cdm_drafttradebill);
}
for (int i = 0; i < update_fk.size(); i++) {
if (this.getModel().getValue(update_fk.get(i))!=null&& !this.getModel().getValue(update_fk.get(i)).equals("")){
dynamicObject.set(update_fk.get(i),this.getModel().getValue(update_fk.get(i)));
}
}
for (int i = 0; i < update_sk.size(); i++) {
if (this.getModel().getValue(update_sk.get(i))!=null&& !this.getModel().getValue(update_sk.get(i)).equals("")){
dynamicObject.set(update_sk.get(i),this.getModel().getValue(update_sk.get(i)));
}
}
for (int i = 0; i < update_qt.size(); i++) {
if (this.getModel().getValue(update_qt.get(i))!=null&& !this.getModel().getValue(update_qt.get(i)).equals("")){
dynamicObject.set(update_qt.get(i),this.getModel().getValue(update_qt.get(i)));
}
}
((IBillModel)this.getView().getModel()).push(dynamicObject);
DynamicObjectCollection entry = (DynamicObjectCollection) this.getView().getModel().getValue("entry");
if (entry.size()>1){
this.getView().getModel().deleteEntryRow("entry", 1);
}
DynamicObjectCollection cas_draftinfo = (DynamicObjectCollection) this.getView().getModel().getValue("cas_draftinfo");
if (cas_draftinfo.size()>1){
this.getView().getModel().deleteEntryRow("cas_draftinfo", 0);
}
this.getView().updateView();
result.release(refProvider, this.getView().getModel().getDataEntityType());
logger.info("单据编号"+this.getModel().getValue("billno")+"拉单成功,正在对编号"+cdm_drafttradebill.getString("billno")+"业务处理进行交易成功");
if (cdm_drafttradebill!=null){
List<Long> ids = new ArrayList<>();
ids.add(cdm_drafttradebill.getLong("id"));
OperationResult operationResult = OperationServiceHelper.executeOperate("drawbillsave",
"cdm_drafttradebill",
ids.toArray(new Object[]{}), OperateOption.create());//确认完成
if (operationResult.isSuccess()){
//成功
logger.info("单据编号"+cdm_drafttradebill.getString("billno")+"确认完成成功");
}else {
//失败
logger.info("单据编号"+cdm_drafttradebill.getString("billno")+"确认完成失败");
// this.getView().showSuccessNotification("取消确认完成失败,请检查并手动取消完成");
}
}
SaveServiceHelper.save(new DynamicObject[]{this.getView().getModel().getDataEntity()});
} else {
Push.showReport(this.getView(), args, result);
this.getView().getModel().setValue("shkd_ywcl",null);
}
}
}
/**
* 构建下推操作参数
* @return
*/
protected ConvertOpParameter buildParameter(AbstractOperate draw){
ConvertOpParameter opParameter = new ConvertOpParameter();
opParameter.setOpType(ConvertOpType.Draw);
String entityNumber = this.getView().getEntityId();
opParameter.setEntityNumber(entityNumber);
opParameter.setTargetBillPageId(this.getView().getPageId());
opParameter.setDefSourceBill("cdm_drafttradebill");
opParameter.setDefRuleId("2236252254296354816");
opParameter.getClearEntrys().addAll(new ArrayList());
// 直接选单跳过选单界面判断指定的源单规则是否存在启用
List<ConvertRuleElement> rules = this.loadRules("cdm_drafttradebill", entityNumber);
ConvertRuleElement defRule = null;
for(ConvertRuleElement rule : rules) {
if (!rule.isEnabled()) {
continue;
}
if ("2236252254296354816".equals(rule.getId())) {
defRule = rule;
break;
}
}
if (defRule != null) {
ConvertBill bill = new ConvertBill();
bill.setEntityNumber("cdm_drafttradebill");
bill.setEntityName("cdm_drafttradebill");
ConvertOpRule opRule = new ConvertOpRule();
opRule.setRuleId(defRule.getId());
bill.getRules().add(opRule);
opParameter.getBills().add(bill);
}
// 自定义参数
if (draw.getOption() != null) {
opParameter.getCustomParams().putAll(draw.getOption().getVariables());
}
return opParameter;
}
private List<ConvertRuleElement> loadRules(String sourceEntityNumber, String targetEntityNumber) {
List<ConvertRuleElement> rules = ConvertRuleCache.loadRules(sourceEntityNumber, targetEntityNumber);
List<ConvertRuleElement> enableRules = new ArrayList();
Iterator var5 = rules.iterator();
while(var5.hasNext()) {
ConvertRuleElement rule = (ConvertRuleElement)var5.next();
if (rule.isEnabled()) {
enableRules.add(rule);
}
}
return enableRules;
}
}

View File

@ -0,0 +1,63 @@
package shkd.sys.sys.plugin.operation;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.operate.IOperationResult;
import kd.bos.entity.operate.result.OperationResult;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
import kd.bos.entity.plugin.args.ReturnOperationArgs;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper;
import kd.tmc.cdm.common.constant.CdmEntityConst;
import shkd.sys.sys.plugin.form.PaymentProcessingBillPlugin;
import java.util.ArrayList;
import java.util.List;
public class DeleteDrafttradebillOP extends AbstractOperationServicePlugIn {
private static final Log logger = LogFactory.getLog(DeleteDrafttradebillOP.class);
@Override
public void beginOperationTransaction(BeginOperationTransactionArgs e) {
super.beginOperationTransaction(e);
try {
DynamicObject[] dataEntities = e.getDataEntities();
for (int i = 0; i < dataEntities.length; i++) {
long id = dataEntities[i].getLong("id");
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(id, dataEntities[i].getDataEntityType().getName());
DynamicObject shkd_ywcl = dynamicObject.getDynamicObject("shkd_ywcl");
if (shkd_ywcl!=null){
List<Long> ids = new ArrayList<>();
ids.add(shkd_ywcl.getLong("id"));
OperationResult operationResult = OperationServiceHelper.executeOperate("canceldrawbill",
"cdm_drafttradebill",
ids.toArray(new Object[]{}), OperateOption.create());//取消完成
if (operationResult.isSuccess()){
//成功
logger.info("单据编号"+shkd_ywcl.getString("billno")+"取消完成成功");
}else {
//失败
logger.info("单据编号"+shkd_ywcl.getString("billno")+"取消完成失败,原因:"+operationResult.getMessage());
}
}
}
} catch (Exception ex) {
logger.error(ex.getMessage());
}
}
@Override
public void endOperationTransaction(EndOperationTransactionArgs e) {
super.endOperationTransaction(e);
}
@Override
public void onReturnOperation(ReturnOperationArgs e) {
super.onReturnOperation(e);
}
}