Commit 04955658 authored by fangxinjiang's avatar fangxinjiang

社保公积金自动化定时任务+社保公积金起缴日期+户截止日配置-fxj

parent 7ba27a0c
......@@ -68,7 +68,7 @@ public class TAutoFundRuleInfo extends BaseEntity {
@Schema(description = "是否自动触发派增(字典:0自动触发派增,1:手动派增)")
private String autoFlag;
/**
* 派单发起时间(字典:0:起缴日期当日)
* 派单发起时间(字典:0:起缴日期当日) 新:0:按起缴日期计算得出
*/
@ExcelAttribute(name = "派单发起时间", maxLength = 2)
@Length(max = 2, message = "派单发起时间不能超过2个字符")
......
......@@ -93,12 +93,14 @@ public class TAutoFundRuleRel extends BaseEntity {
@Schema(description = "公积金单位个人比例是否一致(0-是,1-否)")
private String fundPerFlag;
/**
* 起缴日期类型:0 入职日期 1 入职满1年次月 2 人员自定义
* 起缴日期类型:0 入职日期 1 入职满个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月
* * 8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月
* 原:0 入职日期 1 入职满1年次月 2 人员自定义
*/
@ExcelAttribute(name = "起缴日期类型", maxLength = 2)
@Length(max = 2, message = "起缴日期类型不能超过2个字符")
@ExcelProperty("起缴日期类型")
@Schema(description = "起缴日期类型:0 入职日期 1 入职满1年次月 2 人员自定义")
@Schema(description = "起缴日期类型:0 入职日期 1 入职满个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月 8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月 ")
private String fundDateType;
/**
* 缴纳基数类型:0最低、1自定义、2最高、3固定基数
......
......@@ -67,12 +67,12 @@ public class TAutoSocialRuleInfo extends BaseEntity {
@Schema(description = "是否自动触发派增(字典:0自动触发派增,1:手动派增)")
private String autoFlag;
/**
* 派单发起时间(字典::0:入职满1个月...入职满6个月)
* 派单发起时间(字典::0:入职满1个月...入职满6个月) 新:6:按起缴日期计算得出
*/
@ExcelAttribute(name = "派单发起时间", maxLength = 2,isNotEmpty = false, errorInfo = "派单发起时间不能为空")
@Length(max = 2, message = "派单发起时间不能超过2个字符")
@ExcelProperty("派单发起时间")
@Schema(description = "派单发起时间(字典::0:入职满1个月...入职满6个月)")
@Schema(description = "派单发起时间(字典::0:入职满1个月...入职满6个月 6:按起缴日期计算得出)")
private String startPeriod;
/**
* 派单发起具体时间字典:0:15:20
......
......@@ -94,12 +94,14 @@ public class TAutoSocialRuleRel extends BaseEntity {
@Schema(description = "社保起缴日期是否一致(0-是,1-否)")
private String socialDateFlag;
/**
* 起缴日期:0 入职日期
* 起缴日期类型:0 入职日期 1 入职满个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月
* 8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月
* 原:0 入职日期
*/
@ExcelAttribute(name = "起缴日期", maxLength = 2)
@Length(max = 2, message = "起缴日期不能超过2个字符")
@ExcelProperty("起缴日期")
@Schema(description = "起缴日期:0 入职日期")
@ExcelAttribute(name = "起缴日期类型", maxLength = 2)
@Length(max = 2, message = "起缴日期类型不能超过2个字符")
@ExcelProperty("起缴日期类型")
@Schema(description = "起缴日期类型:0 入职日期 1 入职满个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月 8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月")
private String socialDateType;
/**
* 缴纳类型:0最低、1自定义、2最高
......
......@@ -270,14 +270,25 @@ public class TDispatchInfoPreVo extends RowIndex implements Serializable {
private String registerId;
/**
* 起缴日期类型:0 入职日期 1 入职满1年次月 2 人员自定义
* 起缴日期类型:0 入职日期 1 入职满1个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月 8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月
* 原:0 入职日期 1 入职满1年次月 2 人员自定义
*/
@ExcelAttribute(name = "起缴日期类型", maxLength = 2)
@Length(max = 2, message = "起缴日期类型不能超过2个字符")
@ExcelProperty("起缴日期类型")
@Schema(description = "起缴日期类型:0 入职日期 1 入职满1年次月 2 人员自定义")
@Schema(description = "起缴日期类型:0 入职日期 1 入职满1个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月 8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月")
private String fundDateType;
/**
* 起缴日期类型:0 入职日期 1 入职满1个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月 8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月
* 原:0 入职日期 1 入职满1年次月 2 人员自定义
*/
@ExcelAttribute(name = "起缴日期类型", maxLength = 2)
@Length(max = 2, message = "起缴日期类型不能超过2个字符")
@ExcelProperty("起缴日期类型")
@Schema(description = "起缴日期类型:0 入职日期 1 入职满1个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月 8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月")
private String socialDateType;
/**
* 公积金单位个人比例是否一致(0-是,1-否)
*/
......
......@@ -1090,9 +1090,30 @@ public class TEmployeePreLogServiceImpl extends ServiceImpl<TEmployeePreLogMappe
preVo.setTypeSub(CommonConstants.ZERO_STRING);
preVo.setProcessStatus(CommonConstants.ZERO_STRING);
preVo.setDispatchItem("养老、医疗、生育、失业、工伤、大病");
if (CommonConstants.ZERO_STRING.equals(preVo.getIsCreateDate()) && Common.isEmpty(preVo.getSocialStartDate())) {
preVo.setSocialStartDate(pre.getJoinLeaveDate());
if (CommonConstants.ZERO_STRING.equals(preVo.getIsCreateDate())) {
//原社保起缴日期类型为 0 入职日期 新:0 入职日期 1 入职满1个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月
// 6 入职满6个月 7 入职满7个月 8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月
if (Common.isEmpty(preVo.getSocialStartDate())) {
if (Common.isNotNull(preVo.getSocialDateType())){
TEmployeeContractDateVo vo = new TEmployeeContractDateVo();
vo.setMonthAfter(Integer.parseInt(preVo.getSocialDateType()));
vo.setYearAfter(0);
vo.setRegistDate(pre.getJoinLeaveDate());
Date date = this.addYearsMonths(vo);
preVo.setSocialStartDate(date);
}else {
preVo.setSocialStartDate(pre.getJoinLeaveDate());
}
}
preVo.setBigailmentStart(preVo.getSocialStartDate());
preVo.setPensionStart(preVo.getSocialStartDate());
preVo.setMedicalStart(preVo.getSocialStartDate());
preVo.setBirthStart(preVo.getSocialStartDate());
preVo.setWorkInjuryStart(preVo.getSocialStartDate());
preVo.setUnemployStart(preVo.getSocialStartDate());
preVo.setSocialStartDate(preVo.getSocialStartDate());
}
}
//公积金待购买数据初始化
......
......@@ -1892,6 +1892,38 @@ public class DateUtil {
}
}
/**
* 设置日期中的天
*
* @param date 原始日期
* @param day 要设置的天数
* @return 修改后的日期
*/
public static Date setDayByDate(Date date, int day) {
Calendar cal = Calendar.getInstance();
if (date != null) {
cal.setTime(date);
} else {
log.warn("Input date is null, will use current date");
return null;
}
// 对day参数进行基本的有效性检查
if (day < 1 || day > 31) {
log.warn("Day must be between 1 and 31, but found: " + day);
return null;
}
// 如果day大于当月最大天数,则将day设置为当月最大天数,如2月为28日,但是day为31,则将day设置为当月最大天数28
int maxDayOfMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
if (day > maxDayOfMonth) {
day = maxDayOfMonth;
}
cal.set(Calendar.DAY_OF_MONTH, day);
return cal.getTime();
}
public static boolean isDate(String dateText) {
if (dateText == null) {
return true;
......@@ -1937,4 +1969,18 @@ public class DateUtil {
}
return false;
}
/**
* @Author fxj
* @Description 判断 日期 date 是否在 registDate 之后,在返回true,否则返回false
* @Date 15:10 2025/12/12
* @Param
* @return
**/
public static boolean isAfter(Date date, Date registDate) {
if (date.getTime() > registDate.getTime()) {
return true;
}
return false;
}
}
......@@ -58,4 +58,8 @@ public class BaseSearchVO implements Serializable {
private String resultIdFour;
private String resultIdFourStatus;
private String name;
private String type;
}
......@@ -432,4 +432,19 @@ public class SocialDaprUtils {
return res;
}
/**
* @Author fxj
* @Description 通过户名称及类型 获取到截止日,然后看是否为工作日,如果不是工作日则往前推,知道找到工作日,然后返回工作日
* @Date 14:22 2025/12/12
* @Param
* @return
**/
public R<THouseHoldLimitInnerVo> getWorkDayByDeadLineDay(BaseSearchVO paramVo) {
R<THouseHoldLimitInnerVo> res = HttpDaprUtil.invokeMethodPost(daprProperties.getAppUrl(),daprProperties.getAppId()
,"/thouseholdlimit/inner/checkCanBeHandleByDeadLineDay", paramVo, THouseHoldLimitInnerVo.class, SecurityConstants.FROM_IN);
if (Common.isEmpty(res)){
return R.failed("查询截止日对应的工作日信息失败!");
}
return res;
}
}
......@@ -35,6 +35,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.constant.ClientNameConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.SecurityConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.*;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.BaseSearchVO;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.UserPermissionVo;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.common.dapr.config.DaprArchivesProperties;
......@@ -47,6 +48,7 @@ import com.yifu.cloud.plus.v1.yifu.insurances.vo.TEmployeeInsurancePreVo;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.TEmployeeInsuranceSelectVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.SysBaseSetInfoVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.TEmployeeInsuranceWorkDayVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.THouseHoldLimitInnerVo;
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.BeanUtils;
......@@ -63,6 +65,7 @@ import java.net.URLEncoder;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.*;
import java.util.regex.Matcher;
......@@ -774,7 +777,7 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
return R.ok();
}
private void initFundPreInfo(EmployeeRegistration registration, TDispatchInfoPreVo preVo, YifuUser user, String id) {
private void initFundPreInfo(EmployeeRegistration registration, TDispatchInfoPreVo preVo, YifuUser user, String id) throws ParseException {
preVo.setRegisterId(id);
preVo.setCustomerUsername(registration.getCustomerUsernameNew());
preVo.setCustomerUserLoginName(null != registration.getCustomerUserLoginNameNew()
......@@ -794,97 +797,131 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
preVo.setProcessStatus(CommonConstants.ZERO_STRING);
preVo.setDispatchItem("公积金");
//如果公积金起缴日期为空需要初始化--只有批量确认时才会走到这里
initFundStartDate(registration, preVo);
initFundStartDate(preVo);
//如果自动触发派增为是,计算派单发起时间和派单确认时间
if (Common.isNotNull(preVo.getIsAutoDis()) && CommonConstants.ZERO_STRING.equals(preVo.getIsAutoDis())
&& Common.isNotNull(preVo.getExpectedCollectionType())) {
TEmployeeContractDateVo vo = new TEmployeeContractDateVo();
//接收方式 0项目配置 1自定义
if (CommonConstants.ONE_STRING.equals(preVo.getReceiveType())){
vo.setMonthAfter(CommonConstants.ZERO_INT);
vo.setYearAfter(0);
vo.setRegistDate(preVo.getFundStartDate());
}else {
if (null == preVo.getFundStartDate()){
//先计算起缴日期
if (CommonConstants.ZERO_STRING.equals(preVo.getFundDateType())){
//用户选择起缴日期类型为入职日期,以入职日期为基准
vo.setMonthAfter(CommonConstants.ZERO_INT);
vo.setYearAfter(0);
vo.setRegistDate(registration.getJoinLeaveDate());
}else if (CommonConstants.ONE_STRING.equals(preVo.getFundDateType())){
//用户选择起缴日期类型为入职满一年次月,以入职日期为基准 加上年月调整
vo.setMonthAfter(CommonConstants.ONE_INT);
vo.setYearAfter(CommonConstants.ONE_INT);
vo.setRegistDate(registration.getJoinLeaveDate());
}else if (CommonConstants.TWO_STRING.equals(preVo.getFundDateType())){
//用户自定义取值用户填写的起缴日期为基准
vo.setMonthAfter(CommonConstants.ZERO_INT);
vo.setYearAfter(0);
vo.setRegistDate(preVo.getFundStartDate());
}
}else {
vo.setMonthAfter(CommonConstants.ZERO_INT);
vo.setYearAfter(0);
vo.setRegistDate(preVo.getFundStartDate());
}
&& Common.isNotNull(preVo.getExpectedCollectionType())
&& null == preVo.getExpectedCollectionTime()
&& null == preVo.getExpectedConfirmTime()) {
initExpectedCollectionTime(preVo.getProvidentHouseholdName(), preVo.getFundStartDate(), preVo);
}
}
Date date = this.addYearsMonths(vo);
if (CommonConstants.ONE_STRING.equals(preVo.getFundDateType())){
date = DateUtil.getFirstDay(date);
}
TEmployeeInsuranceWorkDayVo dayVo = new TEmployeeInsuranceWorkDayVo();
dayVo.setType(CommonConstants.TWO_STRING);
dayVo.setRegistDate(date);
dayVo.setRegistType(0);
R<TEmployeeInsuranceWorkDayVo> dataR = socialDaprUtils.getContractAfterWorkDay(dayVo);
if (Common.isNotNull(dataR) && Common.isNotNull(dataR.getData())
&& Common.isNotNull(dataR.getData().getRegistDate())) {
preVo.setExpectedCollectionTime(dataR.getData().getRegistDate());
preVo.setExpectedConfirmTime(dataR.getData().getRegistDate());
}
/**
* @Author fxj
* @Description 初始化预计派单发起时间、预计派单确认时间
* @Date 17:06 2025/12/12
**/
private void initExpectedCollectionTime(String houseName, Date startDate, TDispatchInfoPreVo preVo2) throws ParseException {
//获取当前月是否可办理状态:获取办理截止日往前最近的工昨日,当前日及截止日前(含截止日)有工作日就是可办理
BaseSearchVO paramVo = new BaseSearchVO();
paramVo.setName(houseName);
paramVo.setType(CommonConstants.ZERO_STRING);
THouseHoldLimitInnerVo innerVo = null;
R<THouseHoldLimitInnerVo> resultR = socialDaprUtils.getWorkDayByDeadLineDay(paramVo);
if (!Common.isNotNull(resultR) && !Common.isNotNull(resultR.getData())){
throw new RuntimeException("获取截止日信息失败");
}else {
innerVo = resultR.getData();
}
boolean canBeHandle = innerVo.getCanBeHandle();
LocalTime currentTime = LocalTime.now();
LocalTime thresholdTime = LocalTime.of(15, 20);
boolean isBeforeThreshold = currentTime.isBefore(thresholdTime) || currentTime.equals(thresholdTime);
// 时间格式常量
String collectionTimeFormat = " 15:20";
String confirmTimeFormat = " 09:00";
//获取次月1号日期
Date nextMonthFirstDay = DateUtil.addMonthByDate(DateUtil.getDateByDayNum(0), 1);
nextMonthFirstDay = DateUtil.setDayByDate(nextMonthFirstDay, 1);
//获取起缴月份1号
Date startDateFirstDay = DateUtil.addDayByDate(startDate, 0);
startDateFirstDay = DateUtil.setDayByDate(startDateFirstDay, 1);
//获取起缴月-1日期
Date startDatePrevMonth = DateUtil.addMonthByDate(startDateFirstDay, -1);
//获取次日
Date tomorrow = DateUtil.getDateByDayNum(1);
//1.起缴月份为当月及之前的月份
if (!DateUtil.isAfter(startDate, DateUtil.getDateByDayNum(0))){
if (canBeHandle){
//发起时间不看工作日
if (isBeforeThreshold) {
Date today = new Date();
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
today, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
today, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
} else {
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
tomorrow, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
tomorrow, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
}
} else {
preVo.setExpectedCollectionTime(date);
preVo.setExpectedConfirmTime(date);
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
nextMonthFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
nextMonthFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
}
try {
preVo.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
preVo.getExpectedCollectionTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT) + " 15:20", DateUtil.DATETIME_PATTERN_MINUTE));
preVo.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
preVo.getExpectedCollectionTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT) + " 09:00", DateUtil.DATETIME_PATTERN_MINUTE));
} catch (ParseException e) {
log.error("初始化预计派单日期异常!", e);
throw new RuntimeException("初始化预计派单日期异常!"+e.getMessage());
}
//2.起缴月份为次月
else if (preVo2.getSocialStartDate().getTime() == DateUtil.addMonthByDate(DateUtil.getDateByDayNum(0), 1).getTime()){
//当月办次月生效
if (CommonConstants.ONE_STRING.equals(innerVo.getAddHandleRule())){
if (canBeHandle && isBeforeThreshold){
Date today = new Date();
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
today, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
today, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
} else {
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
nextMonthFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
nextMonthFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
}
//当月办当月生效
} else if (CommonConstants.ZERO_STRING.equals(innerVo.getAddHandleRule())){
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
nextMonthFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
nextMonthFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
}
}
//3.起缴月份为次月之后的月份
else if (preVo2.getSocialStartDate().getTime() > DateUtil.addMonthByDate(DateUtil.getDateByDayNum(0), 1).getTime()){
//当月办次月生效
if (CommonConstants.ONE_STRING.equals(innerVo.getAddHandleRule())){
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
startDatePrevMonth, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
startDatePrevMonth, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
} else if (CommonConstants.ZERO_STRING.equals(innerVo.getAddHandleRule())){
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
startDateFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
startDateFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
}
}
}
private void initFundStartDate(EmployeeRegistration registration, TDispatchInfoPreVo preVo) {
private void initFundStartDate(TDispatchInfoPreVo preVo) {
if (null == preVo.getFundStartDate()) {
TEmployeeContractDateVo initDate = new TEmployeeContractDateVo();
//先计算起缴日期 接收方式 0项目配置 自定义必须填写起缴日期
if (CommonConstants.ZERO_STRING.equals(preVo.getFundDateType())){
//用户选择起缴日期类型为入职日期,以入职日期为基准
initDate.setMonthAfter(CommonConstants.ZERO_INT);
initDate.setYearAfter(0);
initDate.setRegistDate(registration.getJoinLeaveDate());
}else if (CommonConstants.ONE_STRING.equals(preVo.getFundDateType())){
//用户选择起缴日期类型为入职满一年次月,以入职日期为基准 加上年月调整
initDate.setMonthAfter(CommonConstants.ONE_INT);
initDate.setYearAfter(CommonConstants.ONE_INT);
initDate.setRegistDate(registration.getJoinLeaveDate());
}else if (CommonConstants.TWO_STRING.equals(preVo.getFundDateType())){
//用户自定义取值用户填写的起缴日期为基准
initDate.setMonthAfter(CommonConstants.ZERO_INT);
initDate.setYearAfter(0);
initDate.setRegistDate(preVo.getFundStartDate());
}
//0 入职日期 1 入职满个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月
//8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月
initDate.setMonthAfter(Integer.parseInt(preVo.getFundDateType()));
initDate.setYearAfter(0);
initDate.setRegistDate(preVo.getJoinLeaveDate());
Date date = this.addYearsMonths(initDate);
if (CommonConstants.ONE_STRING.equals(preVo.getFundDateType())){
date = DateUtil.getFirstDay(date);
}
preVo.setFundStartDate(date);
}
}
......@@ -2030,40 +2067,36 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
preVo.setProcessStatus(CommonConstants.ZERO_STRING);
preVo.setDispatchItem("养老、医疗、生育、失业、工伤、大病");
if (CommonConstants.ZERO_STRING.equals(preVo.getIsCreateDate()) && Common.isEmpty(preVo.getSocialStartDate())) {
preVo.setBigailmentStart(registration.getJoinLeaveDate());
preVo.setPensionStart(registration.getJoinLeaveDate());
preVo.setMedicalStart(registration.getJoinLeaveDate());
preVo.setBirthStart(registration.getJoinLeaveDate());
preVo.setWorkInjuryStart(registration.getJoinLeaveDate());
preVo.setUnemployStart(registration.getJoinLeaveDate());
preVo.setSocialStartDate(registration.getJoinLeaveDate());
}
//如果自动触发派增为是,计算派单发起时间和派单确认时间
if (Common.isNotNull(preVo.getIsAutoDis()) && CommonConstants.ZERO_STRING.equals(preVo.getIsAutoDis())
&& Common.isNotNull(preVo.getExpectedCollectionType())) {
TEmployeeContractDateVo vo = new TEmployeeContractDateVo();
vo.setMonthAfter(Integer.parseInt(preVo.getExpectedCollectionType()));
vo.setYearAfter(0);
vo.setRegistDate(registration.getJoinLeaveDate());
Date date = this.addYearsMonths(vo);
TEmployeeInsuranceWorkDayVo dayVo = new TEmployeeInsuranceWorkDayVo();
dayVo.setType(CommonConstants.TWO_STRING);
dayVo.setRegistDate(date);
dayVo.setRegistType(0);
R<TEmployeeInsuranceWorkDayVo> dataR = socialDaprUtils.getContractAfterWorkDay(dayVo);
if (Common.isNotNull(dataR) && Common.isNotNull(dataR.getData())
&& Common.isNotNull(dataR.getData().getRegistDate())) {
preVo.setExpectedCollectionTime(dataR.getData().getRegistDate());
preVo.setExpectedConfirmTime(dataR.getData().getRegistDate());
} else {
preVo.setExpectedCollectionTime(date);
preVo.setExpectedConfirmTime(date);
if (CommonConstants.ZERO_STRING.equals(preVo.getIsCreateDate())) {
//原社保起缴日期类型为 0 入职日期 新:0 入职日期 1 入职满1个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月
// 6 入职满6个月 7 入职满7个月 8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月
if (Common.isEmpty(preVo.getSocialStartDate())) {
if (Common.isNotNull(preVo.getSocialDateType())){
TEmployeeContractDateVo vo = new TEmployeeContractDateVo();
vo.setMonthAfter(Integer.parseInt(preVo.getSocialDateType()));
vo.setYearAfter(0);
vo.setRegistDate(registration.getJoinLeaveDate());
Date date = this.addYearsMonths(vo);
preVo.setSocialStartDate(date);
}else {
preVo.setSocialStartDate(registration.getJoinLeaveDate());
}
}
preVo.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
preVo.getExpectedCollectionTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT) + " 15:20", DateUtil.DATETIME_PATTERN_MINUTE));
preVo.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
preVo.getExpectedCollectionTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT) + " 09:00", DateUtil.DATETIME_PATTERN_MINUTE));
preVo.setBigailmentStart(preVo.getSocialStartDate());
preVo.setPensionStart(preVo.getSocialStartDate());
preVo.setMedicalStart(preVo.getSocialStartDate());
preVo.setBirthStart(preVo.getSocialStartDate());
preVo.setWorkInjuryStart(preVo.getSocialStartDate());
preVo.setUnemployStart(preVo.getSocialStartDate());
preVo.setSocialStartDate(preVo.getSocialStartDate());
}
//如果自动触发派增为是,计算派单发起时间和派单确认时间,因为前端可以修改,所以只有没有值的时候才后端结算
if (Common.isNotNull(preVo.getIsAutoDis()) && CommonConstants.ZERO_STRING.equals(preVo.getIsAutoDis())
&& Common.isNotNull(preVo.getExpectedCollectionType())
&& null == preVo.getExpectedCollectionTime()
&& null == preVo.getExpectedConfirmTime()) {
//获取当前月是否可办理状态:获取办理截止日往前最近的工昨日,当前日及截止日前(含截止日)有工作日就是可办理
initExpectedCollectionTime(preVo.getSocialHouseholdName(), preVo.getSocialStartDate(), preVo);
}
}
......
......@@ -255,7 +255,7 @@ public class TEmployeeInsurancePreController {
* @date 2025-04-11 10:46:12
* @return void
*/
@SysLog("每天下午三点二十推送待派单数据")
@SysLog("每天下午三点二十或上午11点推送待派单数据")
@Inner
@PostMapping("/inner/pushDisConfrimInsurances")
public void pushDisConfrimInsurances() {
......
......@@ -649,7 +649,8 @@ public class TDispatchInfoPre extends BaseEntity {
private String fundPerFlag;
/**
* 起缴日期:0 入职日期
* 起缴日期类型:0 入职日期 1 入职满1个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月 8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月
* 原:0 入职日期 1 入职满1年次月 2 人员自定义
*/
@Length(max = 2, message = "起缴日期:0 入职日期 不能超过2 个字符")
@ExcelAttribute(name = "起缴日期:0 入职日期", maxLength = 2)
......@@ -666,4 +667,14 @@ public class TDispatchInfoPre extends BaseEntity {
@Schema(description = "公积金户ID")
private String configHouseId;
/**
* 起缴日期类型:0 入职日期 1 入职满1个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月 8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月
* 原:0 入职日期
*/
@ExcelAttribute(name = "起缴日期类型", maxLength = 2)
@Length(max = 2, message = "起缴日期类型不能超过2个字符")
@ExcelProperty("起缴日期类型")
@Schema(description = "起缴日期类型:0 入职日期 1 入职满个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月 8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月")
private String socialDateType;
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.social.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.RowIndex;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 户截止日配置表
*
* @author fxj
* @date 2025-12-11 14:19:54
*/
@Data
public class THouseHoldLimitInnerVo extends RowIndex implements Serializable {
/**
* 户名
*/
private String name;
/**
* 户类型:0社保 1公积金
*/
private String type;
/**
* 派增截止(日)
*/
private String deadLineDay;
/**
* 派增办理规则:0当月办当月生效 1 当月办次月生效
*/
private String addHandleRule;
/**
* date
*/
private Date wordDate;
/**
* 是否可办理 true:可办理 false:不可办理
*/
private Boolean canBeHandle;
}
......@@ -371,12 +371,12 @@ public class TDispatchInfoPreController {
}
/**
* 每天下午三点二十推送待购买数据 公积金可以通用
* 每天下午三点二十或三点或上午11点推送待购买数据 公积金可以通用
* @author huych
* @date 2025-10-11 18:51:58
* @return void
*/
@SysLog("每天下午三点二十推送待购买数据")
@SysLog("每天下午三点二十或三点或上午11点推送待购买数据")
@Inner
@PostMapping("/inner/pushDisConfrimSocial")
public void pushDisConfrimSocial() {
......
......@@ -24,11 +24,16 @@ import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.ErrorMessage;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.BaseSearchVO;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog;
import com.yifu.cloud.plus.v1.yifu.common.security.annotation.Inner;
import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import com.yifu.cloud.plus.v1.yifu.social.entity.THouseHoldLimit;
import com.yifu.cloud.plus.v1.yifu.social.service.THouseHoldLimitService;
import com.yifu.cloud.plus.v1.yifu.social.vo.TEmployeeInsuranceWorkDayVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.THouseHoldLimitExportVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.THouseHoldLimitInnerVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.THouseHoldLimitSearchVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
......@@ -85,6 +90,30 @@ public class THouseHoldLimitController {
public R<THouseHoldLimit> getById(@PathVariable("id") String id) {
return R.ok(tHouseHoldLimitService.getById(id));
}
/**
* 通过户名称及类型查询到具体截止日期后去看是否为工作日,如果不是工作日则往前推,知道找到工作日,然后返回工作日
* 如果找不到对应截止日期,则返回null
* @param paramVo:户名称 type: 0 社保、1 公积金
* @return R
*/
@Operation(summary = "户名称及类型查询可用的截止日期", description = "通过户名称及类型查询到具体截止日期后去查询是否为工作日,如果不是工作日则往前推,直到找到工作日,然后返回工作日")
@PostMapping("/getWorkDayByDeadLineDay")
public R<THouseHoldLimitInnerVo> getWorkDayByDeadLineDay(@RequestBody BaseSearchVO paramVo) {
return R.ok(tHouseHoldLimitService.getWorkDayByDeadLineDay(paramVo));
}
/**
* 通过户名称及类型查询到具体截止日期后判断是否为工作日,如果不是工作往前推,直到找到工作日,
* 然后和当前日期进行比较,如果当前日期大于截止日期则返回false,否则返回true
* @param paramVo:name 户名称 type: 0 社保、1 公积金
* @return R
*/
@Inner
@Operation(summary = "户名称及类型查询可用的截止日期", description = "通过户名称及类型查询到具体截止日期后去查询是否为工作日,如果不是工作日则往前推,直到找到工作日,然后返回工作日")
@PostMapping("/inner/getWorkDayByDeadLineDay")
public THouseHoldLimitInnerVo getWorkDayByDeadLineDayInner(@RequestBody BaseSearchVO paramVo) {
return tHouseHoldLimitService.getWorkDayByDeadLineDay(paramVo);
}
/**
* 新增户截止日配置表
......
......@@ -22,8 +22,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yifu.cloud.plus.v1.yifu.common.core.util.ErrorMessage;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.BaseSearchVO;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.social.entity.THouseHoldLimit;
import com.yifu.cloud.plus.v1.yifu.social.vo.TEmployeeInsuranceWorkDayVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.THouseHoldLimitExportVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.THouseHoldLimitInnerVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.THouseHoldLimitSearchVo;
import javax.servlet.http.HttpServletResponse;
......@@ -49,4 +53,5 @@ public interface THouseHoldLimitService extends IService<THouseHoldLimit> {
void listExport(HttpServletResponse response, THouseHoldLimitSearchVo searchVo);
THouseHoldLimitInnerVo getWorkDayByDeadLineDay(BaseSearchVO paramVo);
}
......@@ -16,6 +16,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.constant.ClientNameConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.SecurityConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.*;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.BaseSearchVO;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.common.dapr.util.ArchivesDaprUtil;
import com.yifu.cloud.plus.v1.yifu.common.dapr.util.UpmsDaprUtils;
......@@ -38,7 +39,9 @@ import org.springframework.web.client.RestTemplate;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
......@@ -74,6 +77,9 @@ public class TDispatchInfoPreServiceImpl extends ServiceImpl<TDispatchInfoPreMap
private final TSocialAutoLogService socialAutoLogService;
@Autowired
private final THouseHoldLimitService houseHoldLimitService;
/**
* 社保待购买表简单分页查询
* @param tDispatchInfoPre 社保待购买表
......@@ -215,26 +221,8 @@ public class TDispatchInfoPreServiceImpl extends ServiceImpl<TDispatchInfoPreMap
socialPreDetailService.remove(Wrappers.<TSocialPreDetail>lambdaQuery()
.eq(TSocialPreDetail::getRegisterId, preVo.getRegisterId()));
try {
// if (Common.isNotNull(preVo) && Common.isNotNull(preVo.getId())) {
// //更新逻辑
// TDispatchInfoPre pre = new TDispatchInfoPre();
// BeanUtils.copyProperties(preVo, pre);
// //时间格式转化
// if (Common.isNotNull(preVo.getExpectedCollectionTime())) {
// preVo.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
// preVo.getExpectedCollectionTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT) + " 15:20", DateUtil.DATETIME_PATTERN_MINUTE));
// pre.setExpectedCollectionTime(LocalDateTimeUtils.dateToLocalDateTime(preVo.getExpectedCollectionTime()));
// }
// if (Common.isNotNull(preVo.getExpectedConfirmTime())) {
// preVo.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
// preVo.getExpectedCollectionTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT) + " 09:00", DateUtil.DATETIME_PATTERN_MINUTE));
// pre.setExpectedConfirmTime(LocalDateTimeUtils.dateToLocalDateTime(preVo.getExpectedConfirmTime()));
// }
// baseMapper.updateById(pre);
// }
if (Common.isNotNull(preVo)
// && Common.isEmpty(preVo.getId())
) {
if (Common.isNotNull(preVo)) {
//判断是否存在社保待购买信息
TDispatchInfoPre preExit = baseMapper.selectOne(Wrappers.<TDispatchInfoPre>query().lambda()
.eq(TDispatchInfoPre::getRegisterId, preVo.getRegisterId())
......@@ -260,30 +248,9 @@ public class TDispatchInfoPreServiceImpl extends ServiceImpl<TDispatchInfoPreMap
}
//如果自动触发派增为是,计算派单发起时间和派单确认时间
if (Common.isNotNull(preVo.getIsAutoDis()) && CommonConstants.ZERO_STRING.equals(preVo.getIsAutoDis())
&& Common.isNotNull(preVo.getExpectedCollectionType()) && Common.isEmpty(preVo.getExpectedCollectionTime())) {
TEmployeeContractDateVo vo = new TEmployeeContractDateVo();
vo.setMonthAfter(Integer.parseInt(preVo.getExpectedCollectionType()));
vo.setYearAfter(0);
vo.setRegistDate(preVo.getJoinLeaveDate());
Date date = this.addYearsMonths(vo);
TEmployeeInsuranceWorkDayVo dayVo = new TEmployeeInsuranceWorkDayVo();
dayVo.setType(CommonConstants.TWO_STRING);
dayVo.setRegistDate(date);
dayVo.setRegistType(0);
TEmployeeInsuranceWorkDayVo dataR = tHolidayInfoService.selectBeforeOrAfterWorkDayCommon(dayVo);
if (Common.isNotNull(dataR) && Common.isNotNull(dataR.getPriDisDate())) {
preVo.setExpectedCollectionTime(dataR.getRegistDate());
preVo.setExpectedConfirmTime(dataR.getRegistDate());
} else {
preVo.setExpectedCollectionTime(date);
preVo.setExpectedConfirmTime(date);
}
preVo.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
preVo.getExpectedCollectionTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT) + " 15:20", DateUtil.DATETIME_PATTERN_MINUTE));
preVo.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
preVo.getExpectedCollectionTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT) + " 09:00", DateUtil.DATETIME_PATTERN_MINUTE));
pre.setExpectedCollectionTime(LocalDateTimeUtils.dateToLocalDateTime(preVo.getExpectedCollectionTime()));
pre.setExpectedConfirmTime(LocalDateTimeUtils.dateToLocalDateTime(preVo.getExpectedConfirmTime()));
&& Common.isNotNull(preVo.getExpectedCollectionType())
&& Common.isEmpty(preVo.getExpectedCollectionTime())) {
initExpectedCollectionTime(preVo.getSocialHouseholdName(), preVo.getSocialStartDate(), preVo);
}
if (Common.isNotNull(preExit)) {
pre.setId(preExit.getId());
......@@ -356,8 +323,10 @@ public class TDispatchInfoPreServiceImpl extends ServiceImpl<TDispatchInfoPreMap
}
//如果自动触发派增为是,计算派单发起时间和派单确认时间
if (Common.isNotNull(preVo.getIsAutoDis()) && CommonConstants.ZERO_STRING.equals(preVo.getIsAutoDis())
&& Common.isNotNull(preVo.getExpectedCollectionType())) {
TEmployeeContractDateVo vo = new TEmployeeContractDateVo();
&& Common.isNotNull(preVo.getExpectedCollectionType())
&& Common.isEmpty(preVo.getExpectedCollectionTime())) {
initExpectedCollectionTime(preVo.getProvidentHouseholdName(), preVo.getFundStartDate(), preVo);
/*TEmployeeContractDateVo vo = new TEmployeeContractDateVo();
//接收方式 0项目配置 1自定义
if (CommonConstants.ONE_STRING.equals(preVo.getReceiveType())){
vo.setMonthAfter(CommonConstants.ZERO_INT);
......@@ -410,7 +379,7 @@ public class TDispatchInfoPreServiceImpl extends ServiceImpl<TDispatchInfoPreMap
preVo.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
preVo.getExpectedCollectionTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT) + " 09:00", DateUtil.DATETIME_PATTERN_MINUTE));
pre.setExpectedCollectionTime(LocalDateTimeUtils.dateToLocalDateTime(preVo.getExpectedCollectionTime()));
pre.setExpectedConfirmTime(LocalDateTimeUtils.dateToLocalDateTime(preVo.getExpectedConfirmTime()));
pre.setExpectedConfirmTime(LocalDateTimeUtils.dateToLocalDateTime(preVo.getExpectedConfirmTime()));*/
}
if (Common.isNotNull(preExit)) {
pre.setId(preExit.getId());
......@@ -1029,4 +998,105 @@ public class TDispatchInfoPreServiceImpl extends ServiceImpl<TDispatchInfoPreMap
}
return false;
}
/**
* @Author fxj
* @Description 初始化预计派单发起时间、预计派单确认时间
* @Date 17:06 2025/12/12
**/
private void initExpectedCollectionTime(String houseName, Date startDate, TDispatchInfoPreVo preVo2) throws ParseException {
//获取当前月是否可办理状态:获取办理截止日往前最近的工昨日,当前日及截止日前(含截止日)有工作日就是可办理
BaseSearchVO paramVo = new BaseSearchVO();
paramVo.setName(houseName);
paramVo.setType(CommonConstants.ZERO_STRING);
THouseHoldLimitInnerVo innerVo = houseHoldLimitService.getWorkDayByDeadLineDay(paramVo);
if (Common.isEmpty(innerVo)){
throw new RuntimeException("获取截止日信息失败");
}
boolean canBeHandle = innerVo.getCanBeHandle();
LocalTime currentTime = LocalTime.now();
LocalTime thresholdTime = LocalTime.of(15, 20);
boolean isBeforeThreshold = currentTime.isBefore(thresholdTime) || currentTime.equals(thresholdTime);
// 时间格式常量
String collectionTimeFormat = " 15:20";
String confirmTimeFormat = " 09:00";
//获取次月1号日期
Date nextMonthFirstDay = DateUtil.addMonthByDate(DateUtil.getDateByDayNum(0), 1);
nextMonthFirstDay = DateUtil.setDayByDate(nextMonthFirstDay, 1);
//获取起缴月份1号
Date startDateFirstDay = DateUtil.addDayByDate(startDate, 0);
startDateFirstDay = DateUtil.setDayByDate(startDateFirstDay, 1);
//获取起缴月-1日期
Date startDatePrevMonth = DateUtil.addMonthByDate(startDateFirstDay, -1);
//获取次日
Date tomorrow = DateUtil.getDateByDayNum(1);
//1.起缴月份为当月及之前的月份
if (!DateUtil.isAfter(startDate, DateUtil.getDateByDayNum(0))){
if (canBeHandle){
//发起时间不看工作日
if (isBeforeThreshold) {
Date today = new Date();
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
today, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
today, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
} else {
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
tomorrow, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
tomorrow, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
}
} else {
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
nextMonthFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
nextMonthFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
}
}
//2.起缴月份为次月
else if (preVo2.getSocialStartDate().getTime() == DateUtil.addMonthByDate(DateUtil.getDateByDayNum(0), 1).getTime()){
//当月办次月生效
if (CommonConstants.ONE_STRING.equals(innerVo.getAddHandleRule())){
if (canBeHandle && isBeforeThreshold){
Date today = new Date();
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
today, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
today, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
} else {
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
nextMonthFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
nextMonthFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
}
//当月办当月生效
} else if (CommonConstants.ZERO_STRING.equals(innerVo.getAddHandleRule())){
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
nextMonthFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
nextMonthFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
}
}
//3.起缴月份为次月之后的月份
else if (preVo2.getSocialStartDate().getTime() > DateUtil.addMonthByDate(DateUtil.getDateByDayNum(0), 1).getTime()){
//当月办次月生效
if (CommonConstants.ONE_STRING.equals(innerVo.getAddHandleRule())){
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
startDatePrevMonth, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
startDatePrevMonth, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
} else if (CommonConstants.ZERO_STRING.equals(innerVo.getAddHandleRule())){
preVo2.setExpectedCollectionTime(DateUtil.parseDate(DateUtil.dateToString(
startDateFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + collectionTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
preVo2.setExpectedConfirmTime(DateUtil.parseDate(DateUtil.dateToString(
startDateFirstDay, DateUtil.ISO_EXPANDED_DATE_FORMAT) + confirmTimeFormat, DateUtil.DATETIME_PATTERN_MINUTE));
}
}
}
}
......@@ -16,8 +16,6 @@
*/
package com.yifu.cloud.plus.v1.yifu.social.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ArrayUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.context.AnalysisContext;
......@@ -27,23 +25,21 @@ import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.*;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.BaseSearchVO;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import com.yifu.cloud.plus.v1.yifu.social.entity.SysHouseHoldInfo;
import com.yifu.cloud.plus.v1.yifu.social.entity.THouseHoldLimit;
import com.yifu.cloud.plus.v1.yifu.social.mapper.SysHouseHoldInfoMapper;
import com.yifu.cloud.plus.v1.yifu.social.mapper.THouseHoldLimitMapper;
import com.yifu.cloud.plus.v1.yifu.social.service.THolidayInfoService;
import com.yifu.cloud.plus.v1.yifu.social.service.THouseHoldLimitService;
import com.yifu.cloud.plus.v1.yifu.social.vo.THouseHoldLimitExportVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.THouseHoldLimitSearchVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.THouseHoldLimitVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.*;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -54,6 +50,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
/**
......@@ -68,6 +65,8 @@ public class THouseHoldLimitServiceImpl extends ServiceImpl<THouseHoldLimitMappe
@Autowired
private SysHouseHoldInfoMapper sysHouseHoldInfoMapper;
@Autowired
private THolidayInfoService holidayInfoService;
/**
* 户截止日配置表简单分页查询
*
......@@ -370,4 +369,57 @@ public class THouseHoldLimitServiceImpl extends ServiceImpl<THouseHoldLimitMappe
private boolean insertExcel(THouseHoldLimit insert) {
return baseMapper.insert(insert) >= 1;
}
/**
* 通过户名称及类型查询到具体截止日期后去看是否为工作日,如果不是工作日则往前推,知道找到工作日,然后返回工作日
* 如果找不到对应截止日期,则返回null
* @param paramVo:户名称 type: 0 社保、1 公积金
* @return R true 当月能办理 false 当月不能办理
*/
@Override
public THouseHoldLimitInnerVo getWorkDayByDeadLineDay(BaseSearchVO paramVo) {
THouseHoldLimit houseHoldLimit = baseMapper.selectOne(Wrappers.<THouseHoldLimit>query().lambda()
.eq(THouseHoldLimit::getName,paramVo.getName())
.eq(THouseHoldLimit::getType,paramVo.getType())
.last(CommonConstants.LAST_ONE_SQL));
if (null == houseHoldLimit){
return null;
}
THouseHoldLimitInnerVo limitInnerVo = null;
String deadLineDay = houseHoldLimit.getDeadLineDay();
if (Common.isNotNull(deadLineDay)) {
try {
TEmployeeInsuranceWorkDayVo vo = new TEmployeeInsuranceWorkDayVo();
// 设置RegistDate为当前月份对应的截止日期deadLineDay
Date registDate = DateUtil.setDayByDate(new Date(), Integer.parseInt(deadLineDay));
if (null == registDate) {
return null;
}
vo.setRegistDate(registDate);
vo.setType(CommonConstants.ONE_STRING);
holidayInfoService.selectBeforeOrAfterWorkDay(vo);
limitInnerVo = new THouseHoldLimitInnerVo();
limitInnerVo.setCanBeHandle(false);
limitInnerVo.setDeadLineDay(deadLineDay);
limitInnerVo.setName(houseHoldLimit.getName());
limitInnerVo.setType(houseHoldLimit.getType());
limitInnerVo.setWordDate(vo.getRegistDate());
limitInnerVo.setAddHandleRule(houseHoldLimit.getAddHandleRule());
// 判断当前日期是否在截止日期之后
// 如果当前时间在截止日之后,则表示不可以办理,返回false,否则返回true
if (vo.getRegistDate() != null) {
LocalTime currentTime = LocalTime.now();
LocalTime thresholdTime = LocalTime.of(15, 20);
int dayOffset = (currentTime.isBefore(thresholdTime) || currentTime.equals(thresholdTime)) ? 0 : 1;
if (!DateUtil.isAfter(DateUtil.getDateByDayNum(dayOffset), vo.getRegistDate())) {
limitInnerVo.setCanBeHandle(true);
}
}
} catch (NumberFormatException e) {
// 截止日期不是有效数字,返回null表示无法确定
return null;
}
}
return limitInnerVo;
}
}
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