提交人:邹江涛

提交时间:2026年01月05日
提交内容:类凭证合并记录,删除限制
This commit is contained in:
root 2026-01-07 15:39:57 +08:00
parent 79d12f479a
commit 8395da6ef4
1 changed files with 73 additions and 22 deletions

View File

@ -6,6 +6,8 @@ import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.datamodel.ListSelectedRow;
import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.form.events.BeforeDoOperationEventArgs;
import kd.bos.form.operate.AbstractOperate;
import kd.bos.list.BillList;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.logging.Log;
@ -15,16 +17,12 @@ import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.coderule.CodeRuleServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.scmc.pm.forecast.business.helper.DateHelper;
import kd.bos.entity.operate.Delete;
import kd.sdk.plugin.Plugin;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Date;
import java.util.*;
/**
* 标准单据列表插件
@ -44,28 +42,38 @@ public class LpzListPlugin extends AbstractListPlugin implements Plugin {
ListSelectedRowCollection selectedRows = list.getSelectedRows();
if ("shkd_combined".equals(itemKey)) {
if (selectedRows.isEmpty() || selectedRows.size() == 1) {
if (selectedRows.isEmpty() || selectedRows.size() == 2) {
this.getView().showTipNotification("请至少选择两条数据");
return;
} else {
List<Object> selectedRowPKValues = new ArrayList<>();
for (ListSelectedRow selectedRow : selectedRows) {
selectedRowPKValues.add(selectedRow.getPrimaryKeyValue());
}
selectedRowPKValues = new ArrayList<>(new HashSet<>(selectedRowPKValues));
//合并的凭证
List<DynamicObject> allMergeVoucher = new ArrayList<>();
//核算组织的类型
List<Long> tallycompanys = new ArrayList<>();
for (ListSelectedRow selectedRow : selectedRows) {
Object primaryKeyValue = selectedRow.getPrimaryKeyValue();
for (Object primaryKeyValue : selectedRowPKValues) {
//获取凭证全部数据
// DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(primaryKeyValue, "fr_manualtallybill");
DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("shkd_fr_manualtallybi_inh", "id,billno,tallycompany,biztype,company,currency,accountbook,applydate," +
"bizdate,bookdate,period,vouchertype,biztype,amount,shkd_combined,shkd_combinedtime,tallyentryentity,tallyentryentity.tallyabstract,tallyentryentity.loanstanamount,tallyentryentity.standardamount,tallyentryentity.shkd_hswd," +
"tallyentryentity.account,tallyentryentity.loanamount,tallyentryentity.oriamount,tallyentryentity.maincfitem,tallyentryentity.shkd_zbhswd,tallyentryentity.maincfamount,tallyentryentity.cuscurrency," +
"tallyentryentity.exrate,tallyentryentity.ratedate,tallyentryentity.tallyamount", new QFilter("id", QCP.equals, primaryKeyValue).toArray());
DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("shkd_fr_manualtallybi_inh",
"id,billno,tallycompany,biztype,company,currency,accountbook,applydate,bizdate," +
"bookdate,period,vouchertype,biztype,amount,shkd_combined,shkd_combinedtime,shkd_bemerged," +
"shkd_bemergedtime,tallyentryentity,tallyentryentity.tallyabstract,tallyentryentity.loanstanamount," +
"tallyentryentity.standardamount,tallyentryentity.shkd_hswd,tallyentryentity.account," +
"tallyentryentity.loanamount,tallyentryentity.oriamount,tallyentryentity.maincfitem," +
"tallyentryentity.shkd_zbhswd,tallyentryentity.maincfamount,tallyentryentity.cuscurrency," +
"tallyentryentity.exrate,tallyentryentity.ratedate,tallyentryentity.tallyamount," +
"shkd_djhbjlentryentity,shkd_djhbjlentryentity.shkd_hbdj,shkd_djhbjlentryentity.shkd_djbzywlx",
new QFilter("id", QCP.equals, primaryKeyValue).toArray());
DynamicObject dynamicObject = dynamicObjects[0];
boolean shkdCombined = dynamicObject.getBoolean("shkd_combined");
if (shkdCombined) {
boolean shkd_bemerged = dynamicObject.getBoolean("shkd_bemerged");
if (shkdCombined || shkd_bemerged) {
this.getView().showTipNotification("所选数据存在已合并凭证");
return;
}
@ -81,6 +89,11 @@ public class LpzListPlugin extends AbstractListPlugin implements Plugin {
// 核算组织去重
tallycompanys = new ArrayList<>(new HashSet<>(tallycompanys));
// 币种
DynamicObject[] bdCurrency = BusinessDataServiceHelper.load("bd_currency", "id,name", new QFilter("name", QCP.equals, "人民币").toArray());
// 当前日期
Date currentDate = new Date();
for (Long tallycompany : tallycompanys) {
// 根据核算组织分类后的合并凭证
List<DynamicObject> mergeVoucher = new ArrayList<>();
@ -140,6 +153,20 @@ public class LpzListPlugin extends AbstractListPlugin implements Plugin {
// 创建一个合并单据
DynamicObject frManualtallybill = BusinessDataServiceHelper.newDynamicObject("shkd_fr_manualtallybi_inh");
// 单据合并记录分录
DynamicObjectCollection shkdDjhbjlentryentity = frManualtallybill.getDynamicObjectCollection("shkd_djhbjlentryentity");
for (DynamicObject consolidateDocument : consolidateDocuments) {
DynamicObject dynamicObject = shkdDjhbjlentryentity.addNew();
dynamicObject.set("shkd_hbdj", consolidateDocument);
dynamicObject.set("shkd_djbzywlx", consolidateDocument.getDynamicObject("biztype"));
consolidateDocument.set("shkd_bemerged", true);
consolidateDocument.set("shkd_bemergedtime", currentDate);
SaveServiceHelper.save(new DynamicObject[]{consolidateDocument});
}
DynamicObject packagenoObject = mergeVoucher.get(0);
// CodeRuleServiceHelper编码规则帮助服务类
CodeRuleInfo codeRule = CodeRuleServiceHelper.getCodeRule(packagenoObject.getDataEntityType().getName(), packagenoObject, null);
@ -152,12 +179,6 @@ public class LpzListPlugin extends AbstractListPlugin implements Plugin {
frManualtallybill.set("company", tallycompany);
// 核算组织
frManualtallybill.set("tallycompany", tallycompany);
// 币种
DynamicObject[] bdCurrency = BusinessDataServiceHelper.load("bd_currency", "id,name", new QFilter("name", QCP.equals, "人民币").toArray());
// 当前日期
Date currentDate = new Date();
// 本位币种
frManualtallybill.set("currency", bdCurrency[0]);
// 账簿类型
@ -411,4 +432,34 @@ public class LpzListPlugin extends AbstractListPlugin implements Plugin {
}
}
}
@Override
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
super.beforeDoOperation(args);
AbstractOperate argsSource = (AbstractOperate)args.getSource();
String operateKey = argsSource.getOperateKey();
if (("delete").equals(operateKey)) {
ListSelectedRowCollection listSelectedData = ((Delete) argsSource).getListSelectedData();
List<Object> listFocusRowPKIds = new ArrayList<>();
for (ListSelectedRow listSelectedRow : listSelectedData) {
Object primaryKeyValue = listSelectedRow.getPrimaryKeyValue();
listFocusRowPKIds.add(primaryKeyValue);
}
listFocusRowPKIds = new ArrayList<>(new HashSet<>(listFocusRowPKIds));
for (Object listFocusRowPKId : listFocusRowPKIds) {
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(listFocusRowPKId, "shkd_fr_manualtallybi_inh");
boolean shkdCombined = dynamicObject.getBoolean("shkd_combined");
if (shkdCombined) {
DynamicObjectCollection shkdDjhbjlentryentitys = dynamicObject.getDynamicObjectCollection("shkd_djhbjlentryentity");
List<DynamicObject> dynamicObjects = new ArrayList<>();
for (DynamicObject shkdDjhbjlentryentity : shkdDjhbjlentryentitys) {
DynamicObject shkdFrManualtallybiInh = BusinessDataServiceHelper.loadSingle(shkdDjhbjlentryentity.getDynamicObject("shkd_hbdj").getPkValue(), "shkd_fr_manualtallybi_inh");
shkdFrManualtallybiInh.set("shkd_bemerged", false);
shkdFrManualtallybiInh.set("shkd_bemergedtime", null);
dynamicObjects.add(shkdFrManualtallybiInh);
}
SaveServiceHelper.save(dynamicObjects.toArray(new DynamicObject[0]));
}
}
}
}
}