聚才林产品功能开发。。。

聚才林产品功能
Chengliang 6 months ago
parent 46f1c9fde1
commit b4dc69bd40

@ -0,0 +1,5 @@
#\u4EBA\u5458\u4EFB\u804C\u8BB0\u5F55\u8868
eModeId=336
#\u65F6\u70B9\u529F\u80FD\u542F\u7528\u65E5\u671F
startDate=

@ -0,0 +1,14 @@
package com.api.jclproduct.web;
import javax.ws.rs.Path;
/**
* @Author liang.cheng
* @Date 2024/10/22 4:12 PM
* @Description:
* @Version 1.0
*/
@Path("/jclproduct/employee")
public class EmploymentRecordAction extends com.engine.jclproduct.web.EmploymentRecordAction{
}

@ -0,0 +1,81 @@
package com.engine.jclproduct.entity.bo;
import cn.hutool.core.collection.CollectionUtil;
import com.engine.jclproduct.entity.po.EmploymentRecordPo;
import com.engine.jclproduct.entity.po.HrmresourcePo;
import com.engine.jclproduct.utils.EmploymentUtil;
import com.weaver.general.BaseBean;
import com.weaver.general.TimeUtil;
import weaver.common.DateUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author liang.cheng
* @Date 2024/10/22 5:31 PM
* @Description: TODO
* @Version 1.0
*/
public class EmploymentRecordBo {
public static List<EmploymentRecordPo> buildEmploymentRecordPo(List<HrmresourcePo> hrmresourcePos) {
List<EmploymentRecordPo> employmentRecordPos = new ArrayList<>();
if (CollectionUtil.isEmpty(hrmresourcePos)) {
return employmentRecordPos;
}
//失效日期默认最大值
return hrmresourcePos.stream().map(e-> {
Map<String, Integer> map = EmploymentUtil.dateSplitExample(e.getCompanyStartDate());
return EmploymentRecordPo.builder()
.userId(e.getUserId())
.workcode(e.getWorkcode())
.employeeStatus(e.getStatus())
.changType(EmploymentUtil.getChangeType(e.getStatus()))
.startDate(DateUtil.getCurrentDate())
.stopDate("9999-12-31") //失效日期默认最大值
.departmentId(e.getDepartmentId())
.subCompanyId(e.getSubcompanyId())
.superior(e.getManagerId())
.position(e.getJobTitle())
.companyStartDate(e.getCompanyStartDate())
.workyear(e.getCompanyWorkyear())
.entryDateYear(map.get("year"))
.entryDateMonth(map.get("month"))
.entryDateDay(map.get("day"))
.sex(e.getSex())
.birthday(e.getBirthday())
.build();}
).collect(Collectors.toList());
}
public static EmploymentRecordPo setEmploymentRecordPo(HrmresourcePo h){
Map<String, Integer> map = EmploymentUtil.dateSplitExample(h.getCompanyStartDate());
//处理其他参数
return EmploymentRecordPo.builder()
.userId(h.getUserId())
.workcode(h.getWorkcode())
.employeeStatus(h.getStatus())
.changType(EmploymentUtil.getChangeType(h.getStatus()))
.startDate(DateUtil.getCurrentDate())
.stopDate("9999-12-31")
.departmentId(h.getDepartmentId())
.subCompanyId(h.getSubcompanyId())
.superior(h.getManagerId())
.position(h.getJobTitle())
.companyStartDate(h.getCompanyStartDate())
.workyear(h.getCompanyWorkyear())
.entryDateYear(map.get("year"))
.entryDateMonth(map.get("month"))
.entryDateDay(map.get("day"))
.sex(h.getSex())
.birthday(h.getBirthday())
.build();
}
}

@ -0,0 +1,28 @@
package com.engine.jclproduct.entity.po;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @Author liang.cheng
* @Date 2024/10/23 3:43 PM
* @Description: TODO
* @Version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DataDutyPo {
private HrmresourcePo hrmresourceUpdate;
private HrmresourcePo hrmresourceInsert;
private List<EmploymentRecordPo> employmentRecordInsert;
}

@ -0,0 +1,88 @@
package com.engine.jclproduct.entity.po;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author liang.cheng
* @Date 2024/10/22 4:22 PM
* @Description: TODO
* @Version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class EmploymentRecordPo {
private Integer id;
private Integer userId;
private String workcode;
private Integer employeeStatus;
private Integer changType;
private String startDate;
private String stopDate;
private Integer departmentId;
private Integer subCompanyId;
private Integer superior;
private Integer position;
private Integer changeOldSuperior;
private Integer changeNewSuperior;
private Integer changeOldJob;
private Integer changeNewJob;
private Integer changeOldDept;
private Integer changeNewDept;
private String companyStartDate;
private String workyear;
private Integer entryDateYear;
private Integer entryDateMonth;
private Integer entryDateDay;
private String expectedLastWorkDate;
private String lastWorkDate;
private String probationStartDate;
private String probationActualStopDate;
private String regularizationDate;
private Integer sex;
private String birthday;
/**
*
*/
private Integer formModeId;
private String modeDataCreateDate;
private String modeDataCreateTime;
private Integer modeDataCreater;
}

@ -0,0 +1,52 @@
package com.engine.jclproduct.entity.po;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author liang.cheng
* @Date 2024/10/22 4:22 PM
* @Description: TODO
* @Version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class HrmresourcePo {
private Integer id;
private Integer userId;
private String workcode;
private Integer status;
private String companyStartDate;
private String companyWorkyear;
/**
*
*/
private String probationendDate;
private Integer sex;
private String birthday;
private Integer jobTitle;
private Integer departmentId;
private Integer subcompanyId;
private Integer managerId;
}

@ -0,0 +1,21 @@
package com.engine.jclproduct.service;
import java.util.Map;
/**
* @Author liang.cheng
* @Date 2024/10/22 4:23 PM
* @Description: TODO
* @Version 1.0
*/
public interface EmploymentRecordService {
/**
* @Description:
* @Author: liang.cheng
* @Date: 2024/10/22 4:36 PM
* @param: []
* @return: java.util.Map<java.lang.String,java.lang.Object>
*/
Map<String,Object> initPerson();
}

@ -0,0 +1,74 @@
package com.engine.jclproduct.service.impl;
import com.engine.core.impl.Service;
import com.engine.jclproduct.entity.bo.EmploymentRecordBo;
import com.engine.jclproduct.entity.po.EmploymentRecordPo;
import com.engine.jclproduct.entity.po.HrmresourcePo;
import com.engine.jclproduct.service.EmploymentRecordService;
import com.engine.jclproduct.utils.EmploymentUtil;
import com.weaver.file.ConfigOperator;
import com.weaver.general.BaseBean;
import com.weaver.general.TimeUtil;
import com.weaver.general.Util;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author liang.cheng
* @Date 2024/10/22 4:23 PM
* @Description: TODO
* @Version 1.0
*/
public class EmploymentRecordServiceImpl extends Service implements EmploymentRecordService {
@Override
public Map<String, Object> initPerson() {
Map<String, Object> map = new HashMap<>();
//1.任职记录表初始化数据 只执行一次
RecordSet rs = new RecordSet();
rs.executeQuery("select count(1) as num from uf_EmploymentRecord");
rs.next();
int num = Util.getIntValue(rs.getString("num"));
if (num > 0) {
map.put("msg","员工任职记录表已经初始化,不可重复执行");
return map;
}
//2.获取当前人员表人员信息
List<HrmresourcePo> hrmresourcePoList = EmploymentUtil.getHrmResources();
hrmresourcePoList.forEach(e-> rs.executeUpdate("insert into uf_hrmresource_day(userId,workcode,companystartdate,companyworkyear," +
" birthday,jobtitle,departmentid,subcompanyid,managerid,status,sex) values(?,?,?,?,?,?,?,?,?,?,?)",e.getUserId(),e.getWorkcode(),
e.getCompanyStartDate(),e.getCompanyWorkyear(),e.getBirthday(),e.getJobTitle(),e.getDepartmentId(),e.getSubcompanyId(),e.getManagerId(),e.getStatus(),e.getSex()));
map.put("msg1","人力资源中间表初始化完成,当前共"+hrmresourcePoList.size()+"条数据");
List<EmploymentRecordPo> employmentPos = EmploymentRecordBo.buildEmploymentRecordPo(hrmresourcePoList);
BaseBean bb = new BaseBean();
String formModeId = bb.getPropValue("jclproduct", "eModeId");
String modeDataCreateDate = DateUtil.getCurrentDate();
String modeDataCreateTime = TimeUtil.getOnlyCurrentTimeString();
ConfigOperator configOperator = new ConfigOperator();
configOperator.setProp("jclproduct.properties", "startDate", modeDataCreateDate);
employmentPos.forEach(e-> rs.executeUpdate("insert into uf_EmploymentRecord(userId,workcode,employeeStatus,changType,startDate,stopDate," +
" departmentId,subCompanyId,superior,position,companyStartDate,workyear,entryDateYear,entryDateMonth,entryDateDay," +
" sex,birthday,formmodeid,modeDataCreateDate,modeDataCreateTime,modeDataCreater) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
e.getUserId(),e.getWorkcode(),e.getEmployeeStatus(),e.getChangType(),e.getStartDate(),e.getStopDate(),e.getDepartmentId(),
e.getSubCompanyId(),e.getSuperior(),e.getPosition(),e.getCompanyStartDate(),e.getWorkyear(),e.getEntryDateYear(),e.getEntryDateMonth(),
e.getEntryDateDay(),e.getSex(),e.getBirthday(),formModeId,modeDataCreateDate,modeDataCreateTime,1));
map.put("msg2","员工任职记录表初始化完成,人力资源表共"+employmentPos.size()+"条数据");
return map;
}
}

