Commit d23d1c7b authored by fangxinjiang's avatar fangxinjiang

代码优化-fxj

parent efab44f3
...@@ -110,6 +110,23 @@ public class ContractAlertConfirmResVo implements Serializable { ...@@ -110,6 +110,23 @@ public class ContractAlertConfirmResVo implements Serializable {
@ExcelProperty("合同截止日期") @ExcelProperty("合同截止日期")
private Date contractEnd; private Date contractEnd;
/**
* 合同截止日期-续签
*/
@ExcelAttribute(name = "合同截止日期-续签" )
@Schema(description ="合同截止日期-续签")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("合同截止日期-续签")
private Date contractEndNew;
/**
* 合同开始日期-续签
*/
@ExcelAttribute(name = "合同开始日期-续签" )
@Schema(description ="合同开始日期-续签")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("合同开始日期-续签")
private Date contractStartNew;
/** /**
......
...@@ -108,4 +108,7 @@ public class EmployeeConstants { ...@@ -108,4 +108,7 @@ public class EmployeeConstants {
public static final String DATA_CONTRACT_EXPECTED_SIGN_TIME_ERROR = "待续签合同超期一个月,需走线下签"; public static final String DATA_CONTRACT_EXPECTED_SIGN_TIME_ERROR = "待续签合同超期一个月,需走线下签";
public static final String ERROR_TYPE_CONTRACT = "合同";
public static final String ERROR_DUPLICATE_CONFIRM = "已确认,请勿重复确认";
public static final String ERROR_NO_ALERT_FOUND = "未找到合同续签待办信息";
} }
...@@ -353,6 +353,13 @@ public class TEmployeeContractPreNewServiceImpl extends ServiceImpl<TEmployeeCon ...@@ -353,6 +353,13 @@ public class TEmployeeContractPreNewServiceImpl extends ServiceImpl<TEmployeeCon
if (null == preMap){ if (null == preMap){
preMap = new HashMap<>(); preMap = new HashMap<>();
} }
TAutoContractScheme scheme = contractSchemeMapper.selectById(preVo.getConfigId());
TAutoContractRuleInfo rule = null;
if (null != scheme){
rule = contractRuleInfoMapper.selectOne(Wrappers.<TAutoContractRuleInfo>query().lambda()
.eq(TAutoContractRuleInfo::getDeptNo,scheme.getDeptNo())
.last(CommonConstants.LAST_ONE_SQL));
}
TEmployeeContractPreNew pre = null; TEmployeeContractPreNew pre = null;
List<TEmployeeContractPreNew> preList = new ArrayList<>(); List<TEmployeeContractPreNew> preList = new ArrayList<>();
List<TEmployeeAutoRegistCheckVo> errorList = new ArrayList<>(); List<TEmployeeAutoRegistCheckVo> errorList = new ArrayList<>();
...@@ -378,196 +385,21 @@ public class TEmployeeContractPreNewServiceImpl extends ServiceImpl<TEmployeeCon ...@@ -378,196 +385,21 @@ public class TEmployeeContractPreNewServiceImpl extends ServiceImpl<TEmployeeCon
preVoTemp= new TEmployeeContractPreNewVo(); preVoTemp= new TEmployeeContractPreNewVo();
BeanCopyUtils.copyProperties(preVo,preVoTemp); BeanCopyUtils.copyProperties(preVo,preVoTemp);
alert = alertMap.get(contract.getId()); alert = alertMap.get(contract.getId());
if (null == alert){ temp = confirmMap.get(contract.getId());
checkVo = new TEmployeeAutoRegistCheckVo(); checkVo = check(preMap, scheme, rule, alert, temp, preVoTemp, contract);
checkVo.setEmployeeName(contract.getEmpName()); if (null != checkVo){
checkVo.setEmpIdcard(contract.getEmpIdcard()); // 修复 NPE 问题
checkVo.setDeptName(preVoTemp.getDeptName()); if (null != temp ) {
checkVo.setDeptNo(preVoTemp.getDeptNo()); temp.setDeptNo(null != alert?alert.getProjectNo():"");
checkVo.setType("合同"); temp.setDeptName(null != alert?alert.getProject():"");
checkVo.setErrorMsg("未找到合同续签待办信息");
temp = confirmMap.get(contract.getId());
if (null != temp){
temp.setDeptNo(alert.getProjectNo());
temp.setDeptName(alert.getProject());
temp.setErrorMsg(checkVo.getErrorMsg()); temp.setErrorMsg(checkVo.getErrorMsg());
temp.setPost(preVoTemp.getPost());
temp.setContractEndNew(preVoTemp.getContractEnd());
temp.setContractStartNew(preVoTemp.getContractStart());
checkVo.setConfirmVo(temp);
} }
checkVo.setConfirmVo(temp);
errorList.add(checkVo); errorList.add(checkVo);
continue; continue;
}
pre = new TEmployeeContractPreNew();
BeanCopyUtils.copyProperties(preVoTemp,pre);
preId = preMap.get(contract.getId());
if (Common.isNotNull(preId)){
checkVo = new TEmployeeAutoRegistCheckVo();
checkVo.setEmployeeName(contract.getEmpName());
checkVo.setEmpIdcard(contract.getEmpIdcard());
checkVo.setDeptName(preVoTemp.getDeptName());
checkVo.setDeptNo(preVoTemp.getDeptNo());
checkVo.setType("合同");
checkVo.setErrorMsg("已确认,请勿重复确认");
temp = confirmMap.get(contract.getId());
if (null != temp){
temp.setDeptNo(alert.getProjectNo());
temp.setDeptName(alert.getProject());
temp.setErrorMsg(checkVo.getErrorMsg());
}
checkVo.setConfirmVo(temp);
errorList.add(checkVo);
continue;
}
//初始化数据
innitError = initDateInfo(preVoTemp, contract);
if (Common.isNotNull(innitError)){
checkVo = new TEmployeeAutoRegistCheckVo();
checkVo.setEmployeeName(contract.getEmpName());
checkVo.setEmpIdcard(contract.getEmpIdcard());
checkVo.setDeptName(preVoTemp.getDeptName());
checkVo.setDeptNo(preVoTemp.getDeptNo());
checkVo.setType("合同");
checkVo.setErrorMsg(innitError);
temp = confirmMap.get(contract.getId());
if (null != temp){
temp.setDeptNo(alert.getProjectNo());
temp.setDeptName(alert.getProject());
temp.setErrorMsg(checkVo.getErrorMsg());
}
checkVo.setConfirmVo(temp);;
errorList.add(checkVo);
continue;
}
//判断两个合同时间是否重合
if (LocalDateUtil.hasOverlap(contract.getContractStart(),contract.getContractEnd(),preVoTemp.getContractStart(),preVoTemp.getContractEnd())){
checkVo = new TEmployeeAutoRegistCheckVo();
checkVo.setEmployeeName(contract.getEmpName());
checkVo.setEmpIdcard(contract.getEmpIdcard());
checkVo.setDeptName(preVoTemp.getDeptName());
checkVo.setDeptNo(preVoTemp.getDeptNo());
checkVo.setType("合同");
checkVo.setErrorMsg(EmployeeConstants.DATA_CONTRACT_OVERLAP);
temp = confirmMap.get(contract.getId());
if (null != temp){
temp.setDeptNo(alert.getProjectNo());
temp.setDeptName(alert.getProject());
temp.setErrorMsg(checkVo.getErrorMsg());
}
checkVo.setConfirmVo(temp);
errorList.add(checkVo);
continue;
}
//如果电子签是系统自动撤销对应的签署方式必须更新为 线下签,
if (CommonConstants.ZERO_STRING.equals(preVoTemp.getSignType())){
preNew = baseMapper.selectOne(Wrappers.<TEmployeeContractPreNew>query().lambda()
.eq(TEmployeeContractPreNew::getContractId,contract.getId()).last(CommonConstants.LAST_ONE_SQL));
if (null != preNew && CommonConstants.ELEVEN_STRING.equals(preNew.getProcessStatus())){
checkVo = new TEmployeeAutoRegistCheckVo();
checkVo.setEmployeeName(contract.getEmpName());
checkVo.setEmpIdcard(contract.getEmpIdcard());
checkVo.setDeptName(preVoTemp.getDeptName());
checkVo.setDeptNo(preVoTemp.getDeptNo());
checkVo.setType("合同");
checkVo.setErrorMsg(EmployeeConstants.DATA_CONTRACT_CANCEL_MUST_OFFLINE_SIGN);
temp = confirmMap.get(contract.getId());
if (null != temp){
temp.setDeptNo(alert.getProjectNo());
temp.setDeptName(alert.getProject());
temp.setErrorMsg(checkVo.getErrorMsg());
}
checkVo.setConfirmVo(temp);
errorList.add(checkVo);
continue;
}
}
//初始化岗位名称
TAutoContractScheme scheme = contractSchemeMapper.selectById(preVoTemp.getConfigId());
if (Common.isNotNull(preVoTemp.getConfigId()) && "固定岗位".equals(preVoTemp.getPost()) && null != scheme){
preVoTemp.setPost(scheme.getPost());
}else {
//等于上一份合同的岗位明细
preVoTemp.setPost(contract.getPost());
}
//处理预计发起时间
TAutoContractRuleInfo rule = null;
if (null != scheme){
rule = contractRuleInfoMapper.selectOne(Wrappers.<TAutoContractRuleInfo>query().lambda()
.eq(TAutoContractRuleInfo::getDeptNo,scheme.getDeptNo())
.last(CommonConstants.LAST_ONE_SQL));
}
if (null != rule && null != contract.getContractEnd()){
//上一份合同到期前第5个工作日: 20251229(含)前第5个工作日_25年12月23日,若是已过去的时间,则按照当前日期(含)往后继续找工作日,若超过一个月后了,
// 则也呈现,但是只能是线下签
// 计算往前3个工作日
if (null != rule && null != contract.getContractEnd()) {
// 解析合同结束日期
LocalDate contractEndDate = parseContractEndDate(contract.getContractEnd());
if (null == contractEndDate) {
checkVo = buildErrorCheckVo(contract, preVoTemp, "合同结束日期解析失败");
temp = confirmMap.get(contract.getId());
if (null != temp){
temp.setDeptNo(alert.getProjectNo());
temp.setDeptName(alert.getProject());
temp.setErrorMsg(checkVo.getErrorMsg());
}
checkVo.setConfirmVo(temp);
errorList.add(checkVo);
continue;
}
// 计算预计发起日期
LocalDate reminderDate = calculateReminderDate(rule.getRenewalDateType(), contractEndDate);
if (null == reminderDate) {
checkVo = buildErrorCheckVo(contract, preVoTemp, "预计发起时间初始化失败");
temp = confirmMap.get(contract.getId());
if (null != temp){
temp.setDeptNo(alert.getProjectNo());
temp.setDeptName(alert.getProject());
temp.setErrorMsg(checkVo.getErrorMsg());
}
checkVo.setConfirmVo(temp);
errorList.add(checkVo);
continue;
}
// 调整提醒日期为最近工作日 (0 上一份合同到期前第5个工作日的场景才调整)
if (CommonConstants.ZERO_STRING.equals(rule.getRenewalDateType())){
reminderDate = adjustToNearestWorkday(reminderDate);
}
// 检查电子签是否超期(和续签的合同开始日期进行比较)
if (null != preVoTemp.getContractStart() && CommonConstants.ZERO_STRING.equals(preVoTemp.getSignType())){
LocalDate contractStartDateNew = parseContractEndDate(preVoTemp.getContractStart());
if (null == contractEndDate) {
checkVo = buildErrorCheckVo(contract, preVoTemp, "续签合同开始日期解析失败");
temp = confirmMap.get(contract.getId());
if (null != temp){
temp.setDeptNo(alert.getProjectNo());
temp.setDeptName(alert.getProject());
temp.setErrorMsg(checkVo.getErrorMsg());
}
checkVo.setConfirmVo(temp);
errorList.add(checkVo);
continue;
}
if (reminderDate.isAfter(contractStartDateNew.plusMonths(1))) {
checkVo = buildErrorCheckVo(contract, preVoTemp, EmployeeConstants.DATA_CONTRACT_EXPECTED_SIGN_TIME_ERROR);
temp = confirmMap.get(contract.getId());
if (null != temp){
temp.setDeptNo(alert.getProjectNo());
temp.setDeptName(alert.getProject());
temp.setErrorMsg(checkVo.getErrorMsg());
}
checkVo.setConfirmVo(temp);
errorList.add(checkVo);
continue;
}
}
// 设置预计发起时间
preVoTemp.setExpectedCollectionTime(DateUtil.getDateByLocalDate(reminderDate));
}
} }
pre = new TEmployeeContractPreNew(); pre = new TEmployeeContractPreNew();
BeanCopyUtils.copyProperties(preVoTemp,pre); BeanCopyUtils.copyProperties(preVoTemp,pre);
...@@ -609,6 +441,93 @@ public class TEmployeeContractPreNewServiceImpl extends ServiceImpl<TEmployeeCon ...@@ -609,6 +441,93 @@ public class TEmployeeContractPreNewServiceImpl extends ServiceImpl<TEmployeeCon
return R.failed(CommonConstants.RESULT_DATA_FAIL); return R.failed(CommonConstants.RESULT_DATA_FAIL);
} }
} }
private TEmployeeAutoRegistCheckVo check(Map<String, String> preMap, TAutoContractScheme scheme,
TAutoContractRuleInfo rule,
TEmpContractAlert alert,
ContractAlertConfirmResVo temp,
TEmployeeContractPreNewVo preVoTemp,
TEmployeeContractInfo contract) {
TEmployeeContractPreNew preNew;
String preId;
TEmployeeAutoRegistCheckVo checkVo;
String innitError;
TEmployeeContractPreNew pre;
if (null == alert){
return buildErrorCheckVo(contract, preVoTemp, EmployeeConstants.ERROR_NO_ALERT_FOUND);
}
pre = new TEmployeeContractPreNew();
BeanCopyUtils.copyProperties(preVoTemp,pre);
preId = preMap.get(contract.getId());
if (Common.isNotNull(preId)){
return buildErrorCheckVo(contract, preVoTemp, EmployeeConstants.ERROR_DUPLICATE_CONFIRM);
}
//初始化数据
innitError = initDateInfo(preVoTemp, contract);
if (Common.isNotNull(innitError)){
return buildErrorCheckVo(contract, preVoTemp, innitError);
}
//判断两个合同时间是否重合
if (LocalDateUtil.hasOverlap(contract.getContractStart(), contract.getContractEnd(), preVoTemp.getContractStart(), preVoTemp.getContractEnd())){
return buildErrorCheckVo(contract, preVoTemp, EmployeeConstants.DATA_CONTRACT_OVERLAP);
}
//如果电子签是系统自动撤销对应的签署方式必须更新为 线下签,
if (CommonConstants.ZERO_STRING.equals(preVoTemp.getSignType())){
preNew = baseMapper.selectOne(Wrappers.<TEmployeeContractPreNew>query().lambda()
.eq(TEmployeeContractPreNew::getContractId, contract.getId()).last(CommonConstants.LAST_ONE_SQL));
if (null != preNew && CommonConstants.ELEVEN_STRING.equals(preNew.getProcessStatus())){
return buildErrorCheckVo(contract, preVoTemp, EmployeeConstants.DATA_CONTRACT_CANCEL_MUST_OFFLINE_SIGN);
}
}
//初始化岗位名称
if (Common.isNotNull(preVoTemp.getConfigId()) && "固定岗位".equals(preVoTemp.getPost()) && null != scheme){
preVoTemp.setPost(scheme.getPost());
}else {
//等于上一份合同的岗位明细
preVoTemp.setPost(contract.getPost());
}
//处理预计发起时间
//上一份合同到期前第5个工作日: 20251229(含)前第5个工作日_25年12月23日,若是已过去的时间,则按照当前日期(含)往后继续找工作日,若超过一个月后了,
// 则也呈现,但是只能是线下签
// 计算往前3个工作日
if (null != rule && null != contract.getContractEnd()) {
// 解析合同结束日期
LocalDate contractEndDate = parseContractEndDate(contract.getContractEnd());
if (null == contractEndDate) {
return buildErrorCheckVo(contract, preVoTemp, "合同结束日期解析失败");
}
// 计算预计发起日期
LocalDate reminderDate = calculateReminderDate(rule.getRenewalDateType(), contractEndDate);
if (null == reminderDate) {
return buildErrorCheckVo(contract, preVoTemp, "预计发起时间初始化失败");
}
// 调整提醒日期为最近工作日 (0 上一份合同到期前第5个工作日的场景才调整)
if (CommonConstants.ZERO_STRING.equals(rule.getRenewalDateType())){
reminderDate = adjustToNearestWorkday(reminderDate);
}
// 检查电子签是否超期(和续签的合同开始日期进行比较)
if (null != preVoTemp.getContractStart() && CommonConstants.ZERO_STRING.equals(preVoTemp.getSignType())){
LocalDate contractStartDateNew = parseContractEndDate(preVoTemp.getContractStart());
if (null == contractEndDate) {
return buildErrorCheckVo(contract, preVoTemp, "续签合同开始日期解析失败");
}
if (reminderDate.isAfter(contractStartDateNew.plusMonths(1))) {
return buildErrorCheckVo(contract, preVoTemp, EmployeeConstants.DATA_CONTRACT_EXPECTED_SIGN_TIME_ERROR);
}
}
// 设置预计发起时间
preVoTemp.setExpectedCollectionTime(DateUtil.getDateByLocalDate(reminderDate));
}
return null;
}
/** /**
* 解析合同结束日期 * 解析合同结束日期
*/ */
...@@ -645,11 +564,15 @@ public class TEmployeeContractPreNewServiceImpl extends ServiceImpl<TEmployeeCon ...@@ -645,11 +564,15 @@ public class TEmployeeContractPreNewServiceImpl extends ServiceImpl<TEmployeeCon
*/ */
private TEmployeeAutoRegistCheckVo buildErrorCheckVo(TEmployeeContractInfo contract, TEmployeeContractPreNewVo preVo, String errorMsg) { private TEmployeeAutoRegistCheckVo buildErrorCheckVo(TEmployeeContractInfo contract, TEmployeeContractPreNewVo preVo, String errorMsg) {
TEmployeeAutoRegistCheckVo checkVo = new TEmployeeAutoRegistCheckVo(); TEmployeeAutoRegistCheckVo checkVo = new TEmployeeAutoRegistCheckVo();
checkVo.setEmployeeName(contract.getEmpName()); if (null != contract){
checkVo.setEmpIdcard(contract.getEmpIdcard()); checkVo.setEmployeeName(contract.getEmpName());
checkVo.setDeptName(preVo.getDeptName()); checkVo.setEmpIdcard(contract.getEmpIdcard());
checkVo.setDeptNo(preVo.getDeptNo()); }
checkVo.setType("合同"); // 可配置化处理 if (null != preVo){
checkVo.setDeptName(preVo.getDeptName());
checkVo.setDeptNo(preVo.getDeptNo());
}
checkVo.setType(EmployeeConstants.ERROR_TYPE_CONTRACT); // 可配置化处理
checkVo.setErrorMsg(errorMsg); checkVo.setErrorMsg(errorMsg);
return checkVo; return checkVo;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment