weaver-hrm-salary/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java

446 lines
18 KiB
Java
Raw Normal View History

2022-04-08 19:08:59 +08:00
package com.engine.salary.wrapper;
2024-10-30 10:29:36 +08:00
import com.alibaba.fastjson.JSON;
2022-04-12 19:25:19 +08:00
import com.engine.common.util.ServiceUtil;
2022-04-11 20:17:47 +08:00
import com.engine.core.impl.Service;
2022-04-29 17:15:22 +08:00
import com.engine.salary.cache.SalaryCacheKey;
2022-05-05 14:10:19 +08:00
import com.engine.salary.component.WeaTableColumnGroup;
2022-04-11 20:17:47 +08:00
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
2023-06-06 10:30:49 +08:00
import com.engine.salary.entity.progress.ProgressDTO;
2024-10-30 10:29:36 +08:00
import com.engine.salary.entity.salaryacct.dto.*;
2023-12-05 14:57:34 +08:00
import com.engine.salary.entity.salaryacct.param.*;
2022-04-08 19:08:59 +08:00
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
2022-04-11 20:17:47 +08:00
import com.engine.salary.exception.SalaryRunTimeException;
2022-04-12 19:25:19 +08:00
import com.engine.salary.service.*;
import com.engine.salary.service.impl.*;
2022-09-27 17:43:43 +08:00
import com.engine.salary.sys.service.SalarySysConfService;
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
2022-04-11 20:17:47 +08:00
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.page.PageInfo;
2022-04-12 19:25:19 +08:00
import com.engine.salary.util.valid.ValidUtil;
2024-04-16 16:05:42 +08:00
import com.engine.salary.wrapper.proxy.SalaryAcctResultWrapperProxy;
2022-05-07 15:20:39 +08:00
import lombok.extern.slf4j.Slf4j;
2022-04-29 17:15:22 +08:00
import org.apache.commons.lang.math.NumberUtils;
import org.apache.commons.lang3.StringUtils;
2024-10-30 10:29:36 +08:00
import weaver.general.BaseBean;
2022-04-12 19:25:19 +08:00
import weaver.hrm.User;
2022-04-08 19:08:59 +08:00
2024-10-30 10:29:36 +08:00
import java.io.UnsupportedEncodingException;
2022-04-29 17:15:22 +08:00
import java.math.BigDecimal;
import java.util.*;
2022-04-08 19:08:59 +08:00
/**
* 薪资核算结果
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
2022-05-07 15:20:39 +08:00
@Slf4j
2024-04-16 16:05:42 +08:00
public class SalaryAcctResultWrapper extends Service implements SalaryAcctResultWrapperProxy {
2022-04-08 19:08:59 +08:00
2022-04-12 19:25:19 +08:00
private SalaryAcctResultService getSalaryAcctResultService(User user) {
2022-09-27 15:47:13 +08:00
return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-12 19:25:19 +08:00
private SalaryAcctRecordService getSalaryAcctRecordService(User user) {
2022-09-27 15:47:13 +08:00
return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user);
}
private SalaryEmployeeService getSalaryEmployeeService(User user) {
2022-09-27 15:47:13 +08:00
return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
private SalarySobItemService getSalarySobItemService(User user) {
2022-09-27 15:47:13 +08:00
return ServiceUtil.getService(SalarySobItemServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-12 19:25:19 +08:00
private SalaryAcctEmployeeWrapper getSalaryAcctEmployeeWrapper(User user) {
2022-09-27 15:47:13 +08:00
return ServiceUtil.getService(SalaryAcctEmployeeWrapper.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-29 17:15:22 +08:00
2023-06-06 10:30:49 +08:00
private ProgressService getSalaryAcctProgressService(User user) {
return ServiceUtil.getService(ProgressServiceImpl.class, user);
2022-04-29 17:15:22 +08:00
}
2022-04-08 19:08:59 +08:00
// private SalaryCheckResultService salaryCheckResultService;
2022-04-12 19:25:19 +08:00
private SalaryAcctExcelService getSalaryAcctExcelService(User user) {
2022-09-27 15:47:13 +08:00
return ServiceUtil.getService(SalaryAcctExcelServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-08 19:08:59 +08:00
2022-09-27 17:43:43 +08:00
private SalarySysConfService getSalarySysConfService(User user) {
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
}
2024-04-29 16:08:18 +08:00
private SalaryApprovalRuleService getSalaryApprovalRuleService(User user) {
return ServiceUtil.getService(SalaryApprovalRuleServiceImpl.class, user);
}
2022-04-08 19:08:59 +08:00
/**
* 薪资核算列表
*
* @param queryParam 列表查询条件
* @return
*/
public Map<String, Object> listPage(SalaryAcctResultQueryParam queryParam) {
2022-04-12 19:25:19 +08:00
ValidUtil.doValidator(queryParam);
2022-04-11 20:17:47 +08:00
// 查询薪资核算记录
2022-04-12 19:25:19 +08:00
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId());
2022-04-11 20:17:47 +08:00
if (Objects.isNull(salaryAcctRecordPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
}
// 查询薪资核算结果(分页)
2022-04-12 19:25:19 +08:00
PageInfo<Map<String, Object>> page = getSalaryAcctResultService(user).listPageByParam(queryParam);
2022-04-11 20:17:47 +08:00
// 构建薪资核算结果列表的表头
2022-05-05 14:10:19 +08:00
List<WeaTableColumnGroup> columns = getSalaryAcctExcelService(user).listWeaTableColumn(salaryAcctRecordPO);
2022-04-11 20:17:47 +08:00
Map<String, Object> datas = new HashMap<>();
2022-04-11 20:17:47 +08:00
datas.put("pageInfo", page);
datas.put("columns", columns);
2022-04-11 20:17:47 +08:00
2022-12-02 16:58:19 +08:00
return datas;
}
/**
* 合计行
*
* @param queryParam 列表查询条件
* @return
*/
public Map<String, Object> sumSalaryAcctResult(SalaryAcctResultQueryParam queryParam) {
ValidUtil.doValidator(queryParam);
Map<String, Object> datas = new HashMap<>();
2022-09-27 17:43:43 +08:00
//合计
2023-04-07 14:39:22 +08:00
// SalarySysConfPO openSum = getSalarySysConfService(user).getOneByCode(OPEN_ACCT_RESULT_SUM);
2022-12-02 16:58:19 +08:00
Map<String, Object> sumRow = getSalaryAcctResultService(user).sumRow(queryParam);
datas.put("sumRow", sumRow);
2022-04-11 20:17:47 +08:00
return datas;
}
2022-04-08 19:08:59 +08:00
2022-04-12 19:25:19 +08:00
2022-07-04 15:34:04 +08:00
/**
* 薪资核算列表-报表使用
*
* @param queryParam 列表查询条件
* @return
*/
@Deprecated
public Map<String, Object> list(SalaryAcctResultQueryParam queryParam) {
ValidUtil.doValidator(queryParam);
// 查询薪资核算记录
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId());
if (Objects.isNull(salaryAcctRecordPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
}
// 查询薪资核算结果
List<Map<String, Object>> list = getSalaryAcctResultService(user).listByParam(queryParam);
// 构建薪资核算结果列表的表头
Map<String, Object> columns = getSalaryAcctExcelService(user).listColumn(salaryAcctRecordPO);
Map<String, Object> datas = new HashMap<>();
datas.put("list", list);
datas.put("columns", columns);
return datas;
}
2022-04-08 19:08:59 +08:00
/**
* 薪资核算结果详情
*
* @param salaryAcctEmployeeId 薪资核算人员id
* @return
*/
public SalaryAcctResultDetailDTO getForm(Long salaryAcctEmployeeId) {
// 获取薪资核算结果详情
2022-04-12 19:25:19 +08:00
return getSalaryAcctResultService(user).getBySalaryAcctEmployeeId(salaryAcctEmployeeId);
2022-04-08 19:08:59 +08:00
}
/**
* 获取合并计税详情
*
* @param salaryAcctEmployeeId 薪资核算人员id
* @return
*/
public ConsolidatedTaxDetailDTO getConsolidatedTaxDetail(Long salaryAcctEmployeeId) {
// 获取合并计税详情
2022-04-12 19:25:19 +08:00
return getSalaryAcctResultService(user).getConsolidatedTaxDetail(salaryAcctEmployeeId);
2022-04-08 19:08:59 +08:00
}
/**
* 根据薪资核算记录id获取表头数据
*
* @param salaryAcctRecordId
* @return
*/
public Map<String, SalaryAcctResultListColumnDTO> getColumnBySalaryAcctRecordId(Long salaryAcctRecordId) {
return getSalaryAcctResultService(user).getColumnBySalaryAcctRecordId(salaryAcctRecordId);
}
2022-04-08 19:08:59 +08:00
/**
* 保存薪资核算结果
*
* @param saveParam 保存参数
2022-04-08 19:08:59 +08:00
*/
public void save(SalaryAcctResultSaveParam saveParam) {
2022-04-12 19:25:19 +08:00
getSalaryAcctResultService(user).save(saveParam);
2022-04-08 19:08:59 +08:00
}
2024-10-17 18:27:37 +08:00
public void lock(SalaryAcctResultLockParam param) {
getSalaryAcctResultService(user).lock(param);
}
2022-11-17 09:28:40 +08:00
/**
* 更新薪资核算结果的值的锁定状态
*
* @param updateParam
*/
public void updateLockStatusByParam(SalaryAcctResultUpdateLockStatusParam updateParam) {
getSalaryAcctResultService(user).updateLockStatusByParam(updateParam);
}
2022-04-08 19:08:59 +08:00
/**
* 薪资核算-核算
*
* @param calculateParam 薪资核算的参数
*/
2022-04-12 19:25:19 +08:00
public void calculate(SalaryAcctCalculateParam calculateParam) {
log.info("开始核算V1{}", calculateParam);
2024-04-29 16:08:18 +08:00
// 校验是否可以编辑
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(calculateParam.getSalaryAcctRecordId());
boolean recordIsCanEdit = getSalaryApprovalRuleService(user).getRecordIsCanEdit(salaryAcctRecordPO);
if (!recordIsCanEdit) {
throw new SalaryRunTimeException("该核算记录已经发起审批,无法编辑或核算,请先删除审批流程");
}
2022-04-12 19:25:19 +08:00
//当前登陆人员
DataCollectionEmployee simpleEmployee = new DataCollectionEmployee();
simpleEmployee.setEmployeeId((long) user.getUID());
2022-04-11 20:17:47 +08:00
// 检查薪资核算人员的个税扣缴义务人
2022-04-12 19:25:19 +08:00
getSalaryAcctEmployeeWrapper(user).checkTaxAgent(calculateParam.getSalaryAcctRecordId());
2022-04-11 20:17:47 +08:00
// 检查是否正在核算中
2023-06-06 10:30:49 +08:00
ProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId());
2022-04-29 17:15:22 +08:00
if (Objects.nonNull(salaryAcctProgressDTO) && salaryAcctProgressDTO.isStatus() && Optional.ofNullable(salaryAcctProgressDTO.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) {
2024-09-19 14:17:47 +08:00
log.warn("正在核算中,无法再次执行"+calculateParam.getSalaryAcctRecordId());
2022-04-29 17:15:22 +08:00
return;
}
// 初始化进度
2023-06-06 10:30:49 +08:00
ProgressDTO initProgress = new ProgressDTO()
2022-04-29 17:15:22 +08:00
.setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中"))
.setTitleLabelId(97515L)
.setTotalQuantity(NumberUtils.INTEGER_ONE)
.setCalculatedQuantity(NumberUtils.INTEGER_ZERO)
.setProgress(BigDecimal.ZERO)
.setStatus(true)
.setMessage(StringUtils.EMPTY);
getSalaryAcctProgressService(user).initProgress(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), initProgress);
2022-04-11 20:17:47 +08:00
// 异步执行薪资核算
2022-05-07 15:20:39 +08:00
// LocalRunnable localRunnable = new LocalRunnable() {
// @Override
// public void execute() {
// getSalaryAcctResultService(user).calculate(calculateParam, simpleEmployee);
2022-05-07 15:20:39 +08:00
// }
// };
// ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.HRM, "salaryAcctCalculateV1", localRunnable);
new Thread() {
public void run() {
getSalaryAcctResultService(user).calculate(calculateParam, simpleEmployee);
}
}.start();
2022-04-11 20:17:47 +08:00
}
2022-04-08 19:08:59 +08:00
2025-06-20 09:55:30 +08:00
public void calculate4Sync(SalaryAcctCalculateParam calculateParam) {
log.info("开始核算V1{}", calculateParam);
// 校验是否可以编辑
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(calculateParam.getSalaryAcctRecordId());
boolean recordIsCanEdit = getSalaryApprovalRuleService(user).getRecordIsCanEdit(salaryAcctRecordPO);
if (!recordIsCanEdit) {
throw new SalaryRunTimeException("该核算记录已经发起审批,无法编辑或核算,请先删除审批流程");
}
//当前登陆人员
DataCollectionEmployee simpleEmployee = new DataCollectionEmployee();
simpleEmployee.setEmployeeId((long) user.getUID());
// 检查薪资核算人员的个税扣缴义务人
getSalaryAcctEmployeeWrapper(user).checkTaxAgent(calculateParam.getSalaryAcctRecordId());
// 检查是否正在核算中
ProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId());
if (Objects.nonNull(salaryAcctProgressDTO) && salaryAcctProgressDTO.isStatus() && Optional.ofNullable(salaryAcctProgressDTO.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) {
log.warn("正在核算中,无法再次执行"+calculateParam.getSalaryAcctRecordId());
return;
}
// 初始化进度
ProgressDTO initProgress = new ProgressDTO()
.setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中"))
.setTitleLabelId(97515L)
.setTotalQuantity(NumberUtils.INTEGER_ONE)
.setCalculatedQuantity(NumberUtils.INTEGER_ZERO)
.setProgress(BigDecimal.ZERO)
.setStatus(true)
.setMessage(StringUtils.EMPTY);
getSalaryAcctProgressService(user).initProgress(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), initProgress);
// 异步执行薪资核算
// LocalRunnable localRunnable = new LocalRunnable() {
// @Override
// public void execute() {
// getSalaryAcctResultService(user).calculate(calculateParam, simpleEmployee);
// }
// };
// ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.HRM, "salaryAcctCalculateV1", localRunnable);
// new Thread() {
// public void run() {
// getSalaryAcctResultService(user).calculate(calculateParam, simpleEmployee);
// }
// }.start();
getSalaryAcctResultService(user).calculate(calculateParam, simpleEmployee);
}
2023-06-27 14:58:33 +08:00
/**
* 检查是否有薪资核算结果的查看权限
* @param salaryAcctRecordId
*/
public Boolean checkAuth(Long salaryAcctRecordId) {
if(Objects.isNull(salaryAcctRecordId)){
return false;
}
return getSalaryAcctResultService(user).checkAuth(salaryAcctRecordId);
}
2023-12-05 14:57:34 +08:00
/**
2023-12-06 16:05:08 +08:00
* 薪资核算结果批量更新
2023-12-05 14:57:34 +08:00
* @param param
*/
2023-12-06 16:05:08 +08:00
public void batchUpdate(SalaryAcctResultBatchUpdateParam param) {
getSalaryAcctResultService(user).batchUpdate(param);
2023-12-05 14:57:34 +08:00
}
2024-10-30 10:29:36 +08:00
/**
* 薪酬送审列表
* @param param
* @return
*/
2024-10-25 13:27:58 +08:00
public Map<String, Object> htjsXcssList(HtjsApprovalParam param) {
2024-10-30 10:29:36 +08:00
// 获取需要查询的薪资项目
BaseBean baseBean = new BaseBean();
String xcssConfig = baseBean.getPropValue("htjsSalaryApproval", "xcss_config");
try {
xcssConfig = new String(xcssConfig.getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
List<HtXcssItemDTO> htXcssItemDTOList = JSON.parseArray(xcssConfig, HtXcssItemDTO.class);
param.setHtXcssItemDTOList(htXcssItemDTOList);
2024-10-25 13:27:58 +08:00
return getSalaryAcctResultService(user).htjsXcssList(param);
}
2024-10-30 10:29:36 +08:00
/**
* 薪酬送审数据穿透
* @param param
* @return
*/
2024-10-25 13:27:58 +08:00
public Map<String, Object> htjsXcssDataDetail(HtjsApprovalParam param) {
2024-10-30 10:29:36 +08:00
// 获取需要查询的薪资项目
BaseBean baseBean = new BaseBean();
String xcssConfig = baseBean.getPropValue("htjsSalaryApproval", "xcss_config");
try {
xcssConfig = new String(xcssConfig.getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
List<HtXcssItemDTO> htXcssItemDTOList = JSON.parseArray(xcssConfig, HtXcssItemDTO.class);
param.setHtXcssItemDTOList(htXcssItemDTOList);
2024-10-25 13:27:58 +08:00
return getSalaryAcctResultService(user).htjsXcssDataDetail(param);
}
2024-10-30 10:29:36 +08:00
/**
* 薪酬支付申请list
* @param param
* @return
*/
public Map<String, Object> htjsXczfsqList(HtjsApprovalParam param) {
// 获取需要查询的薪资项目
BaseBean baseBean = new BaseBean();
String xcssConfig = baseBean.getPropValue("htjsSalaryApproval", "xczf_config");
try {
xcssConfig = new String(xcssConfig.getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
List<HtXcssItemDTO> htXcssItemDTOList = JSON.parseArray(xcssConfig, HtXcssItemDTO.class);
param.setHtXcssItemDTOList(htXcssItemDTOList);
return getSalaryAcctResultService(user).htjsXczfsqList(param);
}
public Map<String, Object> htjsXczfsqDataDetail(HtjsApprovalParam param) {
// 获取需要查询的薪资项目
BaseBean baseBean = new BaseBean();
String xcssConfig = baseBean.getPropValue("htjsSalaryApproval", "xczf_config");
try {
xcssConfig = new String(xcssConfig.getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
List<HtXcssItemDTO> htXcssItemDTOList = JSON.parseArray(xcssConfig, HtXcssItemDTO.class);
param.setHtXcssItemDTOList(htXcssItemDTOList);
return getSalaryAcctResultService(user).htjsXcssDataDetail(param);
}
public List<HtSbqsListDTO> htjsSbqsList(HtjsApprovalParam param) {
return getSalaryAcctResultService(user).htjsSbqsList(param);
}
2025-07-14 11:17:48 +08:00
public PageInfo<HtSbqsChangeListDTO> htjsSbqsChangeDataList(HtjsApprovalParam param) {
return getSalaryAcctResultService(user).htjsSbqsChangeDataList(param);
}
public PageInfo<Map<String, Object>> htjsSIChangeList(HtjsSIChangeParam param) {
return getSalaryAcctResultService(user).htjsSIChangeList(param);
}
2022-04-08 19:08:59 +08:00
/**
* 薪资核算-校验
*
* @param checkParam 薪资核算的参数
* @param simpleEmployee 当前登陆人员
* @param tenantKey 租户key
*/
2023-04-19 10:15:01 +08:00
// public void check(SalaryAcctCheckParam checkParam, DataCollectionEmployee simpleEmployee, String tenantKey) {
2022-04-08 19:08:59 +08:00
// // 检查是否正在核算中
// SalaryAcctProgressDTO salaryAcctProgressDTO = salaryAcctProgressService.getProgress("" + checkParam.getSalaryAcctRecordId(), simpleEmployee.getEmployeeId(), tenantKey);
// if (Objects.nonNull(salaryAcctProgressDTO) && salaryAcctProgressDTO.isStatus() && Optional.ofNullable(salaryAcctProgressDTO.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) {
// return;
// }
// // 初始化进度
// SalaryAcctProgressDTO initProgress = new SalaryAcctProgressDTO()
// .setTitle(SalaryI18nUtil.getI18nLabel(99664, "正在运行校验规则"))
// .setTitleLabelId(99664L)
// .setTotalQuantity(NumberUtils.INTEGER_ONE)
// .setCalculatedQuantity(NumberUtils.INTEGER_ZERO)
// .setProgress(BigDecimal.ZERO)
// .setStatus(true)
// .setMessage(StringUtils.EMPTY);
// salaryAcctProgressService.initProgress("" + checkParam.getSalaryAcctRecordId(), initProgress, simpleEmployee.getEmployeeId(), tenantKey);
// // 异步执行校验
// LocalRunnable localRunnable = new LocalRunnable() {
// @Override
// public void execute() {
// salaryCheckResultService.check(checkParam, false, simpleEmployee, tenantKey);
// }
// };
// ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "salaryAcctCheck", localRunnable);
// }
}