diff --git a/interface/shgw/checkOrgStaff.jsp b/interface/shgw/checkOrgStaff.jsp new file mode 100644 index 00000000..ae207ea8 --- /dev/null +++ b/interface/shgw/checkOrgStaff.jsp @@ -0,0 +1,78 @@ +<%@ page import="weaver.general.BaseBean" %> +<%@ page import="weaver.hrm.User" %> +<%@ page import="java.util.Map" %> +<%@ page import="java.util.HashMap" %> +<%@ page import="weaver.hrm.HrmUserVarify" %> +<%@ page import="com.alibaba.fastjson.JSONObject" %> +<%@ page import="weaver.general.Util" %> +<%@ page import="com.time.util.DateUtil" %> +<%@ page import="weaver.conn.RecordSet" %> + +<%-- + User: wangj + Design Ideas: + 入转调流程提交编制校验规则 + 1、根据流程创建时间,查询生效的编制方案。 + 不存在:提示不存在当年已启用的编制方案 不允许提交 + 存在: + 1.1、根据编制方案查询部门的编制信息。 + 查询到部门的具体编制信息:判断是否强控,超编限制流程提交。 + +--%> +<%@ page contentType="text/html;charset=UTF-8" %> +<% + + BaseBean bb = new BaseBean(); + boolean flag = true; + String msg = ""; + User user = HrmUserVarify.getUser(request,response); + Map res = new HashMap<>(100); + String requestid = Util.null2String(request.getParameter("requestid")); + String createdate = getWfRequestDate(requestid); + //1、根据流程创建时间,查询生效的编制方案。 + String planid = getStaffPlanId(createdate); + if("".equals(planid)){ + flag = false; + msg = "不存在流程创建日期范围内已启用的编制方案,禁止提交!"; + } + + res.put("flag",flag); + res.put("msg",msg); + out.print(JSONObject.toJSONString(res)); + +%> + +<%! + private String getWfRequestDate(String requestid){ + String date = ""; + if("".equals(requestid)){ + date = DateUtil.getCurrentTime("yyyy-MM-dd"); + return date; + } + RecordSet rs = new RecordSet(); + String sql = "select createdate from workflow_requestbase where requestid = '"+requestid+"'"; + rs.execute(sql); + while (rs.next()){ + date = Util.null2String(rs.getString("createdate")); + } + return date; + } +%> + +<%! + private String getStaffPlanId(String createdate){ + String planid = ""; + String sql = "select id,ec_company,control_dimension from jcl_org_staffplan where forbidden_tag = 0 and control_dimension = 2 and time_end >= ? and time_start <= ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql,createdate,createdate); + while (rs.next()){ + planid = Util.null2String(rs.getString("id")); + } + return planid; + } +%> + + + + + diff --git a/src/com/api/shgw/web/OrgStaffApi.java b/src/com/api/shgw/web/OrgStaffApi.java new file mode 100644 index 00000000..7a252328 --- /dev/null +++ b/src/com/api/shgw/web/OrgStaffApi.java @@ -0,0 +1,13 @@ +package com.api.shgw.web; + +import com.engine.shgw.web.OrgStaffAction; + +import javax.ws.rs.Path; + +/** + * 编制二开 + */ +@Path("/orgStaff") +public class OrgStaffApi extends OrgStaffAction { + +} \ No newline at end of file diff --git a/src/com/engine/organization/entity/chart/StatisticsVO.java b/src/com/engine/organization/entity/chart/StatisticsVO.java index 80b90f55..c326d17b 100644 --- a/src/com/engine/organization/entity/chart/StatisticsVO.java +++ b/src/com/engine/organization/entity/chart/StatisticsVO.java @@ -1,6 +1,5 @@ package com.engine.organization.entity.chart; -import com.icbc.api.internal.apache.http.impl.cookie.S; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/src/com/engine/organization/entity/staff/vo/StaffTableVO.java b/src/com/engine/organization/entity/staff/vo/StaffTableVO.java index 4e2e5e0f..c6d74e9d 100644 --- a/src/com/engine/organization/entity/staff/vo/StaffTableVO.java +++ b/src/com/engine/organization/entity/staff/vo/StaffTableVO.java @@ -43,52 +43,52 @@ public class StaffTableVO { /** * 方案id */ - @OrganizationTableColumn(text = "方案", width = "10%", column = "plan_id", transmethod = "com.engine.organization.transmethod.StaffPlanTransMethod.getSpanById") + @OrganizationTableColumn(text = "方案",labelId = -84963, width = "10%", column = "plan_id", transmethod = "com.engine.organization.transmethod.StaffPlanTransMethod.getSpanById") private String planId; /** * 维度 */ - @OrganizationTableColumn(text = "维度", width = "10%", column = "control_dimension", transmethod = "com.engine.organization.transmethod.StaffPlanTransMethod.getControlDimension") + @OrganizationTableColumn(text = "维度",labelId = -84964,width = "10%", column = "control_dimension", transmethod = "com.engine.organization.transmethod.StaffPlanTransMethod.getControlDimension") private String controlDimension; /** * 分部 */ - @OrganizationTableColumn(text = "分部", width = "10%", column = "comp_id", transmethod = "com.engine.organization.transmethod.CompTransMethod.getSpanById") + @OrganizationTableColumn(text = "分部",labelId = -84965,width = "10%", column = "comp_id", transmethod = "com.engine.organization.transmethod.CompTransMethod.getSpanById") private String compId; /** * 部门 */ - @OrganizationTableColumn(text = "部门", width = "10%", column = "dept_id", transmethod = "com.engine.organization.transmethod.DepartmentTransMethod.getSpanById") + @OrganizationTableColumn(text = "部门",labelId = -84821, width = "10%", column = "dept_id", transmethod = "com.engine.organization.transmethod.DepartmentTransMethod.getSpanById") private String deptId; /** * 岗位 */ - @OrganizationTableColumn(text = "岗位", width = "10%", column = "job_id", transmethod = "com.engine.organization.transmethod.JobTransMethod.getSpanById") + @OrganizationTableColumn(text = "岗位",labelId = -84870, width = "10%", column = "job_id", transmethod = "com.engine.organization.transmethod.JobTransMethod.getSpanById") private String jobId; /** * 编制数 */ - @OrganizationTableColumn(text = "编制数", width = "10%", column = "staff_num") + @OrganizationTableColumn(text = "编制数",labelId = -84966, width = "10%", column = "staff_num") private Integer staffNum; /** * 在编 */ - @OrganizationTableColumn(text = "在编", width = "10%", column = "permanent_num") + @OrganizationTableColumn(text = "在编", labelId = -84967,width = "10%", column = "permanent_num") private Integer permanentNum; /** * 冻结数 */ - @OrganizationTableColumn(text = "冻结数", width = "10%", column = "freeze_num") + @OrganizationTableColumn(text = "冻结数",labelId = -84968, width = "10%", column = "freeze_num") private Integer freezeNum; /** * 缺编状态 */ - @OrganizationTableColumn(text = "缺编状态", width = "10%", column = "lack_status", transmethod = "com.engine.organization.transmethod.StaffTransMethod.getLackSpan") + @OrganizationTableColumn(text = "缺编状态",labelId = -84969, width = "10%", column = "lack_status", transmethod = "com.engine.organization.transmethod.StaffTransMethod.getLackSpan") private String lackStatus; /** * 编制描述 */ - @OrganizationTableColumn(text = "编制描述", width = "10%", column = "staff_desc") + @OrganizationTableColumn(text = "编制描述",labelId = -84970, width = "10%", column = "staff_desc") private String staffDesc; } diff --git a/src/com/engine/shgw/Util/ActionUtils.java b/src/com/engine/shgw/Util/ActionUtils.java new file mode 100644 index 00000000..112cc86b --- /dev/null +++ b/src/com/engine/shgw/Util/ActionUtils.java @@ -0,0 +1,52 @@ +package com.engine.shgw.Util; + +import weaver.general.Util; +import weaver.soa.workflow.request.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 流程action工具类 + * + * @author wangj + * @version 1.00版本 + * @Date 2024/5/14 + */ + +public class ActionUtils { + /** + * 根据requestInfo获取主表数据 + * */ + public static Map getMainInfo(RequestInfo requestInfo){ + Map map = new HashMap(); + Property[] property = requestInfo.getMainTableInfo().getProperty(); + for (int i = 0; i < property.length; i++) { + map.put(property[i].getName().toLowerCase(), Util.null2String(property[i].getValue())); + } + return map; + } + + /** + * 根据requestInfo获取明细表数据 + * */ + public static List getDetailInfo(RequestInfo requestInfo, int num){ + DetailTable detailTable = requestInfo.getDetailTableInfo().getDetailTable(num); + //dtltable数组中的行数据集合 + Row[] rows = detailTable.getRow(); + List sublist = new ArrayList(); + for (int i = 0; i < rows.length; i++) { + Row row = rows[i]; + Map onerow = new HashMap(); + sublist.add(onerow); + Cell[] cells = row.getCell(); + for (int j = 0; j < cells.length; j++) { + Cell cell = cells[j]; + onerow.put(cell.getName(), Util.null2String(cell.getValue())); + } + } + return sublist; + } +} diff --git a/src/com/engine/shgw/Util/CommUtils.java b/src/com/engine/shgw/Util/CommUtils.java new file mode 100644 index 00000000..f5105083 --- /dev/null +++ b/src/com/engine/shgw/Util/CommUtils.java @@ -0,0 +1,29 @@ +package com.engine.shgw.Util; + +import java.util.HashSet; +import java.util.Set; + +/** + * 工具类 + * + * @author wangj + * @version 1.00版本 + * @Date 2024/5/13 + */ + +public class CommUtils { + /** + * @Description:字符串去重 + * @Author: wangj + */ + public static String distinctStringWithDot(String str) { + String[] strArr = str.split(","); + Set set = new HashSet(); + for (int i = 0; i < strArr.length; i++) { + if ("".equals(strArr[i])) {continue;} + set.add(strArr[i]); + } + strArr = (String[]) set.toArray(new String[0]); + return String.join(",", strArr); + } +} diff --git a/src/com/engine/shgw/action/EmployeeTransferUpdateOrgStaffAction.java b/src/com/engine/shgw/action/EmployeeTransferUpdateOrgStaffAction.java new file mode 100644 index 00000000..0faf1266 --- /dev/null +++ b/src/com/engine/shgw/action/EmployeeTransferUpdateOrgStaffAction.java @@ -0,0 +1,142 @@ +package com.engine.shgw.action; + +import com.alibaba.fastjson.JSONObject; +import com.engine.shgw.Util.ActionUtils; +import com.time.util.DateUtil; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.Map; + +/** + * 员工调动流程 + * 流程中 调入部门冻结数+1 + * + * @author wangj + * @version 1.00版本 + * @Date 2024/5/14 + */ + +public class EmployeeTransferUpdateOrgStaffAction implements Action { + + //调动后部门 数据库字段名 + private String newbmKey; + + + @Override + public String execute(RequestInfo requestInfo) { + BaseBean bb = new BaseBean(); + try { + String tableName = requestInfo.getRequestManager().getBillTableName(); + String requestid = requestInfo.getRequestid(); + String createdate = getWfRequestDate(requestid); + //获取主表数据 + Map mainInfo = ActionUtils.getMainInfo(requestInfo); + bb.writeLog("-EmployeeTransferUpdateOrgStaffAction-主表数据是:" + JSONObject.toJSONString(mainInfo)); + + + //调动前部门 数据库字段名 +// oldbmKey = Util.null2String(oldbmKey); +// //调动前公司 数据库字段名 +// oldgsKey = Util.null2String(oldgsKey); + + //调动后部门 数据库字段名 + newbmKey = Util.null2String(newbmKey); + //调动后公司 数据库字段名 +// newgsKey = Util.null2String(newgsKey); + + if ("".equals(newbmKey)) { + requestInfo.getRequestManager().setMessagecontent("必传字段为空,请联系管理员!"); + return Action.FAILURE_AND_CONTINUE; + } + + //调动后部门 + String xrzbm = Util.null2String(mainInfo.get(newbmKey)); + + + if (!"".equals(xrzbm)) { + boolean flag = updateOrgStaffByDept(xrzbm,createdate); + if(flag){ + requestInfo.getRequestManager().setMessagecontent("调动后部门编制超编,提交失败!"); + return Action.FAILURE_AND_CONTINUE; + } + } + + + } catch (Exception e) { + requestInfo.getRequestManager().setMessagecontent("接口异常:" + e.getMessage()); + return Action.FAILURE_AND_CONTINUE; + } + return Action.SUCCESS; + } + + private void updateOrgStaffBySubCom(String subcomid) { + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.ec_company,a.ec_department,a.job_id,a.staff_num,a.permanent_num,a.lack_status from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 and b.control_dimension = 1 and b.forbidden_tag = 0 and a.ec_company = '" + subcomid + "'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + int staff_num = Util.getIntValue(rs.getString("staff_num")); + int permanent_num = Util.getIntValue(rs.getString("permanent_num")); + + updateOrgStaff(id); + } + } + + /** + * 判断该部门编制是否是强控,强控时 是否会超编 + * + * @param deptid + */ + private boolean updateOrgStaffByDept(String deptid,String createdate) { + boolean flag = false; + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.ec_company,a.ec_department,a.job_id,a.staff_num,a.permanent_num,a.freeze_num,a.lack_status,a.control_policy from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 and b.control_dimension = 2 and b.forbidden_tag = 0 and a.ec_department = '" + deptid + "' and b.time_end >= '"+createdate+"' and b.time_start <= '"+createdate+"'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + int staff_num = Util.getIntValue(rs.getString("staff_num")); + int permanent_num = Util.getIntValue(rs.getString("permanent_num")); + int freeze_num = Util.getIntValue(rs.getString("freeze_num")); + //2强控,1弱控,3不控 + int control_policy = Util.getIntValue(rs.getString("control_policy")); + //强控 且 超编 + if (control_policy == 2 && staff_num < (permanent_num + freeze_num + 1)) { + flag = true; + } else { + updateOrgStaff(id); + } + } + return flag; + } + + + /** + * 更新冻结数+1 + * + * @param id + */ + private void updateOrgStaff(String id) { + RecordSet rs = new RecordSet(); + String sql = "update jcl_org_staff set freeze_num = freeze_num+1 where id = ?"; + rs.executeUpdate(sql, id); + } + + private String getWfRequestDate(String requestid){ + String date = ""; + if("".equals(requestid)){ + date = DateUtil.getCurrentTime("yyyy-MM-dd"); + return date; + } + RecordSet rs = new RecordSet(); + String sql = "select createdate from workflow_requestbase where requestid = '"+requestid+"'"; + rs.execute(sql); + while (rs.next()){ + date = Util.null2String(rs.getString("createdate")); + } + return date; + } +} diff --git a/src/com/engine/shgw/action/EmployeeTransferUpdateOrgStaffGdAction.java b/src/com/engine/shgw/action/EmployeeTransferUpdateOrgStaffGdAction.java new file mode 100644 index 00000000..defc1291 --- /dev/null +++ b/src/com/engine/shgw/action/EmployeeTransferUpdateOrgStaffGdAction.java @@ -0,0 +1,203 @@ +package com.engine.shgw.action; + +import com.alibaba.fastjson.JSONObject; +import com.engine.shgw.Util.ActionUtils; +import com.time.util.DateUtil; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.Map; + +/** + * 员工调动流程(归档) + *

+ * 流程结束 调入部门在编数+1 冻结数-1 调出部门在编数-1 + * + * @author wangj + * @version 1.00版本 + * @Date 2024/5/14 + */ + +public class EmployeeTransferUpdateOrgStaffGdAction implements Action { + //调动前部门 数据库字段名 + private String oldbmKey; + + + //调动后部门 数据库字段名 + private String newbmKey; + + + @Override + public String execute(RequestInfo requestInfo) { + BaseBean bb = new BaseBean(); + try { + String tableName = requestInfo.getRequestManager().getBillTableName(); + String requestid = requestInfo.getRequestid(); + String createdate = getWfRequestDate(requestid); + //获取主表数据 + Map mainInfo = ActionUtils.getMainInfo(requestInfo); + bb.writeLog("-EmployeeTransferUpdateOrgStaffGdAction-主表数据是:" + JSONObject.toJSONString(mainInfo)); + + + //调动前部门 数据库字段名 + oldbmKey = Util.null2String(oldbmKey); + + + //调动后部门 数据库字段名 + newbmKey = Util.null2String(newbmKey); + + + if ("".equals(oldbmKey) || "".equals(newbmKey)) { + requestInfo.getRequestManager().setMessagecontent("必传字段为空,请联系管理员!"); + return Action.FAILURE_AND_CONTINUE; + } + + //调动前公司 +// String yrzgs = Util.null2String(mainInfo.get(oldgsKey)); + //调动前部门 + String yrzbm = Util.null2String(mainInfo.get(oldbmKey)); + //调动后公司 +// String xrzgs = Util.null2String(mainInfo.get(newgsKey)); + //调动后部门 + String xrzbm = Util.null2String(mainInfo.get(newbmKey)); + + +// if (!"".equals(xrzgs)) { +// updateOrgStaffBySubCom(xrzgs); +// } + + if (!"".equals(xrzbm)) { + updateOrgStaffByDept(xrzbm,createdate); + } + +// if (!"".equals(yrzgs)) { +// updateOrgStaffBySubComOld(xrzgs); +// } + + if (!"".equals(yrzbm)) { + updateOrgStaffByDeptOld(yrzbm,createdate); + } + + + } catch (Exception e) { + requestInfo.getRequestManager().setMessagecontent("接口异常:" + e.getMessage()); + return Action.FAILURE_AND_CONTINUE; + } + return Action.SUCCESS; + } + + private void updateOrgStaffBySubCom(String subcomid) { + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.ec_company,a.ec_department,a.job_id,a.staff_num,a.permanent_num,a.lack_status from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 and b.control_dimension = 1 and b.forbidden_tag = 0 and a.ec_company = '" + subcomid + "'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + int staff_num = Util.getIntValue(rs.getString("staff_num")); + int permanent_num = Util.getIntValue(rs.getString("permanent_num")); + updateOrgStaff(id, staff_num, permanent_num); + } + } + + private void updateOrgStaffByDept(String deptid,String createdate) { + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.ec_company,a.ec_department,a.job_id,a.staff_num,a.permanent_num,a.lack_status from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 and b.control_dimension = 2 and b.forbidden_tag = 0 and a.ec_department = '" + deptid + "' and b.time_end >= '"+createdate+"' and b.time_start <= '"+createdate+"'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + int staff_num = Util.getIntValue(rs.getString("staff_num")); + int permanent_num = Util.getIntValue(rs.getString("permanent_num")); + updateOrgStaff(id, staff_num, permanent_num); + } + } + + private void updateOrgStaffBySubComOld(String subcomid) { + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.ec_company,a.ec_department,a.job_id,a.staff_num,a.permanent_num,a.lack_status from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 and b.control_dimension = 1 and b.forbidden_tag = 0 and a.ec_company = '" + subcomid + "'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + int staff_num = Util.getIntValue(rs.getString("staff_num")); + int permanent_num = Util.getIntValue(rs.getString("permanent_num")); + updateOrgStaffOld(id, staff_num, permanent_num); + } + } + + private void updateOrgStaffByDeptOld(String deptid,String createdate) { + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.ec_company,a.ec_department,a.job_id,a.staff_num,a.permanent_num,a.lack_status from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 and b.control_dimension = 2 and b.forbidden_tag = 0 and a.ec_department = '" + deptid + "' and b.time_end >= '"+createdate+"' and b.time_start <= '"+createdate+"'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + int staff_num = Util.getIntValue(rs.getString("staff_num")); + int permanent_num = Util.getIntValue(rs.getString("permanent_num")); + updateOrgStaffOld(id, staff_num, permanent_num); + } + } + + + /** + * 更新冻结数-1 在编数+1 + * + * @param id + */ + private void updateOrgStaff(String id, int staff_num, int permanent_num) { + RecordSet rs = new RecordSet(); + + permanent_num = permanent_num + 1; + + //lack_status 缺编状态 1缺编,2满编,3超编 + int lack_status = 1; + if (permanent_num < staff_num) { + lack_status = 1; + } else if (permanent_num == staff_num) { + lack_status = 2; + } else if (permanent_num > staff_num) { + lack_status = 3; + } + + String sql = "update jcl_org_staff set freeze_num = freeze_num-1,permanent_num = ?,lack_status = ? where id = ?"; + rs.executeUpdate(sql, permanent_num, lack_status, id); + } + + /** + * 更新在编数-1 + * + * @param id + */ + private void updateOrgStaffOld(String id, int staff_num, int permanent_num) { + RecordSet rs = new RecordSet(); + + permanent_num = permanent_num - 1; + + //lack_status 缺编状态 1缺编,2满编,3超编 + int lack_status = 1; + if (permanent_num < staff_num) { + lack_status = 1; + } else if (permanent_num == staff_num) { + lack_status = 2; + } else if (permanent_num > staff_num) { + lack_status = 3; + } + + String sql = "update jcl_org_staff set permanent_num = ?,lack_status = ? where id = ?"; + rs.executeUpdate(sql, permanent_num, lack_status, id); + } + + private String getWfRequestDate(String requestid){ + String date = ""; + if("".equals(requestid)){ + date = DateUtil.getCurrentTime("yyyy-MM-dd"); + return date; + } + RecordSet rs = new RecordSet(); + String sql = "select createdate from workflow_requestbase where requestid = '"+requestid+"'"; + rs.execute(sql); + while (rs.next()){ + date = Util.null2String(rs.getString("createdate")); + } + return date; + } +} diff --git a/src/com/engine/shgw/action/EmploymentUpdateOrgStaffAction.java b/src/com/engine/shgw/action/EmploymentUpdateOrgStaffAction.java new file mode 100644 index 00000000..e442428f --- /dev/null +++ b/src/com/engine/shgw/action/EmploymentUpdateOrgStaffAction.java @@ -0,0 +1,133 @@ +package com.engine.shgw.action; + +import com.alibaba.fastjson.JSONObject; +import com.engine.shgw.Util.ActionUtils; +import com.time.util.DateUtil; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.Map; + +/** + * 入职流程 + * 部门编制 冻结数+1 + * + * @author wangj + * @version 1.00版本 + * @Date 2024/5/14 + */ + +public class EmploymentUpdateOrgStaffAction implements Action { + //部门 数据库字段名 + private String bmKey; + + @Override + public String execute(RequestInfo requestInfo) { + BaseBean bb = new BaseBean(); + try { + String tableName = requestInfo.getRequestManager().getBillTableName(); + String requestid = requestInfo.getRequestid(); + String createdate = getWfRequestDate(requestid); + //获取主表数据 + Map mainInfo = ActionUtils.getMainInfo(requestInfo); + bb.writeLog("-EmploymentUpdateOrgStaffAction-主表数据是:" + JSONObject.toJSONString(mainInfo)); + + //部门 数据库字段名 + bmKey = Util.null2String(bmKey); + + + if("".equals(bmKey)){ + requestInfo.getRequestManager().setMessagecontent("必传字段为空,请联系管理员!"); + return Action.FAILURE_AND_CONTINUE; + } + + //分部 +// String fb = Util.null2String(mainInfo.get(gsKey)); + //部门 + String bm = Util.null2String(mainInfo.get(bmKey)); + +// if (!"".equals(fb)) { +// updateOrgStaffBySubCom(fb); +// } + + if (!"".equals(bm)) { + boolean flag = updateOrgStaffByDept(bm,createdate); + if(flag){ + requestInfo.getRequestManager().setMessagecontent("入职部门编制超编,提交失败!"); + return Action.FAILURE_AND_CONTINUE; + } + } + + + } catch (Exception e) { + requestInfo.getRequestManager().setMessagecontent("接口异常:" + e.getMessage()); + return Action.FAILURE_AND_CONTINUE; + } + return Action.SUCCESS; + } + + private void updateOrgStaffBySubCom(String subcomid) { + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.ec_company,a.ec_department,a.job_id,a.staff_num,a.permanent_num,a.lack_status from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 and b.control_dimension = 1 and b.forbidden_tag = 0 and a.ec_company = '" + subcomid + "'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + + updateOrgStaff(id); + } + } + + private boolean updateOrgStaffByDept(String deptid,String createdate) { + RecordSet rs = new RecordSet(); + boolean flag = false; + String sql = "select a.id,a.ec_company,a.ec_department,a.job_id,a.staff_num,a.permanent_num,a.freeze_num,a.control_policy,a.lack_status from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 and b.control_dimension = 2 and b.forbidden_tag = 0 and a.ec_department = '" + deptid + "' and b.time_end >= '"+createdate+"' and b.time_start <= '"+createdate+"'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + + int staff_num = Util.getIntValue(rs.getString("staff_num")); + int permanent_num = Util.getIntValue(rs.getString("permanent_num")); + int freeze_num = Util.getIntValue(rs.getString("freeze_num")); + + //2强控,1弱控,3不控 + int control_policy = Util.getIntValue(rs.getString("control_policy")); + //强控 且 超编 + if (control_policy == 2 && staff_num < (permanent_num + freeze_num + 1)) { + flag = true; + } else { + updateOrgStaff(id); + } + + } + return flag; + } + + + /** + * 更新冻结数+1 + * @param id + */ + private void updateOrgStaff(String id) { + RecordSet rs = new RecordSet(); + String sql = "update jcl_org_staff set freeze_num = freeze_num+1 where id = ?"; + rs.executeUpdate(sql, id); + } + + private String getWfRequestDate(String requestid){ + String date = ""; + if("".equals(requestid)){ + date = DateUtil.getCurrentTime("yyyy-MM-dd"); + return date; + } + RecordSet rs = new RecordSet(); + String sql = "select createdate from workflow_requestbase where requestid = '"+requestid+"'"; + rs.execute(sql); + while (rs.next()){ + date = Util.null2String(rs.getString("createdate")); + } + return date; + } +} diff --git a/src/com/engine/shgw/action/EmploymentUpdateOrgStaffGdAction.java b/src/com/engine/shgw/action/EmploymentUpdateOrgStaffGdAction.java new file mode 100644 index 00000000..dfe8459d --- /dev/null +++ b/src/com/engine/shgw/action/EmploymentUpdateOrgStaffGdAction.java @@ -0,0 +1,134 @@ +package com.engine.shgw.action; + +import com.alibaba.fastjson.JSONObject; +import com.engine.shgw.Util.ActionUtils; +import com.time.util.DateUtil; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.Map; + +/** + * 入职流程 + 归档节点action + * 流程结束后 冻结数转为在编人数 部门 冻结数-1 在编数+1 + * + * @author wangj + * @version 1.00版本 + * @Date 2024/5/14 + */ + +public class EmploymentUpdateOrgStaffGdAction implements Action { + + //部门 数据库字段名 + private String bmKey; + + + @Override + public String execute(RequestInfo requestInfo) { + BaseBean bb = new BaseBean(); + try { + //获取主表数据 + Map mainInfo = ActionUtils.getMainInfo(requestInfo); + String requestid = requestInfo.getRequestid(); + String createdate = getWfRequestDate(requestid); + bb.writeLog("-EmploymentUpdateOrgStaffGdAction-主表数据是:" + JSONObject.toJSONString(mainInfo)); + + //部门 数据库字段名 + bmKey = Util.null2String(bmKey); +// //公司 数据库字段名 +// gsKey = Util.null2String(gsKey); + + if("".equals(bmKey)){ + requestInfo.getRequestManager().setMessagecontent("必传字段为空,请联系管理员!"); + return Action.FAILURE_AND_CONTINUE; + } + + //分部 +// String fb = Util.null2String(mainInfo.get(gsKey)); + //部门 + String bm = Util.null2String(mainInfo.get(bmKey)); + +// if(!"".equals(fb)){ +// updateOrgStaffBySubCom(fb); +// } + + if(!"".equals(bm)){ + updateOrgStaffByDept(bm,createdate); + } + + } catch (Exception e) { + requestInfo.getRequestManager().setMessagecontent("接口异常:" + e.getMessage()); + return Action.FAILURE_AND_CONTINUE; + } + return Action.SUCCESS; + } + + + private void updateOrgStaffBySubCom(String subcomid) { + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.ec_company,a.ec_department,a.job_id,a.staff_num,a.permanent_num,a.lack_status from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 and b.control_dimension = 1 and b.forbidden_tag = 0 and a.ec_company = '" + subcomid + "'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + int staff_num = Util.getIntValue(rs.getString("staff_num")); + int permanent_num = Util.getIntValue(rs.getString("permanent_num")); + updateOrgStaff(id, staff_num, permanent_num); + } + } + + private void updateOrgStaffByDept(String deptid,String createdate) { + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.ec_company,a.ec_department,a.job_id,a.staff_num,a.permanent_num,a.lack_status from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 and b.control_dimension = 2 and b.forbidden_tag = 0 and a.ec_department = '" + deptid + "' and b.time_end >= '"+createdate+"' and b.time_start <= '"+createdate+"'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + int staff_num = Util.getIntValue(rs.getString("staff_num")); + int permanent_num = Util.getIntValue(rs.getString("permanent_num")); + updateOrgStaff(id, staff_num, permanent_num); + } + } + + + /** + * 更新冻结数-1 在编数+1 + * + * @param id + */ + private void updateOrgStaff(String id,int staff_num,int permanent_num) { + RecordSet rs = new RecordSet(); + + permanent_num = permanent_num + 1; + + //lack_status 缺编状态 1缺编,2满编,3超编 + int lack_status = 1; + if (permanent_num < staff_num) { + lack_status = 1; + } else if (permanent_num == staff_num) { + lack_status = 2; + } else if (permanent_num > staff_num) { + lack_status = 3; + } + + String sql = "update jcl_org_staff set freeze_num = freeze_num-1,permanent_num = ?,lack_status = ? where id = ?"; + rs.executeUpdate(sql,permanent_num,lack_status,id); + } + + private String getWfRequestDate(String requestid){ + String date = ""; + if("".equals(requestid)){ + date = DateUtil.getCurrentTime("yyyy-MM-dd"); + return date; + } + RecordSet rs = new RecordSet(); + String sql = "select createdate from workflow_requestbase where requestid = '"+requestid+"'"; + rs.execute(sql); + while (rs.next()){ + date = Util.null2String(rs.getString("createdate")); + } + return date; + } +} diff --git a/src/com/engine/shgw/action/RecruitmentNeedsUpdateOrgAction.java b/src/com/engine/shgw/action/RecruitmentNeedsUpdateOrgAction.java new file mode 100644 index 00000000..64fd9c7e --- /dev/null +++ b/src/com/engine/shgw/action/RecruitmentNeedsUpdateOrgAction.java @@ -0,0 +1,247 @@ +package com.engine.shgw.action; + +import com.alibaba.fastjson.JSONObject; +import com.engine.organization.entity.job.po.JobPO; +import com.engine.organization.entity.staff.bo.StaffBO; +import com.engine.organization.entity.staff.param.StaffParams; +import com.engine.organization.entity.staff.po.StaffPO; +import com.engine.organization.mapper.job.JobMapper; +import com.engine.organization.mapper.staff.StaffMapper; +import com.engine.organization.util.OrganizationAssert; +import com.engine.organization.util.db.MapperProxyFactory; +import com.engine.shgw.Util.ActionUtils; +import com.time.util.DateUtil; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.company.SubCompanyComInfo; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.ArrayList; +import java.util.Map; + +/** + * 招聘需求流程更新编制action + * 更新/新增 申请部门 的编制数 + * 同时更新在编数 在编状态 + * + * @author wangj + * @version 1.00版本 + * @Date 2024/5/16 + */ + +public class RecruitmentNeedsUpdateOrgAction implements Action { + //数量 数据库字段名 + private String slKey; + //招聘类型 数据库字段名 + private String hclxKey; + //部门 数据库字段名 + private String bmKey; + + private StaffMapper getStaffMapper() { + return MapperProxyFactory.getProxy(StaffMapper.class); + } + + + @Override + public String execute(RequestInfo requestInfo) { + BaseBean bb = new BaseBean(); + try { + //获取主表数据 + Map mainInfo = ActionUtils.getMainInfo(requestInfo); + String requestid = requestInfo.getRequestid(); + String createdate = getWfRequestDate(requestid); + bb.writeLog("-RecruitmentNeedsUpdateOrgAction-主表数据是:" + JSONObject.toJSONString(mainInfo)); + //数量 数据库字段名 + slKey = Util.null2String(slKey); + //招聘类型 数据库字段名 + hclxKey = Util.null2String(hclxKey); + //部门 数据库字段名 + bmKey = Util.null2String(bmKey); + + + if ("".equals(slKey) || "".equals(hclxKey) || "".equals(bmKey)) { + requestInfo.getRequestManager().setMessagecontent("必传字段为空,请联系管理员!"); + return Action.FAILURE_AND_CONTINUE; + } + + + String bm = Util.null2String(mainInfo.get(bmKey)); + + int sl = Util.getIntValue(Util.null2String(mainInfo.get(slKey)), 0); + + + //0 新增 1 替换 + String hclx = Util.null2String(mainInfo.get(hclxKey)); + bb.writeLog("-RecruitmentNeedsUpdateOrgAction-hclx:" + hclx); + + //部门维度 + if (!"".equals(bm)) { + updateOrgStaffByDept(bm, hclx, sl, createdate); + } + + } catch (Exception e) { + requestInfo.getRequestManager().setMessagecontent("接口异常:" + e.getMessage()); + return Action.FAILURE_AND_CONTINUE; + } + return Action.SUCCESS; + } + + + private void updateOrgStaffBySubCom(String subcomid, String hclx, int sl) { + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.ec_company,a.ec_department,a.job_id,a.staff_num,a.permanent_num,a.lack_status from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 and b.control_dimension = 1 and b.forbidden_tag = 0 and a.ec_company = '" + subcomid + "'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + int staff_num = Util.getIntValue(rs.getString("staff_num")); + int permanent_num = Util.getIntValue(rs.getString("permanent_num")); + //新增 + if ("0".equals(hclx)) { + staff_num = staff_num + sl; + } else { + staff_num = sl; + } + updateOrgStaff(id, staff_num, permanent_num); + } + } + + + /** + * 更新在编人数、编制状态 + * + * @param id + * @param staff_num + * @param permanent_num + */ + private void updateOrgStaff(String id, int staff_num, int permanent_num) { + RecordSet rs = new RecordSet(); + + //lack_status 缺编状态 1缺编,2满编,3超编 + int lack_status = 1; + if (permanent_num < staff_num) { + lack_status = 1; + } else if (permanent_num == staff_num) { + lack_status = 2; + } else if (permanent_num > staff_num) { + lack_status = 3; + } + String sql = "update jcl_org_staff set staff_num = ?,lack_status = ? where id = ?"; + rs.executeUpdate(sql, staff_num, lack_status, id); + } + + private void updateOrgStaffByDept(String deptid, String hclx, int sl, String createdate) { + boolean flag = false; + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.ec_company,a.ec_department,a.job_id,a.staff_num,a.permanent_num,a.lack_status from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 and b.control_dimension = 2 and b.forbidden_tag = 0 and a.ec_department = '" + deptid + "' and b.time_end >= '" + createdate + "' and b.time_start <= '" + createdate + "'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + int staff_num = Util.getIntValue(rs.getString("staff_num")); + int permanent_num = Util.getIntValue(rs.getString("permanent_num")); + //新增 + if ("0".equals(hclx)) { + staff_num = staff_num + sl; + } else { + staff_num = sl; + } + updateOrgStaff(id, staff_num, permanent_num); + flag = true; + } + + if (!flag) { + //判断如果没有找到该部门的编制信息 + sql = "select id,ec_company,control_dimension from jcl_org_staffplan where forbidden_tag = 0 and control_dimension = 2 and time_end >= ? and time_start <= ?"; + rs.executeQuery(sql, createdate, createdate); + while (rs.next()) { + String planid = Util.null2String(rs.getString("id")); + StaffParams param = new StaffParams(); + param.setPlanId(Util.getIntValue(planid)); + param.setStaffNum(sl); + param.setDeptId(Util.getIntValue(deptid)); + param.setEcDepartment(Util.getIntValue(deptid)); + param.setControlPolicy(2); + + StaffPO staffPO = StaffBO.convertParamToPO(param, (long)1); + OrganizationAssert.isFalse(staffPO.getStaffNum() < 0, "编制数不可小于0,请更正"); + + + int ignoreNull = getStaffMapper().insertIgnoreNull(staffPO); + // 初始化编制在编数 + initStaffInfo(staffPO); + + } + } + } + + private String getWfRequestDate(String requestid) { + String date = ""; + if ("".equals(requestid)) { + date = DateUtil.getCurrentTime("yyyy-MM-dd"); + return date; + } + RecordSet rs = new RecordSet(); + String sql = "select createdate from workflow_requestbase where requestid = '" + requestid + "'"; + rs.execute(sql); + while (rs.next()) { + date = Util.null2String(rs.getString("createdate")); + } + return date; + } + + + + + /** + * 初始化编制在编数 + * + * @param staffPO 编制信息实体列 + */ + public static void initStaffInfo(StaffPO staffPO) { + boolean hasDepartment = null != staffPO.getEcDepartment() && 0 != staffPO.getEcDepartment(); + boolean hasJob = null != staffPO.getJobId() && 0 != staffPO.getJobId(); + RecordSet rs = new RecordSet(); + String sql = "select count(1) as num from hrmresource where STATUS < 4"; + if (null != staffPO.getEcCompany() && 0 != staffPO.getEcCompany()) { + ArrayList subCompanyList = new ArrayList<>(); + subCompanyList.add(staffPO.getEcCompany().toString()); + if (!hasJob && !hasDepartment) { + new SubCompanyComInfo().getSubCompanyLists(staffPO.getEcCompany().toString(), subCompanyList); + } + sql += " and subcompanyid1 in (" + StringUtils.join(subCompanyList, ",") + ")"; + } + if (hasDepartment) { + ArrayList departmentList = new ArrayList<>(); + departmentList.add(staffPO.getEcDepartment().toString()); + if (!hasJob) { + new DepartmentComInfo().getAllChildDeptByDepId(departmentList, staffPO.getEcDepartment().toString()); + } + sql += " and departmentid in (" + StringUtils.join(departmentList, ",") + ")"; + } + if (hasJob) { + JobPO jobById = MapperProxyFactory.getProxy(JobMapper.class).getJobById(Long.valueOf(staffPO.getJobId())); + if (null == jobById) { + return; + } + Integer ecJobTitle = jobById.getEcJobTitle(); + sql += " and jobtitle = " + ecJobTitle; + } + + if ("false".equals(new BaseBean().getPropValue("hrmOrganization","accountType"))) { + sql += " and accounttype != 1"; + } + + rs.executeQuery(sql); + if (rs.next()) { + staffPO.setPermanentNum(-1 == rs.getInt("num") ? 0 : rs.getInt("num")); + StaffBO.buildStaffDesc(staffPO); + MapperProxyFactory.getProxy(StaffMapper.class).updateStaff(staffPO); + } + + } + + +} diff --git a/src/com/engine/shgw/action/ResignationUpdateOrgStaffAction.java b/src/com/engine/shgw/action/ResignationUpdateOrgStaffAction.java new file mode 100644 index 00000000..c7a2aaaf --- /dev/null +++ b/src/com/engine/shgw/action/ResignationUpdateOrgStaffAction.java @@ -0,0 +1,183 @@ +package com.engine.shgw.action; + +import com.alibaba.fastjson.JSONObject; +import com.engine.shgw.Util.ActionUtils; +import com.engine.shgw.Util.CommUtils; +import com.time.util.DateUtil; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.Map; + +/** + * 离职流程更新编制数 + *

+ * 离职流程 + * 部门维度 离职部门 在编数-1 所有上级部门在编数-1 + * 分部维度 离职分部 在编数-1 所有上级分部在编数-1 + * + * @author wangj + * @version 1.00版本 + * @Date 2024/5/14 + */ + +public class ResignationUpdateOrgStaffAction implements Action { + //部门 数据库字段名 + private String bmKey; + + @Override + public String execute(RequestInfo requestInfo) { + BaseBean bb = new BaseBean(); + try { + String tableName = requestInfo.getRequestManager().getBillTableName(); + String requestid = requestInfo.getRequestid(); + String createdate = getWfRequestDate(requestid); + //获取主表数据 + Map mainInfo = ActionUtils.getMainInfo(requestInfo); + bb.writeLog("-ResignationUpdateOrgStaffAction-主表数据是:" + JSONObject.toJSONString(mainInfo)); + + //部门 数据库字段名 + bmKey = Util.null2String(bmKey); +// //公司 数据库字段名 +// gsKey = Util.null2String(gsKey); + + if("".equals(bmKey)){ + requestInfo.getRequestManager().setMessagecontent("必传字段为空,请联系管理员!"); + return Action.FAILURE_AND_CONTINUE; + } + + //分部 +// String fb = Util.null2String(mainInfo.get(gsKey)); + //部门 + String bm = Util.null2String(mainInfo.get(bmKey)); + + //分部维度 +// if (!"".equals(fb)) { +// updateOrgStaffBySubCom(fb); +// } + + //部门维度 + if (!"".equals(bm)) { + updateOrgStaffByDept(bm,createdate); + } + } catch (Exception e) { + requestInfo.getRequestManager().setMessagecontent("接口异常:" + e.getMessage()); + return Action.FAILURE_AND_CONTINUE; + } + return Action.SUCCESS; + } + + /** + * 获取所有分部id以及父级id + * + * @param id + * @return + */ + private String getAllSupComIds(String id) { + String allsubcomids = id; + RecordSet rs = new RecordSet(); + String sql = "select supsubcomid from hrmsubcompany where (canceled = 0 or canceled is null) and id = '" + id + "'"; + rs.execute(sql); + while (rs.next()) { + String supsubcomid = Util.null2String(rs.getString("supsubcomid")); + if ("".equals(supsubcomid) || "0".equals(supsubcomid)) { + continue; + } + allsubcomids = allsubcomids + "," + supsubcomid; + supsubcomid = getAllSupComIds(supsubcomid); + allsubcomids = allsubcomids + "," + supsubcomid; + } + allsubcomids = CommUtils.distinctStringWithDot(allsubcomids); + return allsubcomids; + } + + /** + * 获取所有部门id以及父级id + * + * @param id + * @return + */ + private String getAllSupDeptIds(String id) { + String allsubdeptids = id; + RecordSet rs = new RecordSet(); + String sql = "select supdepid from hrmdepartment where (canceled = 0 or canceled is null) and id = '" + id + "'"; + rs.execute(sql); + while (rs.next()) { + String supdepid = Util.null2String(rs.getString("supdepid")); + if ("".equals(supdepid) || "0".equals(supdepid)) { + continue; + } + allsubdeptids = allsubdeptids + "," + supdepid; + supdepid = getAllSupDeptIds(supdepid); + allsubdeptids = allsubdeptids + "," + supdepid; + } + allsubdeptids = CommUtils.distinctStringWithDot(allsubdeptids); + return allsubdeptids; + } + + private void updateOrgStaffBySubCom(String subcomid) { + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.ec_company,a.ec_department,a.job_id,a.staff_num,a.permanent_num,a.lack_status from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 and b.control_dimension = 1 and b.forbidden_tag = 0 and a.ec_company = '" + subcomid + "'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + int staff_num = Util.getIntValue(rs.getString("staff_num")); + int permanent_num = Util.getIntValue(rs.getString("permanent_num")); + updateOrgStaff(id, staff_num, permanent_num); + } + } + + private void updateOrgStaffByDept(String deptid,String createdate) { + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.ec_company,a.ec_department,a.job_id,a.staff_num,a.permanent_num,a.lack_status from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 and b.control_dimension = 2 and b.forbidden_tag = 0 and a.ec_department = '" + deptid + "' and b.time_end >= '"+createdate+"' and b.time_start <= '"+createdate+"'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + int staff_num = Util.getIntValue(rs.getString("staff_num")); + int permanent_num = Util.getIntValue(rs.getString("permanent_num")); + updateOrgStaff(id, staff_num, permanent_num); + } + } + + /** + * 更新在编人数、编制状态 + * + * @param id + * @param staff_num + * @param permanent_num + */ + private void updateOrgStaff(String id, int staff_num, int permanent_num) { + RecordSet rs = new RecordSet(); + permanent_num = permanent_num - 1; + + //lack_status 缺编状态 1缺编,2满编,3超编 + int lack_status = 1; + if (permanent_num < staff_num) { + lack_status = 1; + } else if (permanent_num == staff_num) { + lack_status = 2; + } else if (permanent_num > staff_num) { + lack_status = 3; + } + String sql = "update jcl_org_staff set permanent_num = ?,lack_status = ? where id = ?"; + rs.executeUpdate(sql, permanent_num, lack_status, id); + } + + private String getWfRequestDate(String requestid){ + String date = ""; + if("".equals(requestid)){ + date = DateUtil.getCurrentTime("yyyy-MM-dd"); + return date; + } + RecordSet rs = new RecordSet(); + String sql = "select createdate from workflow_requestbase where requestid = '"+requestid+"'"; + rs.execute(sql); + while (rs.next()){ + date = Util.null2String(rs.getString("createdate")); + } + return date; + } +} diff --git a/src/com/engine/shgw/cmd/UpdateOrgStaffingCmd.java b/src/com/engine/shgw/cmd/UpdateOrgStaffingCmd.java new file mode 100644 index 00000000..662f9081 --- /dev/null +++ b/src/com/engine/shgw/cmd/UpdateOrgStaffingCmd.java @@ -0,0 +1,218 @@ +package com.engine.shgw.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import com.engine.shgw.Util.CommUtils; +import com.time.util.DateUtil; +import weaver.conn.RecordSet; +import weaver.general.Util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 更新编制 + * + * @author wangj + * @version 1.00版本 + * @Date 2024/5/14 + */ + +public class UpdateOrgStaffingCmd extends AbstractCommonCommand> { + + public UpdateOrgStaffingCmd(Map params) { + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map result = new HashMap<>(100); + boolean flag = true; + RecordSet rs = new RecordSet(); + try { + String date = DateUtil.getCurrentTime("yyyy-MM-dd"); + List> planlist = new ArrayList<>(100); + //获取启用状态的编制方案 + String sql = "select id,ec_company,control_dimension from jcl_org_staffplan where forbidden_tag = 0 and time_end >= '"+date+"' and time_start <= '"+date+"'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + //适用分部 测试看没限制 + String subcompany = Util.null2String(rs.getString("ec_company")); + //控制维度 1 分部/2 部门/3 岗位 + String dimension = Util.null2String(rs.getString("control_dimension")); + + Map map = new HashMap<>(10); + map.put("id", id); + map.put("subcompany", subcompany); + map.put("dimension", dimension); + planlist.add(map); + } + + for (Map map : planlist) { + String planid = Util.null2String(map.get("id")); + //控制维度 1 分部/2 部门/3 岗位 + String dimension = Util.null2String(map.get("dimension")); + sql = "select id,ec_company,ec_department,job_id,staff_num,permanent_num,lack_status from jcl_org_staff where plan_id = " + planid + " and delete_type = 0"; + rs.execute(sql); + while (rs.next()) { + //编制信息id + String id = Util.null2String(rs.getString("id")); + //分部id + String subcompanyid = Util.null2String(rs.getString("ec_company")); + //部门id + String deptid = Util.null2String(rs.getString("ec_department")); + //岗位id + String job_id = Util.null2String(rs.getString("job_id")); + //编制数 + int staff_num = Util.getIntValue(rs.getString("staff_num"), 0); + + + //lack_status 缺编状态 1缺编,2满编,3超编 + + if ("1".equals(dimension)) { + //分部维度 + updateOrgPermanentNumBySubCom(id, subcompanyid, staff_num); + } else if ("2".equals(dimension)) { + //部门维度 + updateOrgPermanentNumByDept(id, deptid, staff_num); + } else if ("3".equals(dimension)) { + //岗位维度 + } + + } + } + + }catch (Exception e){ + flag = false; + result.put("msg",e.getMessage()); + } + result.put("flag",flag); + return result; + } + + /** + * @Description: 更新编制信息的 在编数 编制状态 + * @Author: wangj + */ + private void updateOrgPermanentNumByDept(String id, String deptid, int staff_num) { + RecordSet rs = new RecordSet(); + //统计该部门以及所有下级部门的人员-用工性质 + int permanent_num = 0; + + permanent_num = getOrgPermanentNumByDept(deptid); + + //lack_status 缺编状态 1缺编,2满编,3超编 + int lack_status = 1; + if (permanent_num < staff_num) { + lack_status = 1; + } else if (permanent_num == staff_num) { + lack_status = 2; + } else if (permanent_num > staff_num) { + lack_status = 3; + } + String sql = "update jcl_org_staff set permanent_num = ?,lack_status = ? where id = ?"; + rs.executeUpdate(sql, permanent_num, lack_status, id); + } + + + /** + * 获取部门以及所有下级部门人员数量 + * + * @param deptid + * @return + */ + private int getOrgPermanentNumByDept(String deptid) { + int num = 0; + RecordSet rs = new RecordSet(); + //获取部门以及所有下级部门id + String deptids = getAllSubDeptIds(deptid); + String sql = "select count(1) as sl from hrmresource where status < 4 and accounttype != 1 and departmentid in (" + deptids + ")"; + rs.execute(sql); + while (rs.next()) { + num = Util.getIntValue(rs.getString("sl")); + } + return num; + } + + private String getAllSubDeptIds(String deptid) { + String deptids = deptid; + RecordSet rs = new RecordSet(); + String sql = "select id from hrmdepartment where (canceled = 0 or canceled is null) and supdepid = '" + deptid + "'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + if ("".equals(id)) continue; + + String subdeptids = getAllSubDeptIds(id); + deptids = deptids + "," + subdeptids; + } + deptids = CommUtils.distinctStringWithDot(deptids); + return deptids; + } + + /** + * 分部维度 更新在编人数 缺编状态 + * + * @param id + * @param subcomid + * @param staff_num + */ + private void updateOrgPermanentNumBySubCom(String id, String subcomid, int staff_num) { + RecordSet rs = new RecordSet(); + //统计该分部以及所有下级分部的人员 + int permanent_num = 0; + + permanent_num = getOrgPermanentNumBySubCom(subcomid); + + //lack_status 缺编状态 1缺编,2满编,3超编 + int lack_status = 1; + if (permanent_num < staff_num) { + lack_status = 1; + } else if (permanent_num == staff_num) { + lack_status = 2; + } else if (permanent_num > staff_num) { + lack_status = 3; + } + String sql = "update jcl_org_staff set permanent_num = ?,lack_status = ? where id = ?"; + rs.executeUpdate(sql, permanent_num, lack_status, id); + } + + private int getOrgPermanentNumBySubCom(String subcomid) { + int num = 0; + RecordSet rs = new RecordSet(); + //获取分部以及所有下级分部id + String subcomids = getAllSubComIds(subcomid); + String sql = "select count(1) as sl from hrmresource where status < 4 and accounttype != 1 and subcompanyid1 in (" + subcomids + ")"; + rs.execute(sql); + while (rs.next()) { + num = Util.getIntValue(rs.getString("sl")); + } + return num; + } + + private String getAllSubComIds(String subcomid) { + String subcomids = subcomid; + RecordSet rs = new RecordSet(); + String sql = "select id from hrmsubcompany where (canceled = 0 or canceled is null) and supsubcomid = '" + subcomid + "'"; + rs.execute(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + if ("".equals(id)) continue; + + String subids = getAllSubComIds(id); + subcomids = subcomids + "," + subids; + } + subcomids = CommUtils.distinctStringWithDot(subcomids); + return subcomids; + } + +} diff --git a/src/com/engine/shgw/job/UpdateOrgStaffingJob.java b/src/com/engine/shgw/job/UpdateOrgStaffingJob.java new file mode 100644 index 00000000..d099824b --- /dev/null +++ b/src/com/engine/shgw/job/UpdateOrgStaffingJob.java @@ -0,0 +1,200 @@ +package com.engine.shgw.job; + +import com.engine.shgw.Util.CommUtils; +import com.time.util.DateUtil; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.interfaces.schedule.BaseCronJob; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 更新部门编制-在编数信息 + * + * @author wangj + * @version 1.00版本 + * @Date 2024/5/13 + */ + +public class UpdateOrgStaffingJob extends BaseCronJob { + @Override + public void execute() { + RecordSet rs = new RecordSet(); + List> planlist = new ArrayList<>(100); + String date = DateUtil.getCurrentTime("yyyy-MM-dd"); + //获取启用状态的编制方案 + String sql = "select id,ec_company,control_dimension from jcl_org_staffplan where forbidden_tag = 0 and time_end >= '"+date+"' and time_start <= '"+date+"'"; + rs.execute(sql); + while (rs.next()){ + String id = Util.null2String(rs.getString("id")); + //适用分部 测试看没限制 + String subcompany = Util.null2String(rs.getString("ec_company")); + //控制维度 1 分部/2 部门/3 岗位 + String dimension = Util.null2String(rs.getString("control_dimension")); + + Map map = new HashMap<>(10); + map.put("id",id); + map.put("subcompany",subcompany); + map.put("dimension",dimension); + planlist.add(map); + } + + for (Map map : planlist){ + String planid = Util.null2String(map.get("id")); + //控制维度 1 分部/2 部门/3 岗位 + String dimension = Util.null2String(map.get("dimension")); + sql = "select id,ec_company,ec_department,job_id,staff_num,permanent_num,lack_status from jcl_org_staff where plan_id = "+planid+" and delete_type = 0"; + rs.execute(sql); + while (rs.next()){ + //编制信息id + String id = Util.null2String(rs.getString("id")); + //分部id + String subcompanyid = Util.null2String(rs.getString("ec_company")); + //部门id + String deptid = Util.null2String(rs.getString("ec_department")); + //岗位id + String job_id = Util.null2String(rs.getString("job_id")); + //编制数 + int staff_num = Util.getIntValue(rs.getString("staff_num"),0); + + + + //lack_status 缺编状态 1缺编,2满编,3超编 + + if("1".equals(dimension)){ + //分部维度 + updateOrgPermanentNumBySubCom(id,subcompanyid,staff_num); + }else if("2".equals(dimension)){ + //部门维度 + updateOrgPermanentNumByDept(id,deptid,staff_num); + }else if("3".equals(dimension)){ + //岗位维度 + + } + + + + } + } + } + + /** + * @Description: 更新编制信息的 在编数 编制状态 + * @Author: wangj + */ + private void updateOrgPermanentNumByDept(String id,String deptid,int staff_num){ + RecordSet rs = new RecordSet(); + //统计该部门以及所有下级部门的人员-用工性质 + int permanent_num = 0; + + permanent_num = getOrgPermanentNumByDept(deptid); + + //lack_status 缺编状态 1缺编,2满编,3超编 + int lack_status = 1; + if(permanent_num < staff_num){ + lack_status = 1; + }else if(permanent_num == staff_num){ + lack_status = 2; + }else if(permanent_num > staff_num){ + lack_status = 3; + } + String sql = "update jcl_org_staff set permanent_num = ?,lack_status = ? where id = ?"; + rs.executeUpdate(sql,permanent_num,lack_status,id); + } + + + /** + * 获取部门以及所有下级部门人员数量 + * @param deptid + * @return + */ + private int getOrgPermanentNumByDept(String deptid){ + int num = 0; + RecordSet rs = new RecordSet(); + //获取部门以及所有下级部门id + String deptids = getAllSubDeptIds(deptid); + String sql = "select count(1) as sl from hrmresource where status < 4 and accounttype != 1 and departmentid in ("+deptids+")"; + rs.execute(sql); + while (rs.next()){ + num = Util.getIntValue(rs.getString("sl")); + } + return num; + } + + private String getAllSubDeptIds(String deptid){ + String deptids = deptid; + RecordSet rs = new RecordSet(); + String sql = "select id from hrmdepartment where (canceled = 0 or canceled is null) and supdepid = '"+deptid+"'"; + rs.execute(sql); + while (rs.next()){ + String id = Util.null2String(rs.getString("id")); + if("".equals(id)) continue; + + String subdeptids = getAllSubDeptIds(id); + deptids = deptids + "," +subdeptids; + } + deptids = CommUtils.distinctStringWithDot(deptids); + return deptids; + } + + /** + * 分部维度 更新在编人数 缺编状态 + * @param id + * @param subcomid + * @param staff_num + */ + private void updateOrgPermanentNumBySubCom(String id,String subcomid,int staff_num){ + RecordSet rs = new RecordSet(); + //统计该分部以及所有下级分部的人员 + int permanent_num = 0; + + permanent_num = getOrgPermanentNumBySubCom(subcomid); + + //lack_status 缺编状态 1缺编,2满编,3超编 + int lack_status = 1; + if(permanent_num < staff_num){ + lack_status = 1; + }else if(permanent_num == staff_num){ + lack_status = 2; + }else if(permanent_num > staff_num){ + lack_status = 3; + } + String sql = "update jcl_org_staff set permanent_num = ?,lack_status = ? where id = ?"; + rs.executeUpdate(sql,permanent_num,lack_status,id); + } + + private int getOrgPermanentNumBySubCom(String subcomid){ + int num = 0; + RecordSet rs = new RecordSet(); + //获取分部以及所有下级分部id + String subcomids = getAllSubComIds(subcomid); + String sql = "select count(1) as sl from hrmresource where status < 4 and accounttype != 1 and subcompanyid1 in ("+subcomids+")"; + rs.execute(sql); + while (rs.next()){ + num = Util.getIntValue(rs.getString("sl")); + } + return num; + } + + private String getAllSubComIds(String subcomid){ + String subcomids = subcomid; + RecordSet rs = new RecordSet(); + String sql = "select id from hrmsubcompany where (canceled = 0 or canceled is null) and supsubcomid = '"+subcomid+"'"; + rs.execute(sql); + while (rs.next()){ + String id = Util.null2String(rs.getString("id")); + if("".equals(id)) continue; + + String subids = getAllSubComIds(id); + subcomids = subcomids + "," +subids; + } + subcomids = CommUtils.distinctStringWithDot(subcomids); + return subcomids; + } + + + +} diff --git a/src/com/engine/shgw/service/OrgStaffService.java b/src/com/engine/shgw/service/OrgStaffService.java new file mode 100644 index 00000000..654f6ff9 --- /dev/null +++ b/src/com/engine/shgw/service/OrgStaffService.java @@ -0,0 +1,9 @@ +package com.engine.shgw.service; + + +import java.util.Map; + +public interface OrgStaffService { + + Map updateOrgStaffing(Map paramMap); +} diff --git a/src/com/engine/shgw/service/impl/OrgStaffServiceImpl.java b/src/com/engine/shgw/service/impl/OrgStaffServiceImpl.java new file mode 100644 index 00000000..ba40d4e0 --- /dev/null +++ b/src/com/engine/shgw/service/impl/OrgStaffServiceImpl.java @@ -0,0 +1,15 @@ +package com.engine.shgw.service.impl; + + +import com.engine.core.impl.Service; +import com.engine.shgw.cmd.UpdateOrgStaffingCmd; +import com.engine.shgw.service.OrgStaffService; + +import java.util.Map; + +public class OrgStaffServiceImpl extends Service implements OrgStaffService { + @Override + public Map updateOrgStaffing(Map paramMap) { + return commandExecutor.execute(new UpdateOrgStaffingCmd(paramMap)); + } +} diff --git a/src/com/engine/shgw/web/OrgStaffAction.java b/src/com/engine/shgw/web/OrgStaffAction.java new file mode 100644 index 00000000..0952e6e9 --- /dev/null +++ b/src/com/engine/shgw/web/OrgStaffAction.java @@ -0,0 +1,49 @@ +package com.engine.shgw.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.shgw.service.OrgStaffService; +import com.engine.shgw.service.impl.OrgStaffServiceImpl; +import weaver.general.BaseBean; +import weaver.templetecheck.upconfirmcheck.CheckService; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +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.HashMap; +import java.util.Map; + +/** + * 编制二开Action + * + * @author wangj + * @version 1.00版本 + * @Date 2024/5/14 + */ + +public class OrgStaffAction { + public OrgStaffService getService(){ + return ServiceUtil.getService(OrgStaffServiceImpl.class); + } + + @GET + @Path("/updateOrgStaffing") + @Produces(MediaType.TEXT_PLAIN) + public String updateOrgStaffing(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap(); + try { + apidatas.putAll(getService().updateOrgStaffing(ParamUtil.request2Map(request))); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } +}