工资单自动确认

This commit is contained in:
Harryxzy 2023-07-11 17:28:15 +08:00
parent 33a0723ad2
commit 5dc2dadd46
7 changed files with 145 additions and 26 deletions

View File

@ -5,21 +5,22 @@ import com.engine.salary.enums.BaseEnum;
import java.util.Arrays;
/**
* @ClassName BillReadStatusEnum
* @ClassName BillConfimStatusEnum
* @author Harryxzy
* @date 2023/7/10 17:13
* @date 2023/7/10 17:03
* @description 工资单确认
*/
public enum BillConfimStatusEnum implements BaseEnum<Integer> {
UNCONFIRMED(0, "未确认", 93286),
CONFIRMED(1, "已确认", 93212);
CONFIRMED(1, "已确认", 93212),
AUTOCONFIRMED(3, "自动确认", 93212);
private int value;
private final int value;
private String defaultLabel;
private final String defaultLabel;
private int labelId;
private final int labelId;
BillConfimStatusEnum(int value, String defaultLabel, int labelId) {
this.value = value;
@ -48,7 +49,7 @@ public enum BillConfimStatusEnum implements BaseEnum<Integer> {
}
BillConfimStatusEnum[] enumAry = BillConfimStatusEnum.values();
for(int i = 0; i < Arrays.asList(enumAry).size(); i++){
if (Integer.valueOf(enumAry[i].getValue()).equals(value)) {
if (enumAry[i].getValue().equals(value)) {
return enumAry[i].getDefaultLabel();
}
}
@ -61,7 +62,7 @@ public enum BillConfimStatusEnum implements BaseEnum<Integer> {
}
BillConfimStatusEnum[] enumAry = BillConfimStatusEnum.values();
for(int i = 0; i < Arrays.asList(enumAry).size(); i++){
if (Integer.valueOf(enumAry[i].getValue()).equals(value)) {
if (enumAry[i].getValue().equals(value)) {
return enumAry[i].name();
}
}

View File

@ -101,4 +101,10 @@ public interface SalarySendInfoMapper {
void deleteBySalaryAcctRecordIds(@Param("salaryAcctRecordId") Collection<Long> ids);
List<SalarySendInfoPO> getNeedSendInfoList(@Param("salarySendIds") List<Long> salarySendIds);
/**
* 自动确认工资单
* @param needAutoIds
*/
void autoConfirmSalaryBill(@Param("ids") List<Long> needAutoIds);
}

View File

@ -687,6 +687,12 @@
<if test="tenantKey != null and tenantKey != ''">
AND tenant_key = #{tenantKey}
</if>
<if test="billConfirmStatus != null and billConfirmStatus != ''">
AND bill_confirm_status = #{billConfirmStatus}
</if>
<if test="billReadStatus != null and billReadStatus != ''">
AND bill_read_status = #{billReadStatus}
</if>
ORDER BY id DESC
</select>
<select id="getNeedSendInfoList" resultType="com.engine.salary.entity.salaryBill.po.SalarySendInfoPO">
@ -756,5 +762,18 @@
</set>
WHERE id = #{id} AND delete_type = 0
</update>
<update id="autoConfirmSalaryBill">
UPDATE hrsa_salary_send_info
set
confirm_status = 2
where
delete_type = 0
<if test="ids != null and ids.size() > 0">
AND id IN
<foreach collection="ids" open="(" item="id" separator="," close=")">
#{id}
</foreach>
</if>
</update>
</mapper>

View File

@ -201,4 +201,17 @@ public interface SalarySendService {
* @return
*/
List<SalarySendPO> getNeedSendListBySalarySobIds(List<Long> salarySobIds);
/**
* 获取所有为确认的工资单
* @return
* @return
*/
List<SalarySendInfoPO> listAllUnConfirmedSendInfo();
/**
* 自动确认工资单
* @param needAutoIds
*/
void autoConfirmSalaryBill(List<Long> needAutoIds);
}

View File

@ -629,7 +629,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
*/
private void handleSalaryWatermark(SalaryTemplatePO salaryTemplate, SalarySendInfoPO salarySendInfo, Long currentEmployeeId) {
SalaryBillWatermarkDTO salaryBillWatermark = JsonUtil.parseObject(salaryTemplate.getSalaryWatermark(), SalaryBillWatermarkDTO.class);
if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus() ) {
if (Objects.isNull(salaryBillWatermark) || Boolean.FALSE.equals(salaryBillWatermark.getWatermarkStatus()) ) {
return;
}
// 发送时已经处理好变量字段可直接获取判断
@ -666,18 +666,17 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
SalarySysConfPO needFeedBack = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_SEND_FEEDBACK);
if(ObjectUtils.isNotEmpty(needFeedBack) && StringUtils.equals(needFeedBack.getConfValue(),"1")){
// 默认为空时未读未确认
pageInfo.getList().stream().forEach(dto -> {
if(StringUtils.isBlank(((SalarySendInfoListDTO)dto).getBillReadStatus() )){
((SalarySendInfoListDTO) dto).setBillReadStatus(BillReadStatusEnum.UNREAD.getDefaultLabel());
}else{
((SalarySendInfoListDTO) dto).setBillReadStatus(
BillReadStatusEnum.getDefaultLabelByValue( Integer.valueOf(((SalarySendInfoListDTO)dto).getBillReadStatus()) ));
pageInfo.getList().stream().forEach(obj -> {
SalarySendInfoListDTO dto = (SalarySendInfoListDTO) obj;
if (StringUtils.isBlank( dto.getBillReadStatus() )){
dto.setBillReadStatus(BillReadStatusEnum.UNREAD.getDefaultLabel());
} else {
dto.setBillReadStatus(BillReadStatusEnum.getDefaultLabelByValue( Integer.valueOf(dto.getBillReadStatus()) ));
}
if(StringUtils.isBlank(((SalarySendInfoListDTO)dto).getBillConfirmStatus() )){
((SalarySendInfoListDTO) dto).setBillConfirmStatus(BillConfimStatusEnum.UNCONFIRMED.getDefaultLabel());
}else {
((SalarySendInfoListDTO) dto).setBillConfirmStatus(
BillConfimStatusEnum.getDefaultLabelByValue( Integer.valueOf(((SalarySendInfoListDTO)dto).getBillConfirmStatus()) ));
if (StringUtils.isBlank(dto.getBillConfirmStatus())){
dto.setBillConfirmStatus(BillConfimStatusEnum.UNCONFIRMED.getDefaultLabel());
} else {
dto.setBillConfirmStatus(BillConfimStatusEnum.getDefaultLabelByValue( Integer.valueOf(dto.getBillConfirmStatus()) ));
}
});
}
@ -997,9 +996,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
if (isReplenish && StringUtils.isNotEmpty(salaryTemplate.getReplenishSalaryItemSetting())) {
List<SalaryTemplateSalaryItemSetListDTO> salaryTemplateShowSetData = JsonUtil.parseList(salaryTemplate.getReplenishSalaryItemSetting(),
SalaryTemplateSalaryItemSetListDTO.class);
salaryTemplateShowSetData.stream().filter(f -> !f.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID)).forEach(e -> {
salaryItems.addAll(e.getItems());
});
salaryTemplateShowSetData.stream().filter(f -> !f.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID)).forEach(e ->
salaryItems.addAll(e.getItems())
);
}
return salaryItems;
}
@ -1477,7 +1476,6 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
if (Objects.isNull(salarySendPO)) {
throw new SalaryRunTimeException("工资发放记录不存在或已被删除");
}
// return getSalaryAcctResultService(user).sumRow();
SalaryAcctResultQueryParam queryParam = SalaryAcctResultQueryParam.builder().salaryAcctRecordId(salarySendPO.getSalaryAccountingId()).build();
// 查询薪资核算人员
@ -1485,7 +1483,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
.listByResultQueryParam(queryParam);
if (org.apache.commons.collections4.CollectionUtils.isEmpty(salaryAcctEmployeePOS)) {
return null;
return Collections.emptyMap();
}
// 查询薪资核算记录
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId());
@ -1508,7 +1506,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
// 是否是补发工资单
List<SalarySendInfoPO> salarySendInfoPOS = getSalarySendInfoMapper().listSome(SalarySendInfoPO.builder().salarySendId(salarySendId).build());
List<Long> sendEmployeeIds = salarySendInfoPOS.stream().map(SalarySendInfoPO::getEmployeeId).collect(Collectors.toList());
salaryAcctResultPOS = salaryAcctResultPOS.stream().filter(PO -> sendEmployeeIds.contains(PO.getEmployeeId())).collect(Collectors.toList());
salaryAcctResultPOS = salaryAcctResultPOS.stream().filter(po -> sendEmployeeIds.contains(po.getEmployeeId())).collect(Collectors.toList());
Map<String, Object> map = new HashMap<>();
Map<Long, List<SalaryAcctResultPO>> acctResultMap = SalaryEntityUtil.group2Map(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryItemId);
@ -1610,4 +1608,17 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
}
return getSalarySendMapper().getNeedSendListBySalarySobIds(salarySobIds);
}
@Override
public List<SalarySendInfoPO> listAllUnConfirmedSendInfo() {
return getSalarySendInfoMapper().listSome(SalarySendInfoPO.builder().billConfirmStatus(BillConfimStatusEnum.UNCONFIRMED.getValue()).build());
}
@Override
public void autoConfirmSalaryBill(List<Long> needAutoSendIds) {
if(CollectionUtils.isEmpty(needAutoSendIds)){
return;
}
getSalarySendInfoMapper().autoConfirmSalaryBill(needAutoSendIds);
}
}

View File

@ -85,4 +85,10 @@ public class SalarySysConstant {
* 工资单反馈
*/
public static final String SALARY_SEND_FEEDBACK = "SALARY_SEND_FEEDBACK";
/**
* 工资单反馈自动确认
*/
public static final String SALARY_AUTO_CONFIRM = "SALARY_AUTO_CONFIRM";
}

View File

@ -0,0 +1,63 @@
package com.engine.salary.timer;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.entity.salaryBill.po.SalarySendInfoPO;
import com.engine.salary.service.SalarySendService;
import com.engine.salary.service.impl.SalarySendServiceImpl;
import com.engine.salary.sys.constant.SalarySysConstant;
import com.engine.salary.sys.entity.po.SalarySysConfPO;
import com.engine.salary.sys.service.SalarySysConfService;
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
import com.engine.salary.util.SalaryDateUtil;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import weaver.hrm.User;
import weaver.interfaces.schedule.BaseCronJob;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Harryxzy
* @ClassName AutoConfirmSalaryBill
* @date 2023/07/11 15:50
* @description 自动确认工资单
*/
public class AutoConfirmSalaryBillCronJob extends BaseCronJob {
private SalarySendService getSalarySendService(User user) {
return ServiceUtil.getService(SalarySendServiceImpl.class, user);
}
private SalarySysConfService getSalarySysConfService(User user) {
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
}
@Override
public void execute() {
User user = new User();
user.setUid(1);
user.setLoginid("sysadmin");
// 获取超时时间
SalarySysConfPO feedbackPO = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_SEND_FEEDBACK);
if(ObjectUtils.isEmpty(feedbackPO) || StringUtils.equals(feedbackPO.getConfValue(), "0")){
return;
}
SalarySysConfPO salaryAutoConfirmPO = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_AUTO_CONFIRM);
Long timeOutDays = ObjectUtils.isNotEmpty(salaryAutoConfirmPO) && NumberUtils.isCreatable(salaryAutoConfirmPO.getConfValue()) ?
Long.valueOf(salaryAutoConfirmPO.getConfValue()) : 7L;
LocalDateTime now = LocalDateTime.now();
// 获取所有确认状态为 未确认的工资单
List<SalarySendInfoPO> unConfirmedList = getSalarySendService(user).listAllUnConfirmedSendInfo();
List<Long> needAutoIds = unConfirmedList.stream().filter(po -> {
LocalDateTime sendDateTime = SalaryDateUtil.dateToLocalDateTime(po.getSendTime());
LocalDateTime autoDateTime = sendDateTime.plus(timeOutDays, ChronoUnit.DAYS);
return !autoDateTime.isAfter(now);
}).map(SalarySendInfoPO::getId).collect(Collectors.toList());
// 自动确认
getSalarySendService(user).autoConfirmSalaryBill(needAutoIds);
}
}