diff --git a/src/com/engine/organization/entity/staff/param/StaffPersonCronParam.java b/src/com/engine/organization/entity/staff/param/StaffPersonCronParam.java new file mode 100644 index 00000000..abb23e33 --- /dev/null +++ b/src/com/engine/organization/entity/staff/param/StaffPersonCronParam.java @@ -0,0 +1,37 @@ +package com.engine.organization.entity.staff.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2024/7/16 11:34 AM + * @Description: + * @Version 1.0 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class StaffPersonCronParam { + + private Integer id; + + private Integer planId; + + private Integer ecCompany; + + private Integer ecDepartment; + + private Integer jobId; + + private Integer staffNum; + + private Integer permanentNum; + + private Integer freezeNum; + + private String controlDimension; +} diff --git a/src/com/engine/organization/entity/staff/vo/StaffPlanTableVO.java b/src/com/engine/organization/entity/staff/vo/StaffPlanTableVO.java index 1eac8564..c484c88f 100644 --- a/src/com/engine/organization/entity/staff/vo/StaffPlanTableVO.java +++ b/src/com/engine/organization/entity/staff/vo/StaffPlanTableVO.java @@ -36,7 +36,7 @@ public class StaffPlanTableVO { /** * 主键 */ - //@OrganizationTableColumn(column = "id", display = false) + @OrganizationTableColumn(labelId = 547327, text = "序号", width = "10%",column = "id") private Long id; /** * 是否被引用 diff --git a/src/com/engine/organization/service/impl/ChartServiceImpl.java b/src/com/engine/organization/service/impl/ChartServiceImpl.java index 770675e1..b3c3b360 100644 --- a/src/com/engine/organization/service/impl/ChartServiceImpl.java +++ b/src/com/engine/organization/service/impl/ChartServiceImpl.java @@ -733,10 +733,17 @@ public class ChartServiceImpl extends Service implements ChartService { " and b.plan_year = ?"); } - if ("false".equals(new BaseBean().getPropValue("hrmOrganization","accountType"))) { + BaseBean bb = new BaseBean(); + if ("false".equals(bb.getPropValue("hrmOrganization","accountType"))) { jobSql.append(" and accounttype != 1"); } + if ("true".equals(bb.getPropValue("hrmOrganization","filterEnable"))) { + String usekind = bb.getPropValue("hrmOrganization", "usekind"); + jobSql.append(" and usekind not in (").append(usekind).append(")"); + } + + rs.executeQuery(jobSql.toString()); rs.next(); stp.setOnJobNum(Util.getIntValue(rs.getString("count"))); diff --git a/src/com/engine/organization/service/impl/StaffServiceImpl.java b/src/com/engine/organization/service/impl/StaffServiceImpl.java index beeb8cb9..164a1820 100644 --- a/src/com/engine/organization/service/impl/StaffServiceImpl.java +++ b/src/com/engine/organization/service/impl/StaffServiceImpl.java @@ -512,10 +512,17 @@ public class StaffServiceImpl extends Service implements StaffService { sql += " and jobtitle = " + ecJobTitle; } - if ("false".equals(new BaseBean().getPropValue("hrmOrganization","accountType"))) { + BaseBean bb = new BaseBean(); + + if ("false".equals(bb.getPropValue("hrmOrganization","accountType"))) { sql += " and accounttype != 1"; } + if ("true".equals(bb.getPropValue("hrmOrganization","filterEnable"))) { + String usekind = bb.getPropValue("hrmOrganization", "usekind"); + sql += " and usekind not in ("+usekind+") "; + } + rs.executeQuery(sql); if (rs.next()) { staffPO.setPermanentNum(-1 == rs.getInt("num") ? 0 : rs.getInt("num")); diff --git a/src/weaver/interfaces/organization/cronjob/StaffPersonCron.java b/src/weaver/interfaces/organization/cronjob/StaffPersonCron.java new file mode 100644 index 00000000..7e40bcb7 --- /dev/null +++ b/src/weaver/interfaces/organization/cronjob/StaffPersonCron.java @@ -0,0 +1,135 @@ +package weaver.interfaces.organization.cronjob; + +import com.engine.organization.entity.job.po.JobPO; +import com.engine.organization.entity.staff.param.StaffPersonCronParam; +import com.engine.organization.entity.staff.po.StaffPO; +import com.engine.organization.mapper.job.JobMapper; +import com.engine.organization.util.OrganizationAssert; +import com.engine.organization.util.db.MapperProxyFactory; +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.schedule.BaseCronJob; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @Author liang.cheng + * @Date 2024/7/16 11:00 AM + * @Description: 编制信息在编人数定时任务更新 + * @Version 1.0 + */ +public class StaffPersonCron extends BaseCronJob { + + private String planId; + + public String getPlanId() { + return planId; + } + + public void setPlanId(String planId) { + this.planId = planId; + } + + @Override + public void execute() { + + //1.查询需要更新的数据 + RecordSet rs = new RecordSet(); + StringBuilder sb = new StringBuilder(); + sb.append("select a.id,a.plan_id,a.ec_company,a.ec_department,a.job_id,a.permanent_num,a.staff_num,a.freeze_num,b.control_dimension \n" + + " from jcl_org_staff a left join jcl_org_staffplan b on a.plan_id = b.id where a.delete_type = 0 "); + + OrganizationAssert.notNull(planId,"编制方案ID参数必填,多个以逗号隔开"); + + sb.append(" and a.plan_id in (").append(planId).append(") "); + + rs.executeQuery(sb.toString()); + List cronParamList = new ArrayList<>(); + + while (rs.next()) { + StaffPersonCronParam build = StaffPersonCronParam.builder() + .id(Util.getIntValue(rs.getString("id"))) + .planId(Util.getIntValue(rs.getString("plan_id"))) + .ecCompany(Util.getIntValue(rs.getString("ec_company"))) + .ecDepartment(Util.getIntValue(rs.getString("ec_department"))) + .jobId(Util.getIntValue(rs.getString("job_id"))) + .permanentNum(Util.getIntValue(rs.getString("permanent_num"))) + .staffNum(Util.getIntValue(rs.getString("staff_num"))) + .freezeNum(Util.getIntValue(rs.getString("freeze_num"))) + .controlDimension(Util.null2String(rs.getString("control_dimension"))) + .build(); + cronParamList.add(build); + } + + OrganizationAssert.notEmpty(cronParamList,"当前编制方案下无编制信息数据更新"); + List poList = new ArrayList<>(); + cronParamList.forEach(item -> { + + String sql = "select count(1) as num from hrmresource where status < 4"; + if ("1".equals(item.getControlDimension())){ + ArrayList subCompanyList = new ArrayList<>(); + subCompanyList.add(item.getEcCompany().toString()); + new SubCompanyComInfo().getSubCompanyLists(item.getEcCompany().toString(), subCompanyList); + sql += " and subcompanyid1 in (" + StringUtils.join(subCompanyList, ",") + ")"; + + }else if ("2".equals(item.getControlDimension())) { + ArrayList departmentList = new ArrayList<>(); + departmentList.add(item.getEcDepartment().toString()); + new DepartmentComInfo().getAllChildDeptByDepId(departmentList, item.getEcDepartment().toString()); + sql += " and departmentid in (" + StringUtils.join(departmentList, ",") + ")"; + + }else if ("3".equals(item.getControlDimension())) { + JobPO jobById = MapperProxyFactory.getProxy(JobMapper.class).getJobById(Long.valueOf(item.getJobId())); + if (null == jobById) { + return; + } + Integer ecJobTitle = jobById.getEcJobTitle(); + sql += " and subcompanyid1 = "+item.getEcCompany()+" and departmentid = "+item.getEcDepartment()+" and jobtitle = " + ecJobTitle; + } + + BaseBean bb = new BaseBean(); + + if ("false".equals(bb.getPropValue("hrmOrganization","accountType"))) { + sql += " and accounttype != 1"; + } + + if ("true".equals(bb.getPropValue("hrmOrganization","filterEnable"))) { + String usekind = bb.getPropValue("hrmOrganization", "usekind"); + sql += " and usekind not in ("+usekind+") "; + } + + rs.executeQuery(sql); + if (rs.next()) { + StaffPO build = StaffPO.builder().id(Long.valueOf(item.getId())).permanentNum(item.getPermanentNum()).build(); + build.setPermanentNum(-1 == rs.getInt("num") ? 0 : rs.getInt("num")); + List numberF = Arrays.asList(item.getFreezeNum(),build.getPermanentNum()); + int sum = numberF.stream() + .mapToInt(Integer::intValue) + .sum(); + build.setLackStatus(parseLackStatus(null == item.getStaffNum() ? 0 : item.getStaffNum(),sum)); + poList.add(build); + } + }); + + //2.更新数据 + poList.forEach(item -> rs.executeUpdate("update jcl_org_staff set permanent_num = ?,lack_status = ? where id = ?", + item.getPermanentNum(),item.getLackStatus(),item.getId())); + + } + + private static int parseLackStatus(int staffNum, int sums) { + if (staffNum == sums) { + return 2; + } + if (staffNum > sums) { + return 1; + } + return 3; + } +}