Commit a29790bb authored by huyuchen's avatar huyuchen

huych-社保自动化相关提交

parent 77dd2305
package com.yifu.cloud.plus.v1.yifu.archives.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class CustomerExpiringStatistics implements Serializable {
private String customerUserLoginname;
private int expiringCount = 0;
}
package com.yifu.cloud.plus.v1.yifu.archives.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class CustomerRevokeStatistics implements Serializable {
private String customerUserLoginname;
private int revokedCount = 0;
}
package com.yifu.cloud.plus.v1.yifu.archives.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class CustomerStatistics implements Serializable {
private String customerUserLoginname;
private String customerUsername;
private int initiatedCount = 0;
private int failedCount = 0;
private int electronicSignFailedCount = 0;
private int offlineSignFailedCount = 0;
}
......@@ -5,6 +5,7 @@ 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 org.hibernate.validator.constraints.Length;
import java.io.Serializable;
import java.math.BigDecimal;
......@@ -344,6 +345,14 @@ public class TDispatchInfoPreVo extends RowIndex implements Serializable {
@Schema(description = "合同签署状态 0已签署 1未签署")
@ExcelProperty("合同签署状态")
private String contractStatus;
/**
* 就职岗位
*/
@Length(max = 50, message = "就职岗位 不能超过50 个字符")
@ExcelAttribute(name = "就职岗位", maxLength = 50)
@Schema(description = "就职岗位")
@ExcelProperty("就职岗位")
private String position;
/**
* 合同id
*/
......
......@@ -248,4 +248,40 @@ public class TEmployeeContractPreController {
public Boolean checkContractPreIsExit(@RequestBody EmpProjectStatusVo vo) {
return tEmployeeContractPreService.checkContractPreIsExit(vo);
}
/**
* @Description: 每日晚23:00自动撤销超时电子签署任务
* @Author: huych
* @Date: 2025-10-15
* @return: R
**/
@Inner
@PostMapping("/inner/autoRevokeElectronicSign")
public R autoRevokeElectronicSign() {
return tEmployeeContractPreService.autoRevokeElectronicSign();
}
/**
* @Description: 每日早9点通知前端客服前一日撤销电子签署情况
* @Author: huych
* @Date: 2025-10-15
* @return: R
**/
@Inner
@PostMapping("/inner/notifyRevokedElectronicSign")
public R notifyRevokedElectronicSign() {
return tEmployeeContractPreService.notifyRevokedElectronicSign();
}
/**
* @Description: 每日早9点电子签合同即将超期提醒
* @Author: huych
* @Date: 2025-10-15
* @return: R
**/
@Inner
@PostMapping("/inner/electronicSignExpiringReminder")
public R electronicSignExpiringReminder() {
return tEmployeeContractPreService.electronicSignExpiringReminder();
}
}
......@@ -79,4 +79,22 @@ public interface TEmployeeContractPreService extends IService<TEmployeeContractP
Boolean checkContractPreIsExit(EmpProjectStatusVo vo);
/**
* 每日晚23:00自动撤销超时电子签署任务
* @return R
*/
R autoRevokeElectronicSign();
/**
* 每日早9点通知前端客服前一日撤销电子签署情况
* @return R
*/
R notifyRevokedElectronicSign();
/**
* 每日早9点电子签合同即将超期提醒
* @return R
*/
R electronicSignExpiringReminder();
}
......@@ -21,6 +21,7 @@ import com.fasc.open.api.exception.ApiException;
import com.fasc.open.api.v5_1.res.template.SignTemplateListInfo;
import com.yifu.cloud.plus.v1.yifu.archives.entity.*;
import com.yifu.cloud.plus.v1.yifu.archives.mapper.FddContractInfoMapper;
import com.yifu.cloud.plus.v1.yifu.archives.mapper.TEmployeeContractPreMapper;
import com.yifu.cloud.plus.v1.yifu.archives.service.*;
import com.yifu.cloud.plus.v1.yifu.archives.utils.FascUtil;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
......@@ -49,7 +50,7 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr
private final TFascPushLogService tFascPushLogService;
private final TFascTemplateService tFascTemplateService;
private final TFascTemplateDetailService tFascTemplateDetailService;
private final TEmployeeContractPreService tEmployeeContractPreService;
private final TEmployeeContractPreMapper tEmployeeContractPreMapper;
@Override
public R<String> getTemplate(String templateName) throws ApiException {
......@@ -170,7 +171,7 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr
@Override
public R<String> submitContract(String id) throws ApiException {
// templateName 签署任务模板名称
TEmployeeContractPre contract = tEmployeeContractPreService.getById(id);
TEmployeeContractPre contract = tEmployeeContractPreMapper.selectById(id);
if (contract == null) {
return R.failed("未找到合同");
}
......@@ -194,7 +195,7 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr
}
// TODO - 判断是否入职超过1个月
R<String> requestInfo = fascUtil.submitContract(contract, tFascPushLogService, tEmployeeContractPreService);
R<String> requestInfo = fascUtil.submitContract(contract, tFascPushLogService, tEmployeeContractPreMapper);
return requestInfo;
}
......@@ -209,7 +210,7 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr
@Override
public R<String> cancelTask(String id) throws ApiException {
// templateName 签署任务模板名称
TEmployeeContractPre contract = tEmployeeContractPreService.getById(id);
TEmployeeContractPre contract = tEmployeeContractPreMapper.selectById(id);
if (contract == null) {
return R.failed("未找到合同");
}
......@@ -218,7 +219,7 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr
}
// TODO - 判断什么状态撤销等,需要产品定
return fascUtil.cancelTask(contract, tFascPushLogService, tEmployeeContractPreService);
return fascUtil.cancelTask(contract, tFascPushLogService, tEmployeeContractPreMapper);
}
......@@ -232,7 +233,7 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr
@Override
public R<String> urgeTask(String id) throws ApiException {
// templateName 签署任务模板名称
TEmployeeContractPre contract = tEmployeeContractPreService.getById(id);
TEmployeeContractPre contract = tEmployeeContractPreMapper.selectById(id);
if (contract == null) {
return R.failed("未找到合同");
}
......@@ -241,7 +242,7 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr
}
// TODO - 判断什么状态催办等,需要产品定
return fascUtil.urgeTask(contract, tFascPushLogService, tEmployeeContractPreService);
return fascUtil.urgeTask(contract, tFascPushLogService, tEmployeeContractPreMapper);
}
......
......@@ -26,7 +26,7 @@ import com.yifu.cloud.plus.v1.yifu.archives.entity.TEmployeeContractPre;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TFascPushLog;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TFascTemplate;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TFascTemplateDetail;
import com.yifu.cloud.plus.v1.yifu.archives.service.TEmployeeContractPreService;
import com.yifu.cloud.plus.v1.yifu.archives.mapper.TEmployeeContractPreMapper;
import com.yifu.cloud.plus.v1.yifu.archives.service.TFascPushLogService;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CacheConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
......@@ -313,7 +313,7 @@ public class FascUtil {
}
public R<String> submitContract(TEmployeeContractPre contract, TFascPushLogService tFascPushLogService
, TEmployeeContractPreService tEmployeeContractPreService) throws ApiException {
, TEmployeeContractPreMapper tEmployeeContractPreMapper) throws ApiException {
OpenApiClient openApiClient = new OpenApiClient(fascConfig.getAppId(), fascConfig.getAppSecret(), fascConfig.getAppUrl());
String accessToken = this.getFascToken(openApiClient);
OpenId openId = new OpenId();
......@@ -364,7 +364,7 @@ public class FascUtil {
sendValue = submitTask(requestId, openApiClient, accessToken);
if (R.isSuccess(sendValue)) {
// 电子签签署中
this.doSuccessContract(contract, tEmployeeContractPreService, requestId);
this.doSuccessContract(contract, tEmployeeContractPreMapper, requestId);
return R.ok();
} else {
msg = "第三步失败:提交任务失败:" + sendValue.getMsg();
......@@ -376,24 +376,24 @@ public class FascUtil {
msg = "第一步失败:" + res.getMsg();
}
}
this.doFailContract(contract, tEmployeeContractPreService, msg);
this.doFailContract(contract, tEmployeeContractPreMapper, msg);
return R.failed(msg);
}
// 发起失败,更新合同状态
private void doFailContract(TEmployeeContractPre contract, TEmployeeContractPreService tEmployeeContractPreService, String msg) {
private void doFailContract(TEmployeeContractPre contract, TEmployeeContractPreMapper tEmployeeContractPreMapper, String msg) {
contract.setProcessStatus(CommonConstants.dingleDigitStrArray[7]);
contract.setRequestMsg(msg);
tEmployeeContractPreService.updateById(contract);
tEmployeeContractPreMapper.updateById(contract);
}
// 发起成功,更新合同状态
private void doSuccessContract(TEmployeeContractPre contract, TEmployeeContractPreService tEmployeeContractPreService, String requestId) {
private void doSuccessContract(TEmployeeContractPre contract, TEmployeeContractPreMapper tEmployeeContractPreMapper, String requestId) {
// 电子签签署中
contract.setProcessStatus(CommonConstants.dingleDigitStrArray[6]);
contract.setRequestId(requestId);
contract.setRequestMsg("");
tEmployeeContractPreService.updateById(contract);
tEmployeeContractPreMapper.updateById(contract);
}
// 第二步:填写控件
......@@ -524,7 +524,7 @@ public class FascUtil {
// 撤销签署
public R<String> cancelTask(TEmployeeContractPre contract, TFascPushLogService tFascPushLogService
, TEmployeeContractPreService tEmployeeContractPreService) throws ApiException {
, TEmployeeContractPreMapper tEmployeeContractPreMapper) throws ApiException {
OpenApiClient openApiClient = new OpenApiClient(fascConfig.getAppId(), fascConfig.getAppSecret(), fascConfig.getAppUrl());
String accessToken = this.getFascToken(openApiClient);
......@@ -551,7 +551,7 @@ public class FascUtil {
contract.setProcessStatus(CommonConstants.dingleDigitStrArray[1]);
contract.setSignType(CommonConstants.dingleDigitStrArray[1]);
contract.setRequestMsg("");
tEmployeeContractPreService.updateById(contract);
tEmployeeContractPreMapper.updateById(contract);
return R.ok();
} else {
// 撤销签署失败原因为 已完成签署(处理的同时员工完成签署公司免验证签完成),则更新为签署完成的“待归档”状态。
......@@ -560,7 +560,7 @@ public class FascUtil {
contract.setRevokeReason(FascConstants.TIME_OUT_REASON);
}
contract.setRequestMsg(res.getMsg());
tEmployeeContractPreService.updateById(contract);
tEmployeeContractPreMapper.updateById(contract);
return R.failed(res.getMsg());
}
}
......@@ -570,7 +570,7 @@ public class FascUtil {
// 催办
public R<String> urgeTask(TEmployeeContractPre contract, TFascPushLogService tFascPushLogService
, TEmployeeContractPreService tEmployeeContractPreService) throws ApiException {
, TEmployeeContractPreMapper tEmployeeContractPreMapper) throws ApiException {
OpenApiClient openApiClient = new OpenApiClient(fascConfig.getAppId(), fascConfig.getAppSecret(), fascConfig.getAppUrl());
String accessToken = this.getFascToken(openApiClient);
......@@ -599,7 +599,7 @@ public class FascUtil {
return R.ok();
} else {
contract.setRequestMsg(res.getMsg());
tEmployeeContractPreService.updateById(contract);
tEmployeeContractPreMapper.updateById(contract);
return R.failed(res.getMsg());
}
}
......
......@@ -1713,6 +1713,7 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
preVo.setJoinLeaveDate(registration.getJoinLeaveDate());
preVo.setDeptNo(registration.getDeptNo());
preVo.setEmpName(registration.getEmployeeName());
preVo.setPosition(registration.getPosition());
preVo.setEmpIdcard(registration.getEmpIdcard());
preVo.setCreateBy(user.getId());
preVo.setCreateName(user.getNickname());
......
......@@ -123,4 +123,49 @@ public class ArchiveTask {
log.info("-------------每天刷新合同续签待待办信息到微信-定时任务结束------------");
}
/**
* @Author huych
* @Description 每日晚23:00自动撤销超时电子签署任务
* @Date 2025-10-15
* @Param
* @return
**/
public void autoRevokeElectronicSignTask() {
log.info("-------------每日晚23:00自动撤销超时电子签署任务-定时任务开始------------");
HttpDaprUtil.invokeMethodPost(daprArchivesProperties.getAppUrl(), daprArchivesProperties.getAppId(),
"/temployeecontractpre/inner/autoRevokeElectronicSign", "", Object.class,
SecurityConstants.FROM_IN);
log.info("-------------每日晚23:00自动撤销超时电子签署任务-定时任务结束------------");
}
/**
* @Author huych
* @Description 每日早9点通知前端客服前一日撤销电子签署情况
* @Date 2025-10-15
* @Param
* @return
**/
public void notifyRevokedElectronicSignTask() {
log.info("-------------每日早9点通知前端客服前一日撤销电子签署情况-定时任务开始------------");
HttpDaprUtil.invokeMethodPost(daprArchivesProperties.getAppUrl(), daprArchivesProperties.getAppId(),
"/temployeecontractpre/inner/notifyRevokedElectronicSign", "", Object.class,
SecurityConstants.FROM_IN);
log.info("-------------每日早9点通知前端客服前一日撤销电子签署情况-定时任务结束------------");
}
/**
* @Author huych
* @Description 每日早9点电子签合同即将超期提醒
* @Date 2025-10-15
* @Param
* @return
**/
public void electronicSignExpiringReminderTask() {
log.info("-------------每日早9点电子签合同即将超期提醒-定时任务开始------------");
HttpDaprUtil.invokeMethodPost(daprArchivesProperties.getAppUrl(), daprArchivesProperties.getAppId(),
"/temployeecontractpre/inner/electronicSignExpiringReminder", "", Object.class,
SecurityConstants.FROM_IN);
log.info("-------------每日早9点电子签合同即将超期提醒-定时任务结束------------");
}
}
\ No newline at end of file
......@@ -404,4 +404,13 @@ public class TDispatchInfoPre extends BaseEntity {
@Schema(description = "0未删除1删除")
private String deleteFlag;
/**
* 就职岗位
*/
@Length(max = 50, message = "就职岗位 不能超过50 个字符")
@ExcelAttribute(name = "就职岗位", maxLength = 50)
@Schema(description = "就职岗位")
@ExcelProperty("就职岗位")
private String position;
}
......@@ -148,8 +148,8 @@ public class TDispatchInfoPreController {
* @return
*/
@Operation(description = "社保待购买数量查询")
@GetMapping("/getListCount")
public R getListCount(TDispatchInfoPreSearchVo searchVo) {
@PostMapping("/getListCount")
public R getListCount(@RequestBody TDispatchInfoPreSearchVo searchVo) {
YifuUser user = SecurityUtils.getUser();
menuUtil.setAuthSql(user, searchVo);
return R.ok(tDispatchInfoPreService.getDispatchInfoCount(searchVo));
......
......@@ -466,7 +466,7 @@ public class TDispatchInfoPreServiceImpl extends ServiceImpl<TDispatchInfoPreMap
RestTemplate restTemplate = new RestTemplate();
Map<String, Object> requestMap = new HashMap<>();
Map<String, Object> textcard = new HashMap<>();
String authUrl = String.format(SecurityConstants.WX_GET_MESSAGE_AUTH_URL, wxConfig.getCorpid(), wxConfig.getDomainName() + "/auth/oauth/wxLogin", "05" + LoginName);
String authUrl = String.format(SecurityConstants.WX_GET_MESSAGE_AUTH_URL, wxConfig.getCorpid(), wxConfig.getDomainName() + "/auth/oauth/wxLogin", "67" + LoginName);
StringBuilder description = new StringBuilder();
String title = "作业自动化——社保派单发起失败提醒";
description.append("社保派单数:").append(sum).append("份,失败份数:").append(falureNum).append("份;").append("<br>");
......
......@@ -62,6 +62,7 @@
<result property="errorInfo" column="error_info"/>
<result property="errorBackInfo" column="error_back_info"/>
<result property="errorTime" column="error_time"/>
<result property="position" column="position"/>
</resultMap>
<resultMap id="tDispatchInfoPreExportMap" type="com.yifu.cloud.plus.v1.yifu.social.vo.TDispatchInfoPreExportVo">
......@@ -82,7 +83,7 @@
a.EMP_NAME,
a.EMP_IDCARD,
a.PROCESS_STATUS,
a.SETTLE_DOMAIN,
a.DEPT_ID,
a.SOCIAL_PROVINCE,
a.SOCIAL_CITY,
a.SOCIAL_TOWN,
......@@ -130,24 +131,24 @@
a.CREATE_NAME,
a.UPDATE_TIME,
a.CREATE_TIME,
a.DELETE_FLAG,error_info,error_time,a.DISPATCHER_ID,a.error_back_info
a.DELETE_FLAG,error_info,error_time,a.DISPATCHER_ID,a.error_back_info,a.position
</sql>
<sql id="tDispatchInfoPre_where">
<if test="tDispatchInfoPre != null">
<if test="tDispatchInfoPre.id != null and tDispatchInfoPre.id.trim() != ''">
AND a.ID = #{tDispatchInfoPre.id}
</if>
` <if test="tDispatchInfoPre.idList != null and tDispatchInfoPre.idList.size() > 0">
<if test="tDispatchInfoPre.idList != null and tDispatchInfoPre.idList.size() > 0">
and a.id in
<foreach collection="tDispatchInfoPre.idList" item="param" index="index" open="(" close=")"
separator=",">
#{param}
</foreach>
</if>`
</if>
<if test="tDispatchInfoPre.statusList != null and tDispatchInfoPre.statusList.size() > 0">
AND a.process_status in
<foreach item="item" index="index" collection="tDispatchInfoPre.statusList" open="(" separator="," close=")">
'${item}'
#{item}
</foreach>
</if>
<if test="tDispatchInfoPre.empName != null and tDispatchInfoPre.empName.trim() != ''">
......@@ -159,27 +160,7 @@
<if test="tDispatchInfoPre.processStatus != null and tDispatchInfoPre.processStatus.trim() != ''">
AND a.PROCESS_STATUS = #{tDispatchInfoPre.processStatus}
</if>
<if test="tDispatchInfoPre.settleDomain != null and tDispatchInfoPre.settleDomain.trim() != ''">
AND a.SETTLE_DOMAIN = #{tDispatchInfoPre.settleDomain}
</if>
<if test="tDispatchInfoPre.socialProvince != null and tDispatchInfoPre.socialProvince.trim() != ''">
AND a.SOCIAL_PROVINCE = #{tDispatchInfoPre.socialProvince}
</if>
<if test="tDispatchInfoPre.socialCity != null and tDispatchInfoPre.socialCity.trim() != ''">
AND a.SOCIAL_CITY = #{tDispatchInfoPre.socialCity}
</if>
<if test="tDispatchInfoPre.socialTown != null and tDispatchInfoPre.socialTown.trim() != ''">
AND a.SOCIAL_TOWN = #{tDispatchInfoPre.socialTown}
</if>
<if test="tDispatchInfoPre.fundProvince != null and tDispatchInfoPre.fundProvince.trim() != ''">
AND a.FUND_PROVINCE = #{tDispatchInfoPre.fundProvince}
</if>
<if test="tDispatchInfoPre.fundCity != null and tDispatchInfoPre.fundCity.trim() != ''">
AND a.FUND_CITY = #{tDispatchInfoPre.fundCity}
</if>
<if test="tDispatchInfoPre.fundTown != null and tDispatchInfoPre.fundTown.trim() != ''">
AND a.FUND_TOWN = #{tDispatchInfoPre.fundTown}
</if>
<if test="tDispatchInfoPre.deptName != null and tDispatchInfoPre.deptName.trim() != ''">
AND a.DEPT_NAME like CONCAT('%',#{tDispatchInfoPre.deptName},'%')
</if>
......@@ -204,11 +185,11 @@
<if test="tDispatchInfoPre.expectedCollectionTime != null">
AND DATE_FORMAT(a.EXPECTED_COLLECTION_TIME,'%Y-%m-%d') = CURDATE()
</if>
<if test="tDispatchInfoPre.dispatcherTimeStart != null and tDispatchInfoPre.dispatcherTimeStart.trim() != ''">
AND DATE_FORMAT(a.EXPECTED_COLLECTION_TIME,'%Y-%m-%d') <![CDATA[ >= ]]> #{tEmployeeInsurancePre.dispatcherTimeStart}
<if test="tDispatchInfoPre.dispatcherTimeStart != null">
AND DATE_FORMAT(a.EXPECTED_COLLECTION_TIME,'%Y-%m-%d') <![CDATA[ >= ]]> #{tDispatchInfoPre.dispatcherTimeStart}
</if>
<if test="tDispatchInfoPre.dispatcherTimeEnd != null and tDispatchInfoPre.dispatcherTimeEnd.trim() != ''">
and DATE_FORMAT(a.EXPECTED_COLLECTION_TIME,'%Y-%m-%d') <![CDATA[ <= ]]> #{tEmployeeInsurancePre.dispatcherTimeEnd}
<if test="tDispatchInfoPre.dispatcherTimeEnd != null">
and DATE_FORMAT(a.EXPECTED_COLLECTION_TIME,'%Y-%m-%d') <![CDATA[ <= ]]> #{tDispatchInfoPre.dispatcherTimeEnd}
</if>
<if test="tDispatchInfoPre.expectedConfirmTime != null">
AND a.EXPECTED_CONFIRM_TIME = #{tDispatchInfoPre.expectedConfirmTime}
......@@ -221,9 +202,6 @@
</if>
<if test="tDispatchInfoPre.contractStatus != null and tDispatchInfoPre.contractStatus.trim() != ''">
AND a.CONTRACT_STATUS = #{tDispatchInfoPre.contractStatus}
</if>
<if test="tDispatchInfoPre.failType != null and tDispatchInfoPre.failType.trim() != ''">
AND a.error_info is not null
</if>
<if test="tDispatchInfoPre.authSql != null and tDispatchInfoPre.authSql.trim() != ''">
${tDispatchInfoPre.authSql}
......
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