From 7cb3b019a867fac12aecc214ef54d315b363792f Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Wed, 6 Sep 2023 17:17:10 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E5=88=B6=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../organization/entity/staff/bo/StaffBO.java | 6 +- ...StaffSearchParam.java => StaffParams.java} | 2 +- .../entity/staff/param/StaffSerachParam.java | 85 +++++++++++++++++++ .../mapper/staff/StaffMapper.java | 8 +- .../organization/mapper/staff/StaffMapper.xml | 25 ++++++ .../organization/service/StaffService.java | 9 +- .../impl/FunctionOutStaffServiceImpl.java | 75 ++++++++++++++-- .../service/impl/StaffServiceImpl.java | 32 ++++--- .../util/saveimport/StaffInfoImportUtil.java | 4 +- .../organization/web/StaffController.java | 9 +- .../organization/wrapper/StaffWrapper.java | 10 +-- 11 files changed, 223 insertions(+), 42 deletions(-) rename src/com/engine/organization/entity/staff/param/{StaffSearchParam.java => StaffParams.java} (97%) create mode 100644 src/com/engine/organization/entity/staff/param/StaffSerachParam.java diff --git a/src/com/engine/organization/entity/staff/bo/StaffBO.java b/src/com/engine/organization/entity/staff/bo/StaffBO.java index 3b884132..6064e382 100644 --- a/src/com/engine/organization/entity/staff/bo/StaffBO.java +++ b/src/com/engine/organization/entity/staff/bo/StaffBO.java @@ -1,9 +1,7 @@ package com.engine.organization.entity.staff.bo; -import com.engine.organization.entity.staff.param.StaffSearchParam; +import com.engine.organization.entity.staff.param.StaffParams; import com.engine.organization.entity.staff.po.StaffPO; -import com.engine.organization.transmethod.StaffTransMethod; -import weaver.general.Util; import java.util.Arrays; import java.util.Date; @@ -15,7 +13,7 @@ import java.util.List; * @version: 1.0 */ public class StaffBO { - public static StaffPO convertParamToPO(StaffSearchParam param, Long employeeId) { + public static StaffPO convertParamToPO(StaffParams param, Long employeeId) { if (param == null) { return null; } diff --git a/src/com/engine/organization/entity/staff/param/StaffSearchParam.java b/src/com/engine/organization/entity/staff/param/StaffParams.java similarity index 97% rename from src/com/engine/organization/entity/staff/param/StaffSearchParam.java rename to src/com/engine/organization/entity/staff/param/StaffParams.java index 8f91ee0f..dad8209a 100644 --- a/src/com/engine/organization/entity/staff/param/StaffSearchParam.java +++ b/src/com/engine/organization/entity/staff/param/StaffParams.java @@ -15,7 +15,7 @@ import lombok.NoArgsConstructor; @Builder @AllArgsConstructor @NoArgsConstructor -public class StaffSearchParam { +public class StaffParams { /** * 主键 */ diff --git a/src/com/engine/organization/entity/staff/param/StaffSerachParam.java b/src/com/engine/organization/entity/staff/param/StaffSerachParam.java new file mode 100644 index 00000000..dfe6e696 --- /dev/null +++ b/src/com/engine/organization/entity/staff/param/StaffSerachParam.java @@ -0,0 +1,85 @@ +package com.engine.organization.entity.staff.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @description: + * @author:dxfeng + * @createTime: 2022/05/25 + * @version: 1.0 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class StaffSerachParam { + /** + * 主键 + */ + private Long id; + /** + * 方案id + */ + private String planId; + /** + * 分部 + */ + private Integer compId; + private Integer ecCompany; + /** + * 部门 + */ + private Integer deptId; + private Integer ecDepartment; + /** + * 岗位 + */ + private Integer jobId; + /** + * 编制数 + */ + private Integer staffNum; + /** + * 控制策略 + */ + private Integer controlPolicy; + /** + * 在编 + */ + private Integer permanentNum; + /** + * 冻结数 + */ + private Integer freezeNum; + /** + * 缺编状态 + */ + private Integer lackStatus; + /** + * 编制描述 + */ + private String staffDesc; + + /** + * 说明 + */ + private String description; + + /** + * 方案名称 + */ + private String staffName; + + /** + * 调整数量 + */ + private Integer changeNum; + + /** + * 调整说明 + */ + private String changeDescription; +} diff --git a/src/com/engine/organization/mapper/staff/StaffMapper.java b/src/com/engine/organization/mapper/staff/StaffMapper.java index e30ac004..533c5a0a 100644 --- a/src/com/engine/organization/mapper/staff/StaffMapper.java +++ b/src/com/engine/organization/mapper/staff/StaffMapper.java @@ -41,7 +41,7 @@ public interface StaffMapper { * @param: [planId, companyId, departmentId, jobId] * @return: com.engine.organization.entity.staff.po.StaffPO */ - StaffPO customSelect(@Param("planId") Integer planId,@Param("companyId") Integer companyId, @Param("departmentId") Integer departmentId, @Param("jobId") Integer jobId); + List customSelect(@Param("planId") Integer planId,@Param("companyId") Integer companyId, @Param("departmentId") Integer departmentId, @Param("jobId") Integer jobId); /** * 插入编制方案 @@ -81,4 +81,10 @@ public interface StaffMapper { * @return */ StaffPO getStaffsByParamId(@Param("ftype") Integer ftype,@Param("compId") String compId,@Param("deptId") String deptId,@Param("jobId") String jobId); + + + + List selectByEcCompany(@Param("companyIds") Collection companyIds); + + List selectByEcDepartment(@Param("departmentIds") Collection departmentIds); } diff --git a/src/com/engine/organization/mapper/staff/StaffMapper.xml b/src/com/engine/organization/mapper/staff/StaffMapper.xml index be1ad222..d79f36dc 100644 --- a/src/com/engine/organization/mapper/staff/StaffMapper.xml +++ b/src/com/engine/organization/mapper/staff/StaffMapper.xml @@ -371,4 +371,29 @@ and a.job_id = #{jobId} + + + + + \ No newline at end of file diff --git a/src/com/engine/organization/service/StaffService.java b/src/com/engine/organization/service/StaffService.java index 2090dbf1..c2978d1d 100644 --- a/src/com/engine/organization/service/StaffService.java +++ b/src/com/engine/organization/service/StaffService.java @@ -1,6 +1,7 @@ package com.engine.organization.service; -import com.engine.organization.entity.staff.param.StaffSearchParam; +import com.engine.organization.entity.staff.param.StaffParams; +import com.engine.organization.entity.staff.param.StaffSerachParam; import java.util.Collection; import java.util.Map; @@ -18,14 +19,14 @@ public interface StaffService { * @param params * @return */ - Map listPage(StaffSearchParam params); + Map listPage(StaffSerachParam params); /** * 新增编制 * @param param * @return */ - int saveStaff(StaffSearchParam param); + int saveStaff(StaffParams param); /** * 更新编制信息 @@ -33,7 +34,7 @@ public interface StaffService { * @param param * @return */ - int updateStaff(StaffSearchParam param); + int updateStaff(StaffParams param); /** * 根据ID批量删除编制 diff --git a/src/com/engine/organization/service/impl/FunctionOutStaffServiceImpl.java b/src/com/engine/organization/service/impl/FunctionOutStaffServiceImpl.java index 3a9d3f96..5de3a2fe 100644 --- a/src/com/engine/organization/service/impl/FunctionOutStaffServiceImpl.java +++ b/src/com/engine/organization/service/impl/FunctionOutStaffServiceImpl.java @@ -6,12 +6,14 @@ import com.engine.organization.enums.StaffChangeEnum; import com.engine.organization.mapper.staff.StaffMapper; import com.engine.organization.util.OrganizationAssert; import com.engine.organization.util.db.MapperProxyFactory; +import lombok.SneakyThrows; +import org.apache.commons.collections.CollectionUtils; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.company.SubCompanyComInfo; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; +import java.util.stream.Collectors; /** * @Author liang.cheng @@ -94,7 +96,8 @@ public class FunctionOutStaffServiceImpl { .mapToInt(Integer::intValue) .sum(); staffPO.setPermanentNum(sum); - // todo 向上部门 分部在编数调整 + //向上部门 分部在编数调整 + upwardReviewSums(param); //2.调整方式为流程时释放冻结数 if (param.getChangeMode() == 1) { List numbersF = Arrays.asList(staffPO.getFreezeNum(),param.getNum()); @@ -115,7 +118,8 @@ public class FunctionOutStaffServiceImpl { .reduce((a, b) -> a - b) .orElse(0); staffPO.setPermanentNum(difference); - // todo 向上部门 分部在编数调整 + //向上部门 分部在编数调整 + upwardReviewSums(param); //2.调整方式为流程时释放冻结数 if (param.getChangeMode() == 1) { List numbersF = Arrays.asList(staffPO.getFreezeNum(),param.getNum()); @@ -133,10 +137,65 @@ public class FunctionOutStaffServiceImpl { } + /** + * @Description: 向上刷新所有在编数 + * @Author: liang.cheng + * @Date: 2023/9/6 3:38 PM + * @param: [param] + * @return: void + */ + @SneakyThrows + private void upwardReviewSums(StaffOutParam param){ + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo(); + //1.分部 + if (param.getCompany() != null) { + String allSupCompany = subCompanyComInfo.getAllSupCompany(String.valueOf(param.getCompany())); + if (!"".equals(allSupCompany)) { + Collection subCompanys = Arrays.stream(allSupCompany.split(",")) + .map(Integer::parseInt) + .collect(Collectors.toList()); + List staffPOS = staffMapper().selectByEcCompany(subCompanys); + if (!CollectionUtils.isEmpty(staffPOS)) { + staffPOS.forEach(item -> { + if (param.getType().getValue() == 3){ + item.setPermanentNum(item.getPermanentNum() + param.getNum()); + }else { + item.setPermanentNum(item.getPermanentNum() - param.getNum()); + } + staffMapper().updateStaff(item); + }); + } + } + } + + //2.部门 + if (param.getDepartment() != null) { + String allSupDepartment = departmentComInfo.getAllSupDepartment(String.valueOf(param.getDepartment())); + if ("".equals(allSupDepartment)) { + Collection subDepartments = Arrays.stream(allSupDepartment.split(",")) + .map(Integer::parseInt) + .collect(Collectors.toList()); + List staffPOS = staffMapper().selectByEcDepartment(subDepartments); + if (!CollectionUtils.isEmpty(staffPOS)) { + staffPOS.forEach(item -> { + if (param.getType().getValue() == 3){ + item.setPermanentNum(item.getPermanentNum() + param.getNum()); + }else { + item.setPermanentNum(item.getPermanentNum() - param.getNum()); + } + staffMapper().updateStaff(item); + }); + } + } + } + + } + private StaffPO select(StaffOutParam param) { - StaffPO staffPO = staffMapper().customSelect(param.getPlanId(), param.getCompany(), param.getDepartment(), param.getJob()); + List staffPO = staffMapper().customSelect(param.getPlanId(), param.getCompany(), param.getDepartment(), param.getJob()); OrganizationAssert.notNull(staffPO,"未查询到对应编制方案下的组织编制信息!"); - return staffPO; + return staffPO.get(0); } private static void buildStaffPO(StaffPO staffPO) { diff --git a/src/com/engine/organization/service/impl/StaffServiceImpl.java b/src/com/engine/organization/service/impl/StaffServiceImpl.java index a64af713..70f9e5ab 100644 --- a/src/com/engine/organization/service/impl/StaffServiceImpl.java +++ b/src/com/engine/organization/service/impl/StaffServiceImpl.java @@ -13,11 +13,13 @@ import com.engine.organization.entity.browser.po.CustomBrowserBean; import com.engine.organization.entity.department.po.DepartmentPO; import com.engine.organization.entity.job.po.JobPO; import com.engine.organization.entity.staff.bo.StaffBO; -import com.engine.organization.entity.staff.param.StaffSearchParam; +import com.engine.organization.entity.staff.param.StaffParams; +import com.engine.organization.entity.staff.param.StaffSerachParam; import com.engine.organization.entity.staff.po.StaffPO; import com.engine.organization.entity.staff.po.StaffPlanPO; import com.engine.organization.entity.staff.po.StaffsPO; import com.engine.organization.entity.staff.vo.StaffTableVO; +import com.engine.organization.exception.OrganizationRunTimeException; import com.engine.organization.mapper.department.DepartmentMapper; import com.engine.organization.mapper.job.JobMapper; import com.engine.organization.mapper.staff.StaffMapper; @@ -104,7 +106,7 @@ public class StaffServiceImpl extends Service implements StaffService { @Override - public Map listPage(StaffSearchParam params) { + public Map listPage(StaffSerachParam params) { Map resultMap = new HashMap<>(); boolean hasRight = HasRightUtil.hasRight(user, RIGHT_NAME, true); resultMap.put("hasRight", hasRight); @@ -124,12 +126,14 @@ public class StaffServiceImpl extends Service implements StaffService { } @Override - public int saveStaff(StaffSearchParam param) { + public int saveStaff(StaffParams param) { HasRightUtil.hasRight(user, RIGHT_NAME, false); StaffPO staffPO = StaffBO.convertParamToPO(param, (long) user.getUID()); OrganizationAssert.isFalse(staffPO.getStaffNum() < 0, "编制数不可小于0,请更正"); - StaffPO verify = getStaffMapper().customSelect(param.getPlanId(), param.getEcCompany(), param.getEcDepartment(), param.getJobId()); - OrganizationAssert.isNull(verify,"同一编制方案下,同一维度的编制信息不可重复创建!"); + List verify = getStaffMapper().customSelect(param.getPlanId(), param.getEcCompany(), param.getEcDepartment(), param.getJobId()); + if(!verify.isEmpty()){ + throw new OrganizationRunTimeException("同一编制方案下,同一维度的编制信息不可重复创建!"); + } checkRequired(staffPO); int ignoreNull = getStaffMapper().insertIgnoreNull(staffPO); // 初始化编制在编数 @@ -138,10 +142,12 @@ public class StaffServiceImpl extends Service implements StaffService { } @Override - public int updateStaff(StaffSearchParam param) { + public int updateStaff(StaffParams param) { HasRightUtil.hasRight(user, RIGHT_NAME, false); - StaffPO verify = getStaffMapper().customSelect(param.getPlanId(), param.getEcCompany(), param.getEcDepartment(), param.getJobId()); - OrganizationAssert.isNull(verify,"同一编制方案下,同一维度的编制信息不可重复创建!"); + List verify = getStaffMapper().customSelect(param.getPlanId(), param.getEcCompany(), param.getEcDepartment(), param.getJobId()); + if (verify.size() > 1) { + throw new OrganizationRunTimeException("同一编制方案下,同一维度的编制信息已存在!"); + } StaffPO staffByID = getStaffMapper().getStaffByID(param.getId()); StaffPO staffPO = StaffBO.convertParamToPO(param, (long) user.getUID()); staffPO.setPermanentNum(staffByID.getPermanentNum()); @@ -339,7 +345,7 @@ public class StaffServiceImpl extends Service implements StaffService { List addGroups = new ArrayList<>(); List selectItems = new ArrayList<>(); // 方案 - SearchConditionItem planIdItem = OrganizationFormItemUtil.browserItem(user, 4, 3, 2, false, "编制方案", "161", "planId", "staffPlanBrowser"); + SearchConditionItem planIdItem = OrganizationFormItemUtil.browserItem(user, 4, 3, 2, false, "编制方案", "162", "planId", "staffPlanBrowser"); planIdItem.setRules("required|string"); planIdItem.setHelpfulTip("请选择编制方案后查看数据"); planIdItem.setLabelcol(2); @@ -356,13 +362,13 @@ public class StaffServiceImpl extends Service implements StaffService { * @param param * @return */ - private String buildSqlWhere(StaffSearchParam param) { + private String buildSqlWhere(StaffSerachParam param) { DBType dbType = DBType.get(new RecordSet().getDBType()); String sqlWhere = " where t.delete_type ='0' "; - Integer planId = param.getPlanId(); - if (null != planId) { - sqlWhere += " AND t.plan_id = '" + planId + "'"; + String planId = param.getPlanId(); + if ("".equals(planId)) { + sqlWhere += " AND t.plan_id in (" + planId + ")"; } else { sqlWhere = " where 1 = 2 "; } diff --git a/src/com/engine/organization/util/saveimport/StaffInfoImportUtil.java b/src/com/engine/organization/util/saveimport/StaffInfoImportUtil.java index aedc24fd..755d5baf 100644 --- a/src/com/engine/organization/util/saveimport/StaffInfoImportUtil.java +++ b/src/com/engine/organization/util/saveimport/StaffInfoImportUtil.java @@ -7,7 +7,7 @@ import com.engine.organization.entity.extend.po.ExtendInfoPO; import com.engine.organization.entity.jclimport.po.JclImportHistoryDetailPO; import com.engine.organization.entity.job.po.JobPO; import com.engine.organization.entity.staff.bo.StaffBO; -import com.engine.organization.entity.staff.param.StaffSearchParam; +import com.engine.organization.entity.staff.param.StaffParams; import com.engine.organization.entity.staff.po.StaffPO; import com.engine.organization.entity.staff.po.StaffPlanPO; import com.engine.organization.mapper.comp.CompMapper; @@ -239,7 +239,7 @@ public class StaffInfoImportUtil { OrgImportUtil.saveImportDetailLog(historyDetailPO); continue; } - StaffSearchParam param = JSONObject.toJavaObject((JSON) JSONObject.toJSON(map), StaffSearchParam.class); + StaffParams param = JSONObject.toJavaObject((JSON) JSONObject.toJSON(map), StaffParams.class); String controlDimension = staffPlanPO.getControlDimension(); String checkMsg = ""; switch (controlDimension) { diff --git a/src/com/engine/organization/web/StaffController.java b/src/com/engine/organization/web/StaffController.java index a14e990f..fc8d9ebe 100644 --- a/src/com/engine/organization/web/StaffController.java +++ b/src/com/engine/organization/web/StaffController.java @@ -5,7 +5,8 @@ import com.alibaba.fastjson.JSONObject; import com.engine.common.util.ParamUtil; import com.engine.common.util.ServiceUtil; import com.engine.organization.entity.DeleteParam; -import com.engine.organization.entity.staff.param.StaffSearchParam; +import com.engine.organization.entity.staff.param.StaffParams; +import com.engine.organization.entity.staff.param.StaffSerachParam; import com.engine.organization.util.response.ReturnResult; import com.engine.organization.wrapper.StaffWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -47,7 +48,7 @@ public class StaffController { try { User user = HrmUserVarify.getUser(request, response); Map map = ParamUtil.request2Map(request); - StaffSearchParam param = JSONObject.toJavaObject((JSON) JSON.toJSON(map), StaffSearchParam.class); + StaffSerachParam param = JSONObject.toJavaObject((JSON) JSON.toJSON(map), StaffSerachParam.class); return ReturnResult.successed(getStaffWrapper(user).listPage(param)); } catch (Exception e) { return ReturnResult.exceptionHandle(e); @@ -64,7 +65,7 @@ public class StaffController { @POST @Path("/saveStaff") @Produces(MediaType.APPLICATION_JSON) - public ReturnResult saveStaff(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody StaffSearchParam param) { + public ReturnResult saveStaff(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody StaffParams param) { try { User user = HrmUserVarify.getUser(request, response); return ReturnResult.successed(getStaffWrapper(user).saveStaff(param)); @@ -84,7 +85,7 @@ public class StaffController { @POST @Path("/updateStaff") @Produces(MediaType.APPLICATION_JSON) - public ReturnResult updateStaff(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody StaffSearchParam param) { + public ReturnResult updateStaff(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody StaffParams param) { try { User user = HrmUserVarify.getUser(request, response); return ReturnResult.successed(getStaffWrapper(user).updateStaff(param)); diff --git a/src/com/engine/organization/wrapper/StaffWrapper.java b/src/com/engine/organization/wrapper/StaffWrapper.java index 3fc552ef..1b46e618 100644 --- a/src/com/engine/organization/wrapper/StaffWrapper.java +++ b/src/com/engine/organization/wrapper/StaffWrapper.java @@ -3,7 +3,8 @@ package com.engine.organization.wrapper; import com.alibaba.fastjson.JSON; import com.engine.common.util.ServiceUtil; import com.engine.organization.annotation.Log; -import com.engine.organization.entity.staff.param.StaffSearchParam; +import com.engine.organization.entity.staff.param.StaffSerachParam; +import com.engine.organization.entity.staff.param.StaffParams; import com.engine.organization.entity.staff.po.StaffPO; import com.engine.organization.entity.staff.po.StaffPlanPO; import com.engine.organization.enums.LogModuleNameEnum; @@ -12,7 +13,6 @@ import com.engine.organization.mapper.staff.StaffMapper; import com.engine.organization.mapper.staff.StaffPlanMapper; import com.engine.organization.service.StaffService; import com.engine.organization.service.impl.StaffServiceImpl; -import com.engine.organization.util.MenuBtn; import com.engine.organization.util.OrganizationWrapper; import com.engine.organization.util.db.MapperProxyFactory; import weaver.hrm.User; @@ -47,7 +47,7 @@ public class StaffWrapper extends OrganizationWrapper { * @param params * @return */ - public Map listPage(StaffSearchParam params) { + public Map listPage(StaffSerachParam params) { return getStaffService(user).listPage(params); } @@ -58,7 +58,7 @@ public class StaffWrapper extends OrganizationWrapper { * @return */ @Log(operateType = OperateTypeEnum.ADD, operateModule = LogModuleNameEnum.STAFF, operateDesc = "新增编制上报") - public int saveStaff(StaffSearchParam param) { + public int saveStaff(StaffParams param) { int saveStaff = getStaffService(user).saveStaff(param); writeOperateLog(new Object() { }.getClass(), getStaffPlanMapper().getStaffPlanByID(param.getPlanId()).getPlanName(), JSON.toJSONString(param), "新增编制上报"); @@ -72,7 +72,7 @@ public class StaffWrapper extends OrganizationWrapper { * @return */ @Log(operateType = OperateTypeEnum.UPDATE, operateModule = LogModuleNameEnum.STAFF, operateDesc = "更新编制上报") - public int updateStaff(StaffSearchParam param) { + public int updateStaff(StaffParams param) { StaffPO staffByID = getStaffMapper().getStaffByID(param.getId()); int updateStaff = getStaffService(user).updateStaff(param); writeOperateLog(new Object() {