设备调令单表单插件逻辑优化:设备管理组织赋值逻辑和设备编码选择逻辑添加

This commit is contained in:
xuhaihui 2025-09-04 14:57:01 +08:00
parent 475fc5965c
commit 29aecef694
1 changed files with 99 additions and 2 deletions

View File

@ -3,6 +3,7 @@ package zcgj.zcdev.zcdev.pr.plugin.form;
import kd.bos.bill.AbstractBillPlugIn; import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.datamodel.ListSelectedRow;
import kd.bos.entity.datamodel.ListSelectedRowCollection; import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs; import kd.bos.entity.datamodel.events.PropertyChangedArgs;
@ -10,6 +11,8 @@ import kd.bos.form.CloseCallBack;
import kd.bos.form.ShowFormHelper; import kd.bos.form.ShowFormHelper;
import kd.bos.form.events.ClosedCallBackEvent; import kd.bos.form.events.ClosedCallBackEvent;
import kd.bos.form.field.BasedataEdit; import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.events.AfterF7SelectEvent;
import kd.bos.form.field.events.AfterF7SelectListener;
import kd.bos.form.field.events.BeforeF7SelectEvent; import kd.bos.form.field.events.BeforeF7SelectEvent;
import kd.bos.form.field.events.BeforeF7SelectListener; import kd.bos.form.field.events.BeforeF7SelectListener;
import kd.bos.isc.util.misc.StringUtil; import kd.bos.isc.util.misc.StringUtil;
@ -27,14 +30,15 @@ import java.util.List;
/* /*
* 设备调令单表单插件 * 设备调令单表单插件
* 说明1设备编码带出资产编码2:过滤设备编码字段3调出调入项目带出调出调入负责人4自动带出所属组织和部门 * 说明1设备编码带出资产编码2:过滤设备编码字段3调出调入项目带出调出调入负责人4自动带出所属组织和部门
* 5调入调出组织过滤逻辑 * 5调入调出组织过滤逻辑6设备管理组织赋值逻辑和设备编码选择逻辑
*/ */
public class EquipmentCommandBillPlugin extends AbstractBillPlugIn implements BeforeF7SelectListener { public class EquipmentCommandBillPlugin extends AbstractBillPlugIn implements BeforeF7SelectListener, AfterF7SelectListener {
@Override @Override
public void registerListener(EventObject e) { public void registerListener(EventObject e) {
super.registerListener(e); super.registerListener(e);
BasedataEdit realCard = this.getControl("zcgj_realcard"); //设备编码 BasedataEdit realCard = this.getControl("zcgj_realcard"); //设备编码
realCard.addBeforeF7SelectListener(this); realCard.addBeforeF7SelectListener(this);
realCard.addAfterF7SelectListener(this);
BasedataEdit outProject = this.getControl("zcgj_outproject"); //调出项目 BasedataEdit outProject = this.getControl("zcgj_outproject"); //调出项目
outProject.addBeforeF7SelectListener(this); outProject.addBeforeF7SelectListener(this);
BasedataEdit inProject = this.getControl("zcgj_inproject"); //调入项目 BasedataEdit inProject = this.getControl("zcgj_inproject"); //调入项目
@ -49,6 +53,89 @@ public class EquipmentCommandBillPlugin extends AbstractBillPlugIn implements Be
zcgj_inorg.addBeforeF7SelectListener(this); zcgj_inorg.addBeforeF7SelectListener(this);
} }
@Override
public void afterF7Select(AfterF7SelectEvent afterF7SelectEvent) {
ListSelectedRowCollection listSelectedRowCollection = afterF7SelectEvent.getListSelectedRowCollection();
DynamicObjectCollection dispatchEntryCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_dispatchentry");//设备调令单分录
// 收集当前选择的设备的组织ID
List<Long> selectedOrgIds = new ArrayList<>();
for (int i = 0; i < listSelectedRowCollection.size(); i++) {
ListSelectedRow listSelectedRow = listSelectedRowCollection.get(i);
QFilter[] qFilters = new QFilter[]{new QFilter("id", QCP.equals, listSelectedRow.getPrimaryKeyValue())};
DynamicObject eceq_equipment_info = BusinessDataServiceHelper.loadSingle("eceq_equipment_info", "org", qFilters);//设备台账F7
if (eceq_equipment_info != null) {
DynamicObject org = eceq_equipment_info.getDynamicObject("org");//设备台账F7-管理组织
if (org != null) {
Long orgId = (Long) org.getPkValue();
if (!selectedOrgIds.contains(orgId)) {
selectedOrgIds.add(orgId);
}
}
}
}
// 检查现有分录中的设备组织
List<Long> existingOrgIds = new ArrayList<>();
for (int i = 0; i < dispatchEntryCollection.size(); i++) {
DynamicObject dispatchEntry = dispatchEntryCollection.get(i);
DynamicObject realCard = dispatchEntry.getDynamicObject("zcgj_realcard");//分录-设备编码
if (realCard != null) {
QFilter[] qFilters = new QFilter[]{new QFilter("id", QCP.equals, realCard.getPkValue())};
DynamicObject eceq_equipment_info = BusinessDataServiceHelper.loadSingle("eceq_equipment_info", "org", qFilters);//设备台账F7
if (eceq_equipment_info != null) {
DynamicObject org = eceq_equipment_info.getDynamicObject("org");//设备台账F7-管理组织
if (org != null) {
Long orgId = (Long) org.getPkValue();
if (!existingOrgIds.contains(orgId)) {
existingOrgIds.add(orgId);
}
}
}
}
}
// 合并所有组织ID
List<Long> allOrgIds = new ArrayList<>();
allOrgIds.addAll(selectedOrgIds);
for (Long orgId : existingOrgIds) {
if (!allOrgIds.contains(orgId)) {
allOrgIds.add(orgId);
}
}
// 如果存在多个不同组织
if (allOrgIds.size() > 1) {
// 删除当前新增的行即刚选择的设备对应的行
// 从后往前删除避免索引变化问题
for (int i = dispatchEntryCollection.size() - 1; i >= 0; i--) {
DynamicObject dispatchEntry = dispatchEntryCollection.get(i);
DynamicObject realCard = dispatchEntry.getDynamicObject("zcgj_realcard");//分录-设备编码
if (realCard != null) {
// 检查这个设备是否是当前选择的设备
boolean isCurrentSelected = false;
for (ListSelectedRow selectedRow : listSelectedRowCollection) {
if (realCard.getPkValue().equals(selectedRow.getPrimaryKeyValue())) {
isCurrentSelected = true;
break;
}
}
// 如果是当前选择的设备则删除该行
if (isCurrentSelected) {
this.getModel().deleteEntryRow("zcgj_dispatchentry", i);//删除分录
}
}
}
this.getView().updateView("zcgj_dispatchentry"); // 刷新分录
this.getView().showErrorNotification("选择的设备属于不同组织,请重新选择同一组织下的设备!");
BasedataEdit fieldEdit = this.getView().getControl("zcgj_realcard");//设备编码
fieldEdit.click();
}
}
@Override @Override
public void afterCreateNewData(EventObject e) { public void afterCreateNewData(EventObject e) {
super.afterCreateNewData(e); super.afterCreateNewData(e);
@ -80,6 +167,16 @@ public class EquipmentCommandBillPlugin extends AbstractBillPlugIn implements Be
} else { } else {
this.getModel().setValue("zcgj_realcardsw", null, rowIndex);//资产编码 this.getModel().setValue("zcgj_realcardsw", null, rowIndex);//资产编码
} }
DynamicObjectCollection dispatchEntryCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_dispatchentry");//分录
if (dispatchEntryCollection != null && dispatchEntryCollection.size() > 0) {
DynamicObject dispatchEntry = dispatchEntryCollection.get(0);
DynamicObject zcgj_realcard = dispatchEntry.getDynamicObject("zcgj_realcard");//分录-设备编码
if (zcgj_realcard != null) {
this.getModel().setValue("zcgj_devicemanager", zcgj_realcard.getDynamicObject("org"));//设备管理组织
}
} else {
this.getModel().setValue("zcgj_devicemanager", null);//设备管理组织
}
} else if (StringUtil.equals(key, "zcgj_outorg") || StringUtil.equals(key, "zcgj_inorg")) { } else if (StringUtil.equals(key, "zcgj_outorg") || StringUtil.equals(key, "zcgj_inorg")) {
//调出组织调入组织 //调出组织调入组织
ChangeData[] changeSet = e.getChangeSet(); ChangeData[] changeSet = e.getChangeSet();