Merge pull request 'lb:自营出口(一般)模板(抬头+商品+财务) 表单插件' (#25) from yem_handsome_lb into main

Reviewed-on: #25
This commit is contained in:
yem_handsome_lb 2025-02-27 18:12:43 +08:00
commit e897b0779b

View File

@ -15,6 +15,7 @@ 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.user.UserServiceHelper;
import yem.base.common.utils.DynamicObjectUtil;
import yem.base.common.utils.YEM;
@ -59,7 +60,7 @@ public class SexTemplateFormPlugin extends AbstractBillPlugIn implements BeforeF
setOrgF7Filter(evt);
break;
case "yem_department":// 部门
setDeptF7Filter(evt);
// setDeptF7Filter(evt);
break;
case "yem_salegroup": // 业务组
setGroupF7Filter(evt);
@ -115,25 +116,26 @@ public class SexTemplateFormPlugin extends AbstractBillPlugIn implements BeforeF
/**
* @Description: 单据组织人员相关字段合规
* @function 功能 判断 部门业务员 是否是当前组织下如果不是则清空
* @function 功能 根据当前登录人员携带部门业务员默认值
*
* @purposes 用途单据新增时组织值改变时
*/
private void orgPropertyChanged(){
IDataModel model = this.getView().getModel();
DynamicObject org = (DynamicObject) model.getValue("org");
if (YEM.isEmpty(org)) return;
// 部门
DynamicObject yemDepartment = (DynamicObject) model.getValue("yem_department");
if (!YEM.isEmpty(yemDepartment)){
// 判断组织是否在 部门的上级组织中
boolean isOrgSubDept = isOrgSubDept(org, yemDepartment);
if (!isOrgSubDept) model.setValue("yem_department",null);
}
// 业务员
DynamicObject yemOperator = (DynamicObject) model.getValue("yem_operator");
if (!YEM.isEmpty(yemOperator)){
Map<Long, Boolean> orgSubUserDeptInfo = getOrgSubUserDeptInfo(org, yemOperator);
if (orgSubUserDeptInfo.isEmpty()) model.setValue("yem_operator",null);
DynamicObject user = BusinessDataServiceHelper.loadSingleFromCache(YEM.getCurrentUserId(), "bos_user");
Map<Long, Boolean> orgSubUserDeptInfo = getOrgSubUserDeptInfo(org, user);
if (!orgSubUserDeptInfo.isEmpty()){
model.setValue("yem_operator",user);
boolean b = orgSubUserDeptInfo.containsValue(true);
Set<Long> deptIdSet = orgSubUserDeptInfo.keySet();
for (Long deptId : deptIdSet){
if (!b || orgSubUserDeptInfo.get(deptId)) {
model.setValue("yem_department",deptId);
break;
}
}
}
}
@ -288,22 +290,20 @@ public class SexTemplateFormPlugin extends AbstractBillPlugIn implements BeforeF
}
model.setValue("yem_baseqty",BigDecimal.ZERO,rowIndex);
}
/**
* @Description: 是否组织下级部门
* @function 功能 判断组织是否在 部门的上级组织分录中
* @Description: 获取组织下级部门
* @function 功能 获取组织下级部门
* @purposes 用途 单据组织人员相关字段合规
* @param org 组织
* @param dept 部门
* @return boolean 是否下级
* @return List<Long> 组织下级部门ID
*/
private boolean isOrgSubDept(DynamicObject org,DynamicObject dept){
DynamicObjectCollection structure = dept.getDynamicObjectCollection("structure");
List<Long> parentOrgIds = new ArrayList<>();
for (DynamicObject entry : structure){
DynamicObject viewparent = entry.getDynamicObject("viewparent");
if (!YEM.isEmpty(viewparent))parentOrgIds.add(viewparent.getLong("id"));
}
return parentOrgIds.contains(org.getLong("id"));
private List<Long> getOrgSubDept(DynamicObject org){
DynamicObject[] depts = BusinessDataServiceHelper.load("bos_adminorg","id",
new QFilter[]{new QFilter("enable", QCP.equals, "1"),
new QFilter("status", QCP.equals, "C"),
new QFilter("structure.viewparent.id", QCP.equals, org.getLong("id")) });
return Arrays.stream(depts).map(x -> x.getLong("id")).collect(Collectors.toList());
}
/**
@ -318,14 +318,15 @@ public class SexTemplateFormPlugin extends AbstractBillPlugIn implements BeforeF
private Map<Long,Boolean> getOrgSubUserDeptInfo(DynamicObject org, DynamicObject user){
// 定义Map统计部门信息
Map<Long,Boolean> result = new HashMap<>();
// 组织下级部门id集合
List<Long> orgSubDeptIds = getOrgSubDept(org);
// 人员部门分录
DynamicObjectCollection entryentity = user.getDynamicObjectCollection("entryentity");
for (DynamicObject entry : entryentity){
DynamicObject dpt = entry.getDynamicObject("dpt");
dpt = BusinessDataServiceHelper.loadSingle(dpt.getLong("id"),"bos_adminorg");
boolean orgSubDept = isOrgSubDept(org, dpt);// 是否组织下部门
long dptId = dpt.getLong("id");
boolean ispartjob = entry.getBoolean("ispartjob");// 是否兼职
if (orgSubDept)result.put(dpt.getLong("id"),ispartjob);
if (orgSubDeptIds.contains(dptId))result.put(dptId,ispartjob);
}
return result;
}