142 lines
4.6 KiB
Java
142 lines
4.6 KiB
Java
package weaver.interfaces.hzzx.cronjob;
|
||
|
||
import com.engine.hzzx.conn.DataUtil;
|
||
import com.engine.hzzx.entity.RecruitingPlan;
|
||
import com.engine.hzzx.exception.CustomizeRunTimeException;
|
||
import org.apache.commons.collections.CollectionUtils;
|
||
import weaver.common.DateUtil;
|
||
import weaver.conn.RecordSet;
|
||
import weaver.interfaces.schedule.BaseCronJob;
|
||
|
||
import java.util.*;
|
||
|
||
/**
|
||
* @author:dxfeng
|
||
* @createTime: 2025/03/20
|
||
* @version: 1.0
|
||
*/
|
||
public class RecordUserCountJob extends BaseCronJob {
|
||
private static final String MAIN_TABLE = "uf_nmgbmzgrs";
|
||
private static final String OPERATE_ID = "1";
|
||
|
||
RecordSet rs = new RecordSet();
|
||
|
||
@Override
|
||
public void execute() {
|
||
try {
|
||
String sql = "select id from hrmdepartment where ISNULL(SUPDEPID,0)=0 and ISNULL(CANCELED,0)=0 ";
|
||
rs.executeQuery(sql);
|
||
List<RecruitingPlan> recruitingPlanList = new ArrayList<>();
|
||
while (rs.next()) {
|
||
fillDepartmentInfo(rs.getInt("id"), recruitingPlanList);
|
||
}
|
||
|
||
// 遍历recruitingPlanList,插入明细表数据
|
||
for (RecruitingPlan plan : recruitingPlanList) {
|
||
insertMainData(plan, DateUtil.getCurrentDate());
|
||
}
|
||
|
||
|
||
} catch (Exception e) {
|
||
throw new CustomizeRunTimeException(e.getMessage());
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 遍历部门,查询部门下在岗人数
|
||
*
|
||
* @param departmentId
|
||
* @param recruitingPlanList
|
||
* @return
|
||
*/
|
||
private int fillDepartmentInfo(Integer departmentId, List<RecruitingPlan> recruitingPlanList) {
|
||
if (departmentId == null || departmentId < 0) {
|
||
return 0;
|
||
}
|
||
// 查询当前部门下的在岗人数
|
||
int userCount = countUsersByDeptId(departmentId);
|
||
|
||
List<Integer> childDepartmentIdList = getChildDepartmentId(departmentId);
|
||
if (CollectionUtils.isNotEmpty(childDepartmentIdList)) {
|
||
for (Integer childDepartmentId : childDepartmentIdList) {
|
||
userCount += fillDepartmentInfo(childDepartmentId, recruitingPlanList);
|
||
}
|
||
}
|
||
recruitingPlanList.add(new RecruitingPlan(departmentId, userCount));
|
||
return userCount;
|
||
}
|
||
|
||
|
||
/**
|
||
* 插入主表数据
|
||
*
|
||
* @param plan
|
||
* @return
|
||
*/
|
||
private String insertMainData(RecruitingPlan plan,String year) {
|
||
rs.executeQuery("select id from " + MAIN_TABLE + " where nd = ? and bm = ? ",year , plan.getDepartmentId());
|
||
if(rs.next()){
|
||
Map<String, String> updateData = new HashMap<>();
|
||
DataUtil.buildModeUpdateFields(updateData, OPERATE_ID);
|
||
updateData.put("id", rs.getString("id"));
|
||
updateData.put("nmzgrs",plan.getOnJobNumber() + "");
|
||
}
|
||
|
||
// 插入基本数据
|
||
Map<String, String> insertData = new HashMap<>();
|
||
DataUtil.buildModeInsertFields(insertData, OPERATE_ID);
|
||
String uuid = UUID.randomUUID().toString();
|
||
insertData.put("modeuuid", uuid);
|
||
int formModeId = DataUtil.getModeIdByTableName(MAIN_TABLE);
|
||
insertData.put("formmodeid", String.valueOf(formModeId));
|
||
insertData.put("nd", year);
|
||
insertData.put("bm", plan.getDepartmentId() + "");
|
||
insertData.put("nmzgrs", plan.getOnJobNumber() + "");
|
||
|
||
DataUtil.insertData(insertData, MAIN_TABLE);
|
||
int id = DataUtil.refreshRight(uuid, MAIN_TABLE, formModeId, OPERATE_ID);
|
||
if (id > 0) {
|
||
return String.valueOf(id);
|
||
}
|
||
return "";
|
||
}
|
||
|
||
/**
|
||
* 查询子部门
|
||
*
|
||
* @param departmentId
|
||
* @return
|
||
*/
|
||
private List<Integer> getChildDepartmentId(Integer departmentId) {
|
||
List<Integer> departmentIdList = new ArrayList<>();
|
||
RecordSet rs = new RecordSet();
|
||
rs.executeQuery("select id from HrmDepartment where supdepid = ?", departmentId);
|
||
while (rs.next()) {
|
||
departmentIdList.add(rs.getInt("id"));
|
||
}
|
||
return departmentIdList;
|
||
}
|
||
|
||
|
||
/**
|
||
* 查询部门下在岗人数
|
||
*
|
||
* @param departmentId
|
||
* @return
|
||
*/
|
||
private int countUsersByDeptId(Integer departmentId) {
|
||
RecordSet rs = new RecordSet();
|
||
rs.executeQuery("select count(id) from hrmresource where departmentid = ?", departmentId);
|
||
if (rs.next()) {
|
||
return rs.getInt(1);
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
private int countPlanedNum(Integer departmentId) {
|
||
RecordSet rs = new RecordSet();
|
||
rs.executeQuery("select count(id) from uf_zpxqhztzaz where zpbm = ? and sqrq like '%" + DateUtil.getYear() + "%' ", departmentId);
|
||
return 0;
|
||
}
|
||
}
|