项目年度成本优化部门所属组织和项目公司默认值过滤逻辑

This commit is contained in:
xuhaihui 2026-01-12 09:21:22 +08:00
parent 39cbc7e896
commit 6eca284ab2
1 changed files with 211 additions and 5 deletions

View File

@ -1,21 +1,33 @@
package zcgj.zcdev.zcdev.pr.plugin.form;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.bill.BillShowParameter;
import kd.bos.bill.OperationStatus;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.ILocaleString;
import kd.bos.dataentity.resource.ResManager;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.control.Label;
import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.events.BeforeF7SelectEvent;
import kd.bos.form.field.events.BeforeF7SelectListener;
import kd.bos.list.ListShowParameter;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.bos.servicehelper.org.OrgUnitServiceHelper;
import kd.bos.servicehelper.org.OrgViewType;
import kd.bos.servicehelper.user.UserServiceHelper;
import kd.fi.er.business.bean.CostDeptF7ChangePram;
import kd.fi.er.business.servicehelper.CoreBaseBillServiceHelper;
import kd.fi.er.business.utils.ErCommonUtils;
import kd.sdk.plugin.Plugin;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;
import java.util.*;
/**
* 项目年度成本表单插件
@ -26,11 +38,36 @@ public class AnnualProjectCostFromPlugin extends AbstractBillPlugIn implements B
super.registerListener(e);
BasedataEdit zcgj_sectypef7 = (BasedataEdit) this.getControl("zcgj_sectypef7");//二级分类
zcgj_sectypef7.addBeforeF7SelectListener(this);
BasedataEdit zcgj_department = this.getView().getControl("zcgj_department");//部门
zcgj_department.addBeforeF7SelectListener(this);
BasedataEdit zcgj_org = this.getView().getControl("zcgj_org");//所属组织
zcgj_org.addBeforeF7SelectListener(this);
BasedataEdit zcgj_projectorg = this.getView().getControl("zcgj_projectorg");//项目公司
zcgj_projectorg.addBeforeF7SelectListener(this);
}
@Override
public void afterCreateNewData(EventObject e) {
super.afterCreateNewData(e);
DynamicObject costDept = (DynamicObject) this.getModel().getValue("zcgj_department");//部门
if (costDept != null) {
setOrg(costDept);
}
}
@Override
public void afterBindData(EventObject e) {
super.afterBindData(e);
BillShowParameter bsp = (BillShowParameter) this.getView().getFormShowParameter();
if (bsp.getStatus() == OperationStatus.ADDNEW) {
//如果是新增时
DynamicObject creator = this.getModel().getDataEntity().getDynamicObject("creator");//创建人
if (creator != null) {
long mainOrgId = UserServiceHelper.getUserMainOrgId(creator.getLong("id"));
this.getModel().setValue("zcgj_department", mainOrgId);//部门
this.getView().updateView("zcgj_department");
}
}
}
@Override
@ -46,11 +83,17 @@ public class AnnualProjectCostFromPlugin extends AbstractBillPlugIn implements B
if (newValue == null || !newValue.equals(oldValue)) {
this.getModel().setValue("zcgj_sectypef7", null, rowIndex);//二级分类
}
} else if (e.getProperty().getName().equals("zcgj_department")) {
//部门
DynamicObject costDept = (DynamicObject) this.getModel().getValue("zcgj_department");//部门
if (costDept != null) {
setOrg(costDept);
}
}
}
public void beforeF7Select(BeforeF7SelectEvent arg0) {
ListShowParameter parameter = (ListShowParameter) arg0.getFormShowParameter();
ListShowParameter formShowParameter = (ListShowParameter) arg0.getFormShowParameter();
int row = arg0.getRow();
String name = arg0.getProperty().getName();
if (StringUtils.equals(name, "zcgj_sectypef7")) {
@ -65,7 +108,170 @@ public class AnnualProjectCostFromPlugin extends AbstractBillPlugIn implements B
arg0.setCancel(true);
return;
}
parameter.getListFilterParameter().setQFilters(qFilter);
formShowParameter.getListFilterParameter().setQFilters(qFilter);
} else if (StringUtils.equals(name, "zcgj_org")) {
// 所属组织
DynamicObject costDept = (DynamicObject) this.getModel().getValue("zcgj_department");//部门
DynamicObject zcgj_org = (DynamicObject) this.getModel().getValue("zcgj_org");//所属组织
if (costDept != null && zcgj_org != null) {
DynamicObject orgPattern = costDept.getDynamicObject("orgpattern");
if (orgPattern == null) {
return;
}
String orgPatternNumber = orgPattern.getString("number");
if (orgPatternNumber.equals("Orgform06")) {
Long id = (Long) zcgj_org.get("id");
List<QFilter> qFilter = new ArrayList<>();
qFilter.add(new QFilter("id", QCP.in, id));
formShowParameter.getListFilterParameter().setQFilters(qFilter);
formShowParameter.setCustomParam("isIncludeAllSub", "true");
}
}
} else if (StringUtils.equals(name, "zcgj_projectorg")) {
//项目公司过滤
DynamicObject costDept = (DynamicObject) this.getModel().getValue("zcgj_department");//部门
DynamicObject zcgj_projectorg = (DynamicObject) this.getModel().getValue("zcgj_projectorg");//项目公司
if (costDept != null && zcgj_projectorg != null) {
DynamicObject orgPattern = costDept.getDynamicObject("orgpattern");
if (orgPattern == null) {
return;
}
String orgPatternNumber = orgPattern.getString("number");
if (orgPatternNumber.equals("Orgform06")) {
Long id = (Long) zcgj_projectorg.get("id");
List<QFilter> qFilter = new ArrayList<>();
qFilter.add(new QFilter("id", QCP.in, id));
formShowParameter.getListFilterParameter().setQFilters(qFilter);
formShowParameter.setCustomParam("isIncludeAllSub", "true");
}
}
} else if (StringUtils.equals(name, "zcgj_department")) {
// 部门
DynamicObject creator = this.getModel().getDataEntity().getDynamicObject("creator");//创建人
if (creator == null) {
return;
}
List<Long> id = UserServiceHelper.getOrgsUserJoin(creator.getLong("id"));
List<QFilter> qFilter = new ArrayList<>();
qFilter.add(new QFilter("id", QCP.in, id));
formShowParameter.getListFilterParameter().setQFilters(qFilter);
formShowParameter.setCustomParam("isIncludeAllSub", "true");
}
}
public static List<Long> findCostCompanysByCostDept(Long deptID) {
ArrayList<Long> deptIDs = new ArrayList();
deptIDs.add(deptID);
List<Long> selectIds = OrgUnitServiceHelper.getAdminOrgRelation(deptIDs, false);
QFilter treeTypeFilter = new QFilter("view.treetype", "=", "10");
QFilter isDefaultViewFilter = new QFilter("view.isdefault", "=", Boolean.TRUE);
QFilter isbizunitFilter = new QFilter("isbizunit", "=", Boolean.TRUE);
QFilter orgFilter = null;
QFilter[] filters = null;
DynamicObject orgInfo = null;
Long costCompany = null;
List parents;
for (String orgFunction = "01"; costCompany == null; deptID = (Long) parents.get(0)) {
orgFilter = new QFilter("org", "=", deptID);
filters = new QFilter[]{treeTypeFilter, isDefaultViewFilter, orgFilter, isbizunitFilter};
orgInfo = QueryServiceHelper.queryOne("bos_org_structure", "org", filters);
if (orgInfo != null) {
costCompany = ErCommonUtils.getPk(orgInfo.get("org"));
selectIds.add(costCompany);
break;
}
parents = OrgUnitServiceHelper.getSuperiorOrgs(orgFunction, deptID);
if (parents == null || parents.isEmpty()) {
break;
}
}
return selectIds;
}
private void setOrg(DynamicObject costDept) {
DynamicObject orgPattern = costDept.getDynamicObject("orgpattern");
if (orgPattern == null) {
return;
}
String orgPatternNumber = orgPattern.getString("number");
if (!orgPatternNumber.equals("Orgform06")) {
//填写的部门的形态不是部门时直接将部门值赋值给所属组织
this.getModel().setValue("zcgj_org", costDept);//所属组织
this.getModel().setValue("zcgj_projectorg", costDept);//项目公司
return;
}
int a = 0;
DynamicObject cost;
DynamicObject viewParent = null;
while (true) {
if (a == 0) {
//第一次进入循环
cost = costDept;
} else {
QFilter[] qFilters = new QFilter[]{
new QFilter("number", QCP.equals, viewParent.getString("number"))
};
cost = BusinessDataServiceHelper.loadSingle("bos_adminorg", qFilters);
}
long currentOrgId = Long.parseLong(cost.getString("id"));//当前部门ID
Map<Long, Long> orgParentMap = OrgUnitServiceHelper.getDirectSuperiorOrg(OrgViewType.Admin, Collections.singletonList(currentOrgId));//获取当前部门的上级组织
Long parentId = orgParentMap.get(currentOrgId);//上级组织ID
viewParent = BusinessDataServiceHelper.loadSingle("bos_adminorg",
new QFilter[]{new QFilter("id", QCP.equals, parentId)});//行政组织-上级组织
// DynamicObjectCollection structureCollection = cost.getDynamicObjectCollection("structure");//组织结构分录
// DynamicObject structure = structureCollection.get(0);
// viewParent = structure.getDynamicObject("viewparent");//上级组织
String viewParentNumber = viewParent.getString("number");
QFilter[] qFilters = new QFilter[]{
new QFilter("number", QCP.equals, viewParentNumber)
};
DynamicObject bos_adminOrg = BusinessDataServiceHelper.loadSingle("bos_adminorg", qFilters);//行政组织
DynamicObject orgPattern1 = bos_adminOrg.getDynamicObject("orgpattern");//形态
String orgPatternNumber1 = orgPattern1.getString("number");
if (!orgPatternNumber1.equals("Orgform06")) {
//上级不为不为部门的时候将现在查询的部门赋值给一级承担部门
break;
} else {
a++;
}
}
DynamicObject bos_adminorg = BusinessDataServiceHelper.loadSingle("bos_adminorg", new QFilter[]{
new QFilter("number", QCP.equals, viewParent.getString("number"))});
this.getModel().setValue("zcgj_org", bos_adminorg);//所属组织
this.getModel().setValue("zcgj_projectorg", bos_adminorg);//项目公司
}
protected void costDeptChange(String propName, DynamicObject costDept) {
if (costDept != null) {
IDataModel model = this.getModel();
this.refreshBaseInfoLabel(propName, costDept);
DynamicObject company = (DynamicObject) model.getValue("zcgj_org");
DynamicObject costCompany = (DynamicObject) model.getValue("zcgj_projectorg");
CostDeptF7ChangePram costDeptF7ChangePram = new CostDeptF7ChangePram(Boolean.TRUE, costDept, costCompany, company);
Long costCompanyId = CoreBaseBillServiceHelper.getAccountOrgId(costDeptF7ChangePram);//获取费用承担公司
model.setValue("zcgj_projectorg", costCompanyId);
this.getView().updateView("zcgj_projectorg");
}
}
protected void refreshBaseInfoLabel(String propName, Object propValue) {
String propStr = null;
if (propValue instanceof DynamicObject) {
ILocaleString name = ((DynamicObject) propValue).getLocaleString("name");
propStr = name.getLocaleValue();
} else if (propValue instanceof String) {
propStr = (String) propValue;
}
Label propControl = (Label) this.getControl(propName + "V");
if (propControl != null) {
propControl.setText(propStr);
}
}
}