采购订单表单插件,过滤人员信息里的部门
This commit is contained in:
parent
1448c34b80
commit
332add04f0
|
@ -0,0 +1,147 @@
|
|||
package shkd.fi.fi.formplugin;
|
||||
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
|
||||
import kd.bos.form.field.BasedataEdit;
|
||||
import kd.bos.form.field.events.BeforeF7SelectEvent;
|
||||
import kd.bos.form.field.events.BeforeF7SelectListener;
|
||||
import kd.bos.form.plugin.AbstractFormPlugin;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.servicehelper.org.OrgServiceHelper;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 采购订单表单插件
|
||||
*
|
||||
*/
|
||||
public class PurOrderBillFormExtPlugin extends AbstractFormPlugin implements BeforeF7SelectListener {
|
||||
|
||||
private static final String DEPT = "dept";
|
||||
|
||||
private static final String OPERATOR = "operator";
|
||||
|
||||
private static final String ENTRY_ENTITY = "entryentity";
|
||||
|
||||
@Override
|
||||
public void registerListener(EventObject e) {
|
||||
super.registerListener(e);
|
||||
BasedataEdit baseData = this.getView().getControl(DEPT);
|
||||
baseData.addBeforeF7SelectListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
|
||||
String propertyName = beforeF7SelectEvent.getProperty().getName();
|
||||
if (DEPT.equals(propertyName)){
|
||||
QFilter filter = new QFilter("id", QFilter.in, listMatchDeptId());
|
||||
beforeF7SelectEvent.setCustomQFilters(Collections.singletonList(filter));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void propertyChanged(PropertyChangedArgs e) {
|
||||
super.propertyChanged(e);
|
||||
if (OPERATOR.equals(e.getProperty().getName())){
|
||||
setDefaultDept();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置默认采购部门
|
||||
*
|
||||
*/
|
||||
private void setDefaultDept() {
|
||||
Optional<DynamicObject> user = getUser();
|
||||
if (!user.isPresent()) {
|
||||
return;
|
||||
}
|
||||
//部门信息分录
|
||||
DynamicObjectCollection departEntries = user.get().getDynamicObjectCollection(ENTRY_ENTITY);
|
||||
Set<Long> orgIds = listOrgSubUnitId();
|
||||
DynamicObject targetDept = null;
|
||||
for (DynamicObject departEntry : departEntries) {
|
||||
//部门
|
||||
DynamicObject dept = departEntry.getDynamicObject("dpt");
|
||||
//部门ID
|
||||
long deptId = dept.getLong("id");
|
||||
if (!orgIds.contains(dept.getLong("id"))) {
|
||||
continue;
|
||||
}
|
||||
//是否兼职
|
||||
boolean isPartJob = departEntry.getBoolean("ispartjob");
|
||||
//选取未兼职分录第一行 && 在采购组织下游
|
||||
if (ObjectUtils.isEmpty(targetDept) && orgIds.contains(deptId)) {
|
||||
targetDept = dept;
|
||||
}
|
||||
//存在兼职分录行
|
||||
if (isPartJob) {
|
||||
//分录行部门属于采购组织下游行政组织
|
||||
targetDept = dept;
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.getModel().setValue(DEPT, targetDept);
|
||||
}
|
||||
|
||||
private Optional<DynamicObject> getUser() {
|
||||
DynamicObject operator = (DynamicObject) this.getModel().getValue(OPERATOR);
|
||||
if (ObjectUtils.isEmpty(operator)){
|
||||
return Optional.empty();
|
||||
}
|
||||
long userId = operator.getDynamicObject("operatorid").getLong("id");
|
||||
DynamicObject user = BusinessDataServiceHelper.loadSingle("bos_user", "id,dpt,ispartjob", new QFilter[]{new QFilter("id", QFilter.equals, userId)});
|
||||
return Optional.ofNullable(user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取采购组织下游业务单元ID列表
|
||||
*
|
||||
* @return 业务单元ID列表
|
||||
*/
|
||||
private Set<Long> listOrgSubUnitId(){
|
||||
Set<Long> result = new HashSet<>(16);
|
||||
DynamicObject org = (DynamicObject) this.getModel().getValue("org");
|
||||
if (ObjectUtils.isEmpty(org)){
|
||||
return result;
|
||||
}
|
||||
//查询组织下游行政组织ID列表
|
||||
List<Long> subOrgIds = OrgServiceHelper.getOrgAllSubIds(org.getLong("id"), "01", true);
|
||||
result.addAll(subOrgIds);
|
||||
return result;
|
||||
}
|
||||
|
||||
private Set<Long> listUserDeptId(){
|
||||
Set<Long> result = new HashSet<>(16);
|
||||
Optional<DynamicObject> user = getUser();
|
||||
if (!user.isPresent()){
|
||||
return result;
|
||||
}
|
||||
//部门信息分录
|
||||
DynamicObjectCollection departEntries = user.get().getDynamicObjectCollection(ENTRY_ENTITY);
|
||||
for (DynamicObject departEntry : departEntries) {
|
||||
result.add(departEntry.getLong("dpt.id"));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取与采购组织匹配的采购部门ID列表
|
||||
*
|
||||
* @return 采购部门ID列表
|
||||
*/
|
||||
private Set<Long> listMatchDeptId(){
|
||||
Set<Long> orgSubUnitId = listOrgSubUnitId();
|
||||
Set<Long> userDeptIds = listUserDeptId();
|
||||
Set<Long> result = new HashSet<>(16);
|
||||
for (long userDeptId : userDeptIds) {
|
||||
if (orgSubUnitId.contains(userDeptId)){
|
||||
result.add(userDeptId);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue