From a36648ea39f805959f975908b3932d2ec03eacb1 Mon Sep 17 00:00:00 2001 From: dxfeng Date: Tue, 25 Oct 2022 11:09:14 +0800 Subject: [PATCH 01/21] =?UTF-8?q?=E8=8A=B1=E5=90=8D=E5=86=8C=E6=A0=91BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../organization/service/impl/HrmResourceServiceImpl.java | 5 +++-- src/com/engine/organization/util/tree/SearchTreeUtil.java | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java b/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java index 4c30f42c..aaa53686 100644 --- a/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java +++ b/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java @@ -576,7 +576,9 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic for (DepartmentPO departmentPO : filterDeparts) { buildParentDepts(departmentPO, builderDeparts); } - List deptTrees = SearchTreeUtil.builderTreeMode(DepartmentBO.buildSetToSearchTree(builderDeparts, false)); + List departmentTrees = DepartmentBO.buildSetToSearchTree(builderDeparts, false); + List searchTrees = SearchTreeUtil.builderTreeMode(departmentTrees, jobTrees); + List deptTrees = SearchTreeUtil.builderTreeMode(departmentTrees); // 添加部门的上级分部 String parentCompS = deptTrees.stream().map(SearchTree::getParentComp).collect(Collectors.joining(",")); if (!StringUtil.isEmpty(parentCompS)) { @@ -589,7 +591,6 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic for (CompPO compPO : filterComps) { buildParentComps(compPO, builderComps); } - List searchTrees = SearchTreeUtil.builderTreeMode(deptTrees, jobTrees); return SearchTreeUtil.builderTreeMode(CompBO.buildSetToSearchTree(builderComps), searchTrees); } diff --git a/src/com/engine/organization/util/tree/SearchTreeUtil.java b/src/com/engine/organization/util/tree/SearchTreeUtil.java index 5ff6bdee..2ec73a8c 100644 --- a/src/com/engine/organization/util/tree/SearchTreeUtil.java +++ b/src/com/engine/organization/util/tree/SearchTreeUtil.java @@ -108,7 +108,7 @@ public class SearchTreeUtil { Map> childMap = deptTrees.stream().collect(Collectors.groupingBy(SearchTree::getParentComp)); boolean isAdd = !childMap.isEmpty(); return treeList.stream().peek(e -> { - List treeNodes = new ArrayList<>(); + Set treeNodes = new HashSet<>(); List nodes = parentMap.get(e.getId()); if (CollectionUtils.isNotEmpty(nodes)) { treeNodes.addAll(nodes); @@ -119,7 +119,7 @@ public class SearchTreeUtil { if (CollectionUtils.isNotEmpty(e.getSubs())) { treeNodes.addAll(e.getSubs()); } - e.setSubs(treeNodes); + e.setSubs( new ArrayList<>(treeNodes)); }).peek(item -> { if (CollectionUtils.isNotEmpty(item.getSubs())) { item.setIsParent(true); From b2fc9d3e0c5f411fd96ab96276ce277bd030363b Mon Sep 17 00:00:00 2001 From: dxfeng Date: Tue, 25 Oct 2022 15:43:02 +0800 Subject: [PATCH 02/21] =?UTF-8?q?=E4=BA=BA=E5=91=98=E7=BC=96=E5=8F=B7?= =?UTF-8?q?=E3=80=81=E5=B2=97=E4=BD=8D=E9=83=A8=E9=97=A8=E3=80=81=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E4=B8=8B=E6=8B=89=E6=A1=86BUG=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/SelectOptionParam.java | 11 ++- .../mapper/resource/ResourceMapper.java | 2 + .../mapper/resource/ResourceMapper.xml | 5 ++ .../service/impl/HrmResourceServiceImpl.java | 68 +++++++++++++++++-- .../service/impl/ImportCommonServiceImpl.java | 11 +++ .../service/impl/JobServiceImpl.java | 40 +++++++---- 6 files changed, 117 insertions(+), 20 deletions(-) diff --git a/src/com/engine/organization/entity/SelectOptionParam.java b/src/com/engine/organization/entity/SelectOptionParam.java index c89470c0..c2121532 100644 --- a/src/com/engine/organization/entity/SelectOptionParam.java +++ b/src/com/engine/organization/entity/SelectOptionParam.java @@ -33,8 +33,15 @@ public class SelectOptionParam { int size = datas.size(); for (int i = 0; i < size; i++) { JSONObject jsonObject = (JSONObject) datas.get(i); - SearchConditionOption option = new SearchConditionOption(StringUtils.isEmpty(jsonObject.getString("key")) ? i + "" : jsonObject.getString("key"), jsonObject.getString("option")); - selectOptions.add(option); + // 只显示未封存的数据 + if (!"1".equals(jsonObject.getString("unuse"))) { + SearchConditionOption option = new SearchConditionOption(StringUtils.isEmpty(jsonObject.getString("key")) ? i + "" : jsonObject.getString("key"), jsonObject.getString("option")); + selectOptions.add(option); + // 设置默认数据 + if ("1".equals(jsonObject.getString("default"))) { + option.setSelected(true); + } + } } } return selectOptions; diff --git a/src/com/engine/organization/mapper/resource/ResourceMapper.java b/src/com/engine/organization/mapper/resource/ResourceMapper.java index e18d6a68..424ec55c 100644 --- a/src/com/engine/organization/mapper/resource/ResourceMapper.java +++ b/src/com/engine/organization/mapper/resource/ResourceMapper.java @@ -22,4 +22,6 @@ public interface ResourceMapper { int updateResourceJob(@Param("originalJobId") Long originalJobId, @Param("targetJobId") Long targetJobId, @Param("parentComp") Long parentComp, @Param("parentDept") Long parentDept, @Param("ecCompany") Long ecCompany, @Param("ecDepartment") Long ecDepartment); HrmResourcePO getResourceById(@Param("id") String id); + + List listByNo(@Param("workCode") String workCode); } diff --git a/src/com/engine/organization/mapper/resource/ResourceMapper.xml b/src/com/engine/organization/mapper/resource/ResourceMapper.xml index 8a729a69..3199f53d 100644 --- a/src/com/engine/organization/mapper/resource/ResourceMapper.xml +++ b/src/com/engine/organization/mapper/resource/ResourceMapper.xml @@ -102,6 +102,11 @@ from jcl_org_hrmresource t where delete_type = 0 and id = #{id} + diff --git a/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java b/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java index aaa53686..ec082250 100644 --- a/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java +++ b/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java @@ -6,9 +6,11 @@ import com.api.browser.bean.SearchConditionItem; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrm.entity.RuleCodeType; import com.engine.hrm.util.face.HrmFaceCheckManager; import com.engine.organization.component.OrganizationWeaTable; import com.engine.organization.entity.DeleteParam; +import com.engine.organization.entity.codesetting.po.CodeRulePO; import com.engine.organization.entity.commom.RecordInfo; import com.engine.organization.entity.company.bo.CompBO; import com.engine.organization.entity.company.po.CompPO; @@ -19,6 +21,7 @@ import com.engine.organization.entity.hrmresource.bo.HrmRelationBO; import com.engine.organization.entity.hrmresource.param.HrmRelationSaveParam; import com.engine.organization.entity.hrmresource.param.HrmResourceSearchParam; import com.engine.organization.entity.hrmresource.po.HrmRelationPO; +import com.engine.organization.entity.hrmresource.po.HrmResourcePO; import com.engine.organization.entity.hrmresource.vo.HrmResourceVO; import com.engine.organization.entity.job.bo.JobBO; import com.engine.organization.entity.job.po.JobPO; @@ -26,6 +29,7 @@ import com.engine.organization.entity.searchtree.SearchTree; import com.engine.organization.entity.searchtree.SearchTreeParams; import com.engine.organization.enums.LogModuleNameEnum; import com.engine.organization.enums.OperateTypeEnum; +import com.engine.organization.mapper.codesetting.CodeRuleMapper; import com.engine.organization.mapper.comp.CompMapper; import com.engine.organization.mapper.department.DepartmentMapper; import com.engine.organization.mapper.extend.ExtendTitleMapper; @@ -35,6 +39,7 @@ import com.engine.organization.mapper.hrmresource.SystemDataMapper; import com.engine.organization.mapper.job.JobMapper; import com.engine.organization.mapper.post.PostInfoMapper; import com.engine.organization.mapper.post.PostMapper; +import com.engine.organization.mapper.resource.ResourceMapper; import com.engine.organization.mapper.scheme.GradeMapper; import com.engine.organization.mapper.scheme.LevelMapper; import com.engine.organization.mapper.scheme.SchemeMapper; @@ -47,6 +52,7 @@ import com.engine.organization.util.HasRightUtil; import com.engine.organization.util.MenuBtn; import com.engine.organization.util.OrganizationAssert; import com.engine.organization.util.OrganizationFormItemUtil; +import com.engine.organization.util.coderule.CodeRuleUtil; import com.engine.organization.util.db.DBType; import com.engine.organization.util.db.MapperProxyFactory; import com.engine.organization.util.page.PageUtil; @@ -153,6 +159,10 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic return MapperProxyFactory.getProxy(HrmResourceMapper.class); } + private static ResourceMapper getResourceMapper() { + return MapperProxyFactory.getProxy(ResourceMapper.class); + } + private ExtendTitleMapper getExtendTitleMapper() { return MapperProxyFactory.getProxy(ExtendTitleMapper.class); } @@ -206,7 +216,10 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic @Override public Long saveBaseForm(Map params) { HasRightUtil.hasRight(user, RIGHT_NAME, false); - + String workCode = (String) params.get("work_code"); + // 判断是否开启自动编号 + workCode = repeatDetermine(workCode); + params.put("work_code", workCode); // 完善新增参数 completeParams(params); @@ -271,6 +284,13 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic if ("0".equals(groupId)) { groupId = GROUP_ID.toString(); } + // 判断编号是否重复 + String workCode = Util.null2String(params.get("work_code")); + HrmResourcePO resourceById = getResourceMapper().getResourceById(id.toString()); + if (!workCode.equals(resourceById.getWorkCode())) { + workCode = repeatDetermine(workCode); + params.put("work_code", workCode); + } // 完善更新参数 completeParams(params); @@ -576,9 +596,9 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic for (DepartmentPO departmentPO : filterDeparts) { buildParentDepts(departmentPO, builderDeparts); } - List departmentTrees = DepartmentBO.buildSetToSearchTree(builderDeparts, false); - List searchTrees = SearchTreeUtil.builderTreeMode(departmentTrees, jobTrees); - List deptTrees = SearchTreeUtil.builderTreeMode(departmentTrees); + List departmentList = DepartmentBO.buildSetToSearchTree(builderDeparts, false); + List deptTrees = SearchTreeUtil.builderTreeMode(departmentList); + List searchTrees = SearchTreeUtil.builderTreeMode(departmentList, jobTrees); // 添加部门的上级分部 String parentCompS = deptTrees.stream().map(SearchTree::getParentComp).collect(Collectors.joining(",")); if (!StringUtil.isEmpty(parentCompS)) { @@ -683,8 +703,11 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic params.put("company_id", jobById.getParentComp()); params.put("ec_department", jobById.getEcDepartment()); params.put("ec_company", jobById.getEcCompany()); - // 职级 - params.put("job_level", jobById.getGradeId()); + // 等级方案、岗位序列、职等、职级 + params.put("scheme_id", jobById.getSchemeId()); + params.put("sequence_id", jobById.getSequenceId()); + params.put("job_level", jobById.getLevelId()); + params.put("job_grade", jobById.getGradeId()); String showOrder = Util.null2String(params.get("show_order")); // 初始化排序字段 if (StringUtils.isBlank(showOrder)) { @@ -699,4 +722,37 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic } } } + + /** + * 判断编号是否重复 + * + * @return + */ + public static String repeatDetermine(String workCode) { + CodeRulePO codeRuleByType = MapperProxyFactory.getProxy(CodeRuleMapper.class).getCodeRuleByType(RuleCodeType.USER.getValue()); + if (StringUtils.isNotBlank(workCode)) { + workCode = CodeRuleUtil.generateCode(RuleCodeType.USER, workCode); + List list = getResourceMapper().listByNo(Util.null2String(workCode)); + OrganizationAssert.isEmpty(list, "编号不允许重复"); + } else { + if (null != codeRuleByType && "1".equals(codeRuleByType.getSerialEnable())) { + workCode = autoCreateWorkCode(); + } + } + return workCode; + } + + /** + * 自动编号处理 + * + * @return + */ + private static String autoCreateWorkCode() { + String generateCode = CodeRuleUtil.generateCode(RuleCodeType.USER, ""); + List list = getResourceMapper().listByNo(Util.null2String(generateCode)); + if (CollectionUtils.isNotEmpty(list)) { + generateCode = autoCreateWorkCode(); + } + return generateCode; + } } diff --git a/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java b/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java index f3b8a265..41f6aff8 100644 --- a/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java +++ b/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java @@ -1376,7 +1376,18 @@ public class ImportCommonServiceImpl extends Service implements ImportCommonServ saveImportDetailLog(historyDetailPO); continue; } + // 自动编号 + String workCode = Util.null2String(map.get("work_code")); + try { + // 自动编号 + workCode = HrmResourceServiceImpl.repeatDetermine(workCode); + map.put("work_code", workCode); + } catch (Exception e) { + historyDetailPO.setOperateDetail(Util.null2String(e.getMessage())); + historyDetailPO.setStatus("0"); + saveImportDetailLog(historyDetailPO); + } map.put("creator", user.getUID()); map.put("delete_type", 0); map.put("create_time", new Date()); diff --git a/src/com/engine/organization/service/impl/JobServiceImpl.java b/src/com/engine/organization/service/impl/JobServiceImpl.java index e93f62be..e7fe8307 100644 --- a/src/com/engine/organization/service/impl/JobServiceImpl.java +++ b/src/com/engine/organization/service/impl/JobServiceImpl.java @@ -361,12 +361,20 @@ public class JobServiceImpl extends Service implements JobService { jobNo = repeatDetermine(jobNo); params.put("job_no", jobNo); params.put("is_key", null == searchParam.getIsKey() ? 0 : searchParam.getIsKey()); - Long ecDepartment = searchParam.getEcDepartment(); - DepartmentPO jclDepartment = EcHrmRelationUtil.getJclDepartmentId(Util.null2String(ecDepartment)); - params.put("parent_dept", jclDepartment.getId()); - params.put("parent_comp", jclDepartment.getParentComp()); - if (null != jclDepartment.getParentComp()) { - params.put("ec_company", EcHrmRelationUtil.getEcCompanyId(Util.null2String(jclDepartment.getParentComp()))); + if (null != searchParam.getParentJob()) { + JobPO parentJob = getJobMapper().getJobById(searchParam.getParentJob()); + params.put("parent_dept", parentJob.getParentDept()); + params.put("parent_comp", parentJob.getParentComp()); + params.put("ec_company", parentJob.getEcCompany()); + params.put("ec_department", parentJob.getEcDepartment()); + } else { + Long ecDepartment = searchParam.getEcDepartment(); + DepartmentPO jclDepartment = EcHrmRelationUtil.getJclDepartmentId(Util.null2String(ecDepartment)); + params.put("parent_dept", jclDepartment.getId()); + params.put("parent_comp", jclDepartment.getParentComp()); + if (null != jclDepartment.getParentComp()) { + params.put("ec_company", EcHrmRelationUtil.getEcCompanyId(Util.null2String(jclDepartment.getParentComp()))); + } } if (StringUtils.isBlank(params.get("show_order").toString())) { @@ -406,12 +414,20 @@ public class JobServiceImpl extends Service implements JobService { // 更新主表数据 params.put("is_key", searchParam.getIsKey()); - Long ecDepartment = searchParam.getEcDepartment(); - DepartmentPO jclDepartment = EcHrmRelationUtil.getJclDepartmentId(Util.null2String(ecDepartment)); - params.put("parent_dept", jclDepartment.getId()); - params.put("parent_comp", jclDepartment.getParentComp()); - if (null != jclDepartment.getParentComp()) { - params.put("ec_company", EcHrmRelationUtil.getEcCompanyId(Util.null2String(jclDepartment.getParentComp()))); + if (null != searchParam.getParentJob()) { + JobPO parentJob = getJobMapper().getJobById(searchParam.getParentJob()); + params.put("parent_dept", parentJob.getParentDept()); + params.put("parent_comp", parentJob.getParentComp()); + params.put("ec_company", parentJob.getEcCompany()); + params.put("ec_department", parentJob.getEcDepartment()); + } else { + Long ecDepartment = searchParam.getEcDepartment(); + DepartmentPO jclDepartment = EcHrmRelationUtil.getJclDepartmentId(Util.null2String(ecDepartment)); + params.put("parent_dept", jclDepartment.getId()); + params.put("parent_comp", jclDepartment.getParentComp()); + if (null != jclDepartment.getParentComp()) { + params.put("ec_company", EcHrmRelationUtil.getEcCompanyId(Util.null2String(jclDepartment.getParentComp()))); + } } params.put("jobactivityid", JOB_ACTIVITY_ID); new OrganizationSyncEc(user, LogModuleNameEnum.JOB, OperateTypeEnum.UPDATE, params, oldJobPO).sync(); From 7258ee742def9af2ee9cafacd567f84727162b2e Mon Sep 17 00:00:00 2001 From: dxfeng Date: Tue, 25 Oct 2022 16:24:18 +0800 Subject: [PATCH 03/21] =?UTF-8?q?=E7=BC=96=E5=88=B6=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/organization/service/impl/StaffServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/organization/service/impl/StaffServiceImpl.java b/src/com/engine/organization/service/impl/StaffServiceImpl.java index 01166d5b..5a88abd1 100644 --- a/src/com/engine/organization/service/impl/StaffServiceImpl.java +++ b/src/com/engine/organization/service/impl/StaffServiceImpl.java @@ -78,7 +78,7 @@ public class StaffServiceImpl extends Service implements StaffService { // 判断编制导入模板是否存在,不存在则创建该文件 static { try { - String outPutPath = GCONST.getRootPath() + "/hrm/import/template/staff.xls"; + String outPutPath = GCONST.getRootPath() + File.separator + "hrm" + File.separator + "import" + File.separator + "template" + File.separator + "staff.xls"; File excelPathFile = new File(outPutPath); if (!excelPathFile.exists()) { String columns = "方案编号,方案名称,分部,部门,岗位,编制数"; From 679c77f7327b8d9063dd5b5cd5f67dd940b2122d Mon Sep 17 00:00:00 2001 From: dxfeng Date: Wed, 26 Oct 2022 20:12:14 +0800 Subject: [PATCH 04/21] =?UTF-8?q?=E7=BB=84=E7=BB=87=E6=9E=B6=E6=9E=84?= =?UTF-8?q?=E5=9B=BE=E7=9B=B8=E5=85=B3BUG=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/脚本/Oracle/浏览按钮Oracle.sql | 2 +- docs/脚本/Oracle/表结构、初始化数据Oracle.sql | 4 +- .../entity/extend/param/ExtendInfoParams.java | 27 +++- .../organization/entity/job/bo/JobBO.java | 4 +- .../entity/job/dto/JobListDTO.java | 3 +- .../mapper/trigger/GroupTriggerMapper.java | 2 +- .../service/impl/DepartmentServiceImpl.java | 32 ++-- .../impl/HrmPersonnelCardServiceImpl.java | 8 +- .../service/impl/ImportCommonServiceImpl.java | 2 +- .../service/impl/JobServiceImpl.java | 5 +- .../service/impl/OrgChartServiceImpl.java | 4 +- .../thread/DepartmentTriggerRunnable.java | 6 +- .../thread/HrmResourceTriggerRunnable.java | 42 ++++-- .../thread/JobTriggerRunnable.java | 137 +++++++++--------- .../thread/StaffTriggerRunnable.java | 2 +- .../wrapper/DepartmentWrapper.java | 1 - .../organization/wrapper/JobWrapper.java | 4 +- 17 files changed, 168 insertions(+), 117 deletions(-) diff --git a/docs/脚本/Oracle/浏览按钮Oracle.sql b/docs/脚本/Oracle/浏览按钮Oracle.sql index 7baaea16..4afe458b 100644 --- a/docs/脚本/Oracle/浏览按钮Oracle.sql +++ b/docs/脚本/Oracle/浏览按钮Oracle.sql @@ -73,7 +73,7 @@ INSERT INTO datashowparam (MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, d INSERT INTO datashowparam (MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES(datashowset_id, '名称', 'grade_name', '', 1, 2, SYS_GUID(), NULL); INSERT INTO datashowparam (MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES(datashowset_id, '描述方案', 'description', '', 0, 3, SYS_GUID(), NULL); INSERT INTO datashowparam (MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES(datashowset_id, '等级方案', 'scheme_id', 'select scheme_name from jcl_org_scheme where id={?currentvalue}', 0, 4, SYS_GUID(), NULL); -INSERT INTO datashowparam (MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES(datashowset_id, '职等', 'level_id', 'select group_concat(level_name) from jcl_org_level where id in ( {?currentvalue})', 0, 5, SYS_GUID(), NULL); +INSERT INTO datashowparam (MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) VALUES(datashowset_id, '职等', 'level_id', 'select wm_concat(to_char(level_name)) from jcl_org_level where id in ( {?currentvalue})', 0, 5, SYS_GUID(), NULL); INSERT INTO datasearchparam (MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) VALUES(datashowset_id, '编号', 'grade_no', '2', '', 1, SYS_GUID(), ''); INSERT INTO datasearchparam (MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) VALUES(datashowset_id, '名称', 'grade_name', '2', '', 2, SYS_GUID(), ''); diff --git a/docs/脚本/Oracle/表结构、初始化数据Oracle.sql b/docs/脚本/Oracle/表结构、初始化数据Oracle.sql index b055d617..6423a78c 100644 --- a/docs/脚本/Oracle/表结构、初始化数据Oracle.sql +++ b/docs/脚本/Oracle/表结构、初始化数据Oracle.sql @@ -1215,4 +1215,6 @@ INSERT INTO jcl_field_extendinfo (id, extend_type, table_name, field_name, field INSERT INTO jcl_field_extendinfo (id, extend_type, table_name, field_name, field_name_desc, field_type, control_type, extend_group_id, isenable, isrequired, list_show, search_show, edit_show, add_show, browser_show, show_order, creator, delete_type, create_time, update_time, browser_type, custom_value, is_system_default) VALUES(102, 2, 'JCL_ORG_DEPT', 'ec_company', '所属分部', 'int', 3, 2, 1, 1, 1, 1, 1, 1, 1, 4, 1, 0, SYSDATE, NULL, '164', '["browser",{"valueSpan":"分部","replaceDatas":[{"name":"分部","id":"164"}],"value":"164"}]', 0) / INSERT INTO jcl_field_extendinfo (id, extend_type, table_name, field_name, field_name_desc, field_type, control_type, extend_group_id, isenable, isrequired, list_show, search_show, edit_show, add_show, browser_show, show_order, creator, delete_type, create_time, update_time, browser_type, custom_value, is_system_default) VALUES(103, 2, 'JCL_ORG_DEPT', 'ec_department', '上级部门', 'int', 3, 2, 1, 0, 1, 1, 1, 1, 1, 5, 1, 0, SYSDATE, NULL, '4', '["browser",{"valueSpan":"部门","replaceDatas":[{"name":"部门","id":"4"}],"value":"4"}]', 0) -/ \ No newline at end of file +/ + +INSERT INTO JCL_INFO (id, fname, fvalue) VALUES (1, '董事长人员id', '36') diff --git a/src/com/engine/organization/entity/extend/param/ExtendInfoParams.java b/src/com/engine/organization/entity/extend/param/ExtendInfoParams.java index 8951002d..70fe1c0a 100644 --- a/src/com/engine/organization/entity/extend/param/ExtendInfoParams.java +++ b/src/com/engine/organization/entity/extend/param/ExtendInfoParams.java @@ -41,6 +41,31 @@ public class ExtendInfoParams { private String sequenceName; public String getSequenceName() { - return this.tableName + "_ID"; + // 处理ORACLE表名过长,未与序列对应情况 + String sequenceName; + switch (this.tableName) { + case "JCL_ORG_HRMRESOURCE": + sequenceName = "JCL_ORG_HRM_ID"; + break; + case "JCL_ORG_HRMRESOURCEEXT_DT1": + sequenceName = "JCL_ORG_HRMEXT_DT1_ID"; + break; + case "JCL_FIELD_EXTENDGROUP": + sequenceName = "JCL_FIELD_GROUP_ID"; + break; + case "JCL_FIELD_EXTENDTITLE": + sequenceName = "JCL_FIELD_TITLE_ID"; + break; + case "JCL_FIELD_EXTENDINFO": + sequenceName = "JCL_FIELD_INFO_ID"; + break; + case "JCL_IMPORT_HISTORY_DETAIL": + sequenceName = "JCL_IMPORT_DETAIL_ID"; + break; + default: + sequenceName = this.tableName + "_ID"; + break; + } + return sequenceName; } } diff --git a/src/com/engine/organization/entity/job/bo/JobBO.java b/src/com/engine/organization/entity/job/bo/JobBO.java index 907a348a..8447b659 100644 --- a/src/com/engine/organization/entity/job/bo/JobBO.java +++ b/src/com/engine/organization/entity/job/bo/JobBO.java @@ -89,8 +89,8 @@ public class JobBO { .deptName(e.getDeptName()) .sequenceName(e.getSequenceName()) .schemeName(e.getSchemeName()) - .parentJob(e.getParentJob()) - .parentJobName(null == poMaps.get(e.getParentJob()) ? "" : poMaps.get(e.getParentJob()).getJobName()) + //.parentJob(e.getParentJob()) + //.parentJobName(null == poMaps.get(e.getParentJob()) ? "" : poMaps.get(e.getParentJob()).getJobName()) .isKey(JobTransMethod.getIsKeySpan(e.getIsKey())) .showOrder(e.getShowOrder()) .forbiddenTag(e.getForbiddenTag()) diff --git a/src/com/engine/organization/entity/job/dto/JobListDTO.java b/src/com/engine/organization/entity/job/dto/JobListDTO.java index a8f2b965..63582224 100644 --- a/src/com/engine/organization/entity/job/dto/JobListDTO.java +++ b/src/com/engine/organization/entity/job/dto/JobListDTO.java @@ -64,7 +64,8 @@ public class JobListDTO { /** * 上级岗位 */ - @TableTitle(title = "上级岗位", dataIndex = "parentJobName", key = "parentJobName") + // 上级岗位,暂不使用 + //@TableTitle(title = "上级岗位", dataIndex = "parentJobName", key = "parentJobName") private String parentJobName; private Long parentJob; /** diff --git a/src/com/engine/organization/mapper/trigger/GroupTriggerMapper.java b/src/com/engine/organization/mapper/trigger/GroupTriggerMapper.java index 1ddde191..ef14a4ce 100644 --- a/src/com/engine/organization/mapper/trigger/GroupTriggerMapper.java +++ b/src/com/engine/organization/mapper/trigger/GroupTriggerMapper.java @@ -12,7 +12,7 @@ import java.sql.Date; **/ public interface GroupTriggerMapper { - int getInfoValue(@Param("id") Integer id); + Integer getInfoValue(@Param("id") Integer id); Integer sumStaffNum(@Param("fdatebegin") Date fdatebegin); diff --git a/src/com/engine/organization/service/impl/DepartmentServiceImpl.java b/src/com/engine/organization/service/impl/DepartmentServiceImpl.java index b4a4bf26..ef4c824c 100644 --- a/src/com/engine/organization/service/impl/DepartmentServiceImpl.java +++ b/src/com/engine/organization/service/impl/DepartmentServiceImpl.java @@ -282,9 +282,9 @@ public class DepartmentServiceImpl extends Service implements DepartmentService groupId = GROUP_ID.toString(); } - String oldDeptNo = getDepartmentMapper().getDeptById(searchParam.getId()).getDeptNo(); + DepartmentPO oldDept = getDepartmentMapper().getDeptById(searchParam.getId()); String deptNo = searchParam.getDeptNo(); - if (!deptNo.equals(oldDeptNo)) { + if (!deptNo.equals(oldDept.getDeptNo())) { deptNo = repeatDetermine(deptNo); params.put("dept_no", deptNo); } @@ -320,6 +320,8 @@ public class DepartmentServiceImpl extends Service implements DepartmentService //更新明细表 getExtService(user).updateExtDT(user, EXTEND_TYPE, JCL_ORG_DEPTEXT_DT1, params, searchParam.getId()); + DepartmentPO newDeptById = getDepartmentMapper().getDeptById(searchParam.getId()); + new DepartmentTriggerRunnable(oldDept, newDeptById).run(); Long parentComp = StringUtils.isNotEmpty(Util.null2String(params.get("parent_comp"))) ? Long.parseLong(Util.null2String(params.get("parent_comp"))) : null; // 刷新岗位所属分部 @@ -553,7 +555,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService deptById.setUuid(recordInfo.getUuid()); getDepartmentMapper().insertIgnoreNull(deptById); // 更新组织架构图 - new Thread(new DepartmentTriggerRunnable(deptById.getId())).start(); + new DepartmentTriggerRunnable(deptById.getId()).run(); // 复制当前部门岗位信息 if ("1".equals(copyJob)) { @@ -637,7 +639,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService updateEcDepartment(departmentPO); getDepartmentMapper().updateBaseDept(departmentPO); // 更新组织架构图 - new Thread(new DepartmentTriggerRunnable(departmentPO.getId())).start(); + new DepartmentTriggerRunnable(departmentPO.getId()).run(); } // 查询该部门一级岗位、更新岗位所属分部、所属部门 List firstChildJobList = getJobMapper().listJobsByDepartmentId(mergeParam.getId()); @@ -650,7 +652,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService // 更新岗位组织架构图 for (JobPO jobPO : firstChildJobList) { // 刷新组织架构图 - new Thread(new JobTriggerRunnable(jobPO.getId())).start(); + new JobTriggerRunnable(jobPO.getId()).run(); } // 更新当前部门下的人员 List hrmResourceIds = getSystemDataMapper().getHrmResourceIdsByDept(mergeParam.getId().toString()); @@ -658,7 +660,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService new RecordSet().executeUpdate("update jcl_org_hrmresource set company_id =? ,ec_company = ? ,department_id = ?, ec_department = ?where department_id =?", targetDepartment.getParentComp(), targetDepartment.getEcCompany(), targetDepartment.getId(), targetEcDeptId, mergeParam.getId()); // 更新人员组织架构图 for (Long hrmResourceId : hrmResourceIds) { - new Thread(new HrmResourceTriggerRunnable(hrmResourceId)).start(); + new HrmResourceTriggerRunnable(hrmResourceId).run(); } // 更新子部门下岗位的所属分部 for (DepartmentPO departmentPO : firstChildDeptList) { @@ -675,14 +677,14 @@ public class DepartmentServiceImpl extends Service implements DepartmentService MapperProxyFactory.getProxy(ExtDTMapper.class).deleteByMainID("jcl_org_deptext_dt1", mergeParam.getId()); getDepartmentMapper().deleteByIds(DeleteParam.builder().ids(mergeParam.getId().toString()).build().getIds()); // 更新组织架构图 - new Thread(new DepartmentTriggerRunnable(mergeDepartment)).run(); + new DepartmentTriggerRunnable(mergeDepartment).run(); // 更新部门合并后名称 targetDepartment.setDeptName(mergeParam.getMergeName()); targetDepartment.setDeptNameShort(mergeParam.getMergeName()); updateEcDepartment(targetDepartment); getDepartmentMapper().updateBaseDept(targetDepartment); // 更新组织架构图 - new Thread(new DepartmentTriggerRunnable(oldFParentId,targetDepartment.getId())).run(); + new DepartmentTriggerRunnable(oldFParentId,targetDepartment.getId()).run(); return 0; } @@ -725,7 +727,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService deptById.setEcDepartment(null); // 更新组织架构图 - new Thread(new DepartmentTriggerRunnable(company.toString(),deptById)).run(); + new DepartmentTriggerRunnable(company.toString(),deptById).run(); } else if ("1".equals(moveParam.getMoveType())) { Long department = moveParam.getDepartment(); Long departmentId = Objects.requireNonNull(EcHrmRelationUtil.getJclDepartmentId(Util.null2String(department))).getId(); @@ -744,7 +746,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService deptById.setEcCompany(parentDepartment.getEcCompany()); // 更新组织架构图 - new Thread(new DepartmentTriggerRunnable(Integer.toString(100000000+department.intValue()),deptById)).run(); + new DepartmentTriggerRunnable(Integer.toString(100000000+department.intValue()),deptById).run(); } // 更新EC部门 updateEcDepartment(deptById); @@ -761,7 +763,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService new RecordSet().executeUpdate("update jcl_org_hrmresource set company_id =? ,ec_company = ? where department_id =?", deptById.getParentComp(), ecCompanyId, deptById.getId()); // 更新人员组织架构图 for (Long hrmResourceId : hrmResourceIds) { - new Thread(new HrmResourceTriggerRunnable(hrmResourceId)).start(); + new HrmResourceTriggerRunnable(hrmResourceId).run(); } forbiddenChildTag(deptById.getParentComp(), ecCompanyId, deptList); // 递归更新下级部门、岗位 @@ -784,7 +786,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService getDepartmentMapper().updateBaseDept(departmentPO); // 更新组织架构图 - new Thread(new DepartmentTriggerRunnable(departmentPO.getId())).start(); + new DepartmentTriggerRunnable(departmentPO.getId()).run(); // 刷新岗位所属分部 refreshJobComp(departmentPO.getId(), parentComp); // 更新当前部门下的人员 @@ -794,7 +796,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService new RecordSet().executeUpdate("update jcl_org_hrmresource set company_id =? ,ec_company = ? where department_id =?", parentComp, ecCompanyId, departmentPO.getId()); // 更新人员组织架构图 for (Long hrmResourceId : hrmResourceIds) { - new Thread(new HrmResourceTriggerRunnable(hrmResourceId)).start(); + new HrmResourceTriggerRunnable(hrmResourceId).run(); } List childList = getDepartmentMapper().getDeptListByPId(departmentPO.getId()); forbiddenChildTag(parentComp, ecCompanyId, childList); @@ -930,7 +932,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService jobPO.setShowOrder(orderNum); MapperProxyFactory.getProxy(JobMapper.class).insertIgnoreNull(jobPO); // 更新组织架构图 - new Thread(new JobTriggerRunnable(jobPO.getId())).start(); + new JobTriggerRunnable(jobPO.getId()).run(); // 处理子级元素 if (CollectionUtils.isNotEmpty(jobsByPid)) { @@ -1010,7 +1012,7 @@ public class DepartmentServiceImpl extends Service implements DepartmentService getJobMapper().updateJobCompany(jobPOS.stream().map(JobPO::getId).collect(Collectors.toList()), parentComp, ecCompanyId); for (JobPO jobPO : jobPOS) { // 刷新组织架构图 - new Thread(new JobTriggerRunnable(jobPO.getId())).start(); + new JobTriggerRunnable(jobPO.getId()).run(); } } } diff --git a/src/com/engine/organization/service/impl/HrmPersonnelCardServiceImpl.java b/src/com/engine/organization/service/impl/HrmPersonnelCardServiceImpl.java index d138f5a7..45d93e4b 100644 --- a/src/com/engine/organization/service/impl/HrmPersonnelCardServiceImpl.java +++ b/src/com/engine/organization/service/impl/HrmPersonnelCardServiceImpl.java @@ -16,6 +16,7 @@ import com.engine.organization.mapper.hrmresource.HrmResourceMapper; import com.engine.organization.mapper.personnelcard.PersonnelCardMapper; import com.engine.organization.service.HrmPersonnelCardService; import com.engine.organization.util.OrganizationAssert; +import com.engine.organization.util.db.DBType; import com.engine.organization.util.db.MapperProxyFactory; import com.engine.organization.util.field.FieldDefinedValueUtil; import com.engine.portal.biz.constants.ModuleConstants; @@ -190,7 +191,12 @@ public class HrmPersonnelCardServiceImpl extends Service implements HrmPersonnel for (ExtendInfoPO extendInfoPO : extendInfoList) { String fieldShowName = ""; if (null != fieldValueMap) { - Object fieldValue = fieldValueMap.get(extendInfoPO.getFieldName()); + Object fieldValue; + if (DBType.isOracle()) { + fieldValue = fieldValueMap.get(extendInfoPO.getFieldName().toUpperCase()); + } else { + fieldValue = fieldValueMap.get(extendInfoPO.getFieldName()); + } fieldShowName = FieldDefinedValueUtil.getFieldValue(user, extendInfoPO, Util.null2String(fieldValue)); } itemList.add(Item.builder().fieldId(extendInfoPO.getFieldNameDesc()).fieldValue(fieldShowName).build()); diff --git a/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java b/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java index 41f6aff8..1aca837d 100644 --- a/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java +++ b/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java @@ -1259,7 +1259,7 @@ public class ImportCommonServiceImpl extends Service implements ImportCommonServ saveImportDetailLog(historyDetailPO); continue nextRow; } - if (StringUtils.isNotBlank(cellValue) && StringUtils.isBlank(Util.null2String(reallyValue)) && !"ec_company".equals(infoPO.getFieldName()) && !"ec_department".equals(infoPO.getFieldName())) { + if (StringUtils.isNotBlank(cellValue) && StringUtils.isBlank(Util.null2String(reallyValue)) && !"ec_company".equals(infoPO.getFieldName()) && !"ec_department".equals(infoPO.getFieldName()) && !"job_title".equals(infoPO.getFieldName())) { historyDetailPO.setOperateDetail(infoPO.getFieldNameDesc() + "数据转换失败,未找到对应数据"); historyDetailPO.setStatus("0"); saveImportDetailLog(historyDetailPO); diff --git a/src/com/engine/organization/service/impl/JobServiceImpl.java b/src/com/engine/organization/service/impl/JobServiceImpl.java index e7fe8307..26fb4b34 100644 --- a/src/com/engine/organization/service/impl/JobServiceImpl.java +++ b/src/com/engine/organization/service/impl/JobServiceImpl.java @@ -436,8 +436,11 @@ public class JobServiceImpl extends Service implements JobService { getExtService(user).updateExtForm(user, EXTEND_TYPE, JCL_ORG_JOBEXT, params, groupId, searchParam.getId()); // 更新明细表 getExtService(user).updateExtDT(user, EXTEND_TYPE, JCL_ORG_JOBEXT_DT1, params, searchParam.getId()); + JobPO jobById = getJobMapper().getJobById(searchParam.getId()); + new JobTriggerRunnable(oldJobPO, jobById).run(); // 更新人员关联字段 - updateResourceJob(getJobMapper().getJobById(searchParam.getId())); + updateResourceJob(jobById); + return searchParam.getId(); } diff --git a/src/com/engine/organization/service/impl/OrgChartServiceImpl.java b/src/com/engine/organization/service/impl/OrgChartServiceImpl.java index 470983b6..8c17ffd4 100644 --- a/src/com/engine/organization/service/impl/OrgChartServiceImpl.java +++ b/src/com/engine/organization/service/impl/OrgChartServiceImpl.java @@ -419,7 +419,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { private String convertLevel(String fLeaderLv) { String jobLevelName = ""; - if (StringUtils.isBlank(fLeaderLv)) { + if (StringUtils.isNotBlank(fLeaderLv)) { try { long parseLong = Long.parseLong(fLeaderLv); LevelPO levelByID = MapperProxyFactory.getProxy(LevelMapper.class).getLevelByID(parseLong); @@ -435,7 +435,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { private String convertGrade(String fLeaderSt) { String jobGradeName = ""; - if (StringUtils.isBlank(fLeaderSt)) { + if (StringUtils.isNotBlank(fLeaderSt)) { try { long parseLong = Long.parseLong(fLeaderSt); GradePO gradeByID = MapperProxyFactory.getProxy(GradeMapper.class).getGradeByID(parseLong); diff --git a/src/com/engine/organization/thread/DepartmentTriggerRunnable.java b/src/com/engine/organization/thread/DepartmentTriggerRunnable.java index a7b63026..a610a42b 100644 --- a/src/com/engine/organization/thread/DepartmentTriggerRunnable.java +++ b/src/com/engine/organization/thread/DepartmentTriggerRunnable.java @@ -146,7 +146,7 @@ public class DepartmentTriggerRunnable implements Runnable { if (null != jclOrgMapByObjID) { if (null != jclOrgMap) { jclMap.setFPlan((null != staffPO ? staffPO.getStaffNum() : 0) + jclOrgMap.getFPlan()); - jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob() + jclOrgMap.getFOnJob()); + jclMap.setFOnJob(jclOrgMap.getFOnJob()); } else { jclMap.setFPlan(null != staffPO ? staffPO.getStaffNum() : 0); jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob()); @@ -192,11 +192,11 @@ public class DepartmentTriggerRunnable implements Runnable { StaffPO staffPO = new StaffPO(); switch (parentJclOrgMap.getFType()) { case 1: - staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(1,parentId, null, null); + staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(1,Util.null2String(parentJclOrgMap.getFObjId()), null, null); break; // 部门 case 2: - staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(2,null, parentId, null); + staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(2, null, Util.null2String(parentJclOrgMap.getFObjId()), null); break; } // 编制表jcl_org_staff中的编制数+下级编制数,工具类判断 diff --git a/src/com/engine/organization/thread/HrmResourceTriggerRunnable.java b/src/com/engine/organization/thread/HrmResourceTriggerRunnable.java index 6b4287b0..4efebe36 100644 --- a/src/com/engine/organization/thread/HrmResourceTriggerRunnable.java +++ b/src/com/engine/organization/thread/HrmResourceTriggerRunnable.java @@ -1,9 +1,12 @@ package com.engine.organization.thread; import com.engine.organization.entity.hrmresource.po.HrmResourcePO; +import com.engine.organization.entity.job.po.JobPO; import com.engine.organization.entity.map.JclOrgMap; +import com.engine.organization.entity.personnelcard.User; import com.engine.organization.mapper.hrmresource.HrmResourceMapper; import com.engine.organization.mapper.jclorgmap.JclOrgMapper; +import com.engine.organization.mapper.job.JobMapper; import com.engine.organization.mapper.trigger.CompTriggerMapper; import com.engine.organization.mapper.trigger.HrmResourceTriggerMapper; import com.engine.organization.util.OrganizationDateUtil; @@ -50,7 +53,9 @@ public class HrmResourceTriggerRunnable implements Runnable { jclMap.setFType(4); // 查询当前人员信息数据 String ecResourceId = getHrmResourceMapper().getEcResourceId(userId.toString()); + // EC人员 HrmResource ecHrmResource = getHrmResourceTriggerMapper().getHrmResource(Long.parseLong(ecResourceId)); + // 聚才林人员 HrmResourcePO hrmResource = getCompTriggerMapper().getResourceByEcId(Integer.parseInt(ecResourceId)); if (null != hrmResource && null!=ecHrmResource) { jclMap.setFObjId(hrmResource.getId().intValue()); @@ -60,22 +65,24 @@ public class HrmResourceTriggerRunnable implements Runnable { jclMap.setFName(hrmResource.getLastName()); jclMap.setUuid(hrmResource.getUuid()); delete = hrmResource.getStatus() < 4 ? 0 : 1; - jclMap.setFLeaderImg(ecHrmResource.getMessagerurl()); + // 展示为花名册上传的照片 + String image = User.builder().image(hrmResource.getResourceImageId()).build().getImage(); + jclMap.setFLeaderImg(image); + // TODO 是否刷新架构图本人所有的图像 jclMap.setFLeaderName(hrmResource.getLastName()); jclMap.setFLeaderJobId(hrmResource.getJobTitle().intValue()); - HrmResourcePO resourceByEcId = getCompTriggerMapper().getResourceByEcId(Integer.parseInt(ecResourceId)); - if (null != resourceByEcId) { - Long jobTitle = resourceByEcId.getJobTitle(); - if (null!=jobTitle) { - jclMap.setFObjParentId(jobTitle.intValue()); - jclMap.setFParentId(jclMap.getFObjParentId() + sj); + if (null != hrmResource.getJobTitle()) { + JobPO jobById = MapperProxyFactory.getProxy(JobMapper.class).getJobById(hrmResource.getJobTitle()); + if (null != jobById) { + jclMap.setFLeaderJob(jobById.getJobName()); } - jclMap.setFLeaderSt(resourceByEcId.getJobGrade()); - jclMap.setFLeaderLv(resourceByEcId.getJobLevel()); + jclMap.setFObjParentId(hrmResource.getJobTitle().intValue()); + jclMap.setFParentId(jclMap.getFObjParentId() + sj); } + jclMap.setFLeaderSt(hrmResource.getJobGrade()); + jclMap.setFLeaderLv(hrmResource.getJobLevel()); jclMap.setFClass(0); jclMap.setFClassName("行政维度"); - jclMap.setFLeaderJob(getCompTriggerMapper().getJobTitleMarkById(jclMap.getFLeaderJobId())); String currentDate = OrganizationDateUtil.getFormatLocalDate(new java.util.Date()); jclMap.setFDateBegin(new Date(OrganizationDateUtil.stringToDate(currentDate).getTime())); jclMap.setFDateEnd(new Date(OrganizationDateUtil.stringToDate("2099-12-31").getTime())); @@ -95,12 +102,19 @@ public class HrmResourceTriggerRunnable implements Runnable { // 更新当前架构图负责人的卡片信息 getHrmResourceTriggerMapper().updateLeaders(currentDate, hrmResource.getId().toString(), jclMap.getFLeaderImg(), jclMap.getFLeaderName(), jclMap.getFLeaderJobId(), jclMap.getFLeaderJob(), jclMap.getFLeaderLv(), jclMap.getFLeaderSt()); // 更新组织架构图在岗数 - if (null == jclOrgMapByObjID) { - new StaffTriggerRunnable(jclMap.getFObjParentId()).run(); - } else if (!jclMap.getFObjParentId().equals(jclOrgMapByObjID.getFObjParentId())) { + //if (null != jclOrgMapByObjID && !jclMap.getFObjParentId().equals(jclOrgMapByObjID.getFObjParentId())) { + // new StaffTriggerRunnable(jclOrgMapByObjID.getFObjParentId()).run(); + // new StaffTriggerRunnable(jclMap.getFObjParentId()).run(); + //} else { + // new StaffTriggerRunnable(jclMap.getFObjParentId()).run(); + //} + + + if (null != jclOrgMapByObjID) { new StaffTriggerRunnable(jclOrgMapByObjID.getFObjParentId()).run(); - new StaffTriggerRunnable(jclMap.getFObjParentId()).run(); } + new StaffTriggerRunnable(jclMap.getFObjParentId()).run(); + } else if (null != jclOrgMapByObjID) { new StaffTriggerRunnable(jclOrgMapByObjID.getFObjParentId()).run(); } diff --git a/src/com/engine/organization/thread/JobTriggerRunnable.java b/src/com/engine/organization/thread/JobTriggerRunnable.java index e2d40f3f..5be8d6e6 100644 --- a/src/com/engine/organization/thread/JobTriggerRunnable.java +++ b/src/com/engine/organization/thread/JobTriggerRunnable.java @@ -42,7 +42,8 @@ public class JobTriggerRunnable implements Runnable { this.oldJob = oldJob; this.newJob = newJob; } - public JobTriggerRunnable(Boolean forbiddenTag,JobPO oldJob, JobPO newJob) { + + public JobTriggerRunnable(Boolean forbiddenTag, JobPO oldJob, JobPO newJob) { this.oldJob = oldJob; this.newJob = newJob; this.forbiddenTag = forbiddenTag; @@ -52,7 +53,8 @@ public class JobTriggerRunnable implements Runnable { this.oldJob = new JobPO(); this.newJob = MapperProxyFactory.getProxy(JobMapper.class).getJobById(jobId); } - public JobTriggerRunnable(Long oldJobId,Long newJobId) { + + public JobTriggerRunnable(Long oldJobId, Long newJobId) { this.oldJob = MapperProxyFactory.getProxy(JobMapper.class).getJobById(oldJobId); this.newJob = MapperProxyFactory.getProxy(JobMapper.class).getJobById(newJobId); } @@ -71,84 +73,83 @@ public class JobTriggerRunnable implements Runnable { return; } // 判断 - if (diffFields.contains("jobName") || diffFields.contains("parentDept") || diffFields.contains("parentJob") || diffFields.contains("forbiddenTag") || diffFields.contains("deleteType")) { - JclOrgMap jclMap = new JclOrgMap(); - int st = 100000000; - int sj = 200000000; - jclMap.setFType(3); - // 更新逻辑 - jclMap.setFObjId(newJob.getId().intValue()); - jclMap.setId(newJob.getId().intValue() + sj); - jclMap.setFNumber(newJob.getJobNo()); - jclMap.setFName(newJob.getJobName()); - jclMap.setFParentId(null == newJob.getParentJob() ? newJob.getParentDept().intValue() + st : newJob.getParentJob().intValue() + sj); - jclMap.setFObjParentId(null == newJob.getParentJob() ? newJob.getParentDept().intValue() : newJob.getParentJob().intValue()); - Integer parentdept = newJob.getParentDept().intValue(); + JclOrgMap jclMap = new JclOrgMap(); + int st = 100000000; + int sj = 200000000; + jclMap.setFType(3); + // 更新逻辑 + jclMap.setFObjId(newJob.getId().intValue()); + jclMap.setId(newJob.getId().intValue() + sj); + jclMap.setFNumber(newJob.getJobNo()); + jclMap.setFName(newJob.getJobName()); + jclMap.setFParentId(null == newJob.getParentJob() ? newJob.getParentDept().intValue() + st : newJob.getParentJob().intValue() + sj); + jclMap.setFObjParentId(null == newJob.getParentJob() ? newJob.getParentDept().intValue() : newJob.getParentJob().intValue()); + Integer parentdept = newJob.getParentDept().intValue(); - jclMap.setFClass(0); - jclMap.setFClassName("行政维度"); + jclMap.setFClass(0); + jclMap.setFClassName("行政维度"); - String currentDate = OrganizationDateUtil.getFormatLocalDate(new java.util.Date()); - jclMap.setFDateBegin(new Date(OrganizationDateUtil.stringToDate(currentDate).getTime())); - jclMap.setFDateEnd(new Date(OrganizationDateUtil.stringToDate("2099-12-31").getTime())); + String currentDate = OrganizationDateUtil.getFormatLocalDate(new java.util.Date()); + jclMap.setFDateBegin(new Date(OrganizationDateUtil.stringToDate(currentDate).getTime())); + jclMap.setFDateEnd(new Date(OrganizationDateUtil.stringToDate("2099-12-31").getTime())); - JclOrgMap jclOrgMapByObjID = MapperProxyFactory.getProxy(JclOrgMapper.class).getJclOrgMapByObjID( jclMap.getFDateBegin(), ModuleTypeEnum.jobfielddefined.getValue().toString(), jclMap.getFObjId().toString()); + JclOrgMap jclOrgMapByObjID = MapperProxyFactory.getProxy(JclOrgMapper.class).getJclOrgMapByObjID(jclMap.getFDateBegin(), ModuleTypeEnum.jobfielddefined.getValue().toString(), jclMap.getFObjId().toString()); - // 该岗位有下级岗位时,查询 - JclOrgMap jclOrgMap = MapperProxyFactory.getProxy(JclOrgMapper.class).getSumPlanAndJobByFParentId(jclMap.getFDateBegin(), jclMap.getId().toString()); + // 该岗位有下级岗位时,查询 + JclOrgMap jclOrgMap = MapperProxyFactory.getProxy(JclOrgMapper.class).getSumPlanAndJobByFParentId(jclMap.getFDateBegin(), jclMap.getId().toString()); - StaffPO staffPO = new StaffPO(); - switch (jclMap.getFType()) { - // 部门 - case 2: - staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(2,null, jclMap.getFObjId().toString(), null); - break; - // 岗位 - case 3: - staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(3,null, null, jclMap.getFObjId().toString()); - break; - default: - break; - } - if (null != jclOrgMapByObjID) { - if (null != jclOrgMap) { - jclMap.setFPlan((null != staffPO ? staffPO.getStaffNum() : 0) + jclOrgMap.getFPlan()); - jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob() + jclOrgMap.getFOnJob()); - } else { - jclMap.setFPlan(null != staffPO ? staffPO.getStaffNum() : 0); - jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob()); - } + StaffPO staffPO = new StaffPO(); + switch (jclMap.getFType()) { + // 部门 + case 2: + staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(2, null, jclMap.getFObjId().toString(), null); + break; + // 岗位 + case 3: + staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(3, null, null, jclMap.getFObjId().toString()); + break; + default: + break; + } + if (null != jclOrgMapByObjID) { + if (null != jclOrgMap) { + jclMap.setFPlan((null != staffPO ? staffPO.getStaffNum() : 0) + jclOrgMap.getFPlan()); + jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob() + jclOrgMap.getFOnJob()); } else { jclMap.setFPlan(null != staffPO ? staffPO.getStaffNum() : 0); - jclMap.setFOnJob(0); + jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob()); } - jclMap.setFIsVitual(0); + } else { + jclMap.setFPlan(null != staffPO ? staffPO.getStaffNum() : 0); + jclMap.setFOnJob(0); + } + jclMap.setFIsVitual(0); - Calendar cal = Calendar.getInstance(); - cal.setTime(jclMap.getFDateBegin()); - Calendar calendar = DateUtil.addDay(cal, -1); - Date time = new Date(calendar.getTime().getTime()); - getCompTriggerMapper().deleteMap(jclMap.getFType(), jclMap.getFObjId(), jclMap.getFDateBegin()); - getCompTriggerMapper().updateMap(jclMap.getFType(), jclMap.getFObjId(), jclMap.getFDateBegin(), time); + Calendar cal = Calendar.getInstance(); + cal.setTime(jclMap.getFDateBegin()); + Calendar calendar = DateUtil.addDay(cal, -1); + Date time = new Date(calendar.getTime().getTime()); + getCompTriggerMapper().deleteMap(jclMap.getFType(), jclMap.getFObjId(), jclMap.getFDateBegin()); + getCompTriggerMapper().updateMap(jclMap.getFType(), jclMap.getFObjId(), jclMap.getFDateBegin(), time); - if (1 != newJob.getDeleteType() && 1 != newJob.getForbiddenTag()) { - MapperProxyFactory.getProxy(JclOrgMapper.class).insertMap(jclMap); - } - if (null != jclOrgMapByObjID) { - if(null != jclOrgMapByObjID.getFParentId()){ - updateParentPlanAndJob(jclMap.getFDateBegin(), jclOrgMapByObjID.getFParentId().toString()); - } - } - // 部门启用,刷新上级数据 - if(forbiddenTag){ - updateParentPlanAndJob(jclMap.getFDateBegin(), jclMap.getFParentId().toString()); - } - if (null != oldJob) { - if (null != oldJob.getId()){ - updateParentPlanAndJob(jclMap.getFDateBegin(), oldJob.getId().toString()); - } + if (1 != newJob.getDeleteType() && 1 != newJob.getForbiddenTag()) { + MapperProxyFactory.getProxy(JclOrgMapper.class).insertMap(jclMap); + } + if (null != jclOrgMapByObjID) { + if (null != jclOrgMapByObjID.getFParentId()) { + updateParentPlanAndJob(jclMap.getFDateBegin(), jclOrgMapByObjID.getFParentId().toString()); } } + // 部门启用,刷新上级数据 + if (forbiddenTag) { + updateParentPlanAndJob(jclMap.getFDateBegin(), jclMap.getFParentId().toString()); + } + if (null != oldJob) { + if (null != oldJob.getId()) { + updateParentPlanAndJob(jclMap.getFDateBegin(), oldJob.getId().toString()); + } + } + } /** diff --git a/src/com/engine/organization/thread/StaffTriggerRunnable.java b/src/com/engine/organization/thread/StaffTriggerRunnable.java index fa3ec7d9..39e5affa 100644 --- a/src/com/engine/organization/thread/StaffTriggerRunnable.java +++ b/src/com/engine/organization/thread/StaffTriggerRunnable.java @@ -176,7 +176,7 @@ public class StaffTriggerRunnable implements Runnable { getJclOrgMapper().updateMap(type, objId, currentDate, yesterday); jclOrgMapByObjID.setFPlan(addInteger(planSum, childPlanSum)); jclOrgMapByObjID.setFOnJob(addInteger(onJobSum, childOnJobSum)); - jclOrgMapByObjID.setFDateBegin(new Date(System.currentTimeMillis())); + jclOrgMapByObjID.setFDateBegin(currentDate); getJclOrgMapper().insertMap(jclOrgMapByObjID); } diff --git a/src/com/engine/organization/wrapper/DepartmentWrapper.java b/src/com/engine/organization/wrapper/DepartmentWrapper.java index 43156670..5f380713 100644 --- a/src/com/engine/organization/wrapper/DepartmentWrapper.java +++ b/src/com/engine/organization/wrapper/DepartmentWrapper.java @@ -133,7 +133,6 @@ public class DepartmentWrapper extends OrganizationWrapper { DepartmentPO newDeptById = getDepartmentMapper().getDeptById(id); writeOperateLog(new Object() { }.getClass(), deptById.getDeptName(), JSON.toJSONString(params), deptById, newDeptById); - new Thread(new DepartmentTriggerRunnable(deptById, newDeptById)).start(); return departmentId; } diff --git a/src/com/engine/organization/wrapper/JobWrapper.java b/src/com/engine/organization/wrapper/JobWrapper.java index a97ba593..2e447fe1 100644 --- a/src/com/engine/organization/wrapper/JobWrapper.java +++ b/src/com/engine/organization/wrapper/JobWrapper.java @@ -11,11 +11,9 @@ import com.engine.organization.entity.job.param.JobMergeParam; import com.engine.organization.entity.job.param.JobSearchParam; import com.engine.organization.entity.job.po.JobPO; import com.engine.organization.entity.searchtree.SearchTreeParams; -import com.engine.organization.entity.staff.po.StaffPO; import com.engine.organization.enums.LogModuleNameEnum; import com.engine.organization.enums.OperateTypeEnum; import com.engine.organization.mapper.job.JobMapper; -import com.engine.organization.mapper.staff.StaffMapper; import com.engine.organization.service.JobService; import com.engine.organization.service.impl.JobServiceImpl; import com.engine.organization.thread.JobTriggerRunnable; @@ -135,7 +133,7 @@ public class JobWrapper extends OrganizationWrapper { writeOperateLog(new Object() { }.getClass(), jobById.getJobName(), JSON.toJSONString(params), jobById, newJobById); // 更新组织架构图 - new Thread(new JobTriggerRunnable(jobById, newJobById)).start(); + return jobId; } From 92b246b5d51464a7974b854246a0c3c2760fc720 Mon Sep 17 00:00:00 2001 From: dxfeng Date: Thu, 27 Oct 2022 14:39:35 +0800 Subject: [PATCH 05/21] =?UTF-8?q?=E7=BB=84=E7=BB=87=E6=9E=B6=E6=9E=84?= =?UTF-8?q?=E5=9B=BE=E7=9B=B8=E5=85=B3BUG=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hrmresource/ResourceBasicInfoMapper.xml | 59 ++++++++ .../trigger/HrmResourceTriggerMapper.java | 5 +- .../service/impl/HrmResourceServiceImpl.java | 4 +- .../service/impl/ImportCommonServiceImpl.java | 26 ++-- .../thread/CompanyTriggerRunnable.java | 141 +++++++++--------- .../thread/DepartmentTriggerRunnable.java | 36 ++--- .../thread/HrmResourceTriggerRunnable.java | 11 +- .../util/saveimport/StaffInfoImportUtil.java | 6 +- 8 files changed, 167 insertions(+), 121 deletions(-) diff --git a/src/com/engine/organization/mapper/hrmresource/ResourceBasicInfoMapper.xml b/src/com/engine/organization/mapper/hrmresource/ResourceBasicInfoMapper.xml index 75399691..63ddf36d 100644 --- a/src/com/engine/organization/mapper/hrmresource/ResourceBasicInfoMapper.xml +++ b/src/com/engine/organization/mapper/hrmresource/ResourceBasicInfoMapper.xml @@ -161,6 +161,65 @@ + + + select JCL_ORG_ITEM_ID.currval from dual + + INSERT INTO jcl_org_item + + + fclassid, + + + fno, + + + fname, + + + fmemo, + + + fdelete, + + + creator, + + + create_time, + + + update_time, + + + + + #{fclassid}, + + + #{fno}, + + + #{fname}, + + + #{fmemo}, + + + #{fdelete}, + + + #{creator}, + + + #{createTime}, + + + #{updateTime}, + + + + diff --git a/src/com/engine/organization/mapper/trigger/HrmResourceTriggerMapper.java b/src/com/engine/organization/mapper/trigger/HrmResourceTriggerMapper.java index 2d4d3011..2fb269fe 100644 --- a/src/com/engine/organization/mapper/trigger/HrmResourceTriggerMapper.java +++ b/src/com/engine/organization/mapper/trigger/HrmResourceTriggerMapper.java @@ -3,6 +3,7 @@ package com.engine.organization.mapper.trigger; import org.apache.ibatis.annotations.Param; import weaver.hrm.passwordprotection.domain.HrmResource; +import java.sql.Date; import java.util.List; /** @@ -13,8 +14,8 @@ import java.util.List; public interface HrmResourceTriggerMapper { HrmResource getHrmResource(@Param("id") Long id); - List getFidsByFleader(@Param("fLeader") String fLeader, @Param("currentDate") String currentDate); + List getFidsByFleader(@Param("fLeader") String fLeader, @Param("currentDate") Date currentDate); - int updateLeaders(@Param("currentDate") String currentDate,@Param("fLeader") String fLeader, @Param("fLeaderImg") String fLeaderImg, @Param("fLeaderName") String fLeaderName, @Param("fLeaderJobId") Integer fLeaderJobId, @Param("fLeaderJob") String fLeaderJob, @Param("fLeaderLv") String fLeaderLv, @Param("fLeaderSt") String fLeaderSt); + int updateLeaders(@Param("currentDate") Date currentDate,@Param("fLeader") String fLeader, @Param("fLeaderImg") String fLeaderImg, @Param("fLeaderName") String fLeaderName, @Param("fLeaderJobId") Integer fLeaderJobId, @Param("fLeaderJob") String fLeaderJob, @Param("fLeaderLv") String fLeaderLv, @Param("fLeaderSt") String fLeaderSt); } diff --git a/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java b/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java index ec082250..d6b2040b 100644 --- a/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java +++ b/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java @@ -231,7 +231,7 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic RecordInfo recordInfo = getSystemDataMapper().getHrmObjectByID(HRM_RESOURCE, ecResourceId); params.put("uuid", recordInfo.getUuid()); Long resourceId = getExtService(user).updateExtForm(user, EXTEND_TYPE, JCL_ORG_HRM, params, "", null); - new Thread(new HrmResourceTriggerRunnable(resourceId)).start(); + new HrmResourceTriggerRunnable(resourceId).run(); return resourceId; } @@ -308,7 +308,7 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic //更新明细表 getExtService(user).updateExtDT(user, EXTEND_TYPE, JCL_ORG_HRMEXT_DT1, params, id); - new Thread(new HrmResourceTriggerRunnable(id)).start(); + new HrmResourceTriggerRunnable(id).run(); return updateCount; } diff --git a/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java b/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java index 1aca837d..9c8bf1d0 100644 --- a/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java +++ b/src/com/engine/organization/service/impl/ImportCommonServiceImpl.java @@ -324,9 +324,9 @@ public class ImportCommonServiceImpl extends Service implements ImportCommonServ lsPromptLabel.add(34275); lsPromptLabel.add(125452); lsPromptLabel.add(125466); - lsPromptLabel.add(522355); - lsPromptLabel.add(522356); - lsPromptLabel.add(522357); + //lsPromptLabel.add(522355); + //lsPromptLabel.add(522356); + //lsPromptLabel.add(522357); //lsPromptLabel.add(530411); for (int i = 0; i < lsPromptLabel.size(); i++) { @@ -386,9 +386,9 @@ public class ImportCommonServiceImpl extends Service implements ImportCommonServ lsPromptLabel.add(34275); lsPromptLabel.add(125452); lsPromptLabel.add(125466); - lsPromptLabel.add(522355); - lsPromptLabel.add(522356); - lsPromptLabel.add(522357); + //lsPromptLabel.add(522355); + //lsPromptLabel.add(522356); + //lsPromptLabel.add(522357); //lsPromptLabel.add(530411); for (int i = 0; i < lsPromptLabel.size(); i++) { @@ -521,7 +521,7 @@ public class ImportCommonServiceImpl extends Service implements ImportCommonServ lsPromptLabel.add(81699); lsPromptLabel.add(516263); //lsPromptLabel.add(81701); - lsPromptLabel.add(388880); + //lsPromptLabel.add(388880); lsPromptLabel.add(81702); lsPromptLabel.add(81703); lsPromptLabel.add(125869); @@ -1132,16 +1132,14 @@ public class ImportCommonServiceImpl extends Service implements ImportCommonServ ExtendInfoParams infoParams = ExtendInfoParams.builder().tableName("JCL_ORG_JOB").params(map).build(); map.put("jobactivityid", JobServiceImpl.JOB_ACTIVITY_ID); - map.put("id", infoParams.getId()); Map syncMap = new OrganizationSyncEc(user, LogModuleNameEnum.JOB, OperateTypeEnum.ADD, map, false).sync(); if (isThrowError(syncMap)) { boolean assertNameRepeat = JobServiceImpl.assertNameRepeat(null, Util.null2String(map.get("ec_department")), Util.null2String(map.get("parent_job")), Util.null2String(map.get("job_name"))); if (assertNameRepeat) { - map.remove("id"); map.remove("jobactivityid"); MapperProxyFactory.getProxy(ExtMapper.class).insertTable(infoParams); // 更新组织架构图 - new Thread(new JobTriggerRunnable(jobId)).start(); + new Thread(new JobTriggerRunnable(infoParams.getId())).start(); historyDetailPO.setOperateDetail("添加成功"); historyDetailPO.setStatus("1"); } else { @@ -1409,7 +1407,7 @@ public class ImportCommonServiceImpl extends Service implements ImportCommonServ map.remove("id"); MapperProxyFactory.getProxy(ExtMapper.class).insertTable(infoParams); // 更新组织架构图 - new Thread(new HrmResourceTriggerRunnable(infoParams.getId())).start(); + new HrmResourceTriggerRunnable(infoParams.getId()).run(); historyDetailPO.setOperateDetail("添加成功"); historyDetailPO.setStatus("1"); @@ -1433,7 +1431,7 @@ public class ImportCommonServiceImpl extends Service implements ImportCommonServ map.remove("id"); MapperProxyFactory.getProxy(ExtMapper.class).updateTable(ExtendInfoParams.builder().id(resourceId).tableName("JCL_ORG_HRMRESOURCE").params(map).build()); // 更新组织架构图 - new Thread(new HrmResourceTriggerRunnable(resourceId)).start(); + new HrmResourceTriggerRunnable(resourceId).run(); historyDetailPO.setOperateDetail("更新成功"); historyDetailPO.setStatus("1"); @@ -1527,10 +1525,10 @@ public class ImportCommonServiceImpl extends Service implements ImportCommonServ Map optionMap = options.stream().collect(Collectors.toMap(FieldSelectOptionBean::getOption, FieldSelectOptionBean::getId, (k1, k2) -> k1)); object = optionMap.get(cellValue); break; - case 4:// CHECKBOX case 6: // FILEUPLOAD break; + case 4:// CHECKBOX case 7:// TEXT case 2:// TEXTAREA default: @@ -1602,7 +1600,7 @@ public class ImportCommonServiceImpl extends Service implements ImportCommonServ iterator.remove(); } - if ("所属部门".equals(column) || "上级部门".equals(column) || "部门".equals(column)) { + if ("所属部门".equals(column) || "上级部门".equals(column)) { departmentColumn = column; iterator.remove(); } diff --git a/src/com/engine/organization/thread/CompanyTriggerRunnable.java b/src/com/engine/organization/thread/CompanyTriggerRunnable.java index f170edf9..0f6a757d 100644 --- a/src/com/engine/organization/thread/CompanyTriggerRunnable.java +++ b/src/com/engine/organization/thread/CompanyTriggerRunnable.java @@ -2,23 +2,22 @@ package com.engine.organization.thread; import com.engine.organization.entity.company.po.CompPO; import com.engine.organization.entity.hrmresource.po.HrmResourcePO; -import com.engine.organization.entity.logview.bo.FieldBaseEquator; +import com.engine.organization.entity.job.po.JobPO; import com.engine.organization.entity.map.JclOrgMap; +import com.engine.organization.entity.personnelcard.User; import com.engine.organization.entity.staff.po.StaffPO; import com.engine.organization.enums.ModuleTypeEnum; import com.engine.organization.mapper.comp.CompMapper; import com.engine.organization.mapper.jclorgmap.JclOrgMapper; +import com.engine.organization.mapper.job.JobMapper; import com.engine.organization.mapper.staff.StaffMapper; import com.engine.organization.mapper.trigger.CompTriggerMapper; import com.engine.organization.util.OrganizationDateUtil; import com.engine.organization.util.db.MapperProxyFactory; -import org.apache.commons.collections.CollectionUtils; import weaver.common.DateUtil; -import weaver.hrm.passwordprotection.domain.HrmResource; import java.sql.Date; import java.util.Calendar; -import java.util.List; /** * @author:dxfeng @@ -52,80 +51,76 @@ public class CompanyTriggerRunnable implements Runnable { @Override public void run() { - FieldBaseEquator fieldBaseEquator = new FieldBaseEquator(); - List diffFields = fieldBaseEquator.getDiffFieldList(oldCompany, newCompany); - if (CollectionUtils.isEmpty(diffFields)) { - return; - } // 判断 - if (diffFields.contains("compName") || diffFields.contains("compPrincipal") || diffFields.contains("parentCompany") || diffFields.contains("forbiddenTag") || diffFields.contains("deleteType")) { - JclOrgMap jclMap = new JclOrgMap(); + JclOrgMap jclMap = new JclOrgMap(); - jclMap.setFType(1); - // 更新逻辑 - jclMap.setFObjId(newCompany.getId().intValue()); - jclMap.setId(newCompany.getId().intValue()); - jclMap.setUuid(newCompany.getUuid()); - jclMap.setFNumber(newCompany.getCompNo()); - jclMap.setFName(newCompany.getCompName()); - jclMap.setFLeader(newCompany.getCompPrincipal()); - jclMap.setFParentId(null == newCompany.getParentCompany() ? 0 : newCompany.getParentCompany().intValue()); - jclMap.setFObjParentId(null == newCompany.getParentCompany() ? 0 : newCompany.getParentCompany().intValue()); - jclMap.setFEcId(getCompTriggerMapper().getEcCompanyIdByUuid(jclMap.getUuid())); + jclMap.setFType(1); + // 更新逻辑 + jclMap.setFObjId(newCompany.getId().intValue()); + jclMap.setId(newCompany.getId().intValue()); + jclMap.setUuid(newCompany.getUuid()); + jclMap.setFNumber(newCompany.getCompNo()); + jclMap.setFName(newCompany.getCompName()); + jclMap.setFParentId(null == newCompany.getParentCompany() ? 0 : newCompany.getParentCompany().intValue()); + jclMap.setFObjParentId(null == newCompany.getParentCompany() ? 0 : newCompany.getParentCompany().intValue()); + jclMap.setFEcId(getCompTriggerMapper().getEcCompanyIdByUuid(jclMap.getUuid())); - jclMap.setFClass(0); - jclMap.setFClassName("行政维度"); - HrmResource hrmResourceById = getCompTriggerMapper().getHrmResourceById(jclMap.getFLeader()); + jclMap.setFClass(0); + jclMap.setFClassName("行政维度"); - - if (null != hrmResourceById) { - jclMap.setFLeaderImg(hrmResourceById.getMessagerurl()); - jclMap.setFLeaderName(hrmResourceById.getLastname()); - jclMap.setFLeaderJobId(hrmResourceById.getJobtitle()); - } - - jclMap.setFLeaderJob(getCompTriggerMapper().getJobTitleMarkById(jclMap.getFLeaderJobId())); - - HrmResourcePO resourceByEcId = getCompTriggerMapper().getResourceByEcId(jclMap.getFLeader()); - if (null != resourceByEcId) { - jclMap.setFLeaderSt(resourceByEcId.getJobGrade()); - jclMap.setFLeaderLv(resourceByEcId.getJobLevel()); - } - String currentDate = OrganizationDateUtil.getFormatLocalDate(new java.util.Date()); - jclMap.setFDateBegin(new Date(OrganizationDateUtil.stringToDate(currentDate).getTime())); - jclMap.setFDateEnd(new Date(OrganizationDateUtil.stringToDate("2099-12-31").getTime())); - - StaffPO staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(jclMap.getFType(),jclMap.getFObjId().toString(),null, null); - JclOrgMap jclOrgMapByObjID = MapperProxyFactory.getProxy(JclOrgMapper.class).getJclOrgMapByObjID(jclMap.getFDateBegin(), ModuleTypeEnum.subcompanyfielddefined.getValue().toString(), jclMap.getFObjId().toString()); - if (null != jclOrgMapByObjID) { - jclMap.setFPlan(jclOrgMapByObjID.getFPlan()); - jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob()); - } else { - jclMap.setFPlan(null != staffPO ? staffPO.getStaffNum() : 0); - jclMap.setFOnJob(0); - } - jclMap.setFIsVitual(0); - - Calendar cal = Calendar.getInstance(); - cal.setTime(jclMap.getFDateBegin()); - Calendar calendar = DateUtil.addDay(cal, -1); - Date time = new Date(calendar.getTime().getTime()); - getCompTriggerMapper().deleteMap(jclMap.getFType(), jclMap.getFObjId(), jclMap.getFDateBegin()); - getCompTriggerMapper().updateMap(jclMap.getFType(), jclMap.getFObjId(), jclMap.getFDateBegin(), time); - - if (1 != newCompany.getDeleteType() && 1 != newCompany.getForbiddenTag()) { - MapperProxyFactory.getProxy(JclOrgMapper.class).insertMap(jclMap); - } - if (null != jclOrgMapByObjID) { - if (null != jclOrgMapByObjID.getFParentId()) { - updateParentPlanAndJob(jclMap.getFDateBegin(), jclOrgMapByObjID.getFParentId().toString()); + Integer ecResourceId = newCompany.getCompPrincipal(); + HrmResourcePO hrmResourcePO = getCompTriggerMapper().getResourceByEcId(ecResourceId); + if (null != hrmResourcePO) { + jclMap.setFLeader(hrmResourcePO.getId().intValue()); + jclMap.setFLeaderName(hrmResourcePO.getLastName()); + jclMap.setFLeaderJobId(hrmResourcePO.getJobTitle().intValue()); + jclMap.setFLeaderSt(hrmResourcePO.getJobGrade()); + jclMap.setFLeaderLv(hrmResourcePO.getJobLevel()); + String image = User.builder().image(hrmResourcePO.getResourceImageId()).build().getImage(); + jclMap.setFLeaderImg(image); + if (null != hrmResourcePO.getJobTitle()) { + JobPO jobById = MapperProxyFactory.getProxy(JobMapper.class).getJobById(hrmResourcePO.getJobTitle()); + if (null != jobById) { + jclMap.setFLeaderJob(jobById.getJobName()); } } - if (null != oldCompany) { - if(null != oldCompany.getId()){ - updateParentPlanAndJob(jclMap.getFDateBegin(), oldCompany.getId().toString()); - } + } + + + String currentDate = OrganizationDateUtil.getFormatLocalDate(new java.util.Date()); + jclMap.setFDateBegin(new Date(OrganizationDateUtil.stringToDate(currentDate).getTime())); + jclMap.setFDateEnd(new Date(OrganizationDateUtil.stringToDate("2099-12-31").getTime())); + + StaffPO staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(jclMap.getFType(), jclMap.getFObjId().toString(), null, null); + JclOrgMap jclOrgMapByObjID = MapperProxyFactory.getProxy(JclOrgMapper.class).getJclOrgMapByObjID(jclMap.getFDateBegin(), ModuleTypeEnum.subcompanyfielddefined.getValue().toString(), jclMap.getFObjId().toString()); + if (null != jclOrgMapByObjID) { + jclMap.setFPlan(jclOrgMapByObjID.getFPlan()); + jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob()); + } else { + jclMap.setFPlan(null != staffPO ? staffPO.getStaffNum() : 0); + jclMap.setFOnJob(0); + } + jclMap.setFIsVitual(0); + + Calendar cal = Calendar.getInstance(); + cal.setTime(jclMap.getFDateBegin()); + Calendar calendar = DateUtil.addDay(cal, -1); + Date time = new Date(calendar.getTime().getTime()); + getCompTriggerMapper().deleteMap(jclMap.getFType(), jclMap.getFObjId(), jclMap.getFDateBegin()); + getCompTriggerMapper().updateMap(jclMap.getFType(), jclMap.getFObjId(), jclMap.getFDateBegin(), time); + + if (1 != newCompany.getDeleteType() && 1 != newCompany.getForbiddenTag()) { + MapperProxyFactory.getProxy(JclOrgMapper.class).insertMap(jclMap); + } + if (null != jclOrgMapByObjID) { + if (null != jclOrgMapByObjID.getFParentId()) { + updateParentPlanAndJob(jclMap.getFDateBegin(), jclOrgMapByObjID.getFParentId().toString()); + } + } + if (null != oldCompany) { + if (null != oldCompany.getId()) { + updateParentPlanAndJob(jclMap.getFDateBegin(), oldCompany.getId().toString()); } } } @@ -138,9 +133,9 @@ public class CompanyTriggerRunnable implements Runnable { if (null != parentJclOrgMap) { // 上级部门当前在编、在岗数 JclOrgMap jclOrgMapSum = MapperProxyFactory.getProxy(JclOrgMapper.class).getSumPlanAndJobByFParentId(currentDate, parentJclOrgMap.getId().toString()); - StaffPO staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(parentJclOrgMap.getFType(),parentId,null, null); + StaffPO staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(parentJclOrgMap.getFType(), parentId, null, null); if (null != jclOrgMapSum) { - parentJclOrgMap.setFPlan((null != staffPO ? staffPO.getStaffNum() : 0 ) + jclOrgMapSum.getFPlan()); + parentJclOrgMap.setFPlan((null != staffPO ? staffPO.getStaffNum() : 0) + jclOrgMapSum.getFPlan()); parentJclOrgMap.setFOnJob(jclOrgMapSum.getFOnJob()); } else { parentJclOrgMap.setFPlan(null != staffPO ? staffPO.getStaffNum() : 0); diff --git a/src/com/engine/organization/thread/DepartmentTriggerRunnable.java b/src/com/engine/organization/thread/DepartmentTriggerRunnable.java index a610a42b..29f349b8 100644 --- a/src/com/engine/organization/thread/DepartmentTriggerRunnable.java +++ b/src/com/engine/organization/thread/DepartmentTriggerRunnable.java @@ -2,12 +2,15 @@ package com.engine.organization.thread; import com.engine.organization.entity.department.po.DepartmentPO; import com.engine.organization.entity.hrmresource.po.HrmResourcePO; +import com.engine.organization.entity.job.po.JobPO; import com.engine.organization.entity.logview.bo.FieldBaseEquator; import com.engine.organization.entity.map.JclOrgMap; +import com.engine.organization.entity.personnelcard.User; import com.engine.organization.entity.staff.po.StaffPO; import com.engine.organization.enums.ModuleTypeEnum; import com.engine.organization.mapper.department.DepartmentMapper; import com.engine.organization.mapper.jclorgmap.JclOrgMapper; +import com.engine.organization.mapper.job.JobMapper; import com.engine.organization.mapper.staff.StaffMapper; import com.engine.organization.mapper.trigger.CompTriggerMapper; import com.engine.organization.mapper.trigger.DepartmentTriggerMapper; @@ -16,7 +19,6 @@ import com.engine.organization.util.db.MapperProxyFactory; import org.apache.commons.collections.CollectionUtils; import weaver.common.DateUtil; import weaver.general.Util; -import weaver.hrm.passwordprotection.domain.HrmResource; import java.sql.Date; import java.util.Calendar; @@ -96,7 +98,6 @@ public class DepartmentTriggerRunnable implements Runnable { jclMap.setUuid(newDepartment.getUuid()); jclMap.setFNumber(newDepartment.getDeptNo()); jclMap.setFName(newDepartment.getDeptName()); - jclMap.setFLeader(null == newDepartment.getDeptPrincipal() ? null : newDepartment.getDeptPrincipal().intValue()); jclMap.setFParentId(null == newDepartment.getParentDept() ? newDepartment.getParentComp().intValue() : newDepartment.getParentDept().intValue() + st); jclMap.setFObjParentId(null == newDepartment.getParentDept() ? newDepartment.getParentComp().intValue() : newDepartment.getParentDept().intValue()); @@ -104,22 +105,24 @@ public class DepartmentTriggerRunnable implements Runnable { jclMap.setFClass(0); jclMap.setFClassName("行政维度"); - HrmResource hrmResourceById = getCompTriggerMapper().getHrmResourceById(jclMap.getFLeader()); - - if (null != hrmResourceById) { - jclMap.setFLeaderImg(hrmResourceById.getMessagerurl()); - jclMap.setFLeaderName(hrmResourceById.getLastname()); - jclMap.setFLeaderJobId(hrmResourceById.getJobtitle()); + Integer ecResourceId = null == newDepartment.getDeptPrincipal() ? null : newDepartment.getDeptPrincipal().intValue(); + HrmResourcePO hrmResourcePO = getCompTriggerMapper().getResourceByEcId(ecResourceId); + if (null != hrmResourcePO) { + jclMap.setFLeader(hrmResourcePO.getId().intValue()); + jclMap.setFLeaderName(hrmResourcePO.getLastName()); + jclMap.setFLeaderJobId(hrmResourcePO.getJobTitle().intValue()); + jclMap.setFLeaderSt(hrmResourcePO.getJobGrade()); + jclMap.setFLeaderLv(hrmResourcePO.getJobLevel()); + String image = User.builder().image(hrmResourcePO.getResourceImageId()).build().getImage(); + jclMap.setFLeaderImg(image); + if (null != hrmResourcePO.getJobTitle()) { + JobPO jobById = MapperProxyFactory.getProxy(JobMapper.class).getJobById(hrmResourcePO.getJobTitle()); + if (null != jobById) { + jclMap.setFLeaderJob(jobById.getJobName()); + } + } } - jclMap.setFLeaderJob(getCompTriggerMapper().getJobTitleMarkById(jclMap.getFLeaderJobId())); - - - HrmResourcePO resourceByEcId = getCompTriggerMapper().getResourceByEcId(jclMap.getFLeader()); - if (null != resourceByEcId) { - jclMap.setFLeaderSt(resourceByEcId.getJobGrade()); - jclMap.setFLeaderLv(resourceByEcId.getJobLevel()); - } String currentDate = OrganizationDateUtil.getFormatLocalDate(new java.util.Date()); jclMap.setFDateBegin(new Date(OrganizationDateUtil.stringToDate(currentDate).getTime())); jclMap.setFDateEnd(new Date(OrganizationDateUtil.stringToDate("2099-12-31").getTime())); @@ -127,7 +130,6 @@ public class DepartmentTriggerRunnable implements Runnable { // 获取当前生效的本部门map记录 JclOrgMap jclOrgMapByObjID = MapperProxyFactory.getProxy(JclOrgMapper.class).getJclOrgMapByObjID(jclMap.getFDateBegin(), ModuleTypeEnum.departmentfielddefined.getValue().toString(), Util.null2String(jclMap.getFObjId())); StaffPO staffPO = new StaffPO(); -// StaffPO staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(null,jclMap.getFObjId().toString(), null); switch (jclMap.getFType()) { // 分部 case 1: diff --git a/src/com/engine/organization/thread/HrmResourceTriggerRunnable.java b/src/com/engine/organization/thread/HrmResourceTriggerRunnable.java index 4efebe36..283aa32b 100644 --- a/src/com/engine/organization/thread/HrmResourceTriggerRunnable.java +++ b/src/com/engine/organization/thread/HrmResourceTriggerRunnable.java @@ -68,7 +68,6 @@ public class HrmResourceTriggerRunnable implements Runnable { // 展示为花名册上传的照片 String image = User.builder().image(hrmResource.getResourceImageId()).build().getImage(); jclMap.setFLeaderImg(image); - // TODO 是否刷新架构图本人所有的图像 jclMap.setFLeaderName(hrmResource.getLastName()); jclMap.setFLeaderJobId(hrmResource.getJobTitle().intValue()); if (null != hrmResource.getJobTitle()) { @@ -100,16 +99,8 @@ public class HrmResourceTriggerRunnable implements Runnable { if (0 == delete) { MapperProxyFactory.getProxy(JclOrgMapper.class).insertMap(jclMap); // 更新当前架构图负责人的卡片信息 - getHrmResourceTriggerMapper().updateLeaders(currentDate, hrmResource.getId().toString(), jclMap.getFLeaderImg(), jclMap.getFLeaderName(), jclMap.getFLeaderJobId(), jclMap.getFLeaderJob(), jclMap.getFLeaderLv(), jclMap.getFLeaderSt()); + getHrmResourceTriggerMapper().updateLeaders(jclMap.getFDateBegin(), hrmResource.getId().toString(), jclMap.getFLeaderImg(), jclMap.getFLeaderName(), jclMap.getFLeaderJobId(), jclMap.getFLeaderJob(), jclMap.getFLeaderLv(), jclMap.getFLeaderSt()); // 更新组织架构图在岗数 - //if (null != jclOrgMapByObjID && !jclMap.getFObjParentId().equals(jclOrgMapByObjID.getFObjParentId())) { - // new StaffTriggerRunnable(jclOrgMapByObjID.getFObjParentId()).run(); - // new StaffTriggerRunnable(jclMap.getFObjParentId()).run(); - //} else { - // new StaffTriggerRunnable(jclMap.getFObjParentId()).run(); - //} - - if (null != jclOrgMapByObjID) { new StaffTriggerRunnable(jclOrgMapByObjID.getFObjParentId()).run(); } diff --git a/src/com/engine/organization/util/saveimport/StaffInfoImportUtil.java b/src/com/engine/organization/util/saveimport/StaffInfoImportUtil.java index d8b15864..7515af01 100644 --- a/src/com/engine/organization/util/saveimport/StaffInfoImportUtil.java +++ b/src/com/engine/organization/util/saveimport/StaffInfoImportUtil.java @@ -138,7 +138,7 @@ public class StaffInfoImportUtil { // 分部 if ("comp_id".equals(infoPO.getFieldName())) { String[] split = cellValue.split(">"); - if (split.length > 0) { + if (split.length > 0 && StringUtils.isNotBlank(cellValue)) { if (split.length > 8) { historyDetailPO.setOperateDetail("分部层级不能大于10"); historyDetailPO.setStatus("0"); @@ -161,7 +161,7 @@ public class StaffInfoImportUtil { // 部门 if ("dept_id".equals(infoPO.getFieldName())) { String[] split = cellValue.split(">"); - if (split.length > 0) { + if (split.length > 0 && StringUtils.isNotBlank(cellValue)) { if (split.length > 8) { historyDetailPO.setOperateDetail("部门层级不能大于10"); historyDetailPO.setStatus("0"); @@ -194,7 +194,7 @@ public class StaffInfoImportUtil { continue nextRow; } String[] split = cellValue.split(">"); - if (split.length > 0) { + if (split.length > 0 && StringUtils.isNotBlank(cellValue)) { if (split.length > 8) { historyDetailPO.setOperateDetail("岗位层级不能大于10"); historyDetailPO.setStatus("0"); From 2b975e6636eaf62c069f312acf48c2310a9bce48 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Fri, 21 Oct 2022 17:53:15 +0800 Subject: [PATCH 06/21] =?UTF-8?q?=E6=A8=A1=E5=9D=97=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=88=86=E6=9D=83=E4=B8=AD=E5=BF=83=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/表结构SQL/MySQL.sql | 6 +- docs/表结构SQL/Oracle.sql | 6 +- docs/表结构SQL/SqlServer.sql | 6 +- .../web/ManagerDetachController.java | 13 ++++ .../entity/detach/po/ManagerDetachPO.java | 66 +++++++++++++++++++ .../entity/detach/vo/ManagerDetachVO.java | 11 ++++ .../entity/scheme/po/SchemePO.java | 8 +-- .../service/ManagerDetachService.java | 10 +++ .../impl/ManagerDetachServiceImpl.java | 13 ++++ .../web/ManagerDetachController.java | 45 +++++++++++++ .../wrapper/ManagerDetachWrapper.java | 26 ++++++++ 11 files changed, 200 insertions(+), 10 deletions(-) create mode 100644 src/com/api/organization/web/ManagerDetachController.java create mode 100644 src/com/engine/organization/entity/detach/po/ManagerDetachPO.java create mode 100644 src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java create mode 100644 src/com/engine/organization/service/ManagerDetachService.java create mode 100644 src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java create mode 100644 src/com/engine/organization/web/ManagerDetachController.java create mode 100644 src/com/engine/organization/wrapper/ManagerDetachWrapper.java diff --git a/docs/表结构SQL/MySQL.sql b/docs/表结构SQL/MySQL.sql index ca8be925..a4da50a8 100644 --- a/docs/表结构SQL/MySQL.sql +++ b/docs/表结构SQL/MySQL.sql @@ -549,8 +549,10 @@ create table JCL_ORG_ITEM ( create table JCL_ORG_DETACH ( id int auto_increment not null, type int null, - manger text not null, - rolelevel text not null, + ec_manger text not null, + jcl_manger text not null, + ec_rolelevel text not null, + jcl_rolelevel text not null, module text not null, creator int null, delete_type int null, diff --git a/docs/表结构SQL/Oracle.sql b/docs/表结构SQL/Oracle.sql index fd026eb8..187d01f6 100644 --- a/docs/表结构SQL/Oracle.sql +++ b/docs/表结构SQL/Oracle.sql @@ -491,8 +491,10 @@ CREATE TABLE JCL_ORG_HRMRELATION ( create table JCL_ORG_DETACH ( id number not null, type number null, - manger clob not null, - rolelevel clob not null, + ec_manger clob not null, + jcl_manger clob not null, + ec_rolelevel clob not null, + jcl_rolelevel clob not null, module clob not null, creator number null, delete_type number null, diff --git a/docs/表结构SQL/SqlServer.sql b/docs/表结构SQL/SqlServer.sql index 0cddf6f5..d397a3bc 100644 --- a/docs/表结构SQL/SqlServer.sql +++ b/docs/表结构SQL/SqlServer.sql @@ -522,8 +522,10 @@ CREATE TABLE JCL_ORG_MAP ( create table JCL_ORG_DETACH ( id int IDENTITY(1,1) not null, type int null, - manger text not null, - rolelevel text not null, + ec_manger text not null, + jcl_manger text not null, + ec_rolelevel text not null, + jcl_rolelevel text not null, module text not null, creator int null, delete_type int null, diff --git a/src/com/api/organization/web/ManagerDetachController.java b/src/com/api/organization/web/ManagerDetachController.java new file mode 100644 index 00000000..9a985c6c --- /dev/null +++ b/src/com/api/organization/web/ManagerDetachController.java @@ -0,0 +1,13 @@ +package com.api.organization.web; + +import javax.ws.rs.Path; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/10/21 + * @Version V1.0 + **/ +@Path("/bs/hrmorganization/detach") +public class ManagerDetachController extends com.engine.organization.web.ManagerDetachController { +} diff --git a/src/com/engine/organization/entity/detach/po/ManagerDetachPO.java b/src/com/engine/organization/entity/detach/po/ManagerDetachPO.java new file mode 100644 index 00000000..40dd9e27 --- /dev/null +++ b/src/com/engine/organization/entity/detach/po/ManagerDetachPO.java @@ -0,0 +1,66 @@ +package com.engine.organization.entity.detach.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/10/21 + * @Version V1.0 + **/ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ManagerDetachPO { + /** + * 自增主键 + */ + private Integer id; + /** + * 管理员类型 + */ + private Integer type; + /** + * ec管理员 + */ + private String ec_manger; + /** + * jcl管理员 + */ + private String jcl_manger; + /** + * ec分部 + */ + private String ec_rolelevel; + /** + * jcl分部 + */ + private String jcl_rolelevel; + /** + * 模块 + */ + private String module; + /** + * 创建人 + */ + private Long creator; + /** + * 删除标记 + */ + private int deleteType; + /** + * 创建时间 + */ + private Date createTime; + /** + * 更新时间 + */ + private Date updateTime; +} diff --git a/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java b/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java new file mode 100644 index 00000000..c0006a92 --- /dev/null +++ b/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java @@ -0,0 +1,11 @@ +package com.engine.organization.entity.detach.vo; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/10/21 + * @Version V1.0 + **/ +public class ManagerDetachVO { + +} diff --git a/src/com/engine/organization/entity/scheme/po/SchemePO.java b/src/com/engine/organization/entity/scheme/po/SchemePO.java index 1cf7918b..f1986ead 100644 --- a/src/com/engine/organization/entity/scheme/po/SchemePO.java +++ b/src/com/engine/organization/entity/scheme/po/SchemePO.java @@ -37,19 +37,19 @@ public class SchemePO { */ private int isUsed; /** - * + * 创建人 */ private Long creator; /** - * + * 删除标记 */ private int deleteType; /** - * + * 创建时间 */ private Date createTime; /** - * + * 更新时间 */ private Date updateTime; diff --git a/src/com/engine/organization/service/ManagerDetachService.java b/src/com/engine/organization/service/ManagerDetachService.java new file mode 100644 index 00000000..42c6d4b0 --- /dev/null +++ b/src/com/engine/organization/service/ManagerDetachService.java @@ -0,0 +1,10 @@ +package com.engine.organization.service; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/10/21 + * @Version V1.0 + **/ +public interface ManagerDetachService { +} diff --git a/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java b/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java new file mode 100644 index 00000000..2d91fd7c --- /dev/null +++ b/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java @@ -0,0 +1,13 @@ +package com.engine.organization.service.impl; + +import com.engine.core.impl.Service; +import com.engine.organization.service.ManagerDetachService; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/10/21 + * @Version V1.0 + **/ +public class ManagerDetachServiceImpl extends Service implements ManagerDetachService { +} diff --git a/src/com/engine/organization/web/ManagerDetachController.java b/src/com/engine/organization/web/ManagerDetachController.java new file mode 100644 index 00000000..bb6731dc --- /dev/null +++ b/src/com/engine/organization/web/ManagerDetachController.java @@ -0,0 +1,45 @@ +package com.engine.organization.web; + +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.organization.util.response.ReturnResult; +import com.engine.organization.wrapper.ManagerDetachWrapper; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.Map; + +/** + * @Author weaver_cl + * @Description: 模块管理分权 + * @Date 2022/10/21 + * @Version V1.0 + **/ +public class ManagerDetachController { + + public ManagerDetachWrapper getManagerDetachWrapper(User user) { + return ServiceUtil.getService(ManagerDetachWrapper.class,user); + } + + + + @GET + @Path("/getTable") + @Produces(MediaType.APPLICATION_JSON) + public ReturnResult listScheme(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + Map map = ParamUtil.request2Map(request); + return ReturnResult.successed(getManagerDetachWrapper(user).listPage(map)); + } catch (Exception e) { + return ReturnResult.exceptionHandle(e); + } + } +} diff --git a/src/com/engine/organization/wrapper/ManagerDetachWrapper.java b/src/com/engine/organization/wrapper/ManagerDetachWrapper.java new file mode 100644 index 00000000..8e43f772 --- /dev/null +++ b/src/com/engine/organization/wrapper/ManagerDetachWrapper.java @@ -0,0 +1,26 @@ +package com.engine.organization.wrapper; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.organization.service.ManagerDetachService; +import com.engine.organization.service.impl.ManagerDetachServiceImpl; +import weaver.hrm.User; + +import java.util.Map; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/10/21 + * @Version V1.0 + **/ +public class ManagerDetachWrapper extends Service { + + public ManagerDetachService getManagerDetachService(User user) { + return ServiceUtil.getService(ManagerDetachServiceImpl.class,user); + } + + public Map listPage(Map params) { + return null; + } +} From 4c74b583bf675cf50b631dbf805f3273a3b1aea6 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Mon, 24 Oct 2022 19:25:55 +0800 Subject: [PATCH 07/21] =?UTF-8?q?=E6=A8=A1=E5=9D=97=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=88=86=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/表结构SQL/MySQL.sql | 4 +- docs/表结构SQL/Oracle.sql | 10 +- docs/表结构SQL/SqlServer.sql | 4 +- .../entity/detach/vo/ManagerDetachVO.java | 48 ++++ .../mapper/detach/ManagerDetachMapper.java | 11 + .../mapper/detach/ManagerDetachMapper.xml | 231 ++++++++++++++++++ .../mapper/employee/EmployeeMapper.java | 4 + .../mapper/employee/EmployeeMapper.xml | 27 ++ .../service/ManagerDetachService.java | 16 ++ .../impl/ManagerDetachServiceImpl.java | 73 ++++++ .../web/ManagerDetachController.java | 58 ++++- .../wrapper/ManagerDetachWrapper.java | 37 ++- 12 files changed, 508 insertions(+), 15 deletions(-) create mode 100644 src/com/engine/organization/mapper/detach/ManagerDetachMapper.java create mode 100644 src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml diff --git a/docs/表结构SQL/MySQL.sql b/docs/表结构SQL/MySQL.sql index a4da50a8..2b9a0909 100644 --- a/docs/表结构SQL/MySQL.sql +++ b/docs/表结构SQL/MySQL.sql @@ -549,8 +549,8 @@ create table JCL_ORG_ITEM ( create table JCL_ORG_DETACH ( id int auto_increment not null, type int null, - ec_manger text not null, - jcl_manger text not null, + ec_manager text not null, + jcl_manager text not null, ec_rolelevel text not null, jcl_rolelevel text not null, module text not null, diff --git a/docs/表结构SQL/Oracle.sql b/docs/表结构SQL/Oracle.sql index 187d01f6..74245544 100644 --- a/docs/表结构SQL/Oracle.sql +++ b/docs/表结构SQL/Oracle.sql @@ -491,11 +491,11 @@ CREATE TABLE JCL_ORG_HRMRELATION ( create table JCL_ORG_DETACH ( id number not null, type number null, - ec_manger clob not null, - jcl_manger clob not null, - ec_rolelevel clob not null, - jcl_rolelevel clob not null, - module clob not null, + ec_manager clob not null, + jcl_manager clob not null, + ec_rolelevel varchar(4000) not null, + jcl_rolelevel varchar(4000) not null, + module varchar(4000) not null, creator number null, delete_type number null, create_time date null, diff --git a/docs/表结构SQL/SqlServer.sql b/docs/表结构SQL/SqlServer.sql index d397a3bc..2db5c0cb 100644 --- a/docs/表结构SQL/SqlServer.sql +++ b/docs/表结构SQL/SqlServer.sql @@ -522,8 +522,8 @@ CREATE TABLE JCL_ORG_MAP ( create table JCL_ORG_DETACH ( id int IDENTITY(1,1) not null, type int null, - ec_manger text not null, - jcl_manger text not null, + ec_manager text not null, + jcl_manager text not null, ec_rolelevel text not null, jcl_rolelevel text not null, module text not null, diff --git a/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java b/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java index c0006a92..b87954dd 100644 --- a/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java +++ b/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java @@ -1,11 +1,59 @@ package com.engine.organization.entity.detach.vo; +import com.cloudstore.eccom.pc.table.WeaTableType; +import com.engine.organization.annotation.OrganizationTable; +import com.engine.organization.annotation.OrganizationTableColumn; +import com.engine.organization.annotation.OrganizationTableOperate; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + /** * @Author weaver_cl * @Description: * @Date 2022/10/21 * @Version V1.0 **/ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@OrganizationTable(pageId = "0bf9b7bc-c8b0-4225-bf28-4cd015d96e98", + fields = "t.id," + + "t.ec_manager," + + "t.ec_rolelevel," + + "t.module," + + "t.creator," + + "t.delete_type," + + "t.create_time," + + "t.update_time", + fromSql = "FROM jcl_org_detach t ", + orderby = "id", + sortway = "asc", + primarykey = "id", + operates = { + @OrganizationTableOperate(index = "0", text = "编辑"), + @OrganizationTableOperate(index = "1", text = "删除") + }, + tableType = WeaTableType.CHECKBOX +) public class ManagerDetachVO { + + @OrganizationTableColumn(column = "id", display = false) + private Long id; + + + @OrganizationTableColumn(text = "管理员", width = "20%", column = "ec_manager" ) + private String ecManager; + + @OrganizationTableColumn(text = "可管理组织机构", width = "40%", column = "ec_rolelevel") + private String ecRolelevel; + + + @OrganizationTableColumn(text = "可管理模块", width = "40%", column = "module") + private String module; + } diff --git a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java new file mode 100644 index 00000000..8d56eaaa --- /dev/null +++ b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java @@ -0,0 +1,11 @@ +package com.engine.organization.mapper.detach; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/10/24 + * @Version V1.0 + **/ +public interface ManagerDetachMapper { + +} diff --git a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml new file mode 100644 index 00000000..55ca3517 --- /dev/null +++ b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + t + . + id + , t.scheme_no + , t.scheme_name + , t.scheme_description + , t.forbidden_tag + , t.creator + , t.delete_type + , t.create_time + , t.update_time + + + + + + + + + + + + INSERT INTO jcl_org_scheme + + + creator, + + + delete_type, + + + create_time, + + + update_time, + + + scheme_no, + + + scheme_name, + + + scheme_description, + + forbidden_tag, + + + + #{creator}, + + + #{deleteType}, + + + #{createTime}, + + + #{updateTime}, + + + #{schemeNo}, + + + #{schemeName}, + + + #{schemeDescription}, + + 0, + + + + + + select JCL_ORG_SCHEME_ID.currval from dual + + INSERT INTO jcl_org_scheme + + + creator, + + + delete_type, + + + create_time, + + + update_time, + + + scheme_no, + + + scheme_name, + + + scheme_description, + + forbidden_tag, + + + + #{creator}, + + + #{deleteType}, + + + #{createTime}, + + + #{updateTime}, + + + #{schemeNo}, + + + #{schemeName}, + + + #{schemeDescription}, + + 0, + + + + + update jcl_org_scheme + + creator=#{creator}, + update_time=#{updateTime}, + scheme_no=#{schemeNo}, + scheme_name=#{schemeName}, + scheme_description=#{schemeDescription}, + + WHERE id = #{id} AND delete_type = 0 + + + + update jcl_org_scheme + + forbidden_tag=#{forbiddenTag}, + + WHERE id = #{id} AND delete_type = 0 + + + + UPDATE jcl_org_scheme + SET delete_type = 1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + + \ No newline at end of file diff --git a/src/com/engine/organization/mapper/employee/EmployeeMapper.java b/src/com/engine/organization/mapper/employee/EmployeeMapper.java index bac40ab8..62d67b67 100644 --- a/src/com/engine/organization/mapper/employee/EmployeeMapper.java +++ b/src/com/engine/organization/mapper/employee/EmployeeMapper.java @@ -2,6 +2,8 @@ package com.engine.organization.mapper.employee; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * @Author weaver_cl @@ -12,4 +14,6 @@ import org.apache.ibatis.annotations.Param; public interface EmployeeMapper { String getEmployeeNameById(@Param("employeeId") Long id); + + List getResourceIds(@Param("lastName") String lastName); } diff --git a/src/com/engine/organization/mapper/employee/EmployeeMapper.xml b/src/com/engine/organization/mapper/employee/EmployeeMapper.xml index e00791d6..bb06ca67 100644 --- a/src/com/engine/organization/mapper/employee/EmployeeMapper.xml +++ b/src/com/engine/organization/mapper/employee/EmployeeMapper.xml @@ -2,10 +2,37 @@ + + + AND t.lastname like CONCAT('%',#{lastName},'%') + + + + + AND t.lastname like '%'||#{lastName}||'%' + + + + + AND t.lastname like '%'+#{lastName}+'%' + + + + + + + + + \ No newline at end of file diff --git a/src/com/engine/organization/service/ManagerDetachService.java b/src/com/engine/organization/service/ManagerDetachService.java index 42c6d4b0..c3b6185e 100644 --- a/src/com/engine/organization/service/ManagerDetachService.java +++ b/src/com/engine/organization/service/ManagerDetachService.java @@ -1,5 +1,7 @@ package com.engine.organization.service; +import java.util.Map; + /** * @Author weaver_cl * @Description: @@ -7,4 +9,18 @@ package com.engine.organization.service; * @Version V1.0 **/ public interface ManagerDetachService { + + /** + * 获取table列表 + * @param params + * @return + */ + Map listPage(Map params); + + /** + * 新建编辑表单 + * @param id + * @return + */ + Map getForm(Integer id); } diff --git a/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java b/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java index 2d91fd7c..006731f9 100644 --- a/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java +++ b/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java @@ -1,7 +1,22 @@ package com.engine.organization.service.impl; +import com.api.browser.bean.SearchConditionGroup; +import com.api.browser.bean.SearchConditionItem; +import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.core.impl.Service; +import com.engine.organization.component.OrganizationWeaTable; +import com.engine.organization.entity.detach.vo.ManagerDetachVO; +import com.engine.organization.mapper.employee.EmployeeMapper; import com.engine.organization.service.ManagerDetachService; +import com.engine.organization.util.HasRightUtil; +import com.engine.organization.util.OrganizationFormItemUtil; +import com.engine.organization.util.db.MapperProxyFactory; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @Author weaver_cl @@ -10,4 +25,62 @@ import com.engine.organization.service.ManagerDetachService; * @Version V1.0 **/ public class ManagerDetachServiceImpl extends Service implements ManagerDetachService { + + + private static final String RIGHT_NAME = "MangerDeatch:All"; + + @Override + public Map listPage(Map params) { + Map resultMap = new HashMap<>(); + boolean hasRight = HasRightUtil.hasRight(user, RIGHT_NAME, true); + resultMap.put("hasRight", hasRight); + if (!hasRight) { + return resultMap; + } + OrganizationWeaTable table = new OrganizationWeaTable<>(user, ManagerDetachVO.class); + String sqlWhere = buildSqlWhere(params); + table.setSqlwhere(sqlWhere); + WeaResultMsg result = new WeaResultMsg(false); + result.putAll(table.makeDataResult()); + result.success(); + resultMap.putAll(result.getResultMap()); + + return resultMap; + } + + @Override + public Map getForm(Integer id) { + Map apiDatas = new HashMap<>(); + List selectItems = new ArrayList<>(); + List addGroups = new ArrayList<>(); + SearchConditionItem ecManager = OrganizationFormItemUtil.browserItem(user, 2, 16, 3, false, "管理员", "1", "ecManager", ""); + ecManager.setRules("required|string"); + SearchConditionItem ecRolelevel = OrganizationFormItemUtil.browserItem(user, 2, 16, 2, false, "可维护机构", "194", "ecRolelevel", ""); + ecRolelevel.setRules("required|string"); + SearchConditionItem module = OrganizationFormItemUtil.checkboxItem(user, 2, 16, 1, false, "可管理模块", "module"); + if (id != null) { + //todo + } + selectItems.add(ecManager); + selectItems.add(ecRolelevel); + selectItems.add(module); + addGroups.add(new SearchConditionGroup("基本信息", true, selectItems)); + apiDatas.put("condition", addGroups); + return apiDatas; + } + + private String buildSqlWhere(Map params) { + String sqlWhere = " where 1 = 1"; + String lastName = (String) params.get("ecManager"); + List resourceIds = MapperProxyFactory.getProxy(EmployeeMapper.class).getResourceIds(lastName); + String ecManager = StringUtils.join(resourceIds,","); + if (StringUtils.isNotBlank(ecManager)) { + sqlWhere += " AND ec_manager in ("+ecManager+") "; + } + String ecRolelevel = (String) params.get("ecRolelevel"); + if (StringUtils.isNotBlank(ecRolelevel)) { + sqlWhere += " AND ec_rolelevel in ("+ecRolelevel+")"; + } + return sqlWhere; + } } diff --git a/src/com/engine/organization/web/ManagerDetachController.java b/src/com/engine/organization/web/ManagerDetachController.java index bb6731dc..915710a7 100644 --- a/src/com/engine/organization/web/ManagerDetachController.java +++ b/src/com/engine/organization/web/ManagerDetachController.java @@ -2,16 +2,16 @@ package com.engine.organization.web; import com.engine.common.util.ParamUtil; import com.engine.common.util.ServiceUtil; +import com.engine.organization.entity.DeleteParam; import com.engine.organization.util.response.ReturnResult; import com.engine.organization.wrapper.ManagerDetachWrapper; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; +import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import java.util.Map; @@ -29,7 +29,6 @@ public class ManagerDetachController { } - @GET @Path("/getTable") @Produces(MediaType.APPLICATION_JSON) @@ -42,4 +41,55 @@ public class ManagerDetachController { return ReturnResult.exceptionHandle(e); } } + + + @GET + @Path("/getTableBtn") + @Produces(MediaType.APPLICATION_JSON) + public ReturnResult getTableBtn(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + return ReturnResult.successed(getManagerDetachWrapper(user).getTableBtn()); + } catch (Exception e) { + return ReturnResult.exceptionHandle(e); + } + } + + + @GET + @Path("/getSearchCondition") + @Produces(MediaType.APPLICATION_JSON) + public ReturnResult getSearchCondition(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + return ReturnResult.successed(getManagerDetachWrapper(user).getSearchCondition()); + } catch (Exception e) { + return ReturnResult.exceptionHandle(e); + } + } + + @GET + @Path("/getForm") + @Produces(MediaType.APPLICATION_JSON) + public ReturnResult getForm(@Context HttpServletRequest request, @Context HttpServletResponse response, + @QueryParam("id") Integer id) { + try { + User user = HrmUserVarify.getUser(request, response); + return ReturnResult.successed(getManagerDetachWrapper(user).getForm(id)); + } catch (Exception e) { + return ReturnResult.exceptionHandle(e); + } + } + + @POST + @Path("/deleteByIds") + @Produces(MediaType.APPLICATION_JSON) + public ReturnResult deleteByIds(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody DeleteParam param) { + try { + User user = HrmUserVarify.getUser(request, response); + return ReturnResult.successed(getManagerDetachWrapper(user).deleteByIds(param.getIds())); + } catch (Exception e) { + return ReturnResult.exceptionHandle(e); + } + } } diff --git a/src/com/engine/organization/wrapper/ManagerDetachWrapper.java b/src/com/engine/organization/wrapper/ManagerDetachWrapper.java index 8e43f772..2deb5ef6 100644 --- a/src/com/engine/organization/wrapper/ManagerDetachWrapper.java +++ b/src/com/engine/organization/wrapper/ManagerDetachWrapper.java @@ -1,12 +1,19 @@ package com.engine.organization.wrapper; +import com.api.browser.bean.SearchConditionGroup; +import com.api.browser.bean.SearchConditionItem; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.organization.annotation.Log; +import com.engine.organization.enums.LogModuleNameEnum; +import com.engine.organization.enums.OperateTypeEnum; import com.engine.organization.service.ManagerDetachService; import com.engine.organization.service.impl.ManagerDetachServiceImpl; +import com.engine.organization.util.MenuBtn; +import com.engine.organization.util.OrganizationFormItemUtil; import weaver.hrm.User; -import java.util.Map; +import java.util.*; /** * @Author weaver_cl @@ -21,6 +28,32 @@ public class ManagerDetachWrapper extends Service { } public Map listPage(Map params) { - return null; + return getManagerDetachService(user).listPage(params); + } + + public Map> getTableBtn() { + return MenuBtn.getCommonBtnDatas(); + } + + public Map getSearchCondition() { + Map apiDatas = new HashMap<>(); + List addGroups = new ArrayList<>(); + List conditionItems = new ArrayList<>(); + SearchConditionItem ecManager = OrganizationFormItemUtil.inputItem(user, 2, 16, 2, 50, "管理员名称", "ecManager"); + SearchConditionItem ecRolelevel = OrganizationFormItemUtil.browserItem(user, 2, 16, 2, false, "可管理组织机构", "194", "ecRolelevel", ""); + conditionItems.add(ecManager); + conditionItems.add(ecRolelevel); + addGroups.add(new SearchConditionGroup("高级搜索条件", true, conditionItems)); + apiDatas.put("conditions", addGroups); + return apiDatas; + } + + public Map getForm(Integer id) { + return getManagerDetachService(user).getForm(id); + } + + @Log(operateType = OperateTypeEnum.DELETE,operateModule = LogModuleNameEnum.OTHER,operateDesc = "删除") + public int deleteByIds(Collection ids) { + return -1; } } From f6ea4425cf71119e37f0ee33207b6f9544ca191b Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Tue, 25 Oct 2022 17:48:22 +0800 Subject: [PATCH 08/21] =?UTF-8?q?=E6=A8=A1=E5=9D=97=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=88=86=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/表结构SQL/MySQL.sql | 4 +- docs/表结构SQL/Oracle.sql | 4 +- docs/表结构SQL/SqlServer.sql | 4 +- .../detach/param/ManagerDetachParam.java | 34 +++ .../entity/detach/po/ManagerDetachPO.java | 14 +- .../entity/detach/vo/ManagerDetachVO.java | 6 +- .../mapper/detach/ManagerDetachMapper.java | 13 + .../mapper/detach/ManagerDetachMapper.xml | 242 ++++++++---------- .../service/ManagerDetachService.java | 17 ++ .../impl/ManagerDetachServiceImpl.java | 40 ++- .../web/ManagerDetachController.java | 26 ++ .../wrapper/ManagerDetachWrapper.java | 36 ++- 12 files changed, 285 insertions(+), 155 deletions(-) create mode 100644 src/com/engine/organization/entity/detach/param/ManagerDetachParam.java diff --git a/docs/表结构SQL/MySQL.sql b/docs/表结构SQL/MySQL.sql index 2b9a0909..5bb92ee6 100644 --- a/docs/表结构SQL/MySQL.sql +++ b/docs/表结构SQL/MySQL.sql @@ -548,12 +548,12 @@ create table JCL_ORG_ITEM ( -- JCL_ORG_DETACH create table JCL_ORG_DETACH ( id int auto_increment not null, - type int null, + manager_type int null, ec_manager text not null, jcl_manager text not null, ec_rolelevel text not null, jcl_rolelevel text not null, - module text not null, + manage_module text not null, creator int null, delete_type int null, create_time date null, diff --git a/docs/表结构SQL/Oracle.sql b/docs/表结构SQL/Oracle.sql index 74245544..67b0c456 100644 --- a/docs/表结构SQL/Oracle.sql +++ b/docs/表结构SQL/Oracle.sql @@ -490,12 +490,12 @@ CREATE TABLE JCL_ORG_HRMRELATION ( -- JCL_ORG_DETACH create table JCL_ORG_DETACH ( id number not null, - type number null, + manager_type number null, ec_manager clob not null, jcl_manager clob not null, ec_rolelevel varchar(4000) not null, jcl_rolelevel varchar(4000) not null, - module varchar(4000) not null, + manage_module varchar(4000) not null, creator number null, delete_type number null, create_time date null, diff --git a/docs/表结构SQL/SqlServer.sql b/docs/表结构SQL/SqlServer.sql index 2db5c0cb..b94299ae 100644 --- a/docs/表结构SQL/SqlServer.sql +++ b/docs/表结构SQL/SqlServer.sql @@ -521,12 +521,12 @@ CREATE TABLE JCL_ORG_MAP ( -- JCL_ORG_DETACH create table JCL_ORG_DETACH ( id int IDENTITY(1,1) not null, - type int null, + manager_type int null, ec_manager text not null, jcl_manager text not null, ec_rolelevel text not null, jcl_rolelevel text not null, - module text not null, + manage_module text not null, creator int null, delete_type int null, create_time date null, diff --git a/src/com/engine/organization/entity/detach/param/ManagerDetachParam.java b/src/com/engine/organization/entity/detach/param/ManagerDetachParam.java new file mode 100644 index 00000000..1944a089 --- /dev/null +++ b/src/com/engine/organization/entity/detach/param/ManagerDetachParam.java @@ -0,0 +1,34 @@ +package com.engine.organization.entity.detach.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/10/25 + * @Version V1.0 + **/ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ManagerDetachParam { + + private Integer id; + + private Integer managerType; + + private String ecManager; + + private String jclManager; + + private String ecRolelevel; + + private String jclRolelevel; + + private String manageModule; +} diff --git a/src/com/engine/organization/entity/detach/po/ManagerDetachPO.java b/src/com/engine/organization/entity/detach/po/ManagerDetachPO.java index 40dd9e27..a40e29d2 100644 --- a/src/com/engine/organization/entity/detach/po/ManagerDetachPO.java +++ b/src/com/engine/organization/entity/detach/po/ManagerDetachPO.java @@ -26,27 +26,27 @@ public class ManagerDetachPO { /** * 管理员类型 */ - private Integer type; + private Integer managerType; /** * ec管理员 */ - private String ec_manger; + private String ecManager; /** * jcl管理员 */ - private String jcl_manger; + private String jclManager; /** * ec分部 */ - private String ec_rolelevel; + private String ecRolelevel; /** * jcl分部 */ - private String jcl_rolelevel; + private String jclRolelevel; /** - * 模块 + * 可管理模块 */ - private String module; + private String manageModule; /** * 创建人 */ diff --git a/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java b/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java index b87954dd..6a1fdea0 100644 --- a/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java +++ b/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java @@ -24,7 +24,7 @@ import lombok.NoArgsConstructor; fields = "t.id," + "t.ec_manager," + "t.ec_rolelevel," + - "t.module," + + "t.manage_module," + "t.creator," + "t.delete_type," + "t.create_time," + @@ -53,7 +53,7 @@ public class ManagerDetachVO { private String ecRolelevel; - @OrganizationTableColumn(text = "可管理模块", width = "40%", column = "module") - private String module; + @OrganizationTableColumn(text = "可管理模块", width = "40%", column = "manage_module") + private String manageModule; } diff --git a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java index 8d56eaaa..3b057aa3 100644 --- a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java +++ b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java @@ -1,5 +1,11 @@ package com.engine.organization.mapper.detach; +import com.engine.organization.entity.detach.po.ManagerDetachPO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + /** * @Author weaver_cl * @Description: @@ -8,4 +14,11 @@ package com.engine.organization.mapper.detach; **/ public interface ManagerDetachMapper { + int insertIgnoreNull(ManagerDetachPO managerDetachPO); + + int updateDetach(ManagerDetachPO managerDetachPO); + + int deleteByIds(@Param("ids") Collection ids); + + List selectByIds(@Param("ids")Collection ids); } diff --git a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml index 55ca3517..3c56ea21 100644 --- a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml +++ b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml @@ -1,99 +1,60 @@ - - + + - - - - + + + + + + - - - - - - t - . - id - , t.scheme_no - , t.scheme_name - , t.scheme_description - , t.forbidden_tag + t.id + , t.manager_type + , t.ec_manager + , t.jcl_manager + , t.ec_rolelevel + , t.jcl_rolelevel + , t.manage_module , t.creator , t.delete_type , t.create_time , t.update_time - - - - - - - - INSERT INTO jcl_org_scheme + INSERT INTO jcl_org_detach + + manager_type, + + + ec_manager, + + + jcl_manager, + + + ec_rolelevel, + + + jcl_rolelevel, + + + manage_module, + creator, @@ -106,18 +67,26 @@ update_time, - - scheme_no, - - - scheme_name, - - - scheme_description, - - forbidden_tag, + + #{managerType}, + + + #{ecManager}, + + + #{jclManager}, + + + #{ecRolelevel}, + + + #{jclRolelevel}, + + + #{manageModule}, + #{creator}, @@ -130,25 +99,33 @@ #{updateTime}, - - #{schemeNo}, - - - #{schemeName}, - - - #{schemeDescription}, - - 0, - + - select JCL_ORG_SCHEME_ID.currval from dual + select JCL_ORG_DETACH_ID.currval from dual - INSERT INTO jcl_org_scheme + INSERT INTO jcl_org_detach + + manager_type, + + + ec_manager, + + + jcl_manager, + + + ec_rolelevel, + + + jcl_rolelevel, + + + manage_module, + creator, @@ -161,18 +138,26 @@ update_time, - - scheme_no, - - - scheme_name, - - - scheme_description, - - forbidden_tag, + + #{managerType}, + + + #{ecManager}, + + + #{jclManager}, + + + #{ecRolelevel}, + + + #{jclRolelevel}, + + + #{manageModule}, + #{creator}, @@ -185,41 +170,23 @@ #{updateTime}, - - #{schemeNo}, - - - #{schemeName}, - - - #{schemeDescription}, - - 0, - - update jcl_org_scheme + + update jcl_org_detach - creator=#{creator}, - update_time=#{updateTime}, - scheme_no=#{schemeNo}, - scheme_name=#{schemeName}, - scheme_description=#{schemeDescription}, + ecManager=#{ecManager}, + jclManager=#{jclManager}, + ecRolelevel=#{ecRolelevel}, + jclRolelevel=#{jclRolelevel} WHERE id = #{id} AND delete_type = 0 - - update jcl_org_scheme - - forbidden_tag=#{forbiddenTag}, - - WHERE id = #{id} AND delete_type = 0 - - UPDATE jcl_org_scheme + UPDATE jcl_org_detach SET delete_type = 1 WHERE delete_type = 0 AND id IN @@ -228,4 +195,15 @@ + + \ No newline at end of file diff --git a/src/com/engine/organization/service/ManagerDetachService.java b/src/com/engine/organization/service/ManagerDetachService.java index c3b6185e..4c0e0c2f 100644 --- a/src/com/engine/organization/service/ManagerDetachService.java +++ b/src/com/engine/organization/service/ManagerDetachService.java @@ -1,5 +1,8 @@ package com.engine.organization.service; +import com.engine.organization.entity.detach.param.ManagerDetachParam; + +import java.util.Collection; import java.util.Map; /** @@ -23,4 +26,18 @@ public interface ManagerDetachService { * @return */ Map getForm(Integer id); + + /** + * 批量删除 + * @param ids + * @return + */ + int deleteByIds(Collection ids); + + /** + * 新增 + * @param param + * @return + */ + int save(ManagerDetachParam param); } diff --git a/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java b/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java index 006731f9..50b2139d 100644 --- a/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java +++ b/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java @@ -5,18 +5,20 @@ import com.api.browser.bean.SearchConditionItem; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.core.impl.Service; import com.engine.organization.component.OrganizationWeaTable; +import com.engine.organization.entity.detach.param.ManagerDetachParam; +import com.engine.organization.entity.detach.po.ManagerDetachPO; import com.engine.organization.entity.detach.vo.ManagerDetachVO; +import com.engine.organization.mapper.detach.ManagerDetachMapper; import com.engine.organization.mapper.employee.EmployeeMapper; +import com.engine.organization.mapper.hrmresource.HrmResourceMapper; import com.engine.organization.service.ManagerDetachService; import com.engine.organization.util.HasRightUtil; import com.engine.organization.util.OrganizationFormItemUtil; import com.engine.organization.util.db.MapperProxyFactory; +import com.engine.organization.util.relation.EcHrmRelationUtil; import org.apache.commons.lang3.StringUtils; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @Author weaver_cl @@ -29,6 +31,14 @@ public class ManagerDetachServiceImpl extends Service implements ManagerDetachSe private static final String RIGHT_NAME = "MangerDeatch:All"; + public ManagerDetachMapper getMangeDetachMapper() { + return MapperProxyFactory.getProxy(ManagerDetachMapper.class); + } + + public HrmResourceMapper getHrmResourceMapper() { + return MapperProxyFactory.getProxy(HrmResourceMapper.class); + } + @Override public Map listPage(Map params) { Map resultMap = new HashMap<>(); @@ -69,6 +79,28 @@ public class ManagerDetachServiceImpl extends Service implements ManagerDetachSe return apiDatas; } + @Override + public int deleteByIds(Collection ids) { + return getMangeDetachMapper().deleteByIds(ids); + } + + @Override + public int save(ManagerDetachParam param) { + ManagerDetachPO managerDetachPO = ManagerDetachPO.builder() + .managerType(0) + .ecManager(param.getEcManager()) + .jclManager(String.valueOf(getHrmResourceMapper().getJclResourceId(param.getEcManager()))) + .ecRolelevel(param.getEcRolelevel()) + .jclRolelevel(EcHrmRelationUtil.getJclCompanyId(param.getEcRolelevel()) != null ? String.valueOf(EcHrmRelationUtil.getJclCompanyId(param.getEcRolelevel()).getId()) : null) + .creator((long)user.getUID()) + .deleteType(0) + .createTime(new Date()) + .updateTime(new Date()) + .build(); + + return getMangeDetachMapper().insertIgnoreNull(managerDetachPO); + } + private String buildSqlWhere(Map params) { String sqlWhere = " where 1 = 1"; String lastName = (String) params.get("ecManager"); diff --git a/src/com/engine/organization/web/ManagerDetachController.java b/src/com/engine/organization/web/ManagerDetachController.java index 915710a7..ef5f721d 100644 --- a/src/com/engine/organization/web/ManagerDetachController.java +++ b/src/com/engine/organization/web/ManagerDetachController.java @@ -3,6 +3,7 @@ package com.engine.organization.web; import com.engine.common.util.ParamUtil; import com.engine.common.util.ServiceUtil; import com.engine.organization.entity.DeleteParam; +import com.engine.organization.entity.detach.param.ManagerDetachParam; import com.engine.organization.util.response.ReturnResult; import com.engine.organization.wrapper.ManagerDetachWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -92,4 +93,29 @@ public class ManagerDetachController { return ReturnResult.exceptionHandle(e); } } + + + @POST + @Path("/save") + @Produces(MediaType.APPLICATION_JSON) + public ReturnResult saveScheme(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody ManagerDetachParam param) { + try { + User user = HrmUserVarify.getUser(request, response); + return ReturnResult.successed(getManagerDetachWrapper(user).save(param)); + } catch (Exception e) { + return ReturnResult.exceptionHandle(e); + } + } + + @POST + @Path("/updateScheme") + @Produces(MediaType.APPLICATION_JSON) + public ReturnResult updateScheme(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody ManagerDetachParam param) { + try { + User user = HrmUserVarify.getUser(request, response); + return ReturnResult.successed(getManagerDetachWrapper(user).updateDetach(param)); + } catch (Exception e) { + return ReturnResult.exceptionHandle(e); + } + } } diff --git a/src/com/engine/organization/wrapper/ManagerDetachWrapper.java b/src/com/engine/organization/wrapper/ManagerDetachWrapper.java index 2deb5ef6..8a6c23bb 100644 --- a/src/com/engine/organization/wrapper/ManagerDetachWrapper.java +++ b/src/com/engine/organization/wrapper/ManagerDetachWrapper.java @@ -1,16 +1,21 @@ package com.engine.organization.wrapper; +import com.alibaba.fastjson.JSON; import com.api.browser.bean.SearchConditionGroup; import com.api.browser.bean.SearchConditionItem; import com.engine.common.util.ServiceUtil; -import com.engine.core.impl.Service; import com.engine.organization.annotation.Log; +import com.engine.organization.entity.detach.param.ManagerDetachParam; +import com.engine.organization.entity.detach.po.ManagerDetachPO; import com.engine.organization.enums.LogModuleNameEnum; import com.engine.organization.enums.OperateTypeEnum; +import com.engine.organization.mapper.detach.ManagerDetachMapper; import com.engine.organization.service.ManagerDetachService; import com.engine.organization.service.impl.ManagerDetachServiceImpl; import com.engine.organization.util.MenuBtn; import com.engine.organization.util.OrganizationFormItemUtil; +import com.engine.organization.util.OrganizationWrapper; +import com.engine.organization.util.db.MapperProxyFactory; import weaver.hrm.User; import java.util.*; @@ -21,7 +26,7 @@ import java.util.*; * @Date 2022/10/21 * @Version V1.0 **/ -public class ManagerDetachWrapper extends Service { +public class ManagerDetachWrapper extends OrganizationWrapper { public ManagerDetachService getManagerDetachService(User user) { return ServiceUtil.getService(ManagerDetachServiceImpl.class,user); @@ -52,8 +57,33 @@ public class ManagerDetachWrapper extends Service { return getManagerDetachService(user).getForm(id); } - @Log(operateType = OperateTypeEnum.DELETE,operateModule = LogModuleNameEnum.OTHER,operateDesc = "删除") + @Log(operateType = OperateTypeEnum.DELETE,operateModule = LogModuleNameEnum.OTHER,operateDesc = "删除分权数据") public int deleteByIds(Collection ids) { + List managerDetachPOS = MapperProxyFactory.getProxy(ManagerDetachMapper.class).selectByIds(ids); + int deleteByIds = getManagerDetachService(user).deleteByIds(ids); + for (ManagerDetachPO managerDetachPO : managerDetachPOS) { + writeOperateLog(new Object() { + }.getClass(), managerDetachPO.getEcManager(), JSON.toJSONString(ids), "删除等级方案"); + } + return deleteByIds; + } + + + @Log(operateType = OperateTypeEnum.ADD,operateModule = LogModuleNameEnum.OTHER,operateDesc = "新增分权管理员") + public int save(ManagerDetachParam param) { + int save = getManagerDetachService(user).save(param); + writeOperateLog(new Object() { + }.getClass(), param.getEcManager(), JSON.toJSONString(param), "新增分权管理员"); + return save; + } + + @Log(operateType = OperateTypeEnum.UPDATE, operateModule = LogModuleNameEnum.OTHER, operateDesc = "分权数据更新") + public int updateDetach(ManagerDetachParam param) { +// SchemePO schemeByID = getSchemeMapper().getSchemeByID(param.getId()); +// int updateScheme = getManagerDetachService(user).updateDetach(param); +// writeOperateLog(new Object() { +// }.getClass(), schemeByID.getSchemeName(), JSON.toJSONString(param), schemeByID, getSchemeMapper().getSchemeByID(param.getId())); +// return updateScheme; return -1; } } From 96cefec8915491126ce58bbffd4153e3286a40e2 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Wed, 26 Oct 2022 17:11:23 +0800 Subject: [PATCH 09/21] =?UTF-8?q?=E6=A8=A1=E5=9D=97=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=88=86=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/detach/ManagerDetachMapper.java | 2 ++ .../mapper/detach/ManagerDetachMapper.xml | 10 +++++++- .../service/ManagerDetachService.java | 7 ++++++ .../impl/ManagerDetachServiceImpl.java | 24 +++++++++++++++++-- .../web/ManagerDetachController.java | 2 +- .../wrapper/ManagerDetachWrapper.java | 11 ++++----- 6 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java index 3b057aa3..5cd47c4c 100644 --- a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java +++ b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java @@ -21,4 +21,6 @@ public interface ManagerDetachMapper { int deleteByIds(@Param("ids") Collection ids); List selectByIds(@Param("ids")Collection ids); + + ManagerDetachPO getDetachById(@Param("id") Integer id); } diff --git a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml index 3c56ea21..cfd02f55 100644 --- a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml +++ b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml @@ -198,7 +198,7 @@ + + \ No newline at end of file diff --git a/src/com/engine/organization/service/ManagerDetachService.java b/src/com/engine/organization/service/ManagerDetachService.java index 4c0e0c2f..c277693a 100644 --- a/src/com/engine/organization/service/ManagerDetachService.java +++ b/src/com/engine/organization/service/ManagerDetachService.java @@ -40,4 +40,11 @@ public interface ManagerDetachService { * @return */ int save(ManagerDetachParam param); + + /** + * 更新 + * @param param + * @return + */ + int updateDetach(ManagerDetachParam param); } diff --git a/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java b/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java index 50b2139d..b74a4b80 100644 --- a/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java +++ b/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java @@ -2,6 +2,7 @@ package com.engine.organization.service.impl; import com.api.browser.bean.SearchConditionGroup; import com.api.browser.bean.SearchConditionItem; +import com.api.browser.bean.SearchConditionOption; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.core.impl.Service; import com.engine.organization.component.OrganizationWeaTable; @@ -63,11 +64,18 @@ public class ManagerDetachServiceImpl extends Service implements ManagerDetachSe Map apiDatas = new HashMap<>(); List selectItems = new ArrayList<>(); List addGroups = new ArrayList<>(); + List selectOptions = new ArrayList<>(); + SearchConditionOption moduleOption = new SearchConditionOption("0", "组织管理",true); + selectOptions.add(moduleOption); + SearchConditionItem ecManager = OrganizationFormItemUtil.browserItem(user, 2, 16, 3, false, "管理员", "1", "ecManager", ""); ecManager.setRules("required|string"); - SearchConditionItem ecRolelevel = OrganizationFormItemUtil.browserItem(user, 2, 16, 2, false, "可维护机构", "194", "ecRolelevel", ""); + SearchConditionItem ecRolelevel = OrganizationFormItemUtil.browserItem(user, 2, 16, 3, false, "可维护机构", "194", "ecRolelevel", ""); ecRolelevel.setRules("required|string"); - SearchConditionItem module = OrganizationFormItemUtil.checkboxItem(user, 2, 16, 1, false, "可管理模块", "module"); + SearchConditionItem module = OrganizationFormItemUtil.selectItem(user, selectOptions, 2, 16, 6, false, "可管理模块", "module"); + module.setViewAttr(1); + module.setDetailtype(2); + module.setHasBorder(true); if (id != null) { //todo } @@ -92,6 +100,7 @@ public class ManagerDetachServiceImpl extends Service implements ManagerDetachSe .jclManager(String.valueOf(getHrmResourceMapper().getJclResourceId(param.getEcManager()))) .ecRolelevel(param.getEcRolelevel()) .jclRolelevel(EcHrmRelationUtil.getJclCompanyId(param.getEcRolelevel()) != null ? String.valueOf(EcHrmRelationUtil.getJclCompanyId(param.getEcRolelevel()).getId()) : null) + .manageModule("组织管理") .creator((long)user.getUID()) .deleteType(0) .createTime(new Date()) @@ -101,6 +110,17 @@ public class ManagerDetachServiceImpl extends Service implements ManagerDetachSe return getMangeDetachMapper().insertIgnoreNull(managerDetachPO); } + @Override + public int updateDetach(ManagerDetachParam param) { + ManagerDetachPO managerDetachPO = ManagerDetachPO.builder() + .ecManager(param.getEcManager()) + .jclManager(String.valueOf(getHrmResourceMapper().getJclResourceId(param.getEcManager()))) + .ecRolelevel(param.getEcRolelevel()) + .jclRolelevel(EcHrmRelationUtil.getJclCompanyId(param.getEcRolelevel()) != null ? String.valueOf(EcHrmRelationUtil.getJclCompanyId(param.getEcRolelevel()).getId()) : null) + .build(); + return getMangeDetachMapper().updateDetach(managerDetachPO); + } + private String buildSqlWhere(Map params) { String sqlWhere = " where 1 = 1"; String lastName = (String) params.get("ecManager"); diff --git a/src/com/engine/organization/web/ManagerDetachController.java b/src/com/engine/organization/web/ManagerDetachController.java index ef5f721d..b3e64274 100644 --- a/src/com/engine/organization/web/ManagerDetachController.java +++ b/src/com/engine/organization/web/ManagerDetachController.java @@ -108,7 +108,7 @@ public class ManagerDetachController { } @POST - @Path("/updateScheme") + @Path("/update") @Produces(MediaType.APPLICATION_JSON) public ReturnResult updateScheme(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody ManagerDetachParam param) { try { diff --git a/src/com/engine/organization/wrapper/ManagerDetachWrapper.java b/src/com/engine/organization/wrapper/ManagerDetachWrapper.java index 8a6c23bb..c1ddb9bb 100644 --- a/src/com/engine/organization/wrapper/ManagerDetachWrapper.java +++ b/src/com/engine/organization/wrapper/ManagerDetachWrapper.java @@ -79,11 +79,10 @@ public class ManagerDetachWrapper extends OrganizationWrapper { @Log(operateType = OperateTypeEnum.UPDATE, operateModule = LogModuleNameEnum.OTHER, operateDesc = "分权数据更新") public int updateDetach(ManagerDetachParam param) { -// SchemePO schemeByID = getSchemeMapper().getSchemeByID(param.getId()); -// int updateScheme = getManagerDetachService(user).updateDetach(param); -// writeOperateLog(new Object() { -// }.getClass(), schemeByID.getSchemeName(), JSON.toJSONString(param), schemeByID, getSchemeMapper().getSchemeByID(param.getId())); -// return updateScheme; - return -1; + ManagerDetachPO managerDetachPO = MapperProxyFactory.getProxy(ManagerDetachMapper.class).getDetachById(param.getId()); + int result = getManagerDetachService(user).updateDetach(param); + writeOperateLog(new Object() { + }.getClass(), managerDetachPO.getEcManager(), JSON.toJSONString(param), managerDetachPO, MapperProxyFactory.getProxy(ManagerDetachMapper.class).getDetachById(param.getId())); + return result; } } From 939e6c7607c3eab7f21e5dc24c07dc8f11c7815a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98ml=E2=80=99?= Date: Fri, 21 Oct 2022 15:53:15 +0800 Subject: [PATCH 10/21] =?UTF-8?q?=E5=88=86=E9=83=A8=E8=BD=AC=E7=A7=BB?= =?UTF-8?q?=E3=80=81=E9=83=A8=E9=97=A8=E8=BD=AC=E7=A7=BB=E3=80=81=E5=B2=97?= =?UTF-8?q?=E4=BD=8D=E5=90=88=E5=B9=B6=E4=BF=AE=E5=A4=8D1021?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../organization/mapper/staff/StaffMapper.xml | 10 +++ .../thread/DepartmentTriggerRunnable.java | 12 ++++ .../thread/JobTriggerRunnable.java | 61 +++++++++++++++++++ 3 files changed, 83 insertions(+) diff --git a/src/com/engine/organization/mapper/staff/StaffMapper.xml b/src/com/engine/organization/mapper/staff/StaffMapper.xml index f5131b54..c7e96731 100644 --- a/src/com/engine/organization/mapper/staff/StaffMapper.xml +++ b/src/com/engine/organization/mapper/staff/StaffMapper.xml @@ -341,6 +341,7 @@ inner join jcl_org_staffplan b on a.plan_id = b.id WHERE a.delete_type = 0 and b.control_dimension = #{ftype} +<<<<<<< HEAD and a.comp_id = #{compId} @@ -348,6 +349,15 @@ and a.job_id = #{jobId} +======= + and t.comp_id = #{compId} + + + and t.dept_id = #{deptId} + + + and t.job_id = #{jobId} +>>>>>>> 162e591 (分部转移、部门转移、岗位合并修复1021) \ No newline at end of file diff --git a/src/com/engine/organization/thread/DepartmentTriggerRunnable.java b/src/com/engine/organization/thread/DepartmentTriggerRunnable.java index 29f349b8..1e30e7b9 100644 --- a/src/com/engine/organization/thread/DepartmentTriggerRunnable.java +++ b/src/com/engine/organization/thread/DepartmentTriggerRunnable.java @@ -168,6 +168,7 @@ public class DepartmentTriggerRunnable implements Runnable { if (1 != newDepartment.getDeleteType() && 1 != newDepartment.getForbiddenTag()) { MapperProxyFactory.getProxy(JclOrgMapper.class).insertMap(jclMap); +<<<<<<< HEAD } if(null != jclOrgMapByObjID) { updateParentPlanAndJob(jclMap.getFDateBegin(), jclOrgMapByObjID.getFParentId().toString()); @@ -181,6 +182,17 @@ public class DepartmentTriggerRunnable implements Runnable { } if (null != oldFparentId) { updateParentPlanAndJob(jclMap.getFDateBegin(), oldFparentId); +======= + if(null != jclOrgMapByObjID) { + updateParentPlanAndJob(currentDate, jclOrgMapByObjID.getFParentId().toString()); + } + if(null != moveTarget){ + updateParentPlanAndJob(currentDate, moveTarget); + } + if (null != oldFparentId) { + updateParentPlanAndJob(currentDate, oldFparentId); + } +>>>>>>> 162e591 (分部转移、部门转移、岗位合并修复1021) } } } diff --git a/src/com/engine/organization/thread/JobTriggerRunnable.java b/src/com/engine/organization/thread/JobTriggerRunnable.java index 5be8d6e6..eb3dd2ae 100644 --- a/src/com/engine/organization/thread/JobTriggerRunnable.java +++ b/src/com/engine/organization/thread/JobTriggerRunnable.java @@ -14,6 +14,7 @@ import com.engine.organization.util.OrganizationDateUtil; import com.engine.organization.util.db.MapperProxyFactory; import org.apache.commons.collections.CollectionUtils; import weaver.common.DateUtil; +import weaver.general.Util; import java.sql.Date; import java.util.Calendar; @@ -73,6 +74,7 @@ public class JobTriggerRunnable implements Runnable { return; } // 判断 +<<<<<<< HEAD JclOrgMap jclMap = new JclOrgMap(); int st = 100000000; int sj = 200000000; @@ -115,6 +117,43 @@ public class JobTriggerRunnable implements Runnable { if (null != jclOrgMap) { jclMap.setFPlan((null != staffPO ? staffPO.getStaffNum() : 0) + jclOrgMap.getFPlan()); jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob() + jclOrgMap.getFOnJob()); +======= + if (diffFields.contains("jobName") || diffFields.contains("parentDept") || diffFields.contains("parentJob") || diffFields.contains("forbiddenTag") || diffFields.contains("deleteType")) { + JclOrgMap jclMap = new JclOrgMap(); + int st = 100000000; + int sj = 200000000; + jclMap.setFType(3); + // 更新逻辑 + jclMap.setFObjId(newJob.getId().intValue()); + jclMap.setId(newJob.getId().intValue() + sj); + jclMap.setFNumber(newJob.getJobNo()); + jclMap.setFName(newJob.getJobName()); + jclMap.setFParentId(null == newJob.getParentJob() ? newJob.getParentDept().intValue() + st : newJob.getParentJob().intValue() + sj); + jclMap.setFObjParentId(null == newJob.getParentJob() ? newJob.getParentDept().intValue() : newJob.getParentJob().intValue()); + Integer parentdept = newJob.getParentDept().intValue(); + + jclMap.setFClass(0); + jclMap.setFClassName("行政维度"); + + String currentDate = OrganizationDateUtil.getFormatLocalDate(new java.util.Date()); + jclMap.setFDateBegin(new Date(OrganizationDateUtil.stringToDate(currentDate).getTime())); + jclMap.setFDateEnd(new Date(OrganizationDateUtil.stringToDate("2099-12-31").getTime())); + + JclOrgMap jclOrgMapByObjID = MapperProxyFactory.getProxy(JclOrgMapper.class).getJclOrgMapByObjID(currentDate, ModuleTypeEnum.jobfielddefined.getValue().toString(), jclMap.getFObjId().toString()); + + // 该岗位有下级岗位时,查询 + JclOrgMap jclOrgMap = MapperProxyFactory.getProxy(JclOrgMapper.class).getSumPlanAndJobByFParentId(currentDate, jclMap.getId().toString()); + + if (null != jclOrgMapByObjID) { + if (null != jclOrgMap) { + StaffPO staffPO = MapperProxyFactory.getProxy(StaffMapper.class).getStaffsByParamId(null,null, jclOrgMapByObjID.getFObjId().toString()); + jclMap.setFPlan((null != staffPO ? staffPO.getStaffNum() : 0) + jclOrgMap.getFPlan()); + jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob() + jclOrgMap.getFOnJob()); + } else { + jclMap.setFPlan(jclOrgMapByObjID.getFPlan()); + jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob()); + } +>>>>>>> 162e591 (分部转移、部门转移、岗位合并修复1021) } else { jclMap.setFPlan(null != staffPO ? staffPO.getStaffNum() : 0); jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob()); @@ -125,6 +164,7 @@ public class JobTriggerRunnable implements Runnable { } jclMap.setFIsVitual(0); +<<<<<<< HEAD Calendar cal = Calendar.getInstance(); cal.setTime(jclMap.getFDateBegin()); Calendar calendar = DateUtil.addDay(cal, -1); @@ -147,6 +187,27 @@ public class JobTriggerRunnable implements Runnable { if (null != oldJob) { if (null != oldJob.getId()) { updateParentPlanAndJob(jclMap.getFDateBegin(), oldJob.getId().toString()); +======= + Calendar cal = Calendar.getInstance(); + cal.setTime(jclMap.getFDateBegin()); + Calendar calendar = DateUtil.addDay(cal, -1); + Date time = new Date(calendar.getTime().getTime()); + getCompTriggerMapper().deleteMap(jclMap.getFType(), jclMap.getFObjId(), jclMap.getFDateBegin()); + getCompTriggerMapper().updateMap(jclMap.getFType(), jclMap.getFObjId(), jclMap.getFDateBegin(), time); + + if (1 != newJob.getDeleteType() && 1 != newJob.getForbiddenTag()) { + MapperProxyFactory.getProxy(JclOrgMapper.class).insertMap(jclMap); + if (null != jclOrgMapByObjID) { + if(null != jclOrgMapByObjID.getFParentId()){ + updateParentPlanAndJob(currentDate, jclOrgMapByObjID.getFParentId().toString()); + } + } + if (null != oldJob) { + if (null != oldJob.getId()){ + updateParentPlanAndJob(currentDate, oldJob.getId().toString()); + } + } +>>>>>>> 162e591 (分部转移、部门转移、岗位合并修复1021) } } From 1be79b9698ff19d668673baa83ab16869728ca48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98ml=E2=80=99?= Date: Mon, 24 Oct 2022 16:00:00 +0800 Subject: [PATCH 11/21] =?UTF-8?q?=E5=88=86=E9=83=A8=E3=80=81=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E3=80=81=E5=B2=97=E4=BD=8D=E7=A6=81=E7=94=A8=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D1024?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/organization/wrapper/JobWrapper.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/engine/organization/wrapper/JobWrapper.java b/src/com/engine/organization/wrapper/JobWrapper.java index 2e447fe1..951e4ae0 100644 --- a/src/com/engine/organization/wrapper/JobWrapper.java +++ b/src/com/engine/organization/wrapper/JobWrapper.java @@ -11,9 +11,11 @@ import com.engine.organization.entity.job.param.JobMergeParam; import com.engine.organization.entity.job.param.JobSearchParam; import com.engine.organization.entity.job.po.JobPO; import com.engine.organization.entity.searchtree.SearchTreeParams; +import com.engine.organization.entity.staff.po.StaffPO; import com.engine.organization.enums.LogModuleNameEnum; import com.engine.organization.enums.OperateTypeEnum; import com.engine.organization.mapper.job.JobMapper; +import com.engine.organization.mapper.staff.StaffMapper; import com.engine.organization.service.JobService; import com.engine.organization.service.impl.JobServiceImpl; import com.engine.organization.thread.JobTriggerRunnable; From ef392f4d0a2c8e61379efc258688379fd8cfa544 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Thu, 27 Oct 2022 14:38:06 +0800 Subject: [PATCH 12/21] =?UTF-8?q?=E6=A8=A1=E5=9D=97=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=88=86=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/表结构SQL/MySQL.sql | 4 +-- docs/表结构SQL/Oracle.sql | 4 +-- docs/表结构SQL/SqlServer.sql | 4 +-- .../detach/param/ManagerDetachParam.java | 4 +-- .../entity/detach/po/ManagerDetachPO.java | 4 +-- .../entity/detach/vo/ManagerDetachVO.java | 6 ++-- .../organization/enums/LogModuleNameEnum.java | 1 + .../mapper/detach/ManagerDetachMapper.xml | 12 +++---- .../mapper/employee/EmployeeMapper.java | 4 +++ .../mapper/employee/EmployeeMapper.xml | 11 +++++- .../mapper/hrmresource/SystemDataMapper.java | 3 ++ .../mapper/hrmresource/SystemDataMapper.xml | 13 +++++++ .../impl/ManagerDetachServiceImpl.java | 35 +++++++++++++++---- .../transmethod/ManagerDetachTransMethod.java | 33 +++++++++++++++++ .../wrapper/ManagerDetachWrapper.java | 14 ++++---- 15 files changed, 118 insertions(+), 34 deletions(-) create mode 100644 src/com/engine/organization/transmethod/ManagerDetachTransMethod.java diff --git a/docs/表结构SQL/MySQL.sql b/docs/表结构SQL/MySQL.sql index 5bb92ee6..6cffd642 100644 --- a/docs/表结构SQL/MySQL.sql +++ b/docs/表结构SQL/MySQL.sql @@ -549,8 +549,8 @@ create table JCL_ORG_ITEM ( create table JCL_ORG_DETACH ( id int auto_increment not null, manager_type int null, - ec_manager text not null, - jcl_manager text not null, + ec_manager int not null, + jcl_manager int not null, ec_rolelevel text not null, jcl_rolelevel text not null, manage_module text not null, diff --git a/docs/表结构SQL/Oracle.sql b/docs/表结构SQL/Oracle.sql index 67b0c456..a142b274 100644 --- a/docs/表结构SQL/Oracle.sql +++ b/docs/表结构SQL/Oracle.sql @@ -491,8 +491,8 @@ CREATE TABLE JCL_ORG_HRMRELATION ( create table JCL_ORG_DETACH ( id number not null, manager_type number null, - ec_manager clob not null, - jcl_manager clob not null, + ec_manager NUMBER not null, + jcl_manager NUMBER not null, ec_rolelevel varchar(4000) not null, jcl_rolelevel varchar(4000) not null, manage_module varchar(4000) not null, diff --git a/docs/表结构SQL/SqlServer.sql b/docs/表结构SQL/SqlServer.sql index b94299ae..93a84834 100644 --- a/docs/表结构SQL/SqlServer.sql +++ b/docs/表结构SQL/SqlServer.sql @@ -522,8 +522,8 @@ CREATE TABLE JCL_ORG_MAP ( create table JCL_ORG_DETACH ( id int IDENTITY(1,1) not null, manager_type int null, - ec_manager text not null, - jcl_manager text not null, + ec_manager int not null, + jcl_manager int not null, ec_rolelevel text not null, jcl_rolelevel text not null, manage_module text not null, diff --git a/src/com/engine/organization/entity/detach/param/ManagerDetachParam.java b/src/com/engine/organization/entity/detach/param/ManagerDetachParam.java index 1944a089..ea79ddf8 100644 --- a/src/com/engine/organization/entity/detach/param/ManagerDetachParam.java +++ b/src/com/engine/organization/entity/detach/param/ManagerDetachParam.java @@ -22,9 +22,9 @@ public class ManagerDetachParam { private Integer managerType; - private String ecManager; + private Integer ecManager; - private String jclManager; + private Integer jclManager; private String ecRolelevel; diff --git a/src/com/engine/organization/entity/detach/po/ManagerDetachPO.java b/src/com/engine/organization/entity/detach/po/ManagerDetachPO.java index a40e29d2..8ac75ee0 100644 --- a/src/com/engine/organization/entity/detach/po/ManagerDetachPO.java +++ b/src/com/engine/organization/entity/detach/po/ManagerDetachPO.java @@ -30,11 +30,11 @@ public class ManagerDetachPO { /** * ec管理员 */ - private String ecManager; + private Integer ecManager; /** * jcl管理员 */ - private String jclManager; + private Integer jclManager; /** * ec分部 */ diff --git a/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java b/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java index 6a1fdea0..09eb15f4 100644 --- a/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java +++ b/src/com/engine/organization/entity/detach/vo/ManagerDetachVO.java @@ -46,10 +46,10 @@ public class ManagerDetachVO { private Long id; - @OrganizationTableColumn(text = "管理员", width = "20%", column = "ec_manager" ) - private String ecManager; + @OrganizationTableColumn(text = "管理员", width = "20%", column = "ec_manager", transmethod = "com.engine.organization.transmethod.ManagerDetachTransMethod.getManagerName") + private Integer ecManager; - @OrganizationTableColumn(text = "可管理组织机构", width = "40%", column = "ec_rolelevel") + @OrganizationTableColumn(text = "可管理组织机构", width = "40%", column = "ec_rolelevel",transmethod = "com.engine.organization.transmethod.ManagerDetachTransMethod.getRoleLevel") private String ecRolelevel; diff --git a/src/com/engine/organization/enums/LogModuleNameEnum.java b/src/com/engine/organization/enums/LogModuleNameEnum.java index 7779b220..c0115316 100644 --- a/src/com/engine/organization/enums/LogModuleNameEnum.java +++ b/src/com/engine/organization/enums/LogModuleNameEnum.java @@ -18,6 +18,7 @@ public enum LogModuleNameEnum { RESOURCE("人员管理", 11), STAFFPLAN("编制方案", 12), STAFF("编制上报", 13), + DETACH("模块管理分权", 14), OTHER("其他模块", 99); private String name; diff --git a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml index cfd02f55..d1ddc927 100644 --- a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml +++ b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml @@ -176,10 +176,10 @@ update jcl_org_detach - ecManager=#{ecManager}, - jclManager=#{jclManager}, - ecRolelevel=#{ecRolelevel}, - jclRolelevel=#{jclRolelevel} + ec_manager=#{ecManager}, + jcl_Manager=#{jclManager}, + ec_rolelevel=#{ecRolelevel}, + jcl_rolelevel=#{jclRolelevel} WHERE id = #{id} AND delete_type = 0 @@ -198,7 +198,7 @@ select - from jcl_org_detach + from jcl_org_detach t WHERE delete_type = 0 AND id = #{id} diff --git a/src/com/engine/organization/mapper/employee/EmployeeMapper.java b/src/com/engine/organization/mapper/employee/EmployeeMapper.java index 62d67b67..0419a3cf 100644 --- a/src/com/engine/organization/mapper/employee/EmployeeMapper.java +++ b/src/com/engine/organization/mapper/employee/EmployeeMapper.java @@ -2,7 +2,9 @@ package com.engine.organization.mapper.employee; import org.apache.ibatis.annotations.Param; +import java.util.Collection; import java.util.List; +import java.util.Map; /** @@ -16,4 +18,6 @@ public interface EmployeeMapper { String getEmployeeNameById(@Param("employeeId") Long id); List getResourceIds(@Param("lastName") String lastName); + + List> getBrowserDatas(@Param("ids") Collection ids); } diff --git a/src/com/engine/organization/mapper/employee/EmployeeMapper.xml b/src/com/engine/organization/mapper/employee/EmployeeMapper.xml index bb06ca67..8419c565 100644 --- a/src/com/engine/organization/mapper/employee/EmployeeMapper.xml +++ b/src/com/engine/organization/mapper/employee/EmployeeMapper.xml @@ -33,6 +33,15 @@ - + \ No newline at end of file diff --git a/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.java b/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.java index 19365ba4..25f5cc8e 100644 --- a/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.java +++ b/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.java @@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Param; import java.util.Collection; import java.util.List; +import java.util.Map; /** * @author:dxfeng @@ -18,6 +19,8 @@ public interface SystemDataMapper { String getScCompanyNameById(@Param("companyId") String companyId); + List> getBrowserDatas(@Param("ids") Collection ids); + String getScDepartmentNameById(@Param("departmentId") String departmentId); String getScHrmResourceNameById(@Param("managerId") String managerId); diff --git a/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.xml b/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.xml index 18c55956..906461df 100644 --- a/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.xml +++ b/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.xml @@ -40,6 +40,19 @@ from hrmsubcompany where id = #{companyId} + + + + \ No newline at end of file From 1e08772a9dda886c75efb4efb45617595da653f6 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Fri, 28 Oct 2022 17:41:56 +0800 Subject: [PATCH 16/21] =?UTF-8?q?=E5=88=86=E6=9D=83=E5=BC=80=E5=85=B3?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WEB-INF/config/MyBatis.xml | 43 ++++++++++ WEB-INF/lib/pagehelper-5.0.0.jar | Bin 0 -> 64807 bytes WEB-INF/prop/cacheBackList.properties | 74 ++++++++++++++++++ WEB-INF/prop/hrmOrganization.properties | 2 + .../service/ManagerDetachService.java | 6 ++ .../impl/ManagerDetachServiceImpl.java | 11 +++ .../web/ManagerDetachController.java | 13 +++ .../wrapper/ManagerDetachWrapper.java | 5 ++ 8 files changed, 154 insertions(+) create mode 100644 WEB-INF/config/MyBatis.xml create mode 100644 WEB-INF/lib/pagehelper-5.0.0.jar create mode 100644 WEB-INF/prop/cacheBackList.properties create mode 100644 WEB-INF/prop/hrmOrganization.properties diff --git a/WEB-INF/config/MyBatis.xml b/WEB-INF/config/MyBatis.xml new file mode 100644 index 00000000..7de8d02d --- /dev/null +++ b/WEB-INF/config/MyBatis.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WEB-INF/lib/pagehelper-5.0.0.jar b/WEB-INF/lib/pagehelper-5.0.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..187266c88e16a5edcc1bfe59dd26ac34198ba202 GIT binary patch literal 64807 zcmb5V1ym$WlLd;qI}Gmb?(XjH?(Q;JV6?(ROgI}GkHz`(#`_ut*O-~Zk(+vjw5 zol_B&Sy_4GM#jxjlmP{U0s4<~NneBr^ z(7Sw{j{N$f{ckflA$cirF%?yMIq?U%=_y$mI{JBd89M6O>A5Cl#wC`$V`p0F*>PGK zI$^dI6I&w}7rQt)m_bIQP=jjinm!H3!@1G# zGUyyZSuph4oeCn7G-@(deA%#wdj-Q%;Fzs}L=X55{O0;MW2pTwB;P>4i9pCyWgBq| z* z!dQ3fZHvcx&@fjZI0@5m`4Ew`urdK6y7k&)AIhP;sGB2I6Dy--Q1{K^jouY(Sr}Oj z^^2s!3Zy#C&^C(gT>U#`p002oC;L8u{~I=c8;e6FF(KkFyl8ykpZ?z&3vnY8R|jXW zzYR%?x{eO22AW=&Y&s)EykiS`s5U8dyk>*76qpT+x{#z)H2l(r5mw^B#58Bd($pBk zsSd##!zt`bN?qE?NBM>y0#*_uxIWC0?#jB))zrF0Qs3w66(Z2;ovsk(PqeL(G@>n) zd_s~#8gQZMDb08%1EFw+zSKLxQ4#ujN)xF8651)vgoNWC9L(xwM`({m^dY=?1YwGM z52)ZhFY4k61$=gz0FEi7@KG2z<l>G9z>BQ!km~3i<+>4cxENw*2;^?9}+$M*U3M zw+N5VbxLc!CZ-{QXG=I-X8IOf$5?EmW`i;-dcB5zEIQ^gEnBC|a#u0P?#BUnGRK8V za_q+|9ij&xESZ>M-Nxk*uQ^VpUhpfYFoP z2WN_7V11}P+z8vosQQoxU{oldY};je4y~Z$_4DrdWJzNpc^n22dJh zMKmAhTG}gO*bq8@IyG3P<#Ki`9mHMZW)ikwT}0ErX(5`xl0m$ljdx#c*khSt@g{A; z%{Q@=1DFDo5}HIP@D~%Ov6f#W4->@u6vReXB#o!s)0Sbxcz#msFA|U!ez;u}$?^hi$8hEz(gHQYj-X zIUAK?I$94?q;czU8C9@{C*bz4CX6{S`F%1Ou+je_Q+kJTmB`AH8GPqgZ!mIahO-Io ziB7@_Km=!uRIt46NB5OhE}r%$W|dr%f2Z5guFH%F^6RVJfgqW*f6mkI;it=@O2y8${G>5mpF3g0Qh(0+i4u! zr4gfi-Z&DxPdj5vT--+p7&a(Yu@f%McwyMP?f}kJ6J?|p3X@)$q-Q@fzX-(@1XB#r z7U9`uF;_6!AM=D!>g)Iw+?I|m;t#doD@>vWw4;;+z=>xRXOvFPya3Lc(FiM$B-c)P zE$-x^YC{<4gnPWkOeC$X0k*~+@f9KdHoOM8RWAGZpC_*FG53^*rT4L%q}Xl4yLQ+H z-zU<&B-)V5i*P%oWZ$nBOpjwVXFg#68g2IUOa*Sfq7B6t|I+@8Xd~ffb1Nv=8z&=%HraV#1mhF&!+F#HB(zGPDw^WWn||$A%hhiXkF6(hMi&0>zuO-#-z5 z2<#=Ce>|VMs2YkFu)d9^O%0N>% z$_=6&5SNm*zXpF}@h5%Zr7=QyK*6{Lgj`5E?-gRs=Dj%xq-xhkqhI?i#(necJsYEg zcG$Q3xJ4kaZ`fLUQGSrVp|(8$7G`PeW|xYDY1mRVF~_EI}AoO(pkoDCFsJBFp`NG_`8Y%|-d+SpG=2Gy`4(i+Dqn4wUeBQmvp&bn#0I~T`gFek_HRYvMSs5 z&c4xon zT&oI$rddnv`T#nAA~nH+nZ6xfw=8nj*w+#hKA^reKekSDDVJn|oMV_9Lq0f?!xGH=qZG{g zgJsP8LnqAg2VTeq3Im0JE*erRzRABRtBh>HmxH~aNHB)v9+aJ34 z7$X?%890gwywBmeSC&E%2#JJ0$cE_)_Z$Ox3x~dc^*FB>q8Sn}ym;Xio?17Le*jPw zy_jsXgm)AAX}(=s)S|be?_h?By?|&*Q`m#Qtt9g1?T6l67j#`MA)q1>)l(SEk8&Wc zfjp)TQb61pAU@|;IUdZyDqk2p3d9FqF-ug*8zR(+&+vnfLp)D~25Z!=I~vaGdY`y= zkjyt2`8}Kx-vq4>^_-z|YgRe=f~@369Po+HIW$@%8K?U9gD%TIhzC#!qkb>3nnA-| z!W_;avGw`QDT(UBHAHohoRo&iaDeX!LdMIZ zfv?eSsmU%6>QLJ(-RHM(UZD8~Bs^C_Z(h^#ibCi1Be+^z(+rojwJUa%v;_>>*md=~ zbg%N68c!P;P&d#vXKWmy!te`LW8T!nCn8wIkPi?p&QMw>snfJN*yK~E_Uj4&RpnD^ zOX$KW%n@oeRq2jDC;mQ7lTC1_+yw^$LV*VYqWc$tQ^m^8(bnvLMb4D3$oZ9}eUQh? zLXk)+(yGz47Ve`Ew_uWmV}gMb=M#qatPx=kS|(=5ldE3+F}JB}{bj!SOuy?|!)~oN zHOBwgVe`}wkneY9a#8tbmXs7M=wK*&-C}NM_v07;TQ*nU$Mb_7P~4#p0lSInC^AFr z@4dnFXeWX#Ec78J2J&H_g|Nf)`+cz7yL~NQ3b?#9C*@IC{c>Y=I+Am-X-Ie$<8avH zYRpc=GDmGV=mM!oA~J{~7&*qOJ7QX_~%LWRK}Wj@z#~|T6Dz< zRjs)QVmVTESVJhh+uqV`KBUdy#AQodY{?BzqLxd{vNMftba=B?sMgf@I8AhX=!k8y zlI53d#+e}-;kgR{mIMekk%omRf0V zMEi^1>LkX2jR5cD&7(5SBqC9&v=m!scINl?C+4dC(o%6*NT`?2S}Ywv;0;%D%eh+R2ODWlIQ*jUKOsJKvk)vEQZ3JFs(OPiwZ^0L zWnqhNsgoOHBcOsPc&dRrQ$fph`;^;MT!~`qDP#~nQ|})fypBdkqc8tN7qev zhzEXi&>i%A+Z$5)W=CMZf6U%BPRm-URcdar6e6M{EGHq=N8L_1*vt@yyjTb**#M*< zJYBGe0~Z%hnEB@KiTD=pnfMm&spy)XxQ6$p-DL#LIZ64x3J)y4C<{UMD&Mm8D&1nW zj<;9u>0GMZ;z6tn(QLu$wvWgW8a?=R2@YmDQ;0!p+t05R0?((~fF3IdBW4N7jF5s& zVbdz1$05|&O-pE^YFbN1Szqt)wlzh$-!;Ct+R*3qBw5d%Vu`Wm(`S}5Siw9tp5^R8 z_my9fj!tmf4(s~<4Tr~YSk8}HZJQH0YGJ{wblK9Qd`ry8}@#S&<}~kD$G1$VVr7-7Lsewm>sF>VxChv-b0Wr!BHCE_<3s z4V6G2_vK{-dSFT&{Mg*~xE*o86WKW&2hY# z8b)vJdbdwc)jcVK6Z+?du8bUbK>t^^L&VV?m*|bKng!@<|cZ( zRY4RDz;0Q+albDM5mk2twrH^?YuC|ePsQAKvxSD)=QBlxQ3Ts*Rp;5ln>XxJ*mjTl z7(#XZh`~wc9Q%}nr$#nZQr4Vnh-q>^52DqCq-$Grhpge5AIh>JI2Q3lA>oa)Xh?$6 z8(x!3X8aW0=2UnE`L##xDB;Hdk~Wqd1pmRLrI{`V zvU8#YEwUCEumlP(sljlRN0v7gy)66}{-+%1eJ+)u*WHIG_ljeL%F*me@q0->8Fc!aOq1YrsVq z`y#g>FAk5bn}IA|HgfVWucP+=uKhNilWBiL_t)WAZ#n zWb9FGu>TXesY;X*bcoBD+3U}YU^iK(SYpsc z?nsH?XcqNwGgN2E^LC)*Y^akfRUq>%Z%7K_VjjJpSREs4R7%rwAfICR$CL%@1Votc zBrb@pYNBA-C(e|wnj;1j-~&z_)lh*tff_-^SE-a;(3gB2I0S(>wtB8_U`C;XGP z@B@7IC;!i132&}P6loiLl76gX?GcDHdZQ_iJ40%^G9=#ZvEPz&QtS^fM%or&>`h|h zJ(T-AKL4ix`?pGx?c!cq+*gWn_LZV={o4~y@;{5If0=$Y>f0`;YG|L^rb%|Kn{_}n zLdCvWt%69l38m^A!~|r5G9vRqyi9&abR0)IgE7vgeU7he&55iHZ)g z0T1o@M3GcP87q#+EW$K2t!c!cF9Ho&%Z}It%?BdW743xw)FQ6K)#=xiBAn|SQ~9!* z;Ilsxm}uU8YqAgBSH@E$QRXzgidb#dO4r_mNAwu+00Xi+)Mb&SU5ZmBmEs8ux5_D- z6+u?Xo;z|e$GEHP_t#cb{QFXiaNY@B3s-3CjJ68DYW5|wll*N*Y1QG{%#-dL5-uHo z0-QD_Q=+Ar+=x6xUU2;iq7rP``K0~PPD-`R_9mjuFjd5t#~E&uGgx#NrBY(7mr27; zEPsY#uR3~VXly-NSCfw-c;GHp7Sn6zMeDRk4@f=FFojGe7X@nc7rtx2Z&JFXZQ`eo ze^P@aBl$pw8{KriFgE{u={9?S-bm6Zp;qa;8i`nq_9{HcDo#rJB*ISUJ_(g$ZdMw9 z%|h$3r9dZOa@DY-Q2?mW9De=`U|30PAmwnWT9Tz;;6OFzow_N0%S10AJK-^0Yr@BZ zP%}+`XS(#}A~)NuO81ar?PM_~yYu%iDXyjf|3-6JWoAFx0-X#3%R?OQ*;FL#-0~>K z*C_4no43)A>q|j%A95jamE(AG@HLst`Vx0 zX|8}g?3r|i<6@`l#7viNP)ROB!$fnj@e~Rg-r|xl|C^;}LUo=7ncT4YZ$6f2RXuBAj8eOB?>{YLp&u~tBg9)*Y5!V}Ww`=KRZQ1FL_ z#;XGO!OV>_ngoSU^mj0`h=`Eb^()lfapW*QQ6aBYI6r+ApTxMvkJzfy;TDKT&+qt% zKMsMtdCTLjS0zNZKz_mHRN6ikd5)djqvy2#*lOxSu;Zl0uJ{vSDU5z>r6(`c1xKME z4||j-$Wq%;S{D`9g z`>}ESjbHfuDM|{CQb!ECuQZ-VnEi`hr%av^Zl22SwoUnfE7C7k@w;3&AMUSX#o#7* zwjW6T0QO2DV}dgRMEpEpY({kfUISKMd|FS>(ePLcPRge&EPpEauAZUqR6}6$<89}D z6#@4Ke@!o*FWuEnL4knwzf?rte>=)6J9r5Hr)>0>K;M$8=dh`YHTF5yaCmH|)2W1F znB3wcwdjstAKQ@JP_2huF;-e43ql%lm|MD&&AB#?!2;X1Y15sJ}uzKO>=vnRg11Svzd46F@LMC#MT(%vf~&u zmVJ8bD$|C1`=SFjU)799`{rS9!?7lPn@G_PjPP#bki-tAN4LKRjb;=W+dUGmn>Spy zvA6$by?1KQ5PX?gsJx+Twf@{$Ys_2oeT}(gX!lT;(TuM#UlZIa@qF+K>b^y^Q-5&( zU8ne9^-REYzANQcC`o-e8sAhKH}8=@7;4EHCXmP|!FMcrc{D_kK+az(!lTF2EibJn z4{C|1eb3KrtCfHIBE*{yjbPnnxZovUs zSp*uJs5NWAL!nZPaGji?M{!2K9LZC-sozDI3$xe}N96DQ1(cP@sRr&kJ)0-lMDp^J zHK~!LWMfd>sNeEF@(N6koMNTlrKYdLVr|mp9p5wXeRM@1LNx%3MYxHRoagk*B}j^8 zesTJ01w&T$Q$t2q(AEbd=~wVn@^PyqHKnW1cD>i(PW&D}d~PD^XGx;6V|l!)3x^pw zKG3PpQ_?Rqrw-{?9y}4BUAyxnK)-qE3a9MdVR>$u zgCWF08YpT`zD@2moHlli_7i4(o@G(K;A*pPdw7!Tj06m4=wdT78WZ}r0Pzj#n$VKG z0$)hIKls+?klyh)&dzGw72=T%s0}>9P0ITHu<7Iy#?QpkraGydWF9&pzm$c$6sjBx z>HdIAVI#PCg%^^c(G^%ii$zhvF&w6>wMe+*)RZ*-rch?-6W$JGPkQ~m>BnVO5{IKz z1BWaF-4Np9sfHqxn4ZWZqzdUJH`Q%^s|~kXtk$10LLiY?DKp$6nMs&TN<}6mJ>WGh zogT!cONix{k~GP7FiCZ8xxNyX$QjK@xk;uQ`^R6*ox5gaM6cMPwCdPZi_WI&$1_UA zd5aLIO5wE_1axJ3ek3!v*fm57&1ecLPeQ7=zjL`EzLgr7atfq#Ai}w1A#72JEq?qd zN-b`Bd4lXj(2?P1h%YNE5p70%l_wv&Zt8CnIDr%Zast^M<8PX`((G{?<$%|}iy&X3 z2J7wD0;S_CS7iH_5#+x#Yf)q7zl4qy)idQqMYIq4kkSxJMJ?JwakNtqQ4Eeq%d~pS z0@*0W4@W{dlW*kBY;sDw(w}G&7QR5c{b^3T9CZ1OF@K!q_;%M7`nCxAdi^08gE3LO z9TkSlLztpvEJeoS7}Jmi3Q@=zCsL>cRBN}=7-O)Zo6-+&L6H%~c#UuAG|i^;Of3;Z z+pt1ROAMJ^%W4`s^mpg7W=nJ1prMOt0QL@Nu_I3ylWs|M4TTB`iJb(_*H72~4pO+6phbOm44M6#yi2v2z;R|~df7-du1J*uJdgZ0>; zp~+v7smrmxs2e|9OKWI|G0b=m@o4wBM8Z%E6qEp*KgCE*NfS^CCNu{dqtUCG%Ri+s z0qapD2d|kIr+}`5fiWe%&)Voy`>f+ao%>Vy9H;`dS?@gkn#^O6p(AWjUb&Ja0sB+m zPDWSc5trKQ_Vr1hLX4D7LKO-wo8zF94WENnZTA`CvN+HDO*fW@RHMBcQ94BF0$p(_ zoMwHxQ~IZs&y)O&cl=MvSMqoJV@ox^0v3MaEg_B`p7&LV(F~~*wguJ1Xj6$Jq{}9Y z>!QVzK$6ok6?<+&pkPw$T9P%G59mP0{ue;&>O91T5C0{;a5`p?aDEZ+uDfD5yO^Nu zWCXBtge1a0Xp!2IxPj!nn5WzIpQeLu$35Q~F~rf<8D_bQnMGSr5Jv^QtL`K*q6e`Xt;L+91>r#2Ign4A z{1Eh|)Ta(FZn&$jUGUl=M-z2WK5Y&X^ROuL$lE;8iXyRtd6XY z>7JlVaEUJM(%o*jUmt-;H~axJ=p{a%ffq$YAmwnUXRq0<%E%mRmkJZ1GC7$o+G&dk zr@!A($T&^wF} z0TWG0KO5D?esWo?haxs|f0T%Fw}@8kq3Pu;FiMk>9iJbjL{c7O8&iy*v;!f;bv-}I zm_uE{F1{0j3)Re)FL|}6P;(U$GH7oftIJjQ7@cxuZbj!e-+CPoIk!mX@~{d$?;fo* z>fGOutWR-Cv9~^SzsFurQQZ)zYaD^y6%k;b_QVSyrY|9^6M8}TVf*Qb|LW)O+Qgjr zt?LM+XZj=#)HyF=uz*X?krW_Igp0Jh=f$NR)>d@!gr96hRvf?D$fX{3Lo!H2RxZs^ zESZn+X)a6Oo8N*EqaG+8?T>`I76;90EG&&@msg&!ibo#{v`%EqBs(PP2(NT6&M5Do z3&ND>f=e@On-j0`s49)35+jsFdPE(fpO)T_{)lYX(J9^1t@;dJOCo#p8`>`P1QUfC z0)oo-2VcRrfWNCp#A;6oK!0Vb8($#d{&ztlWpD1_Y-i>97ntOzUMMdLqJ6ZYDNBD> z?g%dwSG4R1%_>JjrX)-e=4l>$k!iKF3@)f30(S#w++jZ|IJu5O-e%yAHAw*D!4YxMWw5q6-i|ge@fszRW3)H#Xc(Z= z8&@k?r9bt7OS-G>sQT&Fr8rwomb(g*skA`LR^}oywPCFmjov0_qY==zS4jf*(QQrv zo#$=AcqDv>*E^>cjQL2+qLlB?beit!iYJ6c*dZ?yO@7^e*;&Fxwut!Vo#>XjVf7{-(k{*Q<9-X3_52 zbCktArLL~CFjB8GH|?MqlIR3l1BaIulEO%G$Yl<08!N3qH;P$gB{s@ih=O5CYn;lN zU#xB{CDBE?9~x~oOxm5?5Y!&62Aq&wvgS=)qbMic*Vvq^sU}RiL}NtO)1K*@l-d9Q z8yfy(3^aPTZtIxNwY#hCxhz-c2C?WWRfnrdZ-Yh1F>x&_NH=uDV@PQ>jx{<3iOsQ? zILq1U%!Y=8AJ*?=nbPM#3};I|kCdb|V~jyLWI4`jQ=j zI-y^XaG^qYj($OTzQ2nkZttLh5NM7m=Avg%LL5_L6p=}i4X$IGVN;g|(u*wk5~r9# zLBxta*bj*jfFq(2_mc@4X!e%aD67{VzVdW?MgjOsV^GWsp2 zOo3s&$e&K~Ff)w+=gS38Z%ZIVNgc#FhPy}pOCrxYmXTh8zp@bQ>cN4v(?NFTpQ!t z8`Yn{-W5z+>r#Rr4%V4FO^Vh#>IKsx9SW23v^0==qiJ7D2HEN!ENv}@7e0oT=P?77Px zuz;osSazZUTd|X07#_4lZGsbYT5N!fYW?+P*(thZSnZT7@rn8>KoL5f{kP7lmfp?nBopX<=rFvkOy4)h4 zkyf@s%pccFQ$g!S^2AVi6)9ryp<6F4Y*Sz*Pr!VXOg=uWPC(|A}0NhHTfjBgJ)_-z-Xqc(uR!&y35=P2D_LhBZNI_EU%Q-O_haU+TMuwmLD z`{TL#--Tt4_#~%=bs;aW{a_ZSa0$ipGhZ1YC(zqv1;ae{ZNJjvd<8rFm$cs*VS{DM zjY^A*u+%&7?A!<(ps-p6D(RxENnByavm>|%3NfTCiD9fsOt>ca_DiBTHV_yXr4W}x z25K48l{G)oqW%?52Hw@bu-U(E2@M@8T1nwhRU2&;iNq?1-^r;sp`SW&Tq$oeT{y7X zLyBZ0(=K(#TBdst>t4HN9|mBBbl{e9@JiJhdl9bKMH13F^o+{FES_ZQKa{mTv-?+o z#CT)5k$*7|7R3J{O;h-iV{Fa-4k4S$s6t45px@X-)PzNu!W)CqNOduQ(cufBfQdU4 zp@r|jl1ydQS4r*J%MtnS2>gS4MP;hqf%+yIFW12oJ2bC{rhlC+ZZGm}Km0jKa{wYw zxG#X@Pz&*eA~_KGChm(hl8$+(%vj90KSIYqUc!4k#A^TM2>O$wI~Vs)aLYZad}xD4u_a7D!n7ABsoK(xtGwF!<;Wv~IxM0@WSC^O|N za#ugQ(`0+YvvtT zd;>Mj5#-eF^LuK!4A4W$>#zY!umI%_qU~x3pMRFvr+} z8?Z8Jb2i@o>|#FEJINv5)7(Gnn#8U3wGxjdvfLG6uJCaU`9@0AL*6o7xw@PBSq8B& z65>y?-Yie7RBcx;2fgU%(uf2<9%oWC$y?{L{r0$HDl`|qHin@)!7J2DYsJq1t9fUU zn1e_GCO#dA02PZdKV8_u;Ih#%`RngL^%yfjWRj!gCvt)~TZAd;!wNo+?uSD%QYC@-m&az)g-FT)FMsoc_Z+!Fjp9rqOu zF@mQb16rtZdiCiX!xFha-_900PMj6Z$hzgt`c!)gOdw!2_RBD({Ot@I8LY0zCh~LU zuOoax-cBp$7B}{TMA`+bR!H*^F|Ep|gaQ`R^#X-C>z~o>bV%Tv-*zv3gPaYp?fM_^ z^@PZN%zy8cDr}>2mu4!D#x3M7=q0BPgy>`+JDRhwgwM9(PRwqC#GT_GTRZ|wf#?+Y z!L+emG*^(d@-6vBj@ub3I6R&;$SHcCy{0MoftWmgkj~Z!hUf7yRnlbf;thetesXc9 zS(|FAPX^0zsy=M0U05tJAovGWDFIvMHByRk`VV?a0mkx!jrDOxY+Vl;??cSLVs9bh z{^S0OoL0WbN#Nflr!Q(!F>`h|b7p2_`fI%*NA+(IL`}7Ynxb=N3h&GpBn&yG=TL%< z024M&K$A>Cv`=Kx(oJl)t$#Fmhwy_=ReuHcPcmC?g3foQnGv~heLlP9VzIdYPXLz2 z-xh)nF@xww8!o|O1`S4gArH1gW;&Adraz*%Z$x2FM^0x$BJ!qVPJm-aF{ff}O^MIf zYhdAkknq4Mw%KSR@`jDBlu3jcesdwwX?{M^ zo!UrOl-^g}Rjw78R^45i_GBAqBQD++BSLqpg9T2v5Bxy#L7fJW@iiMix7NHPztd6a%=PXpOwB?sf~(k7sx~z8T8E=P8@Pra z7UqEv*fT!rF6fLl28C%N*Gs_QA4Wv0fgAl;_E|Dz&5SHoLpC6hE8m>hPNpU)B#bO$ zUO^wOFECWeM`y#43R_(kJ@V2nxmxa@5cO3M!qtI;{j7litOr!_)!2Myu{SV!F*#u3 znvI?6gEA30w&~M97{?O11}@Cn9ABDyGpvG&uvn$r&o;KnI7soZo=3{#SyX7w|MV(= zewE~);eCxPc$+)m4w_uLa1}qIKF+pZ^zZbiNSnTlN+Vz6$m?c13yIp%W^xfJl4*Kyw*g&Mud7H%cIrpBLz|Ov^=&!Nr;E?1++z)Yg4h=PEn~> znCN^(7x;^`O3OFN;BVP8vjw4-giN@FatMbAAk8=fVB$=1ggwzn?2NH?#&1D|T(X5B zR$*JRF@ibSn%ly8BJDw&OB2V{*TN-QS9`9cprXI=#j^H(2i8Zw2?Zf?Q*b=~-Ns$( zGZjYrFB&^X00QFqKf~!SY?h<(>hUG-e&}bK54x^d>%`=z3KPlc6j4&sfsomT{!mwr zB!pRXm4r-`O_vpP+*KL|*VuYK=HQcnp&vU`@Qw{YrQh{I&4gLRu=O#&?sB>Ddw$#L z@hA=W__J6Cq<)}-hle#^uOk6P;(|2xN9i)*xrZCSpP!0v?R!|g!B8NjEFQOb33HVR zoH`oh@lbZG(;7Fzetj%2jI&muwy$iE@t)(~mD#~fz zwu#*Dc&{bdpEJhv8F#u}=@&i9O{q>Nzt7;F?AD7L=RKYg9q_PZ5ldTPS@q9IkhDxN z?HpQ1iVxu#^eQVPq~KFM<3w{#b1sg8b?pRFI84$!8gTRTJEtZ0t1@KqV2 z_v~QHaxflXk;s!-IX=d3G51&5rcAY}$X>g~QjIys&nFM9+2h?@K@~Eq5@P180tpdv zYs;w_t}g=}Ow^;z1RZPD#+~+!X^TyOxG)qTTlP`^kR_*42)YH^FfaR#u9E5{k)kh@ zE@QbqBw8^Uj5iB%1dOP6UfbX)hzFS#`}o>-f|Tk6hB1fMx$y{dxy9__ipT$88|6Dv zX{FA~lUL1mn)0V0trV*jY;z)9;+}d;b%%CQagGz6!^W=FY?0Mq2eNIF65_f)2Sjg` zIRK9I2UUH3l^VNm%`*H}Yzj^;^DS#G(~nSl_&FR;gt^5R=RvUAxUtoBys`GPUT0&2 z?$e{3%Y8pQJP7@MDNu$3GWasM?&w9)73!->_GVA;I&06F{tM2ceRxoZ13GwzZ=R4h zIGj-|5cVQ%fzP-67G`!A%_`GUhloeVBA^8OCZNGs3%3!03QpQX77+Ynm>^G(GrsH0 zwvayzmmTISo0UsR`gTnmlqXcM`p|NB{Rg_t7xfk< zOo0CTmz0=oxaf=sY{JC!RKj*p{0On?ED9uX|0IF zil8%jFJM|kNq)xVPUTRz8Yn}`?<}oXF^h2^pJc-m$KJSrbG|i(`g)AgzEdr(jC%K_ zX^rZEVB2@k&!y%{jOi-3)`$_1isaE3kUd-|?pkeq!>`Y1PEmxM6gh;h%?ViOmP*8Soxp`{DkId#4$h`df zdy=cdar62q(Ac&L#YFiTp{M4wVrGKaln>o`rF#9ajcbHMAAR~>1r>#a?SGn7=VLznH$Yu#mtZ`EyQWK~Uh5m+XG^9l4^iU{kB0E%Z{J>cnSqNWiWoUc|G$&sGu!Zh%=A#T6bsB12y zJ@@*Fm2+8+8be?35Ue)IIEev8)8&MeX=O3 zpZrT&<@mixo7rz{wH1=(tEVETVd6j*hcvt>NJ=+6KYN5K+naUvOelASz|8R-6e~#L zh+-no^iG~&fi$WNjY3$;>UT&otKjH4)g8$Y_tqxM8*5$eK(iYor^2d+o(GWBJdxxB7z5i6oQ9BcKBOeX-aOHDb-oAh zEro8MdMuxYpiht5!C>CAu<)nv!pr9;j1kmw!#o)ULRE0cA!tEdUt0&Mi7kH?87&iZ zeSrTpD-6J_UuXGRk+FSInb5zavH$mF$1nNm|6jr`QMGef&_wgEg$FZP!VoiCU4B7m zX4UrSvT2}BZWgmT6QnzQ86bCrJu8ML7xMUA{tce9o$&|wEz2Eu4qjCws)l9oDAz~- zhU zU$1HB<>Nhu(B&s{lYzH$EFbsgy~&QZ1LL;qW9Q}9hIeXaQ+wS*FDC0%PRB@zhi@OR zb67G|pH^|5Stq;Av>m$x<+pi-R++myKa;zD?!4VP{R83gJ7nNh$L}%6!)R^fCejs( z_c-BShNhJ~NM+<>6|rw`1K9SyDhP0m<#`Au?cT1!a1n&8f8s$H>tVJbJT{Sw6xB<5 zubMmN;`!sZB+0y2Z-4toF>D_2(?_4(RNtyGg%(E#MZRgO-T_6yo%Eroj*6hig{-4R z!if)+Q)*dq17sc{;$}g~Ai!WCru;8naxC`u!l@IFa4lAJPUDEF}lT)^W$7oZ` zL(A!w=ta+J72J3)6?{`-=Meb2Dm~lHQozrzb=t_+I!*NdfXKh8S^o%>SN~D3=i7u( zmPRW7uC7R9kUB?5Of7b#6DfxKr429Gbu|yfCzFQWnfXHeQNhi*1NOzr>v!tT!ceT} zkA7|FdcN-Pxasg|-1YbWfHB0aGGZ-K5DUO+Lq;U|4$K7yU<%ns5-(=L0mL>iUK{Fm z-T)Yhwx3mHE8FK31^(le(;=j2L|bM`Sa*3w)-pI5UYaZOkfs3^axY>ko~aqRYpjJ@ zZuC0CcDSaB>Yl0-_&UYOQ?Xo3a3hS+q7yj#$m%klUqYkwT3i|iPS4Z2KSTW(Z#JXQ z1%rsPF?U=dWp6Uzy6%<`c27DdYPxfO;SNnwD7Pl9dL>xE3Ue@TvFL82*V?S5`e)Z- zP+ok4b@rv+A%l>&AV06=WmC4P8sL(i{ozr7gQdC-!W~`k_8t_@ox^XyJe}=`Rah2T zZjW3~b#-^S$)^9yCPiJY?ejj&9jc@50P6aJvnLbK_ z&Vqw)5_vkTJkfF_F579LHf@zY78EH4FQd6~D{3s<@N|6qmAPpYM`js1aAP7Dc)yBX8g& zL@8KOlE_w#!ie*Xvf>-z(4?0ui!VZQQ=VdSM2h1a4jX@u#2$wC#(86kW{M^hivDTU zBJJ=KqNlNrX+J5w98H^yNJB~YAp+X9Fv@aj*=-WNxSPQVm5JCRsv92aT~Jue198CT z9pUK%oWf=K?gXv)@L)r5tG$f7#>(S(H{ z#EOD6q3)KUcS-u2MewCka>_ptKhOh${VQT;UqIjGVh{B}3Nc2oANGH_Kd<*}&$v7v zZ;s6Yk;lgn1KNW`(T1=hh(qR~MvJ@gLu0=oN6VNIM`oo*A7GRgzq*5Y5VwCDXm*{Y zOjmP^E3jLshjWN6Aj@4dg`&7hG(464ma18&0XsPH5G0kVxk2yjlEed8dX6!wGj4~A zIxEy$o&so8U_Rn7L`5>%49?3yaEQ$>;`!7WuGS=0l~vnqR^TvjT=t0VHlhidV-=e1 zn^Cbp51N*bF7o)MU68j;de6GRRq-aZ<}}XQbZa7aD(!u}^jzzxH`Mw_a25-K?ng$o zs&;2hKA)YD>2X}qP^5b`E949)2&fDcN)X8(!h(op2-hxK#Jm7#p&*DDs35=5gXB(o zb-(z=tiHdZf>N?utmYJIG97)MelGgfO=VNd7iASZBfg@4Z8MJZg4W5$cb+;sHq}>Y z2rmvIL!U~g=(X%vR$XbUrS!}{AX0|Guh10J9?1-$+>o{=Nn0)FwA0jCAFsA@Qr>6@ zNj1=);-9I~lmHlg1ZWL0K0Twsg0H%G&f6ed{`P}f%Al%l)VOmHj%>$Mn1G!hwP7<# z`6@K#o3f-Kd@k<^D24)rtLJPTx`M1b1t~tr_A5j*ChtYH62;b!&Gk%Mv1i|Ly5sU0 zuQ)-Jd6GMZy(Rtct7^6OiZlu{1s2!@EMJIK}3Y-h~Ylotl5e zmnNB#>V)kE_dIM{SlT_rX#9|=!U1x`@FT^Z-S7P}wAb;cgI( zfwgU_f>8#KtlX9{MX=D+?pSGzK{i+;oTH2~Ipj{k*F&86i#C7YlFEOO*qXrjv|n*> zW3x8xmT&0^_U*pg=oZ@&1(eOx>YPSXLoiB$whOPghxAUS`B=v9Y5bwme?#~y0_BRq z*bcv#Z03u}ME(y5{7*&fAHh%O3w~%H7{V&n?P`LN@OK>V0NC=zV6_8Q%U@^}nMHB8Mx-ir%9? zKwdJGq#r_#He`)v>WGsOMKmD}@=1?2gjqz%P-3b&;1{vnX_gB}C}8Jrp2@G~)EfAa z%xrg8s5%bi5oJLuTu3#xx5DlrS3wXQna9BgC`sN&d(1vNk-_d6cOhn|E_8gVo}e>& z>Ab)-%}&gDdVJjf$#aq7Qjc3+h3*qXl!*Ev14Bw9LX^94_@>*|p0mi|x7zFyk$m{m zRsTp_|I{4tR$AsW_#ivB5>Qt4(-dqnQa3MZX!ytL^il_fLX0}gau>w}Hbku|XfQQ} zU>MV*zCKcmd>KQUEDen=V6B5VR_a?1B%PB)q zghd<6{+*;F5)udBSiX~tb=pK|q!2(ht;DfiVanaHT(h6x`u}kDPSKTxX}54y>{M)2 zyrUhP728I|){dQuZQEAGwr$%^#ZKy^|L&Xaar*nuIb*E7#(S~v-t~CS`J@aPLa~(@ zX!OCUs#KV(51}E-#TuzU0SOt#b@Bgl>^;-7zuo#y__&DnHwI+h-hQnqWg*W>ctg52 zP*~Oos-Y(1o{E|~dDPjt2?h4=MQ-TG$;;@+DVg+;)r2E;5xb0)0?c1YC{uGT9m>hr zoN-pCpol!=)gO(|^PHsyXdgrIt$iBXVprn3GBd=MU1XsaajS1!a-bvchKH-6q-R4G zsm!@Pr^~H7q`&2SpSdb?znqKFRB8@VW0WfCqEHJe6 zSEMWzAeQAtR50&rmZ?4<7Ci~X7xR13>VufQGrNp2g_@(%qcF2KT9W`42Ucw|4SG^Uo+2^BKkdZ?eIE z4$c0n5jo6>qJJa}$Dv3{Xd}qLRyMD-ltPG`XB6!3l0k7Jfx?RAjOc8w6g2F~aaNQ0 zuDM_ERolbmcq36S5N)w?SrbO>|)8mv(B) zu^3Nsmfl0d+Gt9$`$A~Bwai#}q$+?LDzC*d@1N&-ymAvk2+?G5d z7TV22XC-ynNHJNnKoSIkt-7dQMCMvU6P?-D-AC;QS0ifPgyN#0QdubfZ3H!b05p_L z~QjWZZhuR7OADd$0JT_HhWAe`dbduB< zsNEV768zEbr_hW5EVrZFzJn2Uer1d?P8$MEHndPsATqRiWgv>1=nw(W2aE|u8sg?= zN1rOsb^W+Do(#Z67Yt$e$2l`+8?G9K)qIi(k~4$awh5L1p-u>DpQH9CsZrb;e-5Ef zCADj;nRvIkT=N>rflyGLE%zhc@WdN-Ghk1)ZIZNC?`0xltYOIh)L3F4iJ$&;?s zrP9mNQpL^s?CX8MMo!2sZWE7qcfP_u%}Z1L=r4t3Ep&>lC_>{sEHI*&Kk>DSGjf+p zl63@?aiz<)|C$*naZFwXzGxN}tGKViHiXalC=il@F4IA|IAz~ye!5V5;Vv=wbH3Op z_HeG}e9auf1R1aYz-R&qAh&fB)E`^_(L?dk15|mnsr~G7ZsCp|X(pPo`?@9Hw126U z;@BvuivZD3_W^=qirmtg3PnScGFY8Eih#V!@XNyhO>X-sCr zjZ1?ZO#TNP%jsWmEQh&WQOHb2ew$A`R-0+tR!er5_Y;I3+!GFyJ~UBAw|FXBR%n5V8q}Yqk#=ryxRW2caYA z;OgG4t-nL2&M2P3yxDlp+sr*FMoSVh=&-adH2^>`O%yxNX` zoYkgfFI2pHHjwNb>%qOAo|claYUh$na&M0&wnC*s$U_VrV7M%cH#I?^)Fe|}h6O%l zUv?XGrs7m*lVqvgBx$1e+&bm8Wl!+l*5;gJPiEBb9^I8jwD~8MYdgGT#JPyxc8asF zuxr#;5HmAJ55Yf}Qn*m*u5h}RX5CQyLMqRgM9+nhVGMYget(P_0`Ay&9Hg6iL<<7= zL$f`X*;SB)8X|!Ez>s`KM!I#(-`v!f1`305VF)13SIKXc!kB;%1}D)!3qS{Vk9Ls!n*132i742?MGeqJKu}9EwqZM zLox1r-pMf9)|?w78K_S8NH$Qv9Z~2}>1=2L@g343#EJzXu#zrYN!FBV_bXEL2g5<; zFEvP)eS$e8H~sM3ze{~|5TEBg(go~A8WRCWu4{+Lz*z^zk~~=0(b?aPbdpRc%^rx{ zSvJg?&A<5EtNXFQ(bn_tIV8B=ao)MbHhnuH$0^Ms#YVs1&6Tlz#qO4PnKRl}zGVm( zBH{h!Eqp#=22S9`JGCj;3MeFt<06V={pJ(tC@DGmLt5g;jDVl>2z@RNR@kFFF2@h< zhR}5>cEZ&OM{-OdX_bvJDD5@0=$2s>vYH6joK8|1%?LjIEh9FLNM`q;%TnW6C zekJ!Pnr0|0W(CmP1eoSP=!SVlC>#CpSmz|Hb6~_vY51YOVAsyyHzDV5Q#pX<`Nqg?9roU=@|C zm_MY<&7?+?^!(?kOVTIEHCk6>T-X`BXNmTZr*WjXPdWC~d=lI*ZD5p>nn2?Sk69k} zmkwD+Ssrpvx79zrq3ysCagG=P`jVp16m8e^_5kVd=TBr-io{M=;OxS}nV zL>Vz3tMO|?$h2?|{2uEfonjh#ilNM}m&Y1l#^Uosr_X-vJmAty*VT@}p}#TE-rhQ#1r4n# z6g!M$34jTet>=x}9dP)SNGiMJPl8{Hgl*D;q{xMun(~8oPHTkGaFmq&_8B7xy&xPt zJbSc?Q0XtU7h7BZ>U~U+B4sV zmkLS`HXKiS?`9s?`#U(3U(Mh|)XIrVnbU$MeTRiBX3k1f<(oTh`Fp(j*!2T9vpQxN!Lj4VP4TxKrpOL-Xiotu z>X(=S3{Aj{to8tF8je?aqr6X!S?FPCjkUPa$j-h1^(}MU+Hsa-+;`;o71Fm}?wo*+ zo&D$wE1}~&1tClCE!7<$ecyg?6ylr(_yJWmnbn`S7-KZeH}A&*%oYa^`p>a(opmg-DFhlo)5 z6GCeolstcgvpxu>s=5^l%rbKlK(TKT`tI|LU9m4Jc5lI3Wwh_$`a%CVH3Xw1->U zYS&3F>^cWKl#K9BIY}Qt?`R!9NO`Rj@!7tm+Ot{_CUO0;A=D*ndYEo&^00S%Pw*v5 z4+y_Nd(I@D?t#PDt*LbKD_s1^YrmGXg2j_6Pdp0DTOwqm5d$-rqgK~}m=F>fvZaa( z{O-hXW0Bs`f8aiZhLzPk zKd&q5^Y`DcO+v}|AL69{RFB}kw_W0cf`TH2l68i1c7{R{g^Ege+n&#u-$xaNGC`bR z5QVDRew)qPS8f{5P!@$ElnW`)RW;BcA@#Si_pb7GH<1uEkMkBZaJLY(kQKCu?W7!s z_!`6Xp3&d#==HaNHs>22DL5%O8aNC??H6l3y{|Rc>b_)X;CTNrTlirl7I*onMj-ns zEXwd-zqx;kl71?a3OYI3{@Vwbscx>Pynyj>X%zRE(k{SM(L;AWLZ%NPNES*(rU&-< zP+bCb?G~!iS~DcUFor=_8_0#6ndoKbe(g*d8o9L45=L) ziP1;&S>D{Xw%-T6y{Y%4(@XcuX+HtHi?)xby?1)i+sTbP>Eyft{9TIImYg4=1GX4% zvIBoq-g*L0T*Xj{9CN>TwHy!SYU2;aYQLfQ#MSZBxT>MHAN9UIbq98BSJQijbV(fg zBm+N!-`kG&d!>9I&jUws+hq!_|*F$7;uaJljdV|nBT*K~te zfs#Td>te1Fv3!**x5V3Fa<%B8Ue+X*uOOV~7r&hn1p=hNr@;sD=8cekFi~Ya>9m-G z5wDx!a4|nNc%>yNeqFqu%@b>=Aq|7+9T)E5GZqjdla^hp++Ccw;m4iol`YnFYzt0M zeVtBVSuC)fcEecF!V&W0G|2gzqW-rbgkf|CaW2YTC@h+H*q}5oNk7PSww|!Xklfc1 zHDtI584tD9uOoO&*~*zWbq-}O6UZ2fSHIuYCn(#h~uz~e65Q&N^Vt69S-hNV!l=Plw&9-ORYX)Q(x#d{N8F?tTo`OQr z1sn%ep#f`{ujyVir1gjMyJ#Er`~7rZ2eQBPWnQ~h4k)0Qe(MiGK@4IiyJ9Al(;FQM zVH%;H5Z^Blw9T)r3dHjg^`QNR6f0O|o*sa!W~!IWsVs-lf--a8<10rsoKuyPmOu9p zk9#Y9TdZRmmmC^pESNEJ+JhjATpTOI?OL&9b*EU=BpQ7pv*X%tYSb7=;1^eavRilp zrt`7CAbiN>OD@!BTGTQFU}O5DAU7h6Vp^m3>CsWphUMM$!EO%a(4mS$TE{51EpeVe zCyHn%0}7;#JajZznA!b{2%S5zu2h(2Qi0W)2k@(@{l>n(sfdNF=5wC1=`}2xG4WU- zeyjFzRTzgDNw+SHm{$^7AMCLP{1(k|Edgi>aWBrn;5ZZoVejISgjg&G+L{~0rBs9h z49dDWi@%gp6pgUssON_m$Rxl-lSr~EP>kYKr=`%hr*UX8O%a`2J2v)c!SDL!Y~_H2 z11U^GQqwrZ#%KGjKvfin!z*qERr3vgC@fUkEDE7(=n93Qw~&#HfLo;kl{i^ChCka% z9l_4$)NyNzu}ce=|4!__%2O{1Yj5$#3WSI2W9?sxxn)bkS1n z<3M=n8_nV!QTCa^4(o~L|4$Fz?b4>>$q}*H~x`;b@ z?(nQUVH*gXGPI~zj9*w4Xim{<)X}8Ka-?b)cc}agb#<#v1I+RSX_flzWwdE=F=h%v zF$@ZWJV4oZb&+Z6Y=k; z?}j6rP!!f$UK)RH`G_q+AhPR+3v7gryRQ1IU3OA-{m_27Y+EpJH@e*j_GnthUPjU| zsyW?iEVO;xFv1p24+8E=r8Ns{kG_?JE-dHO0Mm;@##ljtcS-GE@k6T5cW|KtTOCC9 zMg!BD6?Lh^1M>*-rJE~-r?+SsZvO_yc2uyI#;+4pG8?;KM-6JK?=CXinl@Q84dDnG zsCAVBG!)gD*Nlcp5=XvA|Dv7b)E}&pmJw32O_j(rN;$AC^4|QeQ)!-+IvVXeon}`+ zCxD#FS}^9s<`vh+z(;H$%r;!l;2};6BOLGceS{P^VtBa1{1nxa9TDB0u%9>qvCtlB z>~uV_^=rSW!maYa5P(${j)TIBc?d3MT*ebh%kVpGwcp?J>Q_QfJyGZ4>9b^zwywFA zs<27m9sTg^YK5-`-HoF%Xe4y#t~O+5@F5}w`Dvin-)XRj!mWlFG{du}dho>{UKEiG z1&8?;k8gq%yw<&$e+{Ea^o(qo5R+q24I`oN($mxk2<1+haVz(< zZ_?JP_S6_r^j4P9h?rUOPqp#qbA!*m$8ToJANWPLv<7NGLC##EM0|Up!3L*XGihXr zt+8TT<+EHns&3i7%eod7TjBh9=9TcQ^I*r>pEBe(WOXb)MClA;IgPU~f=agijyOO1jf@CKKBaa*hlAMGqGQpq-A#}Qzn>RM14m3V}c+@Yn_!qHub+6q` z7mA25PfcoWr8LU>6iyhgmvPM;UU473SN~(4?3-pAVJPm1ac2!*6?DE6U9Me!j6yK% zRS&X2pcGr-H?y5lU)7JAYqq1a^VmvX&Y;=j-Z#TXtH~A8bW*&-{b#6s`$@j6Etz%L z@8QhbR&vMzLoLWi&m%YZzZ{&9YahP{D+MY!5e0!xcUfGB>Uk-em^GoecxfQ;oy${jI#!e)Ld>wFOXD3@U5uhv6C4)DMiTm}ranE;(EV7`A(UVA=Us z{vZ`A-Bd5_b&x-pCJ%Hb{fmR{NG^hO1fwk!%k^_#%40=cYyO_1GA5m!VuyF>uv(L6 z1F)=JlvQbjEpAw}I*wl(Tkm#GqD48h`bTfyI|6k%dIs#?_?1yK2b`G`hvo`lkTro& z;QIyhrk5tWEbu6s^JEZbgJbTR)hOA;iO@&G5wVw1yx6kOv-Jn7jwwo}*r}3m8f;2P zW%G)syEW>J=6WwLyaJ+z7^8MiW!;BRCc#Y;M3>^(uNEi@rL$R^j0PeRBnxh)mW=J3 zNwhY}?Cydd1|KL=sxw+H$Y)}zaUyyxtU)@F!faBP!wIfY= zcQa1LmrgWd9VDWCeBLv@X}`%|+#c?ZF}F8_Cvl0cG_a?c|j;fBi zlvUgmJld3a>OI(m;LUW4)35+dK%PQNw>Q2f+UPKb2H za04icDg10Ds-q>!qD_6@2%Vn|bnS@6|g&mx@;J%=-OQ}c(YZHIR7ps8h^-A6Zh zoQ(@axJJzo3(Z%siFTm6@I1_LuNq@q($-q0C&}yfFK`dhI7u(?O2H@0)#8`r^B6v1 z+-(kS;tGAF-}Fq$AQVKL!gA=!IvV4U9Oo5w;%YhXUXp&alHOelsowMM-1I$g?M|Sm z$$-4aE~0*d+R@C}{tn6@!}Q$RuL}5+%LSQ9)Po4NXg+&&N$)u(YEOAkvR|Jpt1=Tg zYNNd1G3svT4L&mhXfiDA)=i03CZ1dTZ8I)a%;EJ#Byf(TC1-j?B?}WBD@{-kZM@nJ zlPkN)1uLa3@J7}N*@C)OMmKQfwT1yc8GV)>)`n9DL(-t?PVt`U$CAXo+8pQp@<^}~ z64S(-=hbtlNkR#VenN3gMkp~gX*5uS^UHujJM7K9qsL?aeMZEpj zBJ(siTE4TBcI3HGjtK`u z17=Y}CuFJ!JO%{f`A%^o`ODU8;x)HYmZcsF?DSG^itA`UQgSA0?_|N|Ee@gd7aN@d z1_W)S&inZTMRpj`v|$&-Iid{^b~u9UnXw!r@MXm=Bp2I|C%)tkAm{j|f>v~yciNKM zfQ{>-^tf|aGAH2}mx-kVWp@MQC*e{X&eBKYR%QsbXE30Gc~pM7L~#e`wgO3 zVhb2Ddun;oG2XQ?Q#rLK3jI~Sg-aT^^1ar$otM(hUpvYeJDS-V{YySk#o7T??XzEM3qNKdoz|c9lw^h;f+9mx z={Jv!Cc;<%IftqhkEo%~+|4u=C(Hdl{qWb3;xh?tI=QRkFPn4tLm%*s_+iY8(_`|p zS-S4<$NTB=V(ZIc&M0=z#+M*QpdrlT({JJ(zHBUGCLrYX7i44C*uy?j8;|i|ge|_< znuv-3j7uN2UUt+@;~3_Zz~}Lo(KmmQpt)3QC$UJCc}+kPFg>j`kul7Iyyx5SNnx4= zt4!pMiEXt}k(sg~`35yRyP;DtOgU-G-WWi7i`m@>%M`HmQ8BcE_p!)>SI>gg?cM@tlpD5#>ANBP^2{9LYz0x zG5L~rt_04AQxzK6es=CO~I;TT8Wqn!EXm<{Bak3G{pm92xm7#V}b zaC|)_e)uYjZ+%ehwD>t$F+|*Z z8ekXkpT00>oK}79;M!&RM0y89G)ujmQEiM7CO)KUE-dF7WDvM!mV{`DdPw|o>)S0j z>DWtFte>I&$y0|FyJ;pPRSm=F{83zQj7`51*!w^T@c&j>J9u)RgPCT$)$XkFlf$t7b}xP zqW@X9(f@qjg^EMuYcgm6cKMfJlk#4log?Ex!P8dbBQ#;zpAjvATV=5 zul1-O*eF?1r$ZtP!UP(P#zCrIPv14fRC`A#0x4V@H>yStxpLeh4H_}Ev7imkI=+87 z!taL4{1tq-<8p=h1I_f|J8-H~)Xupn{M})#7B8Wtgsul zZY|Py0AIT-Y=au>N@OhARC^&b+G$1eS|+8@UU{w-wofLco%-0JZ5Lb%IVGG#mUT>5 zBZ1f*|8KvtCd)VWGO?|#M|I?1(u1;ss99N0t?(9E(4HhMi z(DSFSDgWHT@_*oK}-feMw^Z9E_HSI4L0rkw9X3NvUvi zMUMu6U%X?Qbh^>*c!75NFFC$8ZJsA^?e;t=spM8qW4gcLf4dKExZ|hoVUvT;>!$c# z&+8tWfS-$4Uf+RVim$9;#OzAZf*DChj3q?LapLzSVfIpv`&B$ENYHk<01|8gvioGI za64$yQZ^I;8snuY$!eGd`$`g+XnUHgI(J>B?^;{|@Xd-_|x+}0zJM}#*Cpdaae$Hp(G3BL#XduBHX2#1p ztBR@JD-%XBR3r1!C)J$+g-iDaE8?k;8?2cLh8$7m3yO1cV6sEHHz_P*SP<4O{KoEg zsxu{REIoC0IxqUoK^va(qW6AiV3}ISaCcp?a>Ab)TTWLClTH)O?jUQ$YLBNHKXt+c zrXHn65#A-1ClfjNv>;1W#WiU2)NJ{8z<}4qeHNnSV8euFXzz5y!te0G6aX{UrtBDO zX}SJ41w=8BbRS6Kh3q8R=*y5YItzMDMep=)zd5iDV6>7DtTAE{nZJ6Xk&K9l5C$tE z<|%dOw4VRhbMtsgM0#A@MUYY-orKL8o(qd-Xf=yxq^)|LE+GM;3n&`kp1+H>eD7HX z8P(1c28uRTt1;-9wN1LnJ+?gk^Mp4K|GIs1ynLl?k~ARt%2_?sftm3QW)y3pOyZO0 z#Tc7xjx3yFGBLyiG%H9aXM3OL;lQ!Ze@GiPxR6U< z81h1!=d?L7DW4j$Du01EkGJOH`6{0+ zvR2gw;hfO8df(VBa5tbE-eAceWxB@L7`M1_Nhsz~d?Z?Duy#6LCxLv62lVE2Wx1-!n96+r>%hSK%0gUr7Dr1<=UV&3Y8aa5>__zA6Q&_`q_`uH6@ zGh7G{=DNwBWQ){n1)76&;DcW%oX;&uOL-qu<+hn9^TJl+0KO9ly_`tg70y0i7v?H{ z>pd$Y9EZ1ji@ifu{iHRDeqkMoE;rv1<0(#g1Ura$P9eZFP1^@Hi*SeU_XMM#F~p~> zr{4EA94-F}cVB%o$l)k$M`FTpM!|V%k8d-Fug%;nR{7`mFQVVazPE&5r(yTGA*5pE z>-FN+0qtjkF4>yJrTN<)p9?UKCxR11zrA5eV3_9ZQBS_Sb&3b9n!hYc@A0?i+UrOP zKUnMiHS#n=gH9P2E(l(;;yJPQ3Ka)7nI^hM@4_Ys@6!RUhCJS~y0b&@6Z{0)DYs$4 zLWkGTt#+rK5i<;ue9t_up!8>8rF?OInt0)iJBP|9gHXyLOd@^EEruPY$F7Fb>1`l8 zgw>~*za;wDN1?7FY2q5+>*`H|L*zzh{IK+@*oF_V$pGLGV{K=KXR-JFr|7lM%;ocs z&rFTtbM+eWf6dn9Kb!pjbej!omX6A57@IDK6u0C40b<0y2tejk0Y5q*IP8xcXNCkZ z;sk*}3HuRgY?EFd0jh?EM8&mLRqOH``FfQyMaWeM&6nviJuh0HC!u71Z7H2GqL-h4 zak{)FQ@LHTLg6PgIZd-29#=ekUOi2-nY-Q|x&NTe@ZQCyub!A=(G{Dnn`IsBB;(&@ zyw8k`NU-zD0k4{X4!0OKouisS``fs5-JfYX-gZ6g5u0Og3GS431iBR$@j;MJ1@%jZV9!FJ1DugX$gM&SryD` z&J(UjTl?E2|3LzlTm|b{ap4~`-lVY+{e~WX>8!Jj7Rn1~(d0_G>Sg@sGI$tde_0~& z4RcZUeD4%WAX)8iN`UsGzhLf#E!5ruL=#1=)L}46U8&JUrYt1xgsvTF0}H`%ThK(Q zaH0dD^3}DsxN*4%PeXzXND0z+uS-zED(8mNYxwlYb{X3EP{RvaS!-XlURh^7cKg&d z=kP*70{)@~O)RQQctl`%-|X}&DDIUx{9w}DgLlQaMM+BS+<*H|1V-g@8GRB<-A3+KZy?5mPTq^D00FA{UzRMx3%c0AlTonlAqyaxr`04BGh zUZbVQROt6xtr0m+%Z^84m+FWz5r{yYy;aWIabbiy--*TnAhu7#Bl>@oI)Z(j0>}>s zoCKs2*z?DTZ}t~(&YUARCQVJp-QeO-;-6s-fT=Ojv?V(95WCDWU6laiWU`DVVYXhR z-LIR@Lw3%SSimzXQKQnP-?c=lM0RVf(i2By2)D}OTHJ{qvDVseo;BXLsz!_|2K|2C zbWo)7Gehs=ONt2rgtoV^@h0~dP$V9P>jKFThRI4oP5yQ#cxbAUqUCa99O*MSW9QP| zBy06@ohiG;ymXc}B+KT;h2|SeF5$@hv1^|S!4)Ej#C3X>s(_cQEPZHX0?fzE0?y6u zwqNKnF-fe5@DH9Z+hB>o%NF4zDO~n8mQ_~xuezd_TQQ<`ns@i|05UhK`XwsYLNs{$LkniA#h^=auGK%zoYq}GE%mlIxK<<3dNx}*Kvz{{UG zMxd9Usw+TLj73wP&lZ0G8tJ7b*}Hdf&JllzpC2)OHum^;tboM6F>?4?!8qynU;H%tAWO+)Y~w2H2< zhOq`o>A$^FrpFSIhlxR9Q#HkP8!SWW09XP$ zM|#gwT4P?5u%ZOfH;3+$K1G49?u~n}$3<@Qf;2Eqq@rx?LDrtA0qvUimdahK_rx8? z+zZ&0GIt!9d0WIU1HVK4L!8k>k@a*9eSGl>An!o6I(@^kyk_MybwN?F;f-@95$%fU zjniJo{E5sC{QNrl+$C20!Wg}NG}Frkmh8h>tQSFAc{=+AeEN%&7>OE5*cB9HL6&vR z_8QvODpjJ}l4@0lSPl!wY94{*zm#eB!pJ8xJ3^H3lIaibX)g)i$umJ(vn}e2FY%0;5&5lybQk7ob>aIMv#Szw?&|_ixwUX(G^O zd`!#I(B`lNd8%-Nrr&t5d-;&z$!H2)&?JgO3+9ApOJjcb^GwsFaA6ebzAeSF!J1+q zt$ubrz}x82+I0*T%I0;0>eScHFOEuUWNb~F?{S*Ha@*+^349^KW^8qs|FTgRGl>L3 z>yl8J(xKRxH1A0Ul^vchgZVa<;KBtDmQwIDDw<-k^3f?mcPHnAdF;=*IKl zE63EId7O%fRAf*|F6+iYIFv^jFtegKA)O(Fjy7Si8H;xBJx)M{>m=hnZ(59VFEo%} z1qgY;p>=N*p0_NHcwrXFcRmn%?`6s7GZXa^6}d3vnrfD*YfjH;b=Ws=7eFHD$GYDx z8?l2uBG(iEYHdGBbMQG;)p>hiPEL}n{W2&eF1Dx>N5&92ofLETP7@azcpTFC&5u=c zoQV2b=RW$5LyPO=!nxO1 zX3_Auup4BxW|`)Zy`Nw(VjqkM%m+2R7JmrknN=4;WSa&q^E(61gF7B+I8j4G4ZxL z6ksrL8-_t=?V@*Mkz<`d1hb__0;lLPJ$`@hezGeJtla^vgaVQwLGUtr9ZnihZ9WKT9 z;T=6gboKO{4;ehvzk?ztNrMy(8Jx+I4BI!@wTT{a#xOcso?=rKPBKI9m12&UH05V; zjlK>EEQ!Nk8s33=(9~Dw_PI!ylm;Jxy8x<*GwIDgs+U(BkRK$RLzYXWDq1`( zGIBP{BZckULuf?H^mB9c2O}d{?H=%NEb@hHOS?nnFCfeW7*pSD#DVv5`nx)8@1%sQ zc%K0H_k!!%ByXhNvf($nv^wP1`RTQ!KNg&9r5&FO8W^|)vsJ2Uw=UVcG7Av6Wd+?+ zWYf1>j_YcaV4U`VHBe+eI5(GQPCm)QLS`Q}Ls*0Jj!!n>Drke4nfA zah^C1vvPnXa7<+n<=>Cg;&0M#bxZbsman>B)r6PT+mtP_slTzOeBi--z6%c#cuU_l z_wyn??&vJmUHsEd59Ox8stnNPwU6R!E&VVT>EdeB4+a#gOx!{fEY)?X4_;tj)OErW zEZsJN#`8&wt-lg7V=ReMiGMq2Y<3h{H=>WvK|S`N#MRK)&e7b~=3n)D?3!esz_*~k7XZzM1q)tf$Z)s@6>#@bS5mki zC^ZAG*4lB2ECBPo&LlNRpywAN$qWhq;8j1^H|DnIqja2`kLwqxZJ2bo{olQ{qqT#I zjQ@bx6T6i05@f*^SbDgCr8@l8g+)(aRa#PL%J*wLZ+29&cu8{nW0dopp>6U*>=DvA zJ!y;8nt)4T=v+dJbM&ILyFK@AcSW&7{&h1{pk>iBCVJMf&@{c0VLHpJS0=LR^l@ZN z=K~w!)Ns^$y*{(sXV=X@bumsMTl}B~$#-G3f7Wv>8ca&()OG7;ACdh8ErN6nx;mzM z5=7(Qnl^!hwiE09z}DAy6cwYB=&N|&ZNh>%N3J3&Dw8wt5G+Z>;rK%Un3hqMK~U{V zZs;z)2oySMHxB1YdO16kcqFQGi3vLeEwT=*Zym|u-eJ8-Z|jdV-R=_h2Wau=UJK=V ztiHyeMqo;8HwTS=?0SR_F1vwALaQ7pp)_`^29E(}mBt6ezu(_=Wxb5TCvVFT`Ll-j zAMfv<`%3;*MW|{xpox9^7}V5CYHti6rU0YF_f>C1NVkI${-Pgj2V?gwg?Y$=H3>^f z)2+cT=8>m>`p+{OkAMn8DOsYJV&YbUWT6L3h02X}oZ^D?A89$CpG0%{T_4Z)$X~>+ zIHFj>7~8|OKm~T`g{d6Q+epYRd(FYGJUrVw-;sabTwx&pyuCt1W;Dj4l z3{x1tF^J`-rd7#H3Ga>EjTLCuSKF_@SZgTiHtV^zP#r)#)FcmQKQwCi?nSOSmun!a z*KGs2nP90_hz28F;X>b4AQSvL+3dv5LGx`SVgd#`URMK-49-SJ*LFd2w#zuVtUiv~ zHA*M5#w)q&J`ZKQMcC;tbxee_L@0z2%h5*AuW@vqE`t@swbb||ty=IV^M!NKzDl(U zOO`Qv#^2x?@%O}Pu15Tgm1Qzo?2^$bS8&1UwJVMttxj_u_C1yhV-xGkUcQ7;`p#(T z`;Pvk)ZiygJw0_~kt2I6RKSl4N&I8P1ZhRScuZ7TZg8Lway+Ao0S+P>g;`eKy$ z519z|BbD%yk0V)yMyJaMOlq5X8Sa^l7$6b7<{b|ta~YT9F}c5P)j2jP;tx{!AU}FC!WBC-yT# zJEc33JxXG;UoYB=L>kyhycaJ&ZtxV-b!<_iOlrN>Uu3U=_K-Or3<~!@0xc?b{*%Hk=r@KKNm@r*rs=1j3=ErPCy%RcO59T(hIHk zrJGA>>%5Ii2QGLq)#0A5-qXo@zed%@nlK(K7hV8SqDpNWL%i;`Xb?v!+>gZ?WPPsP zn`h10%rmRLM7|!6bAQ0?1}d(}8D?wpL?GXNRqXzXU!buq6mi?>) zao98Rvl3y-KyyXz*=3jGbkd~hWe*s4lo}gopbJL|j4#^oPQ(kw_*x{LR_xL2t$O#ftj$x(J)|;yUTeNs@03y=DYdxeY}aYhtnfnyt6DN zT{JxIT2ba?fiWdVhW|!4GI#GvYQ02RzVmGJi$`xk!`vf9#vPM+^B-1i&A#gmPef+x zl4c~{DL&+C6G;&Lcc|bz)j`>D=NR!|ve_s6Wb{x+?1Op=l>7|c!Nf_+7Ur<>0v(vP z39t!Ilcpl&;m*Nt4X^~U`@rP~60!!Vz)r~`i+TT3qfJr+`1(s4`#x)>G;RJy8rK?x ztSos%ez~OQ@#803@ePl_3*d~Gv1P+?-eprWhCk<-$)ooph4g*|njI`RpHcTj@MgIgiFung3=Cjh}nnZ2NnB z!6(&*l zrFlmtl-7ABYE9Q&8^3iWYIYgUO@VGbY(Bbck6PS()3I8fN!fku_sB7P=(~4ZH3n$b zyGAE0sXy{|oiJ=mp31|zYR+XaY)f6!M_iQK%XfJ({xCoKh9Rq*D_zHiMXS8&3{X;k zBY_*s!0ovo*LDoGROm~+HOIXx%n-uyzg*mD%gFs^`t$S( z*!TV3C?VE)doHKfH=PRDv;>T+=-L5fIcDy~vlXreg6Gn{?eg_fl-i-{B-puG4Xlch z0Sypz8?_Y8eCkW-Fk+{g;)=kSEzHX(D6|exEz2y+`t+vmmiiRTZmyeA$YNL!8yT4f z_M$A}5UW2L0T`ryC3y-uej``OM0oIGuwh3Uqc53*(p<;P_KTehLoOagKqr~)d6IBc zVf_}0gxjD2VB^l-4RObeV}@$GqD)u#HIwkn;2Yfz6`mGOSQE6GsQ9jJs8ie@fAp`r zh`Dj<1V#7MT3m)_r>%XV3mr6P*n_9?1(fL3dl)8SY6HV)`9X49%keCreV^2HM`KVT zCj>&%JZ<7Bk8&KVeq(13q1W0$uzHf}Z6mo~rsWZYhhu^}(norjtX{;uU+W3#s{YY> zg;|Il)54whzVaMw;zDF|#mU9#A~+Y_;u=PTZ9&E{(h16}3V;oL28>RqK>5TH6W4;N z2EIXhQpOOfkQ}gRD^C%e~UhBz;Dxxq@BK=sv-~|Nhy{e01y=O zAABy-ih{`Ba5~{MTFpmfPU)iV&tChbobCu!~*?P9_uUr(z5 z3R2~&Ni4JAGYexa7gSqN)Ii5kVtz<9XY8m(ozT>%Q&dH(X%yzczc|#ao(yS9P^=(W zmEZ`nqxg2{OUUx^nk|XsHs*3>qK#iS0|!~8nw`H@+j|$mW^01EvQw& zzA5qRndg=Qxk{qqq6bdC4knzJBQl+Q-O;WN%o1{NHTwslRX+u?iGCw=da8xNsbZ04 zYFh9!Aq(@`_<3OSuzyR+jv#!ULo+9G`Y`(mYC2)Kuo8c+H#y zrmnvuppzWtCMSN#Cx~fy#8OkW?9{o+{lvkdBkxg0MluM&=ckh~wG6VT6(9bEdJ!p%ok(�w!i% z2>rON>kA6*#CRTMC^Ti7EqW`6MBq0JmXX1n9xgk7**Tqnf4GwuhOnqaKc|+;iLfaa ziew`&a9matJt3G?ANnpw|0LtAbZ3f8rf|UQ$;#dK2`p)G4v+B{wD18#$ zLJbv*g3}mj5W-mqA_LscZf{?7XV3|V$TcHzp}w!sh7D&zk}Zuf6BK5SRtQlLF3L0e z?T5OE*CWG-g}3}%Z96{DgKNc6z8cEH^VDX)Pz^ABKy%zABHzR%d5WW&8h3d@$kxck zx|n3Yf$KHUU@sCZ`G67kr*6$`BHzwdti%Mk?f@=^{DVM%?-3H5YJZdYi|zLDS9C^) zC3&EU$r`ldlMX#Pr; zU-m{^lNFDdRtM>(JtunxoyS<#xI^VBiQb8yJD?feXp7o!X-vW189-fXT=M}!Cmr^HcNvr zxtV&~ff$EgqAB^pazP#;Q0VLiHg_=WJ%io}Tzo^?sE8m<93i`J-|_P!&qL<2lW4&~ zM1s5Lt^vFIgUYdz89-L=qE{U^!4U|I87*W>%z1;F5??!K5?i2W#uZ3>5>Cjg)3)aLw7n!xM zh%LGDH*PzJ?GQA_?Y3mTWH#fu%w{r)zxOQ{irHZ%9+|yl=U~H9A1Y?r@7gC|EB};a zi?1zKTe8f5)2bFr#Lsk+<}v6`&Uc4^LzegZGek8c2yuL~89fsPPF2*I;{LreXMo`C zlp(6-)qKy&i0^eDRBzXGL@~a7oWMIX1hq2NiiUHZPB)tLqCTdlaKm$fQ^ws6#yt*&^oe!H zEOCd2v0|J}H(ld%)!Pp97c&Ps@LtUd<-O z*z~lldUW+*8~YI+;_-WI8lbccpk4tJ&*M<%_*%d3r05|RW5Le4#vmTX@OyNnmt0XR zl)8T3g6*A1eEtz*g3}D#x$1+Z5zM2s(6obMYIdq=z59O=_D(UPMO~M6+14rBwr$(C z?W$9!Y}>YN+qP}n=z7zg&i{X%ulr(Oth<%0WbTPEpP_4drBMS}Y2Qb3Z{6Fx?)mKK zImTY!i?(G1l#zq1{s!0PZ@i&+vmcFO?hTnP@E6iK4%Ymkf*n#b8rBC@PlDIY)TW^S z@?k%-*&(TW)GbOw?ZUe~IDdCCS}@2%sHicIffegLTLz_a`J>weDT>XmlzW7@eVH?C zIAc!@>2ttlx8>J7%q98P6;Yq;7~y_;jzRZz`$FHI5hTiV<6}!s^xvP+-^M-z)hU^uV_4e(hv+2dI8RUXF zfQLb>wnaU_CB09Utd_~TH`^52wS+`{2*%YkTHme-tRl6K6?qj6t5(Xo?^(m&C9SXd z_a3ZPwX{sDtUw#Kz|8|_moe0Gk%~;KLmd8BExZhpQ~D`Ls|z;0v`st=wj(h#y~!Cj zqemS6T>;*~>3#EC>b77T68at1z4syXR<&-Lo~#$7m(z%sI?2cNvJ*`l=^te-x%Jg^ z=vQ4MrZ*GTz%DIKPn8L3L>G`)7ZWyBI{|--Tt*=8m&n)g`uC(hkzEf$lQDk=1+d3@ z-oYFe_c4D~h}Fp3D97H2)o9ub$3ThI2-`5n-oO>4Hs|6W#_J^FsW63c9Q0B)-8on_ z9FyX?L>;3Au%$Lp#yCh`V8K zCZ7trhg+NxU?Z}Wj@-hsQstGpfy;d?`Lw@9Epj`(kTO=!f8!P1%IowlBun>{CtE0T zTlt~gC;9m32$noPYre8|zrsGXG@_YN`f8-dJ~lP776RglVFEjRO6Y?_RV%1;+65;@7erygbE3J7Ov)hKSv{dzE2Nh zm2OS&I;|U@XT1M^6N=MdfynT;-Vww7zsZ39GsKp#bvAMQPao0F@qd;*L+X(3|JhW# zF=n(&W=j|o>@W58?KLI}hi2~+Uj>0dgp^05>Xz1xj~kn$hmJ_L{GF?4Ud(H5YE`vH zK>I<6tgo+Iz6@!0tS(?y)~ec}+r=VAJiZ$uf61V0*2?>KV8>I)I1zF5Q)b`o0uJ)=f(H zaUdiO`KHwQ$nal5`PAvVfchrby_TQ}H#0m-(iGJ9lw#jrm_?OvGh4?((oET|5<~W^ zC#VeScnTJ|UnAeOjBp-mbS5o>CLUQ%-9eIbWif{=Ae*l)A}Z_OV|u!ZLPO%wBt#5z zVL?z6yfK%uvgi_vDZQ zGc9~(zJZO(Zkvdzm70_ z!5M1!IQ_-OqkXW3DUXhAqk%-T0IC~tj>)p*K!QT9qdktb+@a;(VIN=yU#ED;hzz5D z${5nNFzi6IfSn!rs0)q!o`H1jSTx z_@gU}6!m;TO++D~cJQ$}bvA3VSK#ARiRg0dpmL{3gsHPt@YwiC3!a9Y1u4AInEzRH zLQw>p+2f%rYQ=Bc5+j*Ovv6sRv}zhRcWG@tz(iC@glgKbyVM=|$FwUlBc)X@x`24> z@_?Ej)ozb3Su_MSJG|vCI^1ne4tylvcK&14x+))(N`*9Az7EQas=qj#PJWut zHQ{mDzA~bsNC611#Uijc-1si$F=kBX%1M#&eeAa2e(Yl<1YV3 zQyL>jl?~1AR7Dkre^%GQOsQQn9P#K;$=m}o6(V6UWT_^58BHyW9)FHvTESz??}pZ_c*$dOZi0y#(#sj?i|)@3CvAx%n9DsoX7>I5GOD zKbXPPI>C#bFp3XZDQgMXU5_JYYLB`$Q_DCgZ?Z`Lr8lVF%i|S?d6^zQUuEpPsNhZG ziwT2zsBMapnB6QYiE^`5j_bBwY9-v8m7-B?W6!J&VhRT>J&hc0UcNjNxOG`aY1C`k zPexgkp^>7kKcZw3gRn;H4h>M0-FCBA;~k5#zo#76WRd?Sn3oKJ|=m8-o^AJb(# zBo)UwHlSLFZiqxI+eBR+h;s9wPFglJu#}-*9MAcJnUDV%GUUNtiuV+IzLn=2#uoDN zO?bIJuBDC+eaq0i-8^?m4JT2D@?+9J!Ltjnt^v>=Nc%kbH)8(qY}V;RDhhw5xV05%ntQi$TbUCWja0ZcV&vVYmNGeS~glu@BrHZU^YXfwst^ z=2exvH21uysf%1!Lyh@_9=pornS6h!D@+hNpE z_}2YmZveb5F8(@5_mYuiqtxCE9Lh`dE`aNvy!UQsjpE(D7?k(YN+(oV_%}$yCxJ-< z6#>fSHo}jr%|>8!eCR=u1J;Di_DM*+( zUvm4lKYhfycr@eWF|KWdfcf#SW&7J>&)Dw<`!W?CbL!0JA)_OIAdsERO4w~n*!d-N z3&pfabVDh+0F;=VA! zr8<^AcEMs{rJpG9(hY>)$Fv@_X$5c-8bCH5@pj%taORG&?Tm!j?j=R!S5__%TO^=G zBP38IB599B=%MzQ(?u8a!gQJV% z@ue60H|U0pm=l9U$Q97awMW+7c1rlIm``8z8g^spDMTf_8V$X6LNbkJonIXT5rH0u z+v>&Hq{=OWD`o334akQ{?C>(! z`&oof=7RAQaOSRz@>7C3PeBFcYinY2SCk{`hXagtF;Jkt)m<3%m)^*a9AnZX4gMfW z{oPe*)mjYl%VF4#LG0%g*q&NCQd@0<3vi0U?Tu)0yn$GzskLBlar%0Ff~SMy8b#9w zLkgFq%^J6Nb>&8kl3U*xVbg?bX;bj#ygT~COTIB%XBGHtW4AY+tdC~0gAE?qs=U%M zmDTl7e^>0K+BlBk9RAn{gcYakAjM{eD!m+S@4mGQoiQA6%Yz4axjh-_0j=bA6#jMI zr>&(|_M0~y+AgmpuXt8S=?^&#_oSsqU|aWyeP>uTSei^ue@R-8QycL1Z>%iBsL~nU zZl%CWmMJ{c!ic5>J7iUjpvg%oj@qD@=@iBY-x+qUzO@8(Yh|TuT@YF8h@AC7%Q^V4 zKHr@B`ODhd?5iGOZ}%EZO`jmSCS z_Z95rUTNJLZ?c(I|BS0CB(OKBR%{!H>z;KRle3Sfuq7y{f!WMGl`1+q%emtqk|)fB zkC~SW2A3}^5M7s>v!C79*&oS!8e!aO`MbTJDaw6%n>U~J;U^*jTg{2eMWO6PQWZQe z>X)hhSTP_^e^@mQHP>Z!tR&=;)u>oMtV}Bj%@9RN<5H}`fd9}-QscC0M~c{yxBXg4 z25~1Els3+sP+u;DB{(~RO_(D~A{47Uno?LPWap;ZD!cCV=|X6Z&SexpV9$%AN(DX_ zGauH$44Q+2A~BSTj}mr<&r2sOF?T5+pe{dXFGfc+snhe3OoE(QtLMP7h1n!;L=~{9 zMYxD#bl{MU7pOBBJw|6oy~@Bjc9{@b~ly@8{Xi6fnmor|sW zFO%E!qLKOeD39nve&EbXUf%(#2(PznMV1PBc%kTi{0njJ`xoCOjPs7<;*&T}`` zi&%(^X#g8dTdj&l#Y(4R%hhe6y8U`RU#pphhjgg4=$dw^U9-lsvf_#S$yIH|NI>(G z@5YNMAut#D^C;zpC+Fo~_K#Ed!zC5o4~lP7`9u`kZi1~Bl-$@!B($8=hXwG@aeq(8 z-k?wG-mnJnOzSO%#(QOCj?015s~m6++bt-Ys$n-{>n}wwz#4xQ;J&gS zr^il6-acy~`1)faZjpbhOg^StC&WvSKi&jtKQVqkE(M4^%(ql+S3fYH>rpc9)4g_^ z=KXd-pKf5^dSE9eBcNwry3xFJcv~Ih&~#EasK6+wOt;M+!$Nbvd?pmoda}VUgoY->6(9eE!1smqoh}h88_BS!%&?iKroc)p3JjDwOwu?8)D4uS?!D%FP02=ZTqvpj_ zD}67ZJd=6>SxEFov2OVi%fFKR04hQ-2lh1*b5~5w? z(SW*3Qs384_i~XdL?`x=8;+~jA1u>YqTK9_A#>Jj-*nV%RFxA5Uf zM)7`KW4E-4TD{#izo5xV_uPqK$IOll;h30Z)-Gb;QL#t8Ef70sc(XOkO^)=S&P2&* zpiZ2V_Y*@wCZeM$?5tP*0mIw+(UWvzPUTcVaC6Tdzfe8_`ij=J$QM*lus6M06!%~7 z;K^Gvj789(V(Cmpb~a|<#C}Hcb^Etv^>nFjwOyL`jCBk`^YJR9bxg3B666VTgsqGPF`gB^qTD;`QwzRMKCvH2>2k?A%^B*^!4uo&}2{(Vwu0!gwJ2gYu~-oWQ=J>gb%VyKr-6t=YmJFK)2OS1so+y=c3X&BUF~*^X zGctv8%96{VklhZlDa=d)S(Y4|`Uk(3fyRamIpo#0Q4*NaaNH-f1DWIr{G%Z9Y+GxMBh zSca^Z)tWBn(Od;{ac`aCQsSV?}oCRn{7gniee;bTgV}UTeB_EHfb3Q<#?yg zVH_Z_Do&f1!;#31R))CYaaT6%z^JkhBp5?kP_ozNkB2YPvJVYJ+L0(N_;%jr1EwE- zo@3}KiQL_0Lrm2!;TZ)wY2*>;Y-;Zbj9lu22nsFFT??tL&hZ+hN{{R>>!gWyhG5rI zFHliWn0kF3y=zh>r_2@Rd&#)S7VRarq;N}=B)McW8zcvw@!o#6_%O*Hc zRwzeNX!8MO$LWsAq*qaSt$J$rQltYLocl4)8e&L5S=34ynEU&kM~o^83u~>lY-eq(P`(2g7MyJ=WT}d8(8SLbxJt~HQEx{R9)VI z)dQR;ayaZ|&$gp;N~B3!E*?m*LkF${1kN+rxzj)st0`pC!nOd4DH zaCc2vq)P1*UxlOOWr2m4}{IltN{$kqTyrM@%c+UCHwo(4=Exstwm*q~xcd(#YC)vN41if<7d%)` zI(GNmxDZz%0}2!`kEdy`ua2&5sRyj;p#I(F=OliJe{d?^h#}kZGbJs^rnQ$Qds7M* zUI#@m%MQlv!pgM2m}bk)F^XR{#L>?NWY{NmdMLygxkFQ6$_MrIYVGZYy}e3ZQ_Y5| z=LWv4nrlY^#+;%8?LLj z0!p%0vvE!28r^6*iWXBy5_ah_?<(eP>PpspHnnkJ*#Z`B@MWhZj!$yOI)@M;+Wy_p zj#TYT(Ci3W-3jM8R3g@x*>WlEyK<+KvnVun+x-U;vuRqmQNc1uEfawNdt}jtLU=<+ z3F!lz@@iZg^aYm^6Kv!$8`stDzn!WVje}YhF7M~a;`XKs=tQF!*5`%atT`faYMNK|AM9Ji3tH3p66p)A zvT;f|j~$BWVf!|TXcBS*jY-|Qy7*?=o(j<&ykRSw&}vzd`5KqKd43iID7_Lu4>cf% z1nY+bkEdd%QzhnQF>?#JCB-?pJ7jZV4*vJVBD^v_S-DMK{>yiXV3t%t39WZ6AS^LV zvYKOB7NA*=V?AaFXn)U0eO}Jp-ME1d9BfFSUe**?n||f^feg?H3bc%G;GyeQQT9{Ew zbcE4q zMa_8+y;8b3mAA6A5vZ^#d7sa3q_a7XhsmY6ns2K#Ho=^=D@di)97;VLaHCjyVWL$S zdi_VnLPJ|eJMhApIeW%Bj>QxoPU;&GnV{4+hKp z^~&(IV>(`sRTGs&w?oRLwq@fvX)7P=F}|MhNFqsa&7j8BTuyUlX_|puu6IIr1zpuq zFXi%rHzH_WTz`)Fi6Y&)_0o_M&|8r0jY8xDLyWHkrAI&ZhotWfRprr&w0(zOryT!)krX;I!MTfDae8i#Ip#yL%S(|qPl~s4 z>fjk>vSoosZY?*tzcthnI7XLWVtc={--=^Ktjh)(-o$zj14pR@vv0l;@iBC>Mh09N zT<8S)jf|f>a3WD9v)JJuw^A0)tOD{XyPq!UZ@-{66Ve7K3K;nm@AeX7WZU7AE9%Q* zmCer&a0d3keaooS5Nc9x|Ea{eE4k^6g&J+eki;o12JyGBLLo}i{s`myFI*JM%$c(- z3;+N?ZU6wr|5x$&zgh18-|BHl3(`w@X^HQ|B%Up;69fs#I2I?cGEfI1A{c?5m6!q2 z5Fv;FW^9)j*_0H285Gq%Air5vfJ$(wkv3NzoSxQvqqT{)X z(v?OX$=UbqoiqCPW$W*Co0;DA>4P56I|!o8EEINQ)(Ph+b@s__L#yyfgUfezmJ|-k z%!3PUgHv0jD*Nd439+H_*)C;u@(9oyw;CGSxmPy-(rM?Yz}Kr67hUoVv~%~YKuIb% zwZwkW<-A8)r#az^51~ zCg@;^Q$oPKNA;yP2~kfba%@xX^b}k=bt&0{W!B1I4bcN0xXe+6iECA_4q?pAgvQf- ztFn2Av}g(!c~T96*M)QU{IuGcSJU*xRcD{TgL}9226>DX$l*G1cXUn42rQ?aqdchH z@*6l%>ySVakWL@l_yOr#rv@(H;+q)f&VH^)Zk*3#%ehxZ0PSv@>o(<$jo{doV?Pez zYtHK1FIulUR8KOc*-u0haND4A6Zm_I=eSE@_3OU>FA)OAXKSxXtR`kqPEc$bclA$fRpylDcfRRD0v!M3aU)_&~6=5C@CqZ zid4}g*7krmKh!rW;EGNeTA$vl88^MnLpN|BTsXAj zP>+@s9jwWkXBLAS0GC>i^s%A%@bUdNk`o4!$y;Vm|Ay3k#)fH=depb%2y987sO$RU zU=v%PCabg+8po%l_Rf>`Pu#a=Qkyexeo@wMtJKf}+!*ZvUjxL$pVZw6D zq?Yk3y{l)nQoGrOmgSYu8~vslpjmY@%q)-J3+10N(&FzHDfD(sCNhI9gE3bU~vkDZeBzaY>glG+r{>s-k3V-p$U2Xv3097FQ$t$t4jvV-&Nd@IWK#ZEl6gnO?%GS2a7+u-|Kbw=35DN7$3 z;faa0^<7R&91{U57PN9?5qX>4*?(h2jwtM}(n)~En4ThnK+M{{66lhMjgj#<2>MSZ zcVWMAwIbH{CGna`8rg`WsdIxg&Mj*P7Tw3C3mS;~AOko9p7#ps{nO8@XX66OaQtX0 zXC(~a^->Z|66UJ|JhDk*Z-Ui(2gzi+%5MjLd~O5~{QvQ$Cc&^zY2_4(^}`_C?`HCN483Mgv%7P?WmvjKy24XNSWe-kzm=LGcwpqxG{&tB zVUL@DN>j={ek0Y@TMhFsUCB06()!`cQa?a@`um{nA@`9xi6ZFQN^UYk6gge;7c`B% zg6*FjMUL_g=#jr$6kT04~!Wod<$ z#*yYT22I&O&_`2yDY@LqKh(D7P}M9`MS91O-Q5u3_vsNlLD@9@mpe`o(i7F*O}cso z9i3uZ_7c+Z*KwQ$N#|rr-m6~TayXTvBs9niGGrnXY|GSH9DBqP&d!7p*O+tg0UYfE zgt9`eG&dT(D&O$=-;fw;;0(pUL*P?}R0?6ulS{sJTgc4N?972Y&&ldk<5-Ih<`jjn zmmmXynYp)Zz*{TwPNAjRx;1HOb(6KN-C4-x&(MJ{DQ~IAKCqBvYU2zv*RmIpduuVo5b?dKcLjhyju} zb5k)%2Qcd*9k8B(&ljIu0eVL}M4Q5A#RS8rY@qYSXnNWgwosIOTvxN-Qz1T$AGgI+ zG1uKC=b7^bF~4-zhiRb?JewZZgF2iT>}~Ivxh<}c17&YmS&W9zRMAw3=xguVe-k`c za<=Tv1y8p&9aBpX%VuXB0eUBV=+1wx_{nT;@!ntqeg^F@8xvg7Kh3_ODI*d}hhRNp zw#7nLxeDlCX}+lz{0q2l*v9zkZMuf~x_QJjTN>@wXT1-;LU6a#udLp0>ttfL<|^>) zc3R(7+ik>hI){Wmm};fmQv#37L^)9gjkn3ahjYE|2{|rVC7M+#B^k z|K};K^_rizypbFBcH4ou-E3Yo z#K;3U=FnhKOsw?cA%-mP__F?4YfbKjS-ZArmPQarx{h3QnU%}ni|`JO0JhdJ$W2We!;Hg))6A!<5fVW8n{xIH*1LK>-aXceMBCSd9a8=Smm%x zjeCrk1O;)JXpBwNLKDl5vy-l1hYi|(o+{B#sY0#-Z3gCTn%Rrk>*|Ymw`MeYvKS`j z2aR{ZtO6OKmbG8&S|L#gUowJVcnp`TI2X~|e@#BBZ9?F*SG=#juGnl@8^=Bw6uU~d zKK=M}OYom8O0d?IZP2w#7u3g7ew~3H8&j{_J8W34sIl#cOrXjSr^DjKv)1`Mqe8pe zwdz)`IwY^p3sz+o1$ivr^t-~tr$w|*gRz&O*0)OeR0lopau97=HaS858JrcG ziGHOC>d}a*cju4HkQ8&~|J3JwY{}@V(S&9%xJW5pNE;O>}HI$xdF{ z{38rcpWTomDcbVoGC!(jn0wB-h0eE@>@S|yigW1dK!qeKeXOFmXNkaDXPikM3-l%V z&P??YO0;o|+FWvS>8?H$F}vOA7r3xB>dbWO+nMLE%*lTB-9GcaD^K*OXRb=!zgMzpBa^1+~$BJ05uDO0->y>W z97})aj0>XV)ypT!m*7rk8_d#k&H%Y5V9U4_RQVLC1|y>SzrE;7s72=7vtQc9`3bH1 zm(eP#tesnuaeichQMBH;D~m9Y(ou#RJDEL1)qIB;IM*9geh|g2z8GcszFKEv{p^h8 ziS3?k)}s++KxdD?=}Zm7sUj&adHNq0K~sDwkt%L}!=Md4=%U;`qx7dOXNiF`>UCM+ zu*1X*+{jGFo`4tpcZzLkH={}g$nKl7`+r=!*F|WcFAcO0RJT#xdQ$}{3OC>#l{NsJAOH zW=SAtT9e%ns1F%cK)8v7S5OoXw8bjoM1GEq>&S^0N>q%EHJf@IgPvhW##MAC;ooG< ze68JQz?k8jtQxfDA&CoNJSD`G*2NU!P3MEish*`@d6icQC4}f)7L=g;dyiYm-wrS7oesf>*Q* zoj*Rba)e6l7y*r+@;Nl0yV9xRM1+&PtwGRz8 zJ{b-&H>Y|Us5T&!$6B`9&%9GncP2eN5?Nc29026W=XX1ABfvace3>mp$U2s`KPSN4 zl60+%rl<{xBW+eB1=9e9DP&CyJdU3i{*M3@3Vr#38RVxSXl=zlC?SIUGG)DIWY z&u0P!;k=q2M97MRm7IoAAP~N2%s5z+?NINOS(}p`AAF!J-M4g~^gMmW#FSi7MB4(m zvMoM)1Wp%Yn`dmtP<4f_%GWxBYLD`k-ar7b4RP856#Ig_JfR)618?g4((_;V2Bfm< zn~Uk4;`6uik$kBWeQ_e>8MSDP0H3#=&JS_NzS^UBgys#v-D^YHXIvkFJ_VpF7Hf;v zY=cxEGPPrpA+at)=Yj7K@;(yv^z#Om%IXbz)bd1B<;*Ja5B}4)$30z?a)xT(0#))8 ztsC^uwq)mE#_D!s1QAge9F42g8v&&Uss~~HClufi;3(r1R$l_>OKlmIf8eUQpjaq~}N-onnii|-0A=a){~(2g@_ z;kV7oS*@(tA~BfQ(ji0E_E4eX>fgt1RQKdvDWKmhw^96?61bU$kKbv~J7Os7JxFLq z`wr(Wy1uq|MM7&HkgCjdJ z76OLorUphQ5fN``96H^`R%me=k|L`A1p))Em zbvo~aF*Q;G>nz_Xa4nB7=BZH8SzRLnrw3|0FV3oN?5N4|rfPYm!U2NHRlzwBL|guFm~dS#|BTDI zDZY6gG|2I0NvR`MQt6&RIkmWcAc47o0hS3RH+l}4_$5?W7a0YBJq*1829J>iKk5B z^SL9Lnmdz%;U(&D#r6T;b5s6f#JdY57w?fnD4aC8M4nYv$SNzzJgJ%elf4uHkRYBP_MZ z1C#O~fE{z2=-ZfJ6^R#WmH`Ae%TuT-niQ2rO;19Dk8>e*(9_B<0a@#GF4jLQnG{ZT zwc-CKs=t_@=I4SBG>>GZ{0py49}c)a0nY%!NElqxbv`UGQh{5>U1 zqO!b%#QKsuDhkg7yrp!A?*h)#|}Dwu)sld)MO(}IL;P^eWUMY#2i6Y9y}TS;T5844aaOtr`>ZpV`RN}l(0`iO`I+poxY2` zGQKV;2eAJWw|RtE(AgPsh{9b0tV^6Cc_$=a4aZWH{Dc8ua~}~-(hSXCjWVfa;8M{% z53{;VSx4i8l|@N6WMbLO!u&QU*2_5VJH(L{^EDt-fkXQdfW}X6-2@6?zAXt!!wgrj zq(uRpTLJ1UgT;+UhuE|Zk+)9BC6a9FBQN^Jf2+7!3hgq%cs|m^oSHHqdoEwLxFD?? zc794oX+o#s0IW00+a9VGm-E#KwzPDFUHG&qo#D>1HM|qES|xDshJx#>Bx%qmd$`7~ z9Cc=CT)=W0;0J+E_*I2?W>?gLz%Tr+MROKW`4RsOdUVSD%3fp{&@`wm+(Q7tXbSL% zP;pJfQW6!3ZDO@S&U+2G0gPB65ohGi6J7@!s=4B9v93rYR&q~|4(t}johpE0Bm%VF zYuxNV4Pov{yq~^Cm@GKc4`Qw7Z%RvO8cKUTM}9wbK50N|d^m|BJj}MFLBWklQddkL zQ%A2yv*R99x9(TZ%|5%1phI|b6LPBPp@)_~@qn;JcIbl3Ay?iTX|S=zS*i)&hlc01S*tBk05$e@`8UW zNwG*fsBa0>a}(vSdnP)CZ{bEA_qQR2hKpc4lf)9gQkH}wFotTp7hb&=jIrG}n&r041;n5{L--Q{boIm{4(Lj^vcJ zypF~s^XJKEm?TY&Nzn_o!jhyXAPjGVaED#PxlcVo^hvv+mE8A#|oeM)GT0z0h*q6EJzl;#% zW2rH`@wUn_1!G+^m_)|i&FU!+T8=rDDs`DAYlbe>7Gu+ z^qEg#UjYQgsQQPD#4TbL-abKCZUvz3l^T_j@8b1zIpyl*39|5xdaBVv1k22d+p&v8i|h(W{428 z;maT7k1))c=69oL#F>l4|K#M4O9{ei+D<#bTDwzwv0!k^2xz9vIVF}@4xz~NYPZQF zo!(TGivnYtlo!+MYLh8adE?45qo*y&ar@-2kFx83`i|r&*9w$haRUws0vUgpWe3I! zgaq#FQjlX_=DwO_hqnof*Myc3=yNK6rWXPAo~Rxf@Bbt7Z^8F>^8~qp*=4Dl0$>eu z-ym-SUSpML;t8o5PB0^snVf%v8P+@G$)_vDKB`Fe$^^uiK->){eDShUu_mFEEwT8p*wAI1 zrx1gEFU5UwMSszCm>N%SM1`3DYtiWf-;hEph?pSj7Dx^cd^pNA)T@#91`(QOP8q1k zZ{bV|o5vBFQ&dWFT%bcSpvEDdRscb{ESm7SQ(YOA?{(G4l=bspuvorF{8+BPU~5Kb z008R$c37m~V&drWf3CEtYN;Wsp>H9_|H}2t2ph{(6oipNqleZ7b5;4}CHe9Btrj+n z*=2@F6WEyq&T7uIR?ZXt)un)^%zR;e;dEUl1ojdJ99F?IolJ6kd`!Eonbo{K8_^J4@JUxl)^918sKMLwA;gi)C6>l(H?lSq!fZ{@XdOttGpu z3CS@w6%e$_ZzW;AHzd=noG1A^H%AJlQJvJQERf%zM;CQ#MF`Xww_(O>G-%F6B&(JG zc}!PGB+;mr5Zfu0GV@t`E;JfXS939C7Oo1AgIyT2UZOY`ouZdgY=H_kYxAtqrqgWh zw!XRJo+)2vD!W8Bnwgyl)>*_u%@$uM$O$crR6XntuHesNvD0#0$Y`nlLq|!;rJIes4Uw`D7uS)3(3GUKTjaIU&=YmpkNt`LtFr)j5 z;aXk#qlN5(jm+3%W(zydT$=Kybw2mvfYeB0nN&pMdFUh@hkFC{HU85&S!3YI*zCJ| z5#q14KXK2y_E{B|3gcV@@kN5UN9kWx4Zh7(h0d6zXn>GU2jQb~mw2}^#X~%9*_({< z@Db}}o0;-aoQbB?+e{m^E-*e>bA=2s8nN@-*=&VsDWB@*TaF5IEZwcRaMx|`s8jkh z#q#U<&oU^Q=mz!?!;w4GZqtko((K?k+SEdWN~!I^JJ{|gm-W6Bb{Ld>`abGlxsH|2 zj}pBjc3l6;587x#$wCD;#iG5cgGEC&S-b4|$FT+>s#3&|?-t3w8}1;>x3PQ$5}|n+uvF7+$By^x#T(`1V*L%U1X?dr-62lRm5domhM^ zN!T6W&v_0@Y@vf5!H=K>fawPuTk7p${GB^e03r8`f?&5;{P1B-zaMgj>NR9KM0J@L z>2A>(O-}YS$YP;PaHc%xR3ma^Qv6R$LZbPa!I)NOB1Eq+anf{zOcKGc)0@!X*s#w) zzs6hbb}Yd4uUTx4W#cOMIC01N8Bv_Re<+{ld9*kKSTQflM`(&Bk~ zhOEIMX2w*BU)GnD=UQEQMs1B6^={8|O0L@Efew!Rks$1D={e>p(fCH)%Nl1+%HgK$vAr#EaHFesj7w;hj2 zD=vQZ5jv64WfnHYAn$I^MBO9H2OH0%##j?18#| zLLEUFsZ+a{sb-IS8N%^!SBU6mpX0cWAMiy*lhD$!

I>gysFLDtV8NO!7@O{V-^~ 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 Wg$BHsi@5_ASQ9YwRb09F>;C` table = new OrganizationWeaTable<>(user, ManagerDetachVO.class); String sqlWhere = buildSqlWhere(params); table.setSqlwhere(sqlWhere); @@ -141,6 +145,13 @@ public class ManagerDetachServiceImpl extends Service implements ManagerDetachSe return getMangeDetachMapper().updateDetach(managerDetachPO); } + @Override + public String doDetach(String isDetach) { + ConfigOperator ConfigOperator = new ConfigOperator(); + ConfigOperator.setProp("hrmOrganization.properties", "detach", isDetach); + return new BaseBean().getPropValue("hrmOrganization", "detach"); + } + private String buildSqlWhere(Map params) { DBType dbType = DBType.get(new RecordSet().getDBType()); String sqlWhere = " where delete_type = 0"; diff --git a/src/com/engine/organization/web/ManagerDetachController.java b/src/com/engine/organization/web/ManagerDetachController.java index b3e64274..a54b29fa 100644 --- a/src/com/engine/organization/web/ManagerDetachController.java +++ b/src/com/engine/organization/web/ManagerDetachController.java @@ -118,4 +118,17 @@ public class ManagerDetachController { return ReturnResult.exceptionHandle(e); } } + + @GET + @Path("/doDetach") + @Produces(MediaType.APPLICATION_JSON) + public ReturnResult doDetach(@Context HttpServletRequest request,@Context HttpServletResponse response, + @QueryParam("idDetach") String isDetach) { + try { + User user = HrmUserVarify.getUser(request, response); + return ReturnResult.successed(getManagerDetachWrapper(user).doDetach(isDetach)); + } catch (Exception e) { + return ReturnResult.exceptionHandle(e); + } + } } diff --git a/src/com/engine/organization/wrapper/ManagerDetachWrapper.java b/src/com/engine/organization/wrapper/ManagerDetachWrapper.java index 2efa8cb8..07f9808f 100644 --- a/src/com/engine/organization/wrapper/ManagerDetachWrapper.java +++ b/src/com/engine/organization/wrapper/ManagerDetachWrapper.java @@ -85,4 +85,9 @@ public class ManagerDetachWrapper extends OrganizationWrapper { }.getClass(), String.valueOf(managerDetachPO.getEcManager()), JSON.toJSONString(param), managerDetachPO, MapperProxyFactory.getProxy(ManagerDetachMapper.class).getDetachById(param.getId())); return result; } + + + public String doDetach(String isDetach) { + return getManagerDetachService(user).doDetach(isDetach); + } } From 0b3cd0641b50c5bdaf32b79796312fdfe24b8ca2 Mon Sep 17 00:00:00 2001 From: dxfeng Date: Fri, 28 Oct 2022 17:43:46 +0800 Subject: [PATCH 17/21] =?UTF-8?q?=E5=88=86=E6=9D=83=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/company/bo/CompBO.java | 7 ++- .../organization/mapper/comp/CompMapper.java | 2 +- .../mapper/detach/ManagerDetachMapper.java | 2 + .../mapper/detach/ManagerDetachMapper.xml | 7 +++ .../service/impl/CompServiceImpl.java | 4 ++ .../service/impl/DepartmentServiceImpl.java | 19 ++++--- .../impl/ManagerDetachServiceImpl.java | 23 ++++++++ .../organization/util/detach/DetachUtil.java | 52 +++++++++++++++++++ .../util/tree/SearchTreeUtil.java | 14 +++-- 9 files changed, 115 insertions(+), 15 deletions(-) create mode 100644 src/com/engine/organization/util/detach/DetachUtil.java diff --git a/src/com/engine/organization/entity/company/bo/CompBO.java b/src/com/engine/organization/entity/company/bo/CompBO.java index 53ad65c1..d26b8bd9 100644 --- a/src/com/engine/organization/entity/company/bo/CompBO.java +++ b/src/com/engine/organization/entity/company/bo/CompBO.java @@ -48,8 +48,10 @@ public class CompBO { // 兼容MySQL usedIds.addAll(MapperProxyFactory.getProxy(CompMapper.class).listUsedIds()); List collect = Arrays.stream(String.join(",", usedIds).split(",")).collect(Collectors.toList()); - return dtoList.stream().peek(e -> { + Set leafs = new HashSet<>(); + List collectTree = dtoList.stream().peek(e -> { List childList = collects.get(e.getId()); + leafs.add(e.getId()); if (CollectionUtils.isNotEmpty(childList)) { e.setChildren(childList); e.setIsUsed(1); @@ -60,7 +62,8 @@ public class CompBO { e.setIsUsed(0); } } - }).filter(item -> null == item.getParentCompany() || 0 == item.getParentCompany()).collect(Collectors.toList()); + }).collect(Collectors.toList()); + return collectTree.stream().filter(item->!leafs.contains(item.getParentCompany())).collect(Collectors.toList()); } public static List buildCompDTOList(Collection list, List filterList) { diff --git a/src/com/engine/organization/mapper/comp/CompMapper.java b/src/com/engine/organization/mapper/comp/CompMapper.java index aad7c06f..919b0cdc 100644 --- a/src/com/engine/organization/mapper/comp/CompMapper.java +++ b/src/com/engine/organization/mapper/comp/CompMapper.java @@ -77,7 +77,7 @@ public interface CompMapper { * @param id * @return */ - CompPO listById(@Param("id") long id); + CompPO listById(@Param("id") Long id); /** * 根据UUID查询数据 diff --git a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java index 5cd47c4c..df66bdb6 100644 --- a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java +++ b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.java @@ -23,4 +23,6 @@ public interface ManagerDetachMapper { List selectByIds(@Param("ids")Collection ids); ManagerDetachPO getDetachById(@Param("id") Integer id); + + List getDetachListById(@Param("ecManager") Integer ecManager); } diff --git a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml index d1ddc927..9646bcb6 100644 --- a/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml +++ b/src/com/engine/organization/mapper/detach/ManagerDetachMapper.xml @@ -214,4 +214,11 @@ WHERE delete_type = 0 AND id = #{id} + \ No newline at end of file diff --git a/src/com/engine/organization/service/impl/CompServiceImpl.java b/src/com/engine/organization/service/impl/CompServiceImpl.java index ca87a50e..a00b4bf7 100644 --- a/src/com/engine/organization/service/impl/CompServiceImpl.java +++ b/src/com/engine/organization/service/impl/CompServiceImpl.java @@ -34,6 +34,7 @@ import com.engine.organization.thread.OrganizationSyncEc; import com.engine.organization.util.*; import com.engine.organization.util.coderule.CodeRuleUtil; import com.engine.organization.util.db.MapperProxyFactory; +import com.engine.organization.util.detach.DetachUtil; import com.engine.organization.util.page.Column; import com.engine.organization.util.page.PageInfo; import com.engine.organization.util.page.PageUtil; @@ -113,10 +114,13 @@ public class CompServiceImpl extends Service implements CompService { PageInfo pageInfos; String orderSql = PageInfoSortUtil.getSortSql(params.getSortParams()); List allList = getCompMapper().list(orderSql); + new DetachUtil(user.getUID()).filterCompanyList(allList); // 通过子级遍历父级元素 if (filter) { // 根据条件获取元素 List filterCompPOs = getCompMapper().listByFilter(compPO, orderSql); + new DetachUtil(user.getUID()).filterCompanyList(filterCompPOs); + // 添加父级元素 List compListDTOS = CompBO.buildCompDTOList(allList, filterCompPOs); List subList = PageUtil.subList(params.getCurrent(), params.getPageSize(), compListDTOS); diff --git a/src/com/engine/organization/service/impl/DepartmentServiceImpl.java b/src/com/engine/organization/service/impl/DepartmentServiceImpl.java index ef4c824c..19b72323 100644 --- a/src/com/engine/organization/service/impl/DepartmentServiceImpl.java +++ b/src/com/engine/organization/service/impl/DepartmentServiceImpl.java @@ -48,6 +48,7 @@ import com.engine.organization.thread.OrganizationSyncEc; import com.engine.organization.util.*; import com.engine.organization.util.coderule.CodeRuleUtil; import com.engine.organization.util.db.MapperProxyFactory; +import com.engine.organization.util.detach.DetachUtil; import com.engine.organization.util.page.Column; import com.engine.organization.util.page.PageInfo; import com.engine.organization.util.page.PageUtil; @@ -177,10 +178,12 @@ public class DepartmentServiceImpl extends Service implements DepartmentService PageInfo pageInfos; String orderSql = PageInfoSortUtil.getSortSql(param.getSortParams()); List allList = getDepartmentMapper().list(orderSql); + new DetachUtil(user.getUID()).filterDepartmentList(allList); // 通过子级遍历父级元素 if (filter) { // 根据条件获取元素 List filterDeptPOs = getDepartmentMapper().listByFilter(departmentPO, orderSql); + new DetachUtil(user.getUID()).filterDepartmentList(filterDeptPOs); // 添加父级元素 List compListDTOS = DepartmentBO.buildDeptDTOList(allList, filterDeptPOs); List subList = PageUtil.subList(param.getCurrent(), param.getPageSize(), compListDTOS); @@ -835,11 +838,16 @@ public class DepartmentServiceImpl extends Service implements DepartmentService // 查询部门信息 Long parentCompId = StringUtil.isEmpty(id) ? null : Long.parseLong(id); CompPO compBuild = CompPO.builder().compName(keyword).parentCompany(parentCompId).forbiddenTag(0).build(); + List allCompanys = getCompMapper().list("show_order"); + new DetachUtil(user.getUID()).filterCompanyList(allCompanys); List filterComps = getCompMapper().listByFilter(compBuild, "show_order"); + new DetachUtil(user.getUID()).filterCompanyList(filterComps); + + Map allMaps = allCompanys.stream().collect(Collectors.toMap(CompPO::getId, item -> item, (k1, k2) -> k1)); Set builderComps = new HashSet<>(); for (CompPO compPO : filterComps) { - buildParentComps(compPO, builderComps); + buildParentComps(compPO, builderComps,allMaps); } return SearchTreeUtil.builderTreeMode(CompBO.buildSetToSearchTree(builderComps)); @@ -851,14 +859,11 @@ public class DepartmentServiceImpl extends Service implements DepartmentService * @param compPO * @param builderComps */ - private void buildParentComps(CompPO compPO, Set builderComps) { + private void buildParentComps(CompPO compPO, Set builderComps, Map allMaps) { builderComps.add(compPO); - if (SearchTreeUtil.isTop(compPO.getParentCompany())) { - return; - } - CompPO parentComp = getCompMapper().listById(compPO.getParentCompany()); + CompPO parentComp = allMaps.get(compPO.getParentCompany()); if (null != parentComp && 0 == parentComp.getForbiddenTag()) { - buildParentComps(parentComp, builderComps); + buildParentComps(parentComp, builderComps, allMaps); } } diff --git a/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java b/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java index 5aa68e4e..f318657f 100644 --- a/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java +++ b/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java @@ -21,10 +21,13 @@ import com.engine.organization.util.OrganizationFormItemUtil; import com.engine.organization.util.db.DBType; import com.engine.organization.util.db.MapperProxyFactory; import com.engine.organization.util.relation.EcHrmRelationUtil; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @Author weaver_cl @@ -118,6 +121,7 @@ public class ManagerDetachServiceImpl extends Service implements ManagerDetachSe .ecManager(param.getEcManager()) .jclManager(getHrmResourceMapper().getJclResourceId(String.valueOf(param.getEcManager())).intValue()) .ecRolelevel(param.getEcRolelevel()) + // TODO 遍历存储 .jclRolelevel(EcHrmRelationUtil.getJclCompanyId(param.getEcRolelevel()) != null ? String.valueOf(EcHrmRelationUtil.getJclCompanyId(param.getEcRolelevel()).getId()) : null) .manageModule("组织管理") .creator((long)user.getUID()) @@ -156,4 +160,23 @@ public class ManagerDetachServiceImpl extends Service implements ManagerDetachSe } return sqlWhere; } + + + /** + * 查询当前人员所辖分部JCL_ID + * @param uId + * @return + */ + public static List getJclRoleLevels(Integer uId) { + List ecRoleLevels = new ArrayList<>(); + ManagerDetachMapper mangeDetachMapper = MapperProxyFactory.getProxy(ManagerDetachMapper.class); + List detachListById = mangeDetachMapper.getDetachListById(uId); + for (ManagerDetachPO managerDetachPO : detachListById) { + List ids = Stream.of(managerDetachPO.getJclRolelevel().split(",")).map(Long::parseLong).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(ids)) { + ecRoleLevels.addAll(ids); + } + } + return ecRoleLevels; + } } diff --git a/src/com/engine/organization/util/detach/DetachUtil.java b/src/com/engine/organization/util/detach/DetachUtil.java new file mode 100644 index 00000000..13b40b04 --- /dev/null +++ b/src/com/engine/organization/util/detach/DetachUtil.java @@ -0,0 +1,52 @@ +package com.engine.organization.util.detach; + +import com.engine.organization.entity.company.po.CompPO; +import com.engine.organization.entity.department.po.DepartmentPO; +import com.engine.organization.entity.job.po.JobPO; +import com.engine.organization.service.impl.ManagerDetachServiceImpl; +import org.apache.commons.collections.CollectionUtils; + +import java.util.List; + +/** + * @author:dxfeng + * @createTime: 2022/10/28 + * @version: 1.0 + */ +public class DetachUtil { + // private static final boolean IS_DETACH = "true".equals(new BaseBean().getPropValue("", "")); + private boolean IS_DETACH = true; + + private static List ecRoleLevels = null; + + public DetachUtil(Integer uId) { + ecRoleLevels = ManagerDetachServiceImpl.getJclRoleLevels(uId); + } + + /** + * 根据分权配置过滤分部 + */ + public void filterCompanyList(List companyList) { + if (IS_DETACH && CollectionUtils.isNotEmpty(companyList)) { + companyList.removeIf(item -> !ecRoleLevels.contains(item.getId())); + } + } + + /** + * 根据分权配置过滤分部 + */ + public void filterDepartmentList(List departmentList) { + if (IS_DETACH && CollectionUtils.isNotEmpty(departmentList)) { + departmentList.removeIf(item -> !ecRoleLevels.contains(item.getParentComp())); + } + } + + /** + * 根据分权配置过滤分部 + */ + public void filterJobList(List jobList) { + if (IS_DETACH && CollectionUtils.isNotEmpty(jobList)) { + jobList.removeIf(item -> !ecRoleLevels.contains(item.getParentComp())); + } + } +} diff --git a/src/com/engine/organization/util/tree/SearchTreeUtil.java b/src/com/engine/organization/util/tree/SearchTreeUtil.java index 2ec73a8c..d15b88e1 100644 --- a/src/com/engine/organization/util/tree/SearchTreeUtil.java +++ b/src/com/engine/organization/util/tree/SearchTreeUtil.java @@ -89,11 +89,15 @@ public class SearchTreeUtil { public static List builderTreeMode(List treeList) { List sortedList = treeList.stream().sorted(Comparator.comparing(SearchTree::getOrderNum)).collect(Collectors.toList()); Map> collects = sortedList.stream().collect(Collectors.groupingBy(TreeNode::getPid)); - return sortedList.stream().peek(e -> e.setSubs(collects.get(e.getId()))).peek(item -> { - if (CollectionUtils.isNotEmpty(item.getSubs())) { - item.setIsParent(true); + Set leafIds = new HashSet<>(); + List collect = sortedList.stream().peek(e -> { + e.setSubs(collects.get(e.getId())); + leafIds.add(e.getId()); + if (CollectionUtils.isNotEmpty(e.getSubs())) { + e.setIsParent(true); } - }).filter(item -> isTop(item.getPid())).collect(Collectors.toList()); + }).collect(Collectors.toList()); + return collect.stream().filter(item -> !leafIds.contains(item.getPid())).collect(Collectors.toList()); } /** @@ -119,7 +123,7 @@ public class SearchTreeUtil { if (CollectionUtils.isNotEmpty(e.getSubs())) { treeNodes.addAll(e.getSubs()); } - e.setSubs( new ArrayList<>(treeNodes)); + e.setSubs(new ArrayList<>(treeNodes)); }).peek(item -> { if (CollectionUtils.isNotEmpty(item.getSubs())) { item.setIsParent(true); From 895528617b4300ce2ed2a271aabf8938d35b3e66 Mon Sep 17 00:00:00 2001 From: dxfeng Date: Tue, 1 Nov 2022 10:05:43 +0800 Subject: [PATCH 18/21] =?UTF-8?q?=E5=88=86=E9=83=A8=E3=80=81=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E3=80=81=E5=B2=97=E4=BD=8D=E3=80=81=E4=BA=BA=E5=91=98?= =?UTF-8?q?=20=E5=88=86=E6=9D=83=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/脚本/Mysql/表结构、初始化数据.sql | 18 +++++++++- docs/脚本/SqlServer/表结构、基础数据.sql | 27 +++++++++++++- docs/表结构SQL/SqlServer.sql | 6 ++-- .../entity/job/dto/JobListDTO.java | 1 + .../entity/searchtree/SearchTree.java | 15 ++++++++ .../organization/mapper/comp/CompMapper.java | 2 ++ .../organization/mapper/comp/CompMapper.xml | 7 ++++ .../mapper/hrmresource/SystemDataMapper.java | 2 ++ .../mapper/hrmresource/SystemDataMapper.xml | 7 ++++ .../service/impl/HrmResourceServiceImpl.java | 25 +++++++++---- .../service/impl/JobServiceImpl.java | 19 ++++++---- .../impl/ManagerDetachServiceImpl.java | 5 ++- .../organization/util/detach/DetachUtil.java | 36 +++++++++++++++---- .../util/relation/EcHrmRelationUtil.java | 14 ++++++++ .../util/tree/SearchTreeUtil.java | 9 +++-- 15 files changed, 161 insertions(+), 32 deletions(-) diff --git a/docs/脚本/Mysql/表结构、初始化数据.sql b/docs/脚本/Mysql/表结构、初始化数据.sql index 7f0f6bcd..3aa21471 100644 --- a/docs/脚本/Mysql/表结构、初始化数据.sql +++ b/docs/脚本/Mysql/表结构、初始化数据.sql @@ -698,4 +698,20 @@ BEGIN; INSERT INTO `JCL_INFO` (`id`, `fname`, `fvalue`) VALUES (1, '董事长人员i', '36'); COMMIT; -SET FOREIGN_KEY_CHECKS = 1; \ No newline at end of file +SET FOREIGN_KEY_CHECKS = 1; + + +CREATE TABLE `jcl_org_detach` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `manager_type` int(11) NULL DEFAULT NULL, + `ec_manager` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `jcl_manager` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `ec_rolelevel` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `jcl_rolelevel` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `manage_module` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `creator` int(11) NULL DEFAULT NULL, + `delete_type` int(11) NULL DEFAULT NULL, + `create_time` date NULL DEFAULT NULL, + `update_time` date NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; diff --git a/docs/脚本/SqlServer/表结构、基础数据.sql b/docs/脚本/SqlServer/表结构、基础数据.sql index a9551f1f..b494cfa5 100644 --- a/docs/脚本/SqlServer/表结构、基础数据.sql +++ b/docs/脚本/SqlServer/表结构、基础数据.sql @@ -1087,4 +1087,29 @@ GO ALTER TABLE [dbo].[jcl_info] ADD CONSTRAINT [PK_jcl_info] PRIMARY KEY CLUSTERED ([id]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -GO \ No newline at end of file +GO + +CREATE TABLE [dbo].[JCL_ORG_DETACH] ( + [id] int IDENTITY(1,1) NOT NULL, + [manager_type] int NULL, + [ec_manager] int NOT NULL, + [jcl_manager] int NOT NULL, + [ec_rolelevel] varchar(4000) COLLATE Chinese_PRC_CI_AS NOT NULL, + [jcl_rolelevel] varchar(4000) COLLATE Chinese_PRC_CI_AS NOT NULL, + [manage_module] varchar(4000) COLLATE Chinese_PRC_CI_AS NOT NULL, + [creator] int NULL, + [delete_type] int NULL, + [create_time] date NULL, + [update_time] date NULL + ) +GO + +ALTER TABLE [dbo].[JCL_ORG_DETACH] SET (LOCK_ESCALATION = TABLE) +GO + + + +ALTER TABLE [dbo].[JCL_ORG_DETACH] ADD CONSTRAINT [JCL_ORG_DETACH_PK] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) + ON [PRIMARY] +GO diff --git a/docs/表结构SQL/SqlServer.sql b/docs/表结构SQL/SqlServer.sql index 93a84834..77fe7efc 100644 --- a/docs/表结构SQL/SqlServer.sql +++ b/docs/表结构SQL/SqlServer.sql @@ -524,9 +524,9 @@ create table JCL_ORG_DETACH ( manager_type int null, ec_manager int not null, jcl_manager int not null, - ec_rolelevel text not null, - jcl_rolelevel text not null, - manage_module text not null, + ec_rolelevel varchar(4000) not null, + jcl_rolelevel varchar(4000) not null, + manage_module varchar(4000) not null, creator int null, delete_type int null, create_time date null, diff --git a/src/com/engine/organization/entity/job/dto/JobListDTO.java b/src/com/engine/organization/entity/job/dto/JobListDTO.java index 63582224..be769e5f 100644 --- a/src/com/engine/organization/entity/job/dto/JobListDTO.java +++ b/src/com/engine/organization/entity/job/dto/JobListDTO.java @@ -68,6 +68,7 @@ public class JobListDTO { //@TableTitle(title = "上级岗位", dataIndex = "parentJobName", key = "parentJobName") private String parentJobName; private Long parentJob; + private Long parentComp; /** * 是否关键岗 */ diff --git a/src/com/engine/organization/entity/searchtree/SearchTree.java b/src/com/engine/organization/entity/searchtree/SearchTree.java index b279b3e2..1c05c440 100644 --- a/src/com/engine/organization/entity/searchtree/SearchTree.java +++ b/src/com/engine/organization/entity/searchtree/SearchTree.java @@ -3,6 +3,8 @@ package com.engine.organization.entity.searchtree; import com.api.hrm.bean.TreeNode; import lombok.Data; +import java.util.Objects; + /** * @description: * @author:dxfeng @@ -19,4 +21,17 @@ public class SearchTree extends TreeNode { private String requestParams; private String parentComp; private Integer orderNum; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + SearchTree that = (SearchTree) o; + return isCanceled == that.isCanceled && Objects.equals(this.getId(), that.getId()) &&Objects.equals(companyid, that.companyid) && Objects.equals(isVirtual, that.isVirtual) && Objects.equals(psubcompanyid, that.psubcompanyid) && Objects.equals(displayType, that.displayType) && Objects.equals(requestParams, that.requestParams) && Objects.equals(parentComp, that.parentComp) && Objects.equals(orderNum, that.orderNum); + } + + @Override + public int hashCode() { + return Objects.hash(this.getId(),companyid, isVirtual, psubcompanyid, displayType, isCanceled, requestParams, parentComp, orderNum); + } } \ No newline at end of file diff --git a/src/com/engine/organization/mapper/comp/CompMapper.java b/src/com/engine/organization/mapper/comp/CompMapper.java index 919b0cdc..5642ba8e 100644 --- a/src/com/engine/organization/mapper/comp/CompMapper.java +++ b/src/com/engine/organization/mapper/comp/CompMapper.java @@ -174,4 +174,6 @@ public interface CompMapper { CompPO getCompanyByNo(@Param("companyNo") String companyNo); + List getCompanyIdsByUuid(@Param("uuids") List uuids); + } diff --git a/src/com/engine/organization/mapper/comp/CompMapper.xml b/src/com/engine/organization/mapper/comp/CompMapper.xml index ac0acd15..12d4a722 100644 --- a/src/com/engine/organization/mapper/comp/CompMapper.xml +++ b/src/com/engine/organization/mapper/comp/CompMapper.xml @@ -435,6 +435,13 @@ where forbidden_tag = 0 and delete_type = 0 + update jcl_org_comp diff --git a/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.java b/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.java index 25f5cc8e..4e6353a6 100644 --- a/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.java +++ b/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.java @@ -59,4 +59,6 @@ public interface SystemDataMapper { Long getHrmResourceMaxId(); + List getBatchUuidByIds(@Param("tableName") String tableName,@Param("ecIds") List ecIds); + } diff --git a/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.xml b/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.xml index 906461df..bf7783c0 100644 --- a/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.xml +++ b/src/com/engine/organization/mapper/hrmresource/SystemDataMapper.xml @@ -159,5 +159,12 @@ where department_id = #{departmentId} + + \ No newline at end of file diff --git a/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java b/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java index d6b2040b..36ed1fb7 100644 --- a/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java +++ b/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java @@ -55,6 +55,7 @@ import com.engine.organization.util.OrganizationFormItemUtil; import com.engine.organization.util.coderule.CodeRuleUtil; import com.engine.organization.util.db.DBType; import com.engine.organization.util.db.MapperProxyFactory; +import com.engine.organization.util.detach.DetachUtil; import com.engine.organization.util.page.PageUtil; import com.engine.organization.util.tree.SearchTreeUtil; import org.apache.commons.collections.CollectionUtils; @@ -520,6 +521,13 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic sqlWhere += " AND t.job_title = '" + jobTitle + "'"; } + // 分权查询 + List jclRoleLevels = new DetachUtil(user.getUID()).getJclRoleLevels(); + String parentCompanyIds = StringUtils.join(jclRoleLevels, ","); + if (StringUtils.isNotBlank(parentCompanyIds)) { + sqlWhere += " And t.company_id in(" + parentCompanyIds + ")"; + } + return sqlWhere; } @@ -562,7 +570,9 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic */ private List buildTreeByCompAndDept(DepartmentPO departmentBuild, CompPO compBuild, JobPO jobBuild) { List jobPOS = getJobMapper().listPOsByFilter(jobBuild); + new DetachUtil(user.getUID()).filterJobList(jobPOS); List filterDeparts = getDepartmentMapper().listByFilter(departmentBuild, "show_order"); + new DetachUtil(user.getUID()).filterDepartmentList(filterDeparts); // 添加父级岗位 Set builderJobs = new HashSet<>(); for (JobPO jobPO : jobPOS) { @@ -592,6 +602,7 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic // 查询分部信息 List filterComps = getCompMapper().listByFilter(compBuild, "show_order"); + new DetachUtil(user.getUID()).filterCompanyList(filterComps); Set builderDeparts = new HashSet<>(); for (DepartmentPO departmentPO : filterDeparts) { buildParentDepts(departmentPO, builderDeparts); @@ -607,9 +618,12 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic filterComps.addAll(compsByIds); } } + List allCompanys = getCompMapper().list("show_order"); + new DetachUtil(user.getUID()).filterCompanyList(allCompanys); + Map allMaps = allCompanys.stream().collect(Collectors.toMap(CompPO::getId, item -> item, (k1, k2) -> k1)); Set builderComps = new HashSet<>(); for (CompPO compPO : filterComps) { - buildParentComps(compPO, builderComps); + buildParentComps(compPO, builderComps,allMaps); } return SearchTreeUtil.builderTreeMode(CompBO.buildSetToSearchTree(builderComps), searchTrees); } @@ -684,14 +698,11 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic * @param compPO * @param builderComps */ - private void buildParentComps(CompPO compPO, Set builderComps) { + private void buildParentComps(CompPO compPO, Set builderComps,Map allMaps) { builderComps.add(compPO); - if (SearchTreeUtil.isTop(compPO.getParentCompany())) { - return; - } - CompPO parentComp = getCompMapper().listById(compPO.getParentCompany()); + CompPO parentComp = allMaps.get(compPO.getParentCompany()); if (null != parentComp) { - buildParentComps(parentComp, builderComps); + buildParentComps(parentComp, builderComps,allMaps); } } diff --git a/src/com/engine/organization/service/impl/JobServiceImpl.java b/src/com/engine/organization/service/impl/JobServiceImpl.java index 230baf9c..892763c4 100644 --- a/src/com/engine/organization/service/impl/JobServiceImpl.java +++ b/src/com/engine/organization/service/impl/JobServiceImpl.java @@ -50,6 +50,7 @@ import com.engine.organization.thread.OrganizationSyncEc; import com.engine.organization.util.*; import com.engine.organization.util.coderule.CodeRuleUtil; import com.engine.organization.util.db.MapperProxyFactory; +import com.engine.organization.util.detach.DetachUtil; import com.engine.organization.util.page.Column; import com.engine.organization.util.page.PageInfo; import com.engine.organization.util.page.PageUtil; @@ -164,10 +165,12 @@ public class JobServiceImpl extends Service implements JobService { PageInfo pageInfos; String orderSql = PageInfoSortUtil.getSortSql(param.getSortParams()); List allList = getJobMapper().listNoFilter(orderSql); + new DetachUtil(user.getUID()).filterJobDTOList(allList); // 通过子级遍历父级元素 if (filter) { // 根据条件获取元素 List filterJobPOs = getJobMapper().listByFilter(jobPO, orderSql); + new DetachUtil(user.getUID()).filterJobDTOList(allList); // 添加父级元素 List jobListDTOS = JobBO.buildJobDTOList(allList, filterJobPOs); List subList = PageUtil.subList(param.getCurrent(), param.getPageSize(), jobListDTOS); @@ -639,14 +642,11 @@ public class JobServiceImpl extends Service implements JobService { * @param compPO * @param builderComps */ - private void buildParentComps(CompPO compPO, Set builderComps) { + private void buildParentComps(CompPO compPO, Set builderComps,Map allMaps) { builderComps.add(compPO); - if (SearchTreeUtil.isTop(compPO.getParentCompany())) { - return; - } - CompPO parentComp = getCompMapper().listById(compPO.getParentCompany()); + CompPO parentComp = allMaps.get(compPO.getParentCompany()); if (null != parentComp && 0 == parentComp.getForbiddenTag()) { - buildParentComps(parentComp, builderComps); + buildParentComps(parentComp, builderComps,allMaps); } } @@ -689,8 +689,10 @@ public class JobServiceImpl extends Service implements JobService { */ private List buildTreeByCompAndDept(DepartmentPO departmentBuild, CompPO compBuild) { List filterDeparts = getDepartmentMapper().listByFilter(departmentBuild, "show_order"); + new DetachUtil(user.getUID()).filterDepartmentList(filterDeparts); // 查询分部信息 List filterComps = getCompMapper().listByFilter(compBuild, "show_order"); + new DetachUtil(user.getUID()).filterCompanyList(filterComps); Set builderDeparts = new HashSet<>(); for (DepartmentPO departmentPO : filterDeparts) { buildParentDepts(departmentPO, builderDeparts); @@ -704,9 +706,12 @@ public class JobServiceImpl extends Service implements JobService { filterComps.addAll(compsByIds); } } + List allCompanys = getCompMapper().list("show_order"); + new DetachUtil(user.getUID()).filterCompanyList(allCompanys); + Map allMaps = allCompanys.stream().collect(Collectors.toMap(CompPO::getId, item -> item, (k1, k2) -> k1)); Set builderComps = new HashSet<>(); for (CompPO compPO : filterComps) { - buildParentComps(compPO, builderComps); + buildParentComps(compPO, builderComps,allMaps); } return SearchTreeUtil.builderTreeMode(CompBO.buildSetToSearchTree(builderComps), deptTrees); } diff --git a/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java b/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java index 69fb1065..3a329c5a 100644 --- a/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java +++ b/src/com/engine/organization/service/impl/ManagerDetachServiceImpl.java @@ -125,8 +125,7 @@ public class ManagerDetachServiceImpl extends Service implements ManagerDetachSe .ecManager(param.getEcManager()) .jclManager(getHrmResourceMapper().getJclResourceId(String.valueOf(param.getEcManager())).intValue()) .ecRolelevel(param.getEcRolelevel()) - // TODO 遍历存储 - .jclRolelevel(EcHrmRelationUtil.getJclCompanyId(param.getEcRolelevel()) != null ? String.valueOf(EcHrmRelationUtil.getJclCompanyId(param.getEcRolelevel()).getId()) : null) + .jclRolelevel(EcHrmRelationUtil.getJclCompanyId(param.getEcRolelevel()) != null ? String.valueOf(EcHrmRelationUtil.getBatchJclCompanyId(param.getEcRolelevel())) : null) .manageModule("组织管理") .creator((long)user.getUID()) .deleteType(0) @@ -144,7 +143,7 @@ public class ManagerDetachServiceImpl extends Service implements ManagerDetachSe .ecManager(param.getEcManager()) .jclManager(getHrmResourceMapper().getJclResourceId(String.valueOf(param.getEcManager())).intValue()) .ecRolelevel(param.getEcRolelevel()) - .jclRolelevel(EcHrmRelationUtil.getJclCompanyId(param.getEcRolelevel()) != null ? String.valueOf(EcHrmRelationUtil.getJclCompanyId(param.getEcRolelevel()).getId()) : null) + .jclRolelevel(EcHrmRelationUtil.getJclCompanyId(param.getEcRolelevel()) != null ? String.valueOf(EcHrmRelationUtil.getBatchJclCompanyId(param.getEcRolelevel())) : null) .build(); return getMangeDetachMapper().updateDetach(managerDetachPO); } diff --git a/src/com/engine/organization/util/detach/DetachUtil.java b/src/com/engine/organization/util/detach/DetachUtil.java index 13b40b04..ec0fd254 100644 --- a/src/com/engine/organization/util/detach/DetachUtil.java +++ b/src/com/engine/organization/util/detach/DetachUtil.java @@ -2,10 +2,13 @@ package com.engine.organization.util.detach; import com.engine.organization.entity.company.po.CompPO; import com.engine.organization.entity.department.po.DepartmentPO; +import com.engine.organization.entity.job.dto.JobListDTO; import com.engine.organization.entity.job.po.JobPO; import com.engine.organization.service.impl.ManagerDetachServiceImpl; +import com.weaver.general.BaseBean; import org.apache.commons.collections.CollectionUtils; +import java.util.ArrayList; import java.util.List; /** @@ -14,13 +17,19 @@ import java.util.List; * @version: 1.0 */ public class DetachUtil { - // private static final boolean IS_DETACH = "true".equals(new BaseBean().getPropValue("", "")); - private boolean IS_DETACH = true; + private boolean IS_DETACH = "true".equals(new BaseBean().getPropValue("hrmOrganization", "detach")); - private static List ecRoleLevels = null; + private final List jclRoleLevels; public DetachUtil(Integer uId) { - ecRoleLevels = ManagerDetachServiceImpl.getJclRoleLevels(uId); + if (1 == uId) { + IS_DETACH = false; + } + if (IS_DETACH) { + jclRoleLevels = ManagerDetachServiceImpl.getJclRoleLevels(uId); + } else { + jclRoleLevels = new ArrayList<>(); + } } /** @@ -28,7 +37,7 @@ public class DetachUtil { */ public void filterCompanyList(List companyList) { if (IS_DETACH && CollectionUtils.isNotEmpty(companyList)) { - companyList.removeIf(item -> !ecRoleLevels.contains(item.getId())); + companyList.removeIf(item -> !jclRoleLevels.contains(item.getId())); } } @@ -37,7 +46,16 @@ public class DetachUtil { */ public void filterDepartmentList(List departmentList) { if (IS_DETACH && CollectionUtils.isNotEmpty(departmentList)) { - departmentList.removeIf(item -> !ecRoleLevels.contains(item.getParentComp())); + departmentList.removeIf(item -> !jclRoleLevels.contains(item.getParentComp())); + } + } + + /** + * 根据分权配置过滤分部 + */ + public void filterJobDTOList(List jobList) { + if (IS_DETACH && CollectionUtils.isNotEmpty(jobList)) { + jobList.removeIf(item -> !jclRoleLevels.contains(item.getParentComp())); } } @@ -46,7 +64,11 @@ public class DetachUtil { */ public void filterJobList(List jobList) { if (IS_DETACH && CollectionUtils.isNotEmpty(jobList)) { - jobList.removeIf(item -> !ecRoleLevels.contains(item.getParentComp())); + jobList.removeIf(item -> !jclRoleLevels.contains(item.getParentComp())); } } + + public List getJclRoleLevels() { + return jclRoleLevels; + } } diff --git a/src/com/engine/organization/util/relation/EcHrmRelationUtil.java b/src/com/engine/organization/util/relation/EcHrmRelationUtil.java index d46c789b..eca283eb 100644 --- a/src/com/engine/organization/util/relation/EcHrmRelationUtil.java +++ b/src/com/engine/organization/util/relation/EcHrmRelationUtil.java @@ -12,6 +12,7 @@ import com.engine.organization.util.db.MapperProxyFactory; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; +import java.util.Arrays; import java.util.List; /** @@ -80,6 +81,19 @@ public class EcHrmRelationUtil { return getCompMapper().getCompanyByUUID(uuid); } + public static String getBatchJclCompanyId(String ecBatchCompanyId) { + if (StringUtils.isBlank(ecBatchCompanyId)) { + return null; + } + List strings = Arrays.asList(ecBatchCompanyId.split(",")); + List uuids = getSystemDataMapper().getBatchUuidByIds(HRM_COMPANY, strings); + List companyIdsByUuid = getCompMapper().getCompanyIdsByUuid(uuids); + if (CollectionUtils.isNotEmpty(companyIdsByUuid)) { + return StringUtils.join(companyIdsByUuid, ","); + } + return ""; + } + public static DepartmentPO getJclDepartmentId(String ecDepartmentId) { if (StringUtils.isBlank(ecDepartmentId)) { diff --git a/src/com/engine/organization/util/tree/SearchTreeUtil.java b/src/com/engine/organization/util/tree/SearchTreeUtil.java index d15b88e1..3bc9891a 100644 --- a/src/com/engine/organization/util/tree/SearchTreeUtil.java +++ b/src/com/engine/organization/util/tree/SearchTreeUtil.java @@ -111,7 +111,8 @@ public class SearchTreeUtil { Map> parentMap = treeList.stream().collect(Collectors.groupingBy(TreeNode::getPid)); Map> childMap = deptTrees.stream().collect(Collectors.groupingBy(SearchTree::getParentComp)); boolean isAdd = !childMap.isEmpty(); - return treeList.stream().peek(e -> { + Set leafIds = new HashSet<>(); + List collect = treeList.stream().peek(e -> { Set treeNodes = new HashSet<>(); List nodes = parentMap.get(e.getId()); if (CollectionUtils.isNotEmpty(nodes)) { @@ -124,11 +125,13 @@ public class SearchTreeUtil { treeNodes.addAll(e.getSubs()); } e.setSubs(new ArrayList<>(treeNodes)); - }).peek(item -> { + leafIds.add(e.getId()); + }).collect(Collectors.toList()); + return collect.stream().peek(item -> { if (CollectionUtils.isNotEmpty(item.getSubs())) { item.setIsParent(true); } - }).filter(item -> isTop(item.getPid())).collect(Collectors.toList()); + }).filter(item -> !leafIds.contains(item.getPid())).collect(Collectors.toList()); } /** From 4e4cf54f8a3e31f508910a37ecf5ff99b8572516 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Tue, 1 Nov 2022 17:53:31 +0800 Subject: [PATCH 19/21] =?UTF-8?q?=E4=BA=BA=E5=91=98=E5=8D=A1=E7=89=87?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/表结构SQL/MySQL.sql | 17 +++++++ docs/表结构SQL/Oracle.sql | 1 + .../web/CardAccessController.java | 13 ++++++ .../entity/personnelcard/po/CardAccessPO.java | 10 ++++ .../entity/personnelcard/vo/CardAccessVO.java | 46 +++++++++++++++++++ .../service/CardAccessService.java | 10 ++++ .../service/impl/CardAccessServiceImpl.java | 10 ++++ .../web/CardAccessController.java | 11 +++++ .../wrapper/CardAccessWrapper.java | 12 +++++ 9 files changed, 130 insertions(+) create mode 100644 src/com/api/organization/web/CardAccessController.java create mode 100644 src/com/engine/organization/entity/personnelcard/po/CardAccessPO.java create mode 100644 src/com/engine/organization/entity/personnelcard/vo/CardAccessVO.java create mode 100644 src/com/engine/organization/service/CardAccessService.java create mode 100644 src/com/engine/organization/service/impl/CardAccessServiceImpl.java create mode 100644 src/com/engine/organization/web/CardAccessController.java create mode 100644 src/com/engine/organization/wrapper/CardAccessWrapper.java diff --git a/docs/表结构SQL/MySQL.sql b/docs/表结构SQL/MySQL.sql index 6cffd642..56e888df 100644 --- a/docs/表结构SQL/MySQL.sql +++ b/docs/表结构SQL/MySQL.sql @@ -559,4 +559,21 @@ create table JCL_ORG_DETACH ( create_time date null, update_time date null, constraint JCL_ORG_DETACH_PK primary key (id) +); + +-- JCL_ORG_CARDACCESS +create table JCL_ORG_CARDACCESS ( + id int auto_increment not null, + type_id int not null, + type_name int not null, + status int null, + all_people int null, + superior int null, + all_superior int null, + custom text null , + delete_type int null, + creator int null, + create_time date null, + update_time date null, + constraint JCL_ORG_CARDACCESS_PK primary key (id) ); \ No newline at end of file diff --git a/docs/表结构SQL/Oracle.sql b/docs/表结构SQL/Oracle.sql index a142b274..06682d35 100644 --- a/docs/表结构SQL/Oracle.sql +++ b/docs/表结构SQL/Oracle.sql @@ -504,3 +504,4 @@ create table JCL_ORG_DETACH ( ); + diff --git a/src/com/api/organization/web/CardAccessController.java b/src/com/api/organization/web/CardAccessController.java new file mode 100644 index 00000000..4b13949a --- /dev/null +++ b/src/com/api/organization/web/CardAccessController.java @@ -0,0 +1,13 @@ +package com.api.organization.web; + +import javax.ws.rs.Path; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/11/1 + * @Version V1.0 + **/ +@Path("/bs/hrmorganization/cardAccess") +public class CardAccessController extends com.engine.organization.web.CardAccessController { +} diff --git a/src/com/engine/organization/entity/personnelcard/po/CardAccessPO.java b/src/com/engine/organization/entity/personnelcard/po/CardAccessPO.java new file mode 100644 index 00000000..7f066051 --- /dev/null +++ b/src/com/engine/organization/entity/personnelcard/po/CardAccessPO.java @@ -0,0 +1,10 @@ +package com.engine.organization.entity.personnelcard.po; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/11/1 + * @Version V1.0 + **/ +public class CardAccessPO { +} diff --git a/src/com/engine/organization/entity/personnelcard/vo/CardAccessVO.java b/src/com/engine/organization/entity/personnelcard/vo/CardAccessVO.java new file mode 100644 index 00000000..477f64ff --- /dev/null +++ b/src/com/engine/organization/entity/personnelcard/vo/CardAccessVO.java @@ -0,0 +1,46 @@ +package com.engine.organization.entity.personnelcard.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/11/1 + * @Version V1.0 + **/ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CardAccessVO { + + private Integer id; + + private Integer typeId; + + private Integer typeName; + + private Integer status; + + private Integer allPeople; + + private Integer superior; + + private String allSuperior; + + private String custom; + + private Long creator; + + private int deleteType; + + private Date createTime; + + private Date updateTime; +} diff --git a/src/com/engine/organization/service/CardAccessService.java b/src/com/engine/organization/service/CardAccessService.java new file mode 100644 index 00000000..43833f72 --- /dev/null +++ b/src/com/engine/organization/service/CardAccessService.java @@ -0,0 +1,10 @@ +package com.engine.organization.service; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/11/1 + * @Version V1.0 + **/ +public interface CardAccessService { +} diff --git a/src/com/engine/organization/service/impl/CardAccessServiceImpl.java b/src/com/engine/organization/service/impl/CardAccessServiceImpl.java new file mode 100644 index 00000000..69b2adfe --- /dev/null +++ b/src/com/engine/organization/service/impl/CardAccessServiceImpl.java @@ -0,0 +1,10 @@ +package com.engine.organization.service.impl; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/11/1 + * @Version V1.0 + **/ +public class CardAccessServiceImpl { +} diff --git a/src/com/engine/organization/web/CardAccessController.java b/src/com/engine/organization/web/CardAccessController.java new file mode 100644 index 00000000..ed00df86 --- /dev/null +++ b/src/com/engine/organization/web/CardAccessController.java @@ -0,0 +1,11 @@ +package com.engine.organization.web; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/11/1 + * @Version V1.0 + **/ + +public class CardAccessController { +} diff --git a/src/com/engine/organization/wrapper/CardAccessWrapper.java b/src/com/engine/organization/wrapper/CardAccessWrapper.java new file mode 100644 index 00000000..41475351 --- /dev/null +++ b/src/com/engine/organization/wrapper/CardAccessWrapper.java @@ -0,0 +1,12 @@ +package com.engine.organization.wrapper; + +import com.engine.organization.util.OrganizationWrapper; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/11/1 + * @Version V1.0 + **/ +public class CardAccessWrapper extends OrganizationWrapper { +} From be90013ca01c0ea301f8ce034164b011e962d73a Mon Sep 17 00:00:00 2001 From: dxfeng Date: Wed, 2 Nov 2022 10:55:15 +0800 Subject: [PATCH 20/21] =?UTF-8?q?=E7=BB=84=E7=BB=87=E6=9E=B6=E6=9E=84?= =?UTF-8?q?=E5=9B=BE=E5=88=86=E6=9D=83=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/HrmResourceServiceImpl.java | 6 +- .../service/impl/OrgChartServiceImpl.java | 111 ++++++++++++------ .../organization/util/detach/DetachUtil.java | 23 ++-- 3 files changed, 92 insertions(+), 48 deletions(-) diff --git a/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java b/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java index 36ed1fb7..2e053b41 100644 --- a/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java +++ b/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java @@ -522,9 +522,9 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic } // 分权查询 - List jclRoleLevels = new DetachUtil(user.getUID()).getJclRoleLevels(); - String parentCompanyIds = StringUtils.join(jclRoleLevels, ","); - if (StringUtils.isNotBlank(parentCompanyIds)) { + DetachUtil detachUtil = new DetachUtil(user.getUID()); + String parentCompanyIds = detachUtil.getJclRoleLevels(); + if (detachUtil.isDETACH()) { sqlWhere += " And t.company_id in(" + parentCompanyIds + ")"; } diff --git a/src/com/engine/organization/service/impl/OrgChartServiceImpl.java b/src/com/engine/organization/service/impl/OrgChartServiceImpl.java index 8c17ffd4..b85d838e 100644 --- a/src/com/engine/organization/service/impl/OrgChartServiceImpl.java +++ b/src/com/engine/organization/service/impl/OrgChartServiceImpl.java @@ -11,11 +11,14 @@ import com.engine.organization.service.OrgChartService; import com.engine.organization.util.HasRightUtil; import com.engine.organization.util.db.DBType; import com.engine.organization.util.db.MapperProxyFactory; +import com.engine.organization.util.detach.DetachUtil; import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; +import weaver.general.Util; import weaver.hrm.User; import java.util.*; +import java.util.stream.Collectors; /** * @className: OrgChartServiceImpl @@ -47,8 +50,14 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { item.put("companyname", rs.getString("companyname")); fclasslist.add(item); } + String sql = "select distinct id, fnumber, fname, ftype from jcl_org_map where ftype in (0, 1) order by ftype , id "; - rs.executeQuery("select distinct id, fnumber, fname, ftype from jcl_org_map where ftype in (0, 1) order by ftype , id "); + // 分部分权过滤 + DetachUtil detachUtil = new DetachUtil(user.getUID()); + if (detachUtil.isDETACH()) { + sql = "select distinct id, fnumber, fname, ftype from jcl_org_map where (ftype = 0 or (ftype = 1 and fobjid in(" + detachUtil.getJclRoleLevels() + "))) order by ftype , id"; + } + rs.executeQuery(sql); List> companylist = new ArrayList<>(); while (rs.next()) { Map item = new HashMap<>(); @@ -130,7 +139,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { item.put("fname", rs.getString("fname")); item.put("ftype", rs.getString("ftype")); item.put("fnumber", rs.getString("fnumber")); - item.put("fobjid",rs.getString("fobjid")); + item.put("fobjid", rs.getString("fobjid")); item.put("parentId", null); item.put("expand", "1"); item.put("hasChildren", hasChildren(rs.getString("id"), true)); @@ -138,11 +147,10 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { } int currentLevel = 1; - if (currentLevel + 1 <= Integer.parseInt(level)) { - findCompanyItemByParantId(id, currentLevel + 1, level, rs, list, whereSql, true); - } else { - findCompanyItemByParantId(id, currentLevel + 1, level, rs, list, whereSql, false); - } + findCompanyItemByParantId(id, currentLevel + 1, level, rs, list, whereSql, currentLevel + 1 <= Integer.parseInt(level)); + + // 分部数据,构建层级关系 + reBuildTreeList(list); result.put("api_status", true); result.put("data", list); @@ -150,7 +158,14 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { } private void findCompanyItemByParantId(String id, int currentLevel, String level, RecordSet rs, List> list, String whereSql, boolean expand) { - rs.executeQuery("select id, fname, ftype, fparentid,fobjid,fecid,fnumber from jcl_org_map " + whereSql + " and fparentid = " + id); + String sql = "select id, fname, ftype, fparentid,fobjid,fecid,fnumber from jcl_org_map " + whereSql; + DetachUtil detachUtil = new DetachUtil(user.getUID()); + if (detachUtil.isDETACH() && "0".equals(id)) { + sql += " and ftype = 1 and fobjid in(" + detachUtil.getJclRoleLevels() + ")"; + } else { + sql += " and fparentid = " + id; + } + rs.executeQuery(sql); List> currentList = new ArrayList<>(); while (rs.next()) { Map item = new HashMap<>(); @@ -210,7 +225,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { @Override public Map getUserData(Map request2Map, User user) { Map result = new HashMap<>(); - boolean hasRight = HasRightUtil.hasRight(user, USER_RIGHT, true); + boolean hasRight = HasRightUtil.hasRight(user, USER_RIGHT, true); result.put("hasRight", hasRight); if (!hasRight) { return result; @@ -251,19 +266,18 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { item.put("expand", "1"); item.put("fnumber", rs.getString("fnumber")); item.put("fleader", rs.getString("fleader")); - item.put("fobjid",rs.getString("fobjid")); - item.put("fleaderlv",convertLevel(rs.getString("fleaderlv"))); - item.put("fleaderst",convertGrade(rs.getString("fleaderst"))); - item.put("fecid",rs.getString("fecid")); + item.put("fobjid", rs.getString("fobjid")); + item.put("fleaderlv", convertLevel(rs.getString("fleaderlv"))); + item.put("fleaderst", convertGrade(rs.getString("fleaderst"))); + item.put("fecid", rs.getString("fecid")); list.add(item); } int currentLevel = 1; - if (currentLevel + 1 <= Integer.parseInt(level)) { - findUserItemByParantId(id, currentLevel + 1, level, rs, list, whereSql, true); - }else{ - findUserItemByParantId(id, currentLevel + 1, level, rs, list, whereSql, false); - } + findUserItemByParantId(id, currentLevel + 1, level, rs, list, whereSql, currentLevel + 1 <= Integer.parseInt(level)); + + // 分部数据,构建层级关系 + reBuildTreeList(list); result.put("api_status", true); result.put("data", list); @@ -294,9 +308,9 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { item.put("fnumber", rs.getString("fnumber")); item.put("hasChildren", hasChildren(rs.getString("id"), false)); item.put("fleader", rs.getString("fleader")); - item.put("fleaderlv",convertLevel(rs.getString("fleaderlv"))); - item.put("fleaderst",convertGrade(rs.getString("fleaderst"))); - item.put("fobjid",rs.getString("fobjid")); + item.put("fleaderlv", convertLevel(rs.getString("fleaderlv"))); + item.put("fleaderst", convertGrade(rs.getString("fleaderst"))); + item.put("fobjid", rs.getString("fobjid")); currentList.add(item); } @@ -354,7 +368,14 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { private void findUserItemByParantId(String id, int currentLevel, String level, RecordSet rs, List> list, String whereSql, boolean expand) { - rs.executeQuery("select t.id, t.fname, t.ftype, t.fparentid,t.fobjparentid,t.fleader, t.fleadername, t.fleaderimg, t.fleaderjob, t.fplan, t.fonjob, t.fnumber,t.fobjid,t.fecid,t.fleaderlv, t.fleaderst from jcl_org_map t " + whereSql + " and t.fparentid = " + id); + String sql = "select t.id, t.fname, t.ftype, t.fparentid,t.fobjparentid,t.fleader, t.fleadername, t.fleaderimg, t.fleaderjob, t.fplan, t.fonjob, t.fnumber,t.fobjid,t.fecid,t.fleaderlv, t.fleaderst from jcl_org_map t " + whereSql; + DetachUtil detachUtil = new DetachUtil(user.getUID()); + if (detachUtil.isDETACH() && "0".equals(id)) { + sql += " and ftype = 1 and fobjid in(" + detachUtil.getJclRoleLevels() + ")"; + } else { + sql += " and t.fparentid = " + id; + } + rs.executeQuery(sql); List> currentList = new ArrayList<>(); while (rs.next()) { Map item = new HashMap<>(); @@ -418,34 +439,52 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { } private String convertLevel(String fLeaderLv) { - String jobLevelName = ""; + StringBuilder jobLevelName = new StringBuilder(); if (StringUtils.isNotBlank(fLeaderLv)) { try { - long parseLong = Long.parseLong(fLeaderLv); - LevelPO levelByID = MapperProxyFactory.getProxy(LevelMapper.class).getLevelByID(parseLong); - if (null != levelByID) { - jobLevelName = levelByID.getLevelName(); + String[] split = fLeaderLv.split(","); + for (String s : split) { + long parseLong = Long.parseLong(s); + LevelPO levelByID = MapperProxyFactory.getProxy(LevelMapper.class).getLevelByID(parseLong); + if (null != levelByID) { + jobLevelName.append(levelByID.getLevelName()); + } } } catch (NumberFormatException exception) { - jobLevelName = fLeaderLv; + jobLevelName = new StringBuilder(fLeaderLv); } } - return jobLevelName; + return jobLevelName.toString(); } private String convertGrade(String fLeaderSt) { - String jobGradeName = ""; + StringBuilder jobGradeName = new StringBuilder(); if (StringUtils.isNotBlank(fLeaderSt)) { try { - long parseLong = Long.parseLong(fLeaderSt); - GradePO gradeByID = MapperProxyFactory.getProxy(GradeMapper.class).getGradeByID(parseLong); - if (null != gradeByID) { - jobGradeName = gradeByID.getGradeName(); + String[] split = fLeaderSt.split(","); + for (String s : split) { + long parseLong = Long.parseLong(s); + GradePO gradeByID = MapperProxyFactory.getProxy(GradeMapper.class).getGradeByID(parseLong); + if (null != gradeByID) { + jobGradeName.append(gradeByID.getGradeName()); + } } } catch (NumberFormatException exception) { - jobGradeName = fLeaderSt; + jobGradeName = new StringBuilder(fLeaderSt); } } - return jobGradeName; + return jobGradeName.toString(); + } + + + private void reBuildTreeList(List> list) { + // 分部数据,构建层级关系 + Set idSet = list.stream().filter(item -> "1".equals(Util.null2String(item.get("ftype")))).map(item -> Util.null2String(item.get("id"))).collect(Collectors.toSet()); + list.forEach(item -> { + if ("1".equals(Util.null2String(item.get("ftype"))) && !idSet.contains(Util.null2String(item.get("parentId")))) { + item.put("parentId", "0"); + item.put("fobjparentId", "0"); + } + }); } } diff --git a/src/com/engine/organization/util/detach/DetachUtil.java b/src/com/engine/organization/util/detach/DetachUtil.java index ec0fd254..7b047c29 100644 --- a/src/com/engine/organization/util/detach/DetachUtil.java +++ b/src/com/engine/organization/util/detach/DetachUtil.java @@ -7,6 +7,7 @@ import com.engine.organization.entity.job.po.JobPO; import com.engine.organization.service.impl.ManagerDetachServiceImpl; import com.weaver.general.BaseBean; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.List; @@ -17,15 +18,15 @@ import java.util.List; * @version: 1.0 */ public class DetachUtil { - private boolean IS_DETACH = "true".equals(new BaseBean().getPropValue("hrmOrganization", "detach")); + private boolean DETACH = "true".equals(new BaseBean().getPropValue("hrmOrganization", "detach")); private final List jclRoleLevels; public DetachUtil(Integer uId) { if (1 == uId) { - IS_DETACH = false; + DETACH = false; } - if (IS_DETACH) { + if (DETACH) { jclRoleLevels = ManagerDetachServiceImpl.getJclRoleLevels(uId); } else { jclRoleLevels = new ArrayList<>(); @@ -36,7 +37,7 @@ public class DetachUtil { * 根据分权配置过滤分部 */ public void filterCompanyList(List companyList) { - if (IS_DETACH && CollectionUtils.isNotEmpty(companyList)) { + if (DETACH && CollectionUtils.isNotEmpty(companyList)) { companyList.removeIf(item -> !jclRoleLevels.contains(item.getId())); } } @@ -45,7 +46,7 @@ public class DetachUtil { * 根据分权配置过滤分部 */ public void filterDepartmentList(List departmentList) { - if (IS_DETACH && CollectionUtils.isNotEmpty(departmentList)) { + if (DETACH && CollectionUtils.isNotEmpty(departmentList)) { departmentList.removeIf(item -> !jclRoleLevels.contains(item.getParentComp())); } } @@ -54,7 +55,7 @@ public class DetachUtil { * 根据分权配置过滤分部 */ public void filterJobDTOList(List jobList) { - if (IS_DETACH && CollectionUtils.isNotEmpty(jobList)) { + if (DETACH && CollectionUtils.isNotEmpty(jobList)) { jobList.removeIf(item -> !jclRoleLevels.contains(item.getParentComp())); } } @@ -63,12 +64,16 @@ public class DetachUtil { * 根据分权配置过滤分部 */ public void filterJobList(List jobList) { - if (IS_DETACH && CollectionUtils.isNotEmpty(jobList)) { + if (DETACH && CollectionUtils.isNotEmpty(jobList)) { jobList.removeIf(item -> !jclRoleLevels.contains(item.getParentComp())); } } - public List getJclRoleLevels() { - return jclRoleLevels; + public String getJclRoleLevels() { + return StringUtils.join(jclRoleLevels, ","); + } + + public boolean isDETACH() { + return DETACH; } } From b636dc2b8296dfca223f346204a1936f2e6ce0c7 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Wed, 2 Nov 2022 11:29:40 +0800 Subject: [PATCH 21/21] =?UTF-8?q?=E4=BA=BA=E5=91=98=E5=8D=A1=E7=89=87?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/personnelcard/po/CardAccessPO.java | 36 +++ .../entity/personnelcard/vo/CardAccessVO.java | 27 +-- .../personnelcard/CardAccessMapper.java | 25 ++ .../mapper/personnelcard/CardAccessMapper.xml | 225 ++++++++++++++++++ 4 files changed, 287 insertions(+), 26 deletions(-) create mode 100644 src/com/engine/organization/mapper/personnelcard/CardAccessMapper.java create mode 100644 src/com/engine/organization/mapper/personnelcard/CardAccessMapper.xml diff --git a/src/com/engine/organization/entity/personnelcard/po/CardAccessPO.java b/src/com/engine/organization/entity/personnelcard/po/CardAccessPO.java index 7f066051..1d8f3e74 100644 --- a/src/com/engine/organization/entity/personnelcard/po/CardAccessPO.java +++ b/src/com/engine/organization/entity/personnelcard/po/CardAccessPO.java @@ -1,10 +1,46 @@ package com.engine.organization.entity.personnelcard.po; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + /** * @Author weaver_cl * @Description: * @Date 2022/11/1 * @Version V1.0 **/ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor public class CardAccessPO { + + private Integer id; + + private Integer typeId; + + private Integer typeName; + + private Integer status; + + private Integer allPeople; + + private Integer superior; + + private String allSuperior; + + private String custom; + + private Long creator; + + private int deleteType; + + private Date createTime; + + private Date updateTime; } diff --git a/src/com/engine/organization/entity/personnelcard/vo/CardAccessVO.java b/src/com/engine/organization/entity/personnelcard/vo/CardAccessVO.java index 477f64ff..d4784433 100644 --- a/src/com/engine/organization/entity/personnelcard/vo/CardAccessVO.java +++ b/src/com/engine/organization/entity/personnelcard/vo/CardAccessVO.java @@ -14,33 +14,8 @@ import java.util.Date; * @Version V1.0 **/ -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor + public class CardAccessVO { - private Integer id; - private Integer typeId; - - private Integer typeName; - - private Integer status; - - private Integer allPeople; - - private Integer superior; - - private String allSuperior; - - private String custom; - - private Long creator; - - private int deleteType; - - private Date createTime; - - private Date updateTime; } diff --git a/src/com/engine/organization/mapper/personnelcard/CardAccessMapper.java b/src/com/engine/organization/mapper/personnelcard/CardAccessMapper.java new file mode 100644 index 00000000..167e3844 --- /dev/null +++ b/src/com/engine/organization/mapper/personnelcard/CardAccessMapper.java @@ -0,0 +1,25 @@ +package com.engine.organization.mapper.personnelcard; + +import com.engine.organization.entity.detach.po.ManagerDetachPO; +import com.engine.organization.entity.personnelcard.po.CardAccessPO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/10/24 + * @Version V1.0 + **/ +public interface CardAccessMapper { + + int insertIgnoreNull(CardAccessPO cardAccessPO); + + int updateCardAccess(CardAccessPO cardAccessPO); + + int deleteByIds(@Param("ids") Collection ids); + + ManagerDetachPO selectById(@Param("id") Integer id); +} diff --git a/src/com/engine/organization/mapper/personnelcard/CardAccessMapper.xml b/src/com/engine/organization/mapper/personnelcard/CardAccessMapper.xml new file mode 100644 index 00000000..f7f00d9a --- /dev/null +++ b/src/com/engine/organization/mapper/personnelcard/CardAccessMapper.xml @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + t.id + , t.type_id + , t.type_name + , t.status + , t.all_people + , t.superior + , t.all_superior + , t.custom + , t.creator + , t.delete_type + , t.create_time + , t.update_time + + + + + + INSERT INTO jcl_org_cardaccess + + + type_id, + + + type_name, + + + status, + + + all_people, + + + superior, + + + all_superior, + + + custom, + + + creator, + + + delete_type, + + + create_time, + + + update_time, + + + + + #{typeId}, + + + #{typeName}, + + + #{status}, + + + #{allPeople}, + + + #{superior}, + + + #{allSuperior}, + + + #{creator}, + + + #{custom}, + + + #{deleteType}, + + + #{createTime}, + + + #{updateTime}, + + + + + + + select JCL_ORG_CARDACCESS_ID.currval from dual + + INSERT INTO jcl_org_cardaccess + + + type_id, + + + type_name, + + + status, + + + all_people, + + + superior, + + + all_superior, + + + custom, + + + creator, + + + delete_type, + + + create_time, + + + update_time, + + + + + #{typeId}, + + + #{typeName}, + + + #{status}, + + + #{allPeople}, + + + #{superior}, + + + #{allSuperior}, + + + #{creator}, + + + #{custom}, + + + #{deleteType}, + + + #{createTime}, + + + #{updateTime}, + + + + + + update jcl_org_cardaccess + + type_id=#{typeId}, + type_name=#{typeName}, + status=#{status}, + all_people=#{allPeople}, + all_superior=#{allSuperior}, + custom=#{custom}, + update_time=#{updateTime}, + + WHERE id = #{id} AND delete_type = 0 + + + + + UPDATE jcl_org_cardaccess + SET delete_type = 1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + + + + + + \ No newline at end of file