@ -0,0 +1,124 @@
package com.engine.jclproduct.utils;
import com.engine.jclproduct.entity.po.EmploymentRecordPo;
import com.engine.jclproduct.entity.po.HrmresourcePo;
import com.weaver.general.Util;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author liang.cheng
* @Date 2024/10/23 10:14 AM
* @Description: TODO
* @Version 1.0
*/
public class EmploymentUtil {
/**
*
* @return
*/
public static Integer getChangeType(Integer status){
Integer changeType = null;
switch (status){
case 0: case 2: case 3:
changeType = 0;
break;
case 1:
changeType = 1;
break;
case 4: case 5: case 6: case 7:
changeType = 3;
break;
default:
break;
}
return changeType;
}
/**
*
* @param companysDate
* @return
*/
public static Map<String,Integer> dateSplitExample(String companysDate){
if ("".equals(companysDate)) {
companysDate = DateUtil.getCurrentDate();
}
LocalDate date = LocalDate.parse(companysDate);
return new HashMap<String,Integer>(4){
{
put("year",date.getYear());
put("month",date.getMonthValue());
put("day",date.getDayOfMonth());
}
};
}
/**
*
* @return
*/
public static List<HrmresourcePo> getHrmResources(){
List<HrmresourcePo> hrmresourcePoList = new ArrayList<>();
RecordSet rs = new RecordSet();
rs.executeQuery("select id,workcode,status,companystartdate,companyworkyear,sex,birthday,jobtitle,departmentid,subcompanyid1,managerid from hrmresource");
while (rs.next()) {
hrmresourcePoList.add(HrmresourcePo.builder()
.userId(Util.getIntValue(rs.getString("id")))
.workcode(Util.null2String(rs.getString("workcode")))
.status(Util.getIntValue(rs.getString("status")))
.companyStartDate(Util.null2String(rs.getString("companystartdate")))
.companyWorkyear(Util.null2String(rs.getString("companyworkyear")))
.sex(Util.getIntValue(rs.getString("sex")))
.birthday(Util.null2String(rs.getString("birthday")))
.jobTitle(Util.getIntValue(rs.getString("jobtitle")))
.departmentId(Util.getIntValue(rs.getString("departmentid")))
.subcompanyId(Util.getIntValue(rs.getString("subcompanyid1")))
.managerId(Util.getIntValue(rs.getString("managerid")))
.build());
}
return hrmresourcePoList;
}
/**
*
* @param recordPo
*/
public static void dutyStatusDate(EmploymentRecordPo recordPo) {
String currentDate = DateUtil.getCurrentDate();
switch (recordPo.getEmployeeStatus()){
case 0:
recordPo.setProbationStartDate(currentDate);
break;
case 1:
recordPo.setRegularizationDate(currentDate);
break;
case 4: case 5:
recordPo.setLastWorkDate(currentDate);
break;
case 7:
recordPo.setExpectedLastWorkDate(currentDate);
break;
default:
break;
}
}
}

@ -0,0 +1,49 @@
package com.engine.jclproduct.web;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.engine.common.util.ServiceUtil;
import com.engine.jclproduct.service.EmploymentRecordService;
import com.engine.jclproduct.service.impl.EmploymentRecordServiceImpl;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import java.util.HashMap;
import java.util.Map;
/**
* @Author liang.cheng
* @Date 2024/10/22 4:22 PM
* @Description: TODO
* @Version 1.0
*/
public class EmploymentRecordAction {
private EmploymentRecordService getService(User user) {
return ServiceUtil.getService(EmploymentRecordServiceImpl.class, user);
}
@GET
@Path("/initPerson")
@Produces(MediaType.TEXT_PLAIN)
public String resourceSnip(@Context HttpServletRequest request, @Context HttpServletResponse response){
Map<String, Object> data = new HashMap<>(8);
try {
User user = HrmUserVarify.getUser(request, response);
data.put("datas",getService(user).initPerson());
data.put("api_status", true);
} catch (Exception e) {
data.put("api_status", false);
data.put("msg", "catch exception : " + e.getMessage());
}
return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect);
}
}

@ -1,5 +1,11 @@
package test; package test;
import com.engine.jclproduct.utils.EmploymentUtil;
import com.weaver.general.TimeUtil;
import weaver.common.DateUtil;
import java.util.Map;
/** /**
* @Author weaver_cl * @Author weaver_cl
* @Description: * @Description:
@ -9,6 +15,7 @@ package test;
public class MainTest { public class MainTest {
public static void main(String[] args) { public static void main(String[] args) {
String modeDataCreateDate = DateUtil.getCurrentDate();
String modeDataCreateTime = TimeUtil.getOnlyCurrentTimeString();
} }
} }

@ -0,0 +1,174 @@
package weaver.interfaces.jclproduct;
import com.engine.jclproduct.entity.bo.EmploymentRecordBo;
import com.engine.jclproduct.entity.po.DataDutyPo;
import com.engine.jclproduct.entity.po.EmploymentRecordPo;
import com.engine.jclproduct.entity.po.HrmresourcePo;
import com.engine.jclproduct.utils.EmploymentUtil;
import com.weaver.file.ConfigOperator;
import com.weaver.general.BaseBean;
import com.weaver.general.TimeUtil;
import com.weaver.general.Util;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.interfaces.schedule.BaseCronJob;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @Author liang.cheng
* @Date 2024/10/22 4:24 PM
* @Description:
* @Version 1.0
*/
public class EmploymentRecordCrob extends BaseCronJob {
@Override
public void execute() {
RecordSet rs = new RecordSet();
//1.获取当前人员信息数据
List<HrmresourcePo> hrmresourcePoList = EmploymentUtil.getHrmResources();
//人员信息表更新集合
List<HrmresourcePo> hrmresourceUpdate = new ArrayList<>();
//人员信息表新增集合
List<HrmresourcePo> hrmresourceInsert = new ArrayList<>();
//任职记录表新增集合
List<EmploymentRecordPo> employmentRecordInsert = new ArrayList<>();
BaseBean bb = new BaseBean();
String formModeId = bb.getPropValue("jclproduct", "eModeId");
String modeDataCreateDate = DateUtil.getCurrentDate();
String modeDataCreateTime = TimeUtil.getOnlyCurrentTimeString();
ConfigOperator configOperator = new ConfigOperator();
configOperator.setProp("jclproduct.properties", "startDate", modeDataCreateDate);
//2.与人力资源中间表对比每一条人员数据 todo 数据量大的情况下线程处理
hrmresourcePoList.forEach(hrmresource->{
//1.入转调离 人员数据变化处理
DataDutyPo dataDutyPo = dutyDatasChange(hrmresource);
hrmresourceUpdate.add(dataDutyPo.getHrmresourceUpdate());
hrmresourceInsert.add(dataDutyPo.getHrmresourceInsert());
employmentRecordInsert.addAll(dataDutyPo.getEmploymentRecordInsert());
});
bb.writeLog("hrmresourceUpdate:"+hrmresourceUpdate.size());
bb.writeLog("hrmresourceInsert:"+hrmresourceInsert.size());
bb.writeLog("employmentRecordInsert:"+employmentRecordInsert.size());
//3.人员信息中间表
//更新
hrmresourceUpdate.forEach(e -> {
});
//插入
hrmresourceInsert.forEach(e->{
});
//4.人员任职记录表
employmentRecordInsert.forEach(e->{
//1.更新上一条数据stopDate
//2.新增数据
rs.executeUpdate("insert into uf_EmploymentRecord(userId,workcode,employeeStatus,changType,startDate,stopDate," +
" departmentId,subCompanyId,superior,position,changeOldSuperior,changeNewSuperior,changeOldJob,changeNewJob,changeOldDept,changeNewDept," +
" companyStartDate,workyear,entryDateYear,entryDateMonth,entryDateDay,expectedLastWorkDate,lastWorkDate,probationActualStopDate,regularizationDate," +
" sex,birthday,formmodeid,modeDataCreateDate,modeDataCreateTime,modeDataCreater) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
e.getUserId(),e.getWorkcode(),e.getEmployeeStatus(),e.getChangType(),e.getStartDate(),e.getStopDate(),e.getDepartmentId(),
e.getSubCompanyId(),e.getSuperior(),e.getPosition(),e.getChangeOldSuperior(),e.getChangeNewSuperior(),
e.getChangeOldJob(),e.getChangeNewJob(),e.getChangeOldDept(),e.getChangeNewDept(),e.getCompanyStartDate(),
e.getWorkyear(),e.getEntryDateYear(),e.getEntryDateMonth(),e.getEntryDateDay(), e.getExpectedLastWorkDate(),
e.getLastWorkDate(),e.getProbationActualStopDate(),e.getRegularizationDate(),e.getSex(),e.getBirthday(),formModeId,modeDataCreateDate,modeDataCreateTime,1);
});
}
/**
*
* @param hrmresource
*/
private DataDutyPo dutyDatasChange(HrmresourcePo hrmresource){
DataDutyPo dataDutyPo = new DataDutyPo();
RecordSet rs = new RecordSet();
//2.1 根据userid获取上一次人员中间表数据作对比
rs.executeQuery("select id,userid,workcode,status,companystartdate,companyworkyear,sex,birthday," +
" jobtitle,departmentid,subcompanyid,managerid from uf_hrmresource_day where userid = ?",hrmresource.getUserId());
if (rs.next()) {
//3.数据存在作比较
HrmresourcePo lastResource = HrmresourcePo.builder()
.id(Util.getIntValue(rs.getString("id")))
.status(Util.getIntValue(rs.getString("status")))
.companyWorkyear(Util.null2String(rs.getString("companyworkyear")))
.subcompanyId(Util.getIntValue(rs.getString("subcompanyid")))
.departmentId(Util.getIntValue(rs.getString("departmentid")))
.jobTitle(Util.getIntValue(rs.getString("jobtitle")))
.managerId(Util.getIntValue(rs.getString("managerid")))
.build();
//3.0 数据一致不做处理
//3.11 人员状态比较
List<EmploymentRecordPo> employmentRecords = new ArrayList<>();
if (!hrmresource.getStatus().equals(lastResource.getStatus())) {
//状态变更
EmploymentRecordPo employmentRecord = EmploymentRecordBo.setEmploymentRecordPo(hrmresource);
//记录各种状态下日期
EmploymentUtil.dutyStatusDate(employmentRecord);
employmentRecords.add(employmentRecord);
}
//3.12 调动状态比较(分别是 部门 岗位 人员上级 任一个条件发生变化 都记录为调动)
if (!hrmresource.getDepartmentId().equals(lastResource.getDepartmentId())
|| !hrmresource.getJobTitle().equals(lastResource.getJobTitle())
|| !hrmresource.getManagerId().equals(lastResource.getManagerId())){
EmploymentRecordPo employmentRecord = EmploymentRecordBo.setEmploymentRecordPo(hrmresource);
// 记录调动下新旧组织数据留痕
employmentRecord.setChangeOldDept(lastResource.getDepartmentId());
employmentRecord.setChangeOldJob(lastResource.getJobTitle());
employmentRecord.setChangeOldSuperior(lastResource.getManagerId());
employmentRecord.setChangeNewDept(hrmresource.getDepartmentId());
employmentRecord.setChangeNewJob(hrmresource.getJobTitle());
employmentRecord.setChangeNewSuperior(hrmresource.getManagerId());
//调动
employmentRecord.setChangType(3);
employmentRecords.add(employmentRecord);
}
//3.1 数据不一致,人员中间表更新
hrmresource.setId(lastResource.getId());
dataDutyPo.setHrmresourceUpdate(hrmresource);
//3.2 数据不一致,任职记录表新增
dataDutyPo.setEmploymentRecordInsert(employmentRecords);
}else {
//4.数据不存在作新增
//4.1 人员中间表新增
dataDutyPo.setHrmresourceInsert(hrmresource);
//4.2 任职记录表新增
List<EmploymentRecordPo> recordList = Collections.singletonList(EmploymentRecordBo.setEmploymentRecordPo(hrmresource));
dataDutyPo.setEmploymentRecordInsert(recordList);
}
return dataDutyPo;
}
}
Loading…
Cancel
Save