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