工程量清单成本预算列表插件:调整操作逻辑修改

This commit is contained in:
xuhaihui 2025-06-05 15:45:31 +08:00
parent 72297999fa
commit 734761f095
1 changed files with 186 additions and 0 deletions

View File

@ -0,0 +1,186 @@
package zcgj.zcdev.zcdev.pr.plugin.form;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import kd.bos.bill.BillOperationStatus;
import kd.bos.bill.BillShowParameter;
import kd.bos.bill.OperationStatus;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.resource.ResManager;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.EntityMetadataCache;
import kd.bos.entity.datamodel.ListSelectedRow;
import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.form.CloseCallBack;
import kd.bos.form.FormShowParameter;
import kd.bos.form.ShowType;
import kd.bos.form.events.BeforeDoOperationEventArgs;
import kd.bos.form.events.ClosedCallBackEvent;
import kd.bos.form.events.HyperLinkClickArgs;
import kd.bos.form.operate.FormOperate;
import kd.bos.list.BillList;
import kd.bos.list.events.BeforeShowBillFormEvent;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.mvc.list.ListView;
import kd.bos.orm.query.QFilter;
import kd.bos.permission.api.HasPermOrgResult;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.ec.basedata.common.permission.ProjectPermissionHelper;
import kd.ec.basedata.common.utils.MetaDataUtil;
//二开系统插件
//工程量清单成本预算列表插件调整操作逻辑修改
public class AimCostBoqListPluginExt extends AbstractListPlugin {
public AimCostBoqListPluginExt() {
}
public void billListHyperLinkClick(HyperLinkClickArgs args) {
String fieldName = args.getHyperLinkClickEvent().getFieldName();
if (StringUtils.equals(fieldName, "project_name")) {
this.projectHyperLinkClick(args);
}
}
protected void projectHyperLinkClick(HyperLinkClickArgs args) {
args.setCancel(true);
ListView viewList = (ListView)this.getView();
Object billId = viewList.getFocusRowPkId();
DynamicObject bill = BusinessDataServiceHelper.loadSingle(billId, "ecco_aimcostboqsummodel", "project");
DynamicObject project = bill.getDynamicObject("project");
if (project != null) {
String proId = project.getString("id");
Map<String, Object> map = new HashMap();
map.put("formId", "ec_project");
map.put("pkId", proId);
FormShowParameter parameter = FormShowParameter.createFormShowParameter(map);
parameter.setStatus(OperationStatus.VIEW);
parameter.getOpenStyle().setShowType(ShowType.MainNewTabPage);
this.getView().showForm(parameter);
}
}
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
super.beforeDoOperation(args);
FormOperate operate = (FormOperate)args.getSource();
ListSelectedRowCollection listSelectedData = args.getListSelectedData();
DynamicObject unitProject;
if (StringUtils.equals("adjust", operate.getOperateKey())) {
if (listSelectedData.size() > 1) {
this.getView().showTipNotification(ResManager.loadKDString("调整操作不支持多选,请选中单条数据。", "AimCostBoqListPlugin_0", "ec-ecco-formplugin", new Object[0]));
args.setCancel(true);
} else {
DynamicObject[] bills = BusinessDataServiceHelper.load(listSelectedData.getPrimaryKeyValues(), EntityMetadataCache.getDataEntityType("ecco_aimcostboqsplitmodel"));
String billStatus = bills[0].getString("billstatus");
if (!StringUtils.equals(billStatus, "C")) {
this.getView().showTipNotification(ResManager.loadKDString("只有已审核的数据才能调整,请重新选择。", "AimCostBoqListPlugin_1", "ec-ecco-formplugin", new Object[0]));
args.setCancel(true);
}
DynamicObject project = bills[0].getDynamicObject("project");
unitProject = bills[0].getDynamicObject("unitproject");
BigDecimal vision = bills[0].getBigDecimal("vision");
QFilter filter = new QFilter("project", "=", project.getPkValue());
if (unitProject != null) {
filter.and(new QFilter("unitproject", "=", unitProject.getPkValue()));
}
filter.and(new QFilter("vision", ">", vision));
filter.and(new QFilter("zcgj_periodyear", "=",bills[0].get("zcgj_periodyear")));//年月二开添加
boolean isExist = QueryServiceHelper.exists("ecco_aimcostboqsplitmodel", new QFilter[]{filter});
if (isExist) {
this.getView().showTipNotification(ResManager.loadKDString("请在最新的版本上进行调整与编辑。", "AimCostBoqListPlugin_2", "ec-ecco-formplugin", new Object[0]));
args.setCancel(true);
}
}
} else if (StringUtils.equals("summarynew", operate.getOperateKey())) {
BillShowParameter parameter = new BillShowParameter();
parameter.setFormId("ecco_aimcostboqsummodel");
parameter.getOpenStyle().setShowType(ShowType.MainNewTabPage);
parameter.setBillStatus(BillOperationStatus.ADDNEW);
parameter.setCloseCallBack(new CloseCallBack(this, "summarynew"));
this.getView().showForm(parameter);
} else if (StringUtils.equals("viewproaimboqsum", operate.getOperateKey())) {
ListSelectedRowCollection selectedRows = ((ListView)this.getView()).getSelectedRows();
if (selectedRows == null || listSelectedData.size() == 0 || listSelectedData.size() > 1) {
this.getView().showTipNotification(ResManager.loadKDString("请选择单条预算后查看。", "AimCostBoqListPlugin_3", "ec-ecco-formplugin", new Object[0]), 3000);
return;
}
ListSelectedRow listSelectedRow = listSelectedData.get(0);
Object pk = listSelectedRow.getPrimaryKeyValue();
unitProject = BusinessDataServiceHelper.loadSingle(pk, "ecco_aimcostboqsplitmodel");
DynamicObject project = unitProject.getDynamicObject("project");
boolean isProOrgOrFiorgMember = false;
if (project != null) {
Long org = project.get("org") == null ? -1L : (Long)((DynamicObject)project.get("org")).getPkValue();
Long fiOrg = project.get("fiaccountorg") == null ? -1L : (Long)((DynamicObject)project.get("fiaccountorg")).getPkValue();
String appId = MetaDataUtil.getAppIdByEntityNum("ecco_aimcostboqsplitmodel");
HasPermOrgResult permOrgResult = ProjectPermissionHelper.getAllPermOrg(RequestContext.get().getCurrUserId(), appId, "ecco_aimcostboqsplitmodel");
List<Long> hasPermOrgs = permOrgResult.getHasPermOrgs();
if (permOrgResult.hasAllOrgPerm() || hasPermOrgs != null && !hasPermOrgs.isEmpty() && (hasPermOrgs.contains(org) || hasPermOrgs.contains(fiOrg))) {
isProOrgOrFiorgMember = true;
}
}
if (!isProOrgOrFiorgMember) {
this.getView().showTipNotification(ResManager.loadKDString("当前用户没有BOQ预算所属项目的项目组织或财务记账组织权限。", "AimCostBoqListPlugin_4", "ec-ecco-formplugin", new Object[0]), 3000);
return;
}
FormShowParameter parameter = new FormShowParameter();
parameter.setFormId("ecco_proaimcostboqsum");
parameter.setCustomParam("projectId", project.getPkValue());
parameter.getOpenStyle().setShowType(ShowType.Modal);
this.getView().showForm(parameter);
}
}
public void closedCallBack(ClosedCallBackEvent closedcallbackevent) {
super.closedCallBack(closedcallbackevent);
String actionId = closedcallbackevent.getActionId();
if (StringUtils.equals(actionId, "summarynew")) {
this.getView().invokeOperation("refresh");
}
}
public void beforeShowBill(BeforeShowBillFormEvent beforeshowbillformevent) {
super.beforeShowBill(beforeshowbillformevent);
BillShowParameter parameter = beforeshowbillformevent.getParameter();
BillOperationStatus billStatus = parameter.getBillStatus();
Boolean isCopy = (Boolean)parameter.getCustomParam("iscopy");
if (billStatus != null && isCopy != null && isCopy && billStatus.compareTo(BillOperationStatus.ADDNEW) == 0) {
if (!this.isSpiltModel()) {
parameter.setFormId("ecco_aimcostboqsummodel");
parameter.setCaption(String.valueOf(EntityMetadataCache.getDataEntityType("ecco_aimcostboqsummodel").getDisplayName()));
}
parameter.setCustomParam("isadjust", 1);
} else if (parameter.getPkId() != null && Long.parseLong(parameter.getPkId().toString()) != 0L) {
Object pkId = parameter.getPkId();
DynamicObject bill = BusinessDataServiceHelper.loadSingle(pkId, EntityMetadataCache.getDataEntityType("ecco_aimcostboqsplitmodel"));
String editModel = bill.getString("editmodel");
if (StringUtils.equals("02", editModel)) {
parameter.setFormId("ecco_aimcostboqsummodel");
}
}
}
protected boolean isSpiltModel() {
BillList billList = (BillList)this.getView().getControl("billlistap");
Object[] primaryKeyValues = billList.getSelectedRows().getPrimaryKeyValues();
DynamicObject[] bills = BusinessDataServiceHelper.load(primaryKeyValues, EntityMetadataCache.getDataEntityType("ecco_aimcostboqsplitmodel"));
String editModel = bills[0].getString("editmodel");
return StringUtils.equals("01", editModel);
}
}