This commit is contained in:
xuhaihui 2025-10-31 15:14:24 +08:00
parent 678435ea8d
commit 4dcab8e9ad
2 changed files with 2799 additions and 0 deletions

View File

@ -0,0 +1,488 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package zcgj.zcdev.zcdev.fs.plugin.form;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.EventObject;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.resource.ResManager;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.entity.datamodel.ListSelectedRow;
import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.entity.operate.IOperationResult;
import kd.bos.form.CloseCallBack;
import kd.bos.form.FormShowParameter;
import kd.bos.form.IFormView;
import kd.bos.form.ShowType;
import kd.bos.form.control.events.BeforeItemClickEvent;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.form.events.AfterDoOperationEventArgs;
import kd.bos.form.events.BeforeDoOperationEventArgs;
import kd.bos.form.events.ClosedCallBackEvent;
import kd.bos.form.events.MessageBoxClosedEvent;
import kd.bos.form.operate.FormOperate;
import kd.bos.list.IListView;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.mvc.list.ListView;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.fi.er.business.isc.IscHelper;
import kd.fi.er.business.pub.ContractUtil;
import kd.fi.er.business.trip.util.TripCommonUtil;
import kd.fi.er.business.utils.ErStdConfig;
import kd.fi.er.formplugin.publicbiz.bill.contract.ContractBillList;
import kd.fi.er.model.EntityInfo;
import org.apache.commons.lang.StringUtils;
public class ContractBillListExt extends AbstractListPlugin {
private static final String BAR_CHANGEA = "bar_changea";
private static final String BAR_CHANGEB = "bar_changeb";
private static final String BAR_CHANGEC = "bar_changec";
private static final String BAR_CHANGED = "bar_changed";
private static final String BAR_CHANGED_FRAME = "bar_changed_frame";
private static final String EXPENSEENTRYENTITY_SOURCEBILLNO = "expenseentryentity.wbsrcbillno";
private static final String EXPENSEENTRYENTITY_WBSRCBILLTYPE = "expenseentryentity.wbsrcbilltype";
private static final Log logger = LogFactory.getLog(ContractBillList.class);
private static String[] opkey = new String[]{"submit", "docontractsign", "updateconsign", "frozen", "unfrozen", "closebill", "pushtocontractstop"};
public ContractBillListExt() {
}
public void registerListener(EventObject e) {
super.registerListener(e);
this.addItemClickListeners(new String[]{"bar_changea", "bar_changeb", "bar_changec", "bar_changed", "bar_changed_frame", "barstopbill"});
}
public void beforeItemClick(BeforeItemClickEvent evt) {
switch (evt.getItemKey()) {
case "bar_changea":
this.checkChangePush(evt, "bar_changea", ResManager.loadKDString("变更金额", "ContractBillList_90", "fi-er-formplugin", new Object[0]));
break;
case "bar_changeb":
this.checkChangePush(evt, "bar_changeb", ResManager.loadKDString("变更税率", "ContractBillList_91", "fi-er-formplugin", new Object[0]));
break;
case "bar_changec":
this.checkChangePush(evt, "bar_changec", ResManager.loadKDString("补充明细", "ContractBillList_92", "fi-er-formplugin", new Object[0]));
break;
case "bar_changed":
this.checkChangePush(evt, "bar_changed", ResManager.loadKDString("变更其他", "ContractBillList_93", "fi-er-formplugin", new Object[0]));
break;
case "bar_changed_frame":
this.checkChangePush(evt, "bar_changed_frame", ResManager.loadKDString("变更框架合同", "ContractBillList_94", "fi-er-formplugin", new Object[0]));
break;
case "barstopbill":
Set<Object> ids = (Set) this.getSelectedRows().stream().map(ListSelectedRow::getPrimaryKeyValue).collect(Collectors.toSet());
if (ids.size() != 1) {
this.getView().showTipNotification(ResManager.loadKDString("请选择一行数据操作。", "ContractBillList_1", "fi-er-formplugin", new Object[0]));
evt.setCancel(true);
}
}
}
private void checkChangePush(BeforeItemClickEvent evt, String changeoOpType, String itemTitle) {
Set<Object> ids = (Set) this.getSelectedRows().stream().map(ListSelectedRow::getPrimaryKeyValue).collect(Collectors.toSet());
if (ids.size() != 1) {
this.getView().showTipNotification(ResManager.loadKDString("请选择一行数据操作。", "ContractBillList_1", "fi-er-formplugin", new Object[0]));
evt.setCancel(true);
} else {
IListView listView = (IListView) this.getView();
String entityName = listView.getListModel().getEntityId();
ListSelectedRowCollection selectedRows = ((IListView) this.getView()).getSelectedRows();
Iterator var8 = selectedRows.iterator();
DynamicObject dynamicObject;
do {
do {
do {
do {
if (!var8.hasNext()) {
String OnWayCondition = "A,B,C,D";
String selectedProperties = String.join(",", "id", "billstatus");
DynamicObjectCollection prepayBills = QueryServiceHelper.query("er_contractbill", selectedProperties, new QFilter[]{new QFilter("srcsourceid", "in", ids)});
long count = prepayBills.stream().filter((prepayBillOnWay) -> {
return OnWayCondition.contains(prepayBillOnWay.getString("billstatus"));
}).count();
if (count > 0L) {
this.getView().showTipNotification(String.format(String.format(ResManager.loadKDString("已存在未完成的下游单据,请完成流程后再发起%1$s。", "ContractBillList_9", "fi-er-formplugin", new Object[0]), ResManager.loadKDString("变更", "ContractBillList_96", "fi-er-formplugin", new Object[0]))));
evt.setCancel(true);
return;
}
List onwayids = ContractUtil.checkHasOnWayBills(selectedRows, OnWayCondition);
if (onwayids.size() > 0) {
this.getView().showTipNotification(String.format(String.format(ResManager.loadKDString("已存在未完成的下游单据,请完成流程后再发起%1$s。", "ContractBillList_9", "fi-er-formplugin", new Object[0]), ResManager.loadKDString("变更", "ContractBillList_96", "fi-er-formplugin", new Object[0]))));
evt.setCancel(true);
return;
}
this.getView().getPageCache().put("changeoOpType", changeoOpType);
return;
}
ListSelectedRow selectedRow = (ListSelectedRow) var8.next();
Object primaryKeyValues = selectedRow.getPrimaryKeyValue();
QFilter qFilter = new QFilter("id", "=", primaryKeyValues);
dynamicObject = QueryServiceHelper.queryOne(entityName, "frameworkcontract,billno,paybyrata,stdbilltype,detailtype,sbilltype", new QFilter[]{qFilter});
if ("1".equals(dynamicObject.get("sbilltype"))) {
this.getView().showTipNotification(String.format(String.format(ResManager.loadKDString("单据编号:%1$s 为集成单据,不能进行此操作,请重新选择。", "ContractBillList_28", "fi-er-formplugin", new Object[0]), dynamicObject.getString("billno"))));
evt.setCancel(true);
return;
}
} while ("bar_changed_frame".equals(changeoOpType));
if (dynamicObject.getBoolean("frameworkcontract")) {
this.getView().showTipNotification(String.format(ResManager.loadKDString("框架合同不支持%1$s。", "ContractBillList_95", "fi-er-formplugin", new Object[0]), itemTitle));
evt.setCancel(true);
return;
}
} while (!"biztype_applybill".equals(dynamicObject.getString("detailtype")));
} while (!dynamicObject.getBoolean("paybyrata"));
} while (!"bar_changea".equals(changeoOpType) && !"bar_changec".equals(changeoOpType));
this.getView().showTipNotification(String.format(ResManager.loadKDString("按比例支付合同暂时不支持%1$s。", "ContractBillList_97", "fi-er-formplugin", new Object[0]), itemTitle));
evt.setCancel(true);
}
}
public void afterDoOperation(AfterDoOperationEventArgs e) {
super.afterDoOperation(e);
String key = e.getOperateKey();
IOperationResult result = e.getOperationResult();
IDataModel dataModel = this.getModel();
ListView listView = (ListView) this.getView();
ListSelectedRowCollection selectedRowCollection = listView.getSelectedRows();
List<Object> pks = (List) selectedRowCollection.stream().map(ListSelectedRow::getPrimaryKeyValue).collect(Collectors.toList());
switch (key) {
case "audit":
default:
break;
case "unfrozen":
if (result.isSuccess()) {
this.getView().showSuccessNotification(ResManager.loadKDString("解冻成功。", "ContractBillList_7", "fi-er-formplugin", new Object[0]));
}
break;
case "frozen":
if (result.isSuccess()) {
this.getView().showSuccessNotification(ResManager.loadKDString("冻结成功。", "ContractBillList_8", "fi-er-formplugin", new Object[0]));
}
}
}
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
super.beforeDoOperation(args);
String operateKey = ((FormOperate) args.getSource()).getOperateKey();
List<Long> lists = (List) args.getListSelectedData().stream().map((v) -> {
return (Long) v.getPrimaryKeyValue();
}).collect(Collectors.toList());
String opName = ((FormOperate) args.getSource()).getOperateName().toString();
String OnWayStatus = "A,B,C,D";
if (ContractUtil.isFrozen((List) args.getListSelectedData().stream().map(ListSelectedRow::getBillStatus).collect(Collectors.toList())) && ContractUtil.isFrozenOp(operateKey)) {
args.setCancel(true);
this.getView().showTipNotification(String.format(ResManager.loadKDString("冻结状态的单据不允许%1$s。", "ContractBillList_4", "fi-er-formplugin", new Object[0]), opName));
} else {
if (Arrays.stream(opkey).anyMatch((v) -> {
return operateKey.equals(v);
})) {
DynamicObjectCollection selectedBills = QueryServiceHelper.query("er_contractbill", "id,billno,detailtype,billstatus,sbilltype", new QFilter[]{new QFilter("id", "in", lists)});
Set<String> collect = (Set) selectedBills.stream().filter((o) -> {
return o.get("sbilltype").equals("1");
}).map((o) -> {
return o.getString("billno");
}).collect(Collectors.toSet());
if (collect.size() > 0) {
this.getView().showTipNotification(String.format(String.format(ResManager.loadKDString("单据编号:%1$s 为集成单据,不能进行此操作,请重新选择。", "ContractBillList_28", "fi-er-formplugin", new Object[0]), collect.toString())));
args.setCancel(true);
return;
}
}
ListSelectedRowCollection rows = args.getListSelectedData();
String OnWayCondition;
Iterator var25;
ListSelectedRow row;
switch (operateKey) {
case "changedprojectower":
QFilter qFilter = new QFilter("id", "in", lists);
OnWayCondition = "H,I,J";
DynamicObjectCollection selectedBills = QueryServiceHelper.query("er_contractbill", "id,detailtype,billstatus", new QFilter[]{qFilter});
Set billstatusSet = (Set) selectedBills.stream().filter((v) -> {
return OnWayCondition.contains(v.getString("billstatus"));
}).collect(Collectors.toSet());
if (billstatusSet.size() > 0) {
this.getView().showTipNotification(ResManager.loadKDString("选择单据的单据状态不支持变更干系人,请重新选择单据。", "ContractBillList_2", "fi-er-formplugin", new Object[0]));
args.setCancel(true);
return;
}
Set detailtypeSet = (Set) selectedBills.stream().filter((v) -> {
return "biztype_stopbill".equals(v.get("detailtype")) || "biztype_changebill".equals(v.get("detailtype"));
}).collect(Collectors.toSet());
if (detailtypeSet.size() > 0) {
this.getView().showTipNotification(ResManager.loadKDString("合同变更单/合同终止单不支持变更干系人,请重新选择单据。", "ContractBillList_3", "fi-er-formplugin", new Object[0]));
args.setCancel(true);
return;
}
break;
case "frozen":
var25 = rows.iterator();
while (var25.hasNext()) {
row = (ListSelectedRow) var25.next();
if (!ContractUtil.froze((Long) row.getPrimaryKeyValue(), this.getView())) {
args.setCancel(true);
}
}
return;
case "unfrozen":
var25 = rows.iterator();
while (var25.hasNext()) {
row = (ListSelectedRow) var25.next();
if (!ContractUtil.unFroze((Long) row.getPrimaryKeyValue(), this.getView())) {
args.setCancel(true);
}
}
return;
case "publicreimburse":
if (!ContractUtil.checkRelationContract(this.getView(), rows, ResManager.loadKDString("对公报销单", "ApplyPayMobEdit_1", "fi-er-formplugin", new Object[0]))) {
args.setCancel(true);
return;
}
OnWayStatus = OnWayStatus + ",F";
List listpub = ContractUtil.checkDownBills(rows, operateKey);
if (listpub.size() > 0) {
this.getView().showTipNotification(String.format(String.format(ResManager.loadKDString("已存在未完成的下游单据,请完成流程后再发起%1$s。", "ContractBillList_9", "fi-er-formplugin", new Object[0]), opName)));
args.setCancel(true);
}
if (!ContractUtil.checkMultiPublicReim(rows, this.getView())) {
args.setCancel(true);
}
break;
case "pushtoprepay":
if (!ContractUtil.checkRelationContract(this.getView(), rows, ResManager.loadKDString("预付单", "ErHomeAddNewDialogPlugin_5", "fi-er-formplugin", new Object[0]))) {
args.setCancel(true);
} else {
OnWayStatus = OnWayStatus + ",F";
List listpre = ContractUtil.checkDownBills(rows, operateKey);
if (listpre.size() > 0) {
this.getView().showTipNotification(String.format(String.format(ResManager.loadKDString("已存在未完成的下游单据,请完成流程后再发起%1$s。", "ContractBillList_9", "fi-er-formplugin", new Object[0]), opName)));
args.setCancel(true);
}
}
break;
case "pushtocontractstop":
List list = ContractUtil.checkDownBills(rows, operateKey);
if (list.size() > 0) {
this.getView().showTipNotification(String.format(String.format(ResManager.loadKDString("已存在未完成的下游单据,请完成流程后再发起%1$s。", "ContractBillList_9", "fi-er-formplugin", new Object[0]), opName)));
args.setCancel(true);
}
OnWayCondition = "A,B,C,D";
String selectedProperties = String.join(",", "id", "billstatus");
DynamicObjectCollection prepayBills = QueryServiceHelper.query("er_contractbill", selectedProperties, new QFilter[]{new QFilter("srcsourceid", "in", lists)});
long count = prepayBills.stream().filter((prepayBillOnWay) -> {
return OnWayCondition.contains(prepayBillOnWay.getString("billstatus"));
}).count();
if (count > 0L) {
this.getView().showTipNotification(String.format(String.format(ResManager.loadKDString("已存在未完成的下游单据,请完成流程后再发起%1$s。", "ContractBillList_9", "fi-er-formplugin", new Object[0]), opName)));
args.setCancel(true);
return;
}
break;
case "pushcontractchange":
List onwaylist = ContractUtil.checkDownBills(rows, operateKey);
if (onwaylist.size() > 0) {
this.getView().showTipNotification(String.format(String.format(ResManager.loadKDString("已存在未完成的下游单据,请完成流程后再发起%1$s。", "ContractBillList_9", "fi-er-formplugin", new Object[0]), opName)));
args.setCancel(true);
}
break;
case "pushcostestimatebill":
boolean b = this.checkCostestimatebill(args, this.getView(), rows);
if (!b) {
return;
}
List listContract = ContractUtil.checkDownBills(rows, operateKey);
if (listContract.size() > 0) {
this.getView().showTipNotification(String.format(String.format(ResManager.loadKDString("已存在未完成的下游单据,请完成流程后再发起%1$s。", "ContractBillList_9", "fi-er-formplugin", new Object[0]), opName)));
args.setCancel(true);
}
break;
case "docontractsign":
this.docontractsign(args, this.getView(), rows, operateKey);
break;
case "updateconsign":
this.docontractsign(args, this.getView(), rows, operateKey);
}
}
}
public void itemClick(ItemClickEvent evt) {
super.itemClick(evt);
switch (evt.getItemKey()) {
case "importdts":
try {
IscHelper.checkExistBefore(this.getView(), true);
} catch (Exception var6) {
logger.error("ContractBillList>>>>>itemClick>:失败,原因如下:", var6);
}
default:
}
}
public void confirmCallBack(MessageBoxClosedEvent evt) {
super.confirmCallBack(evt);
try {
IscHelper.importConfirmCallBack(evt, this.getView());
} catch (IOException var3) {
logger.error("ErAbstractReportList>>>confirmCallBack:失败,失败原因如下:", var3);
}
}
private boolean checkCostestimatebill(BeforeDoOperationEventArgs args, IFormView view, ListSelectedRowCollection selectedRows) {
if (selectedRows.size() <= 0) {
view.showTipNotification(ResManager.loadKDString("请选择一条数据进行操作。", "ContractBillList_10", "fi-er-formplugin", new Object[0]));
args.setCancel(true);
return false;
} else {
Object[] primaryKeyValue = selectedRows.getPrimaryKeyValues();
QFilter filter = new QFilter("id", "in", primaryKeyValue);
String selectFields = "company,id,frameworkcontract,enddate,billno";
DynamicObjectCollection contractDy = QueryServiceHelper.query("er_contractbill", selectFields, new QFilter[]{filter});
long frameworkcontract = contractDy.stream().filter((it) -> {
return !it.getBoolean("frameworkcontract");
}).count();
if (frameworkcontract > 0L) {
args.setCancel(true);
view.showTipNotification(ResManager.loadKDString("仅框架合同可下推费用暂估单。", "ContractBillList_15", "fi-er-formplugin", new Object[0]));
return false;
} else {
Boolean contractdeadlinecontrol = ErStdConfig.getContractDeadlineControl();
logger.info(">>>>>>>>>>>>>>>>>contractdeadlinecontrol:" + contractdeadlinecontrol);
if (!contractdeadlinecontrol) {
Date now = TripCommonUtil.strToDate(TripCommonUtil.DateToStr(new Date()), "yyyy-MM-dd");
StringBuilder errorbillno = new StringBuilder();
contractDy.stream().forEach((row) -> {
Date enddate = TripCommonUtil.strToDate(TripCommonUtil.DateToStr((Date) row.get("enddate")), "yyyy-MM-dd");
if (now.after(enddate)) {
errorbillno.append(" ").append(row.get("billno"));
}
});
logger.info(">>>>>>>>>>>>>>>>>contractdeadlinecontrol>>>>errorbillno:" + errorbillno);
if (errorbillno.length() > 0) {
view.showTipNotification(String.format(ResManager.loadKDString("单据编号:%1$s,已超过合同截止日期,不能下推。", "ContractBillList_24", "fi-er-formplugin", new Object[0]), errorbillno));
args.setCancel(true);
return false;
}
}
String OnWayConditionStatus = "A,B,C,D";
String selectedProperties = String.join(",", "id", "billstatus");
DynamicObjectCollection prepayBills = QueryServiceHelper.query("er_contractbill", selectedProperties, new QFilter[]{new QFilter("srcsourceid", "in", primaryKeyValue)});
long count = prepayBills.stream().filter((prepayBillOnWay) -> {
return OnWayConditionStatus.contains(prepayBillOnWay.getString("billstatus"));
}).count();
if (count > 0L) {
this.getView().showTipNotification(ResManager.loadKDString("已存在未完成的下游单据,不允许再推暂估单。", "ContractBillList_6", "fi-er-formplugin", new Object[0]));
args.setCancel(true);
return false;
} else {
EntityInfo reimburseInfo = (new EntityInfo.Builder()).entityName("er_publicreimbursebill").entryName("contractentry").sourceName("contractsid").build();
List<String> OnWayCondition = new ArrayList();
OnWayCondition.add("H");
if (ContractUtil.getCostestimateHasOnWayBills(primaryKeyValue, reimburseInfo, OnWayCondition) > 0) {
args.setCancel(true);
view.showTipNotification(ResManager.loadKDString("下游已存在对公报销单,不允许再推暂估单。", "ContractBillList_17", "fi-er-formplugin", new Object[0]));
return false;
} else {
EntityInfo prepayInfo = (new EntityInfo.Builder()).entityName("er_prepaybill").entryName("expenseentryentity").sourceName("wbsrcbillid").build();
if (ContractUtil.getCostestimateHasOnWayBills(primaryKeyValue, prepayInfo, OnWayCondition) > 0) {
args.setCancel(true);
view.showTipNotification(ResManager.loadKDString("下游已存在预付单,不允许再推暂估单。", "ContractBillList_18", "fi-er-formplugin", new Object[0]));
return false;
} else {
return true;
}
}
}
}
}
}
private void docontractsign(BeforeDoOperationEventArgs args, IFormView view, ListSelectedRowCollection selectedRows, String operateKey) {
Set<Long> collect = (Set) selectedRows.stream().map((b) -> {
return (Long) b.getPrimaryKeyValue();
}).collect(Collectors.toSet());
if (collect.size() <= 1 && collect.size() > 0) {
Object[] primaryKeyValue = selectedRows.getPrimaryKeyValues();
QFilter filter = new QFilter("id", "=", primaryKeyValue[0]);
String selectFields = "id,billno,billstatus,detailtype";
DynamicObject contractDy = QueryServiceHelper.queryOne("er_contractbill", selectFields, new QFilter[]{filter});
String formname = ResManager.loadKDString("确认签约信息", "ContractBillList_12", "fi-er-formplugin", new Object[0]);
if ("updateconsign".equals(operateKey)) {
if (!"F".equals(contractDy.get("billstatus")) || !"biztype_applybill".equals(contractDy.getString("detailtype"))) {
view.showTipNotification(ResManager.loadKDString("单据类型为“合同台账”,合同状态为“执行中”时才能执行此操作。", "ContractBillList_14", "fi-er-formplugin", new Object[0]));
args.setCancel(true);
return;
}
formname = ResManager.loadKDString("更新签约信息", "ContractBillList_13", "fi-er-formplugin", new Object[0]);
} else if ("docontractsign".equals(operateKey) && (!"E".equals(contractDy.get("billstatus")) || !"biztype_applybill".equals(contractDy.getString("detailtype")))) {
view.showTipNotification(ResManager.loadKDString("单据类型为“合同台账”,合同状态为“审核通过”时才能执行此操作。", "ContractBillList_11", "fi-er-formplugin", new Object[0]));
args.setCancel(true);
return;
}
FormShowParameter showParameter = new FormShowParameter();
Map<String, Object> customParam = new HashMap();
customParam.put("contractId", primaryKeyValue[0]);
showParameter.setFormId("er_contractsign");
showParameter.setCustomParams(customParam);
showParameter.setCaption(formname);
showParameter.setCloseCallBack(new CloseCallBack(this, "er_contractsign"));
showParameter.getOpenStyle().setShowType(ShowType.Modal);
this.getView().showForm(showParameter);
} else {
view.showTipNotification(ResManager.loadKDString("请选择一条数据进行操作。", "ContractBillList_10", "fi-er-formplugin", new Object[0]));
args.setCancel(true);
}
}
public void closedCallBack(ClosedCallBackEvent evt) {
super.closedCallBack(evt);
String actionId = evt.getActionId();
if (StringUtils.equalsIgnoreCase("er_contractsign", actionId)) {
Map<String, Object> returnData = (Map) evt.getReturnData();
if (returnData != null && returnData.containsKey("ok") && returnData.containsKey("attachmentData")) {
ContractUtil.synAttachment(this.getView(), returnData);
}
}
}
}