采购订单表单插件,过滤人员信息里的部门
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