2022-04-08 19:08:59 +08:00
|
|
|
package com.engine.salary.wrapper;
|
|
|
|
|
|
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;
|
2023-06-27 14:58:33 +08:00
|
|
|
import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO;
|
2022-04-08 19:08:59 +08:00
|
|
|
import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO;
|
2022-08-02 14:58:18 +08:00
|
|
|
import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO;
|
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-07-11 17:31:33 +08:00
|
|
|
import com.engine.salary.util.SalaryEntityUtil;
|
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;
|
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;
|
2022-04-12 19:25:19 +08:00
|
|
|
import weaver.hrm.User;
|
2022-04-08 19:08:59 +08:00
|
|
|
|
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
|
2022-04-11 20:17:47 +08:00
|
|
|
public class SalaryAcctResultWrapper extends Service {
|
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-05-12 15:41:12 +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);
|
2022-07-11 17:31:33 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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-05-12 15:41:12 +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-05-12 15:41:12 +08:00
|
|
|
|
2022-04-08 19:08:59 +08:00
|
|
|
// private SalaryCheckResultService salaryCheckResultService;
|
2022-05-12 15:41:12 +08:00
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2022-04-08 19:08:59 +08:00
|
|
|
/**
|
|
|
|
|
* 薪资核算列表
|
|
|
|
|
*
|
|
|
|
|
* @param queryParam 列表查询条件
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
2022-05-12 15:41:12 +08:00
|
|
|
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
|
|
|
|
2022-05-12 15:41:12 +08:00
|
|
|
Map<String, Object> datas = new HashMap<>();
|
2022-04-11 20:17:47 +08:00
|
|
|
datas.put("pageInfo", page);
|
2022-05-12 15:41:12 +08:00
|
|
|
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
|
|
|
}
|
|
|
|
|
|
2022-08-02 14:58:18 +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
|
|
|
/**
|
|
|
|
|
* 保存薪资核算结果
|
|
|
|
|
*
|
2022-05-12 15:41:12 +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
|
|
|
}
|
|
|
|
|
|
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) {
|
2022-05-12 15:41:12 +08:00
|
|
|
log.info("开始核算V1{}", calculateParam);
|
2022-07-11 17:31:33 +08:00
|
|
|
|
|
|
|
|
//报表参数
|
|
|
|
|
List<DataCollectionEmployee> emps = getSalaryEmployeeService(user).listAllForReport();
|
2022-09-27 15:47:13 +08:00
|
|
|
calculateParam.setEmps(SalaryEntityUtil.convert2Map(emps, DataCollectionEmployee::getEmployeeId));
|
2022-07-11 17:31:33 +08:00
|
|
|
|
2022-04-12 19:25:19 +08:00
|
|
|
//当前登陆人员
|
|
|
|
|
DataCollectionEmployee simpleEmployee = new DataCollectionEmployee();
|
2022-05-12 15:41:12 +08:00
|
|
|
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) {
|
|
|
|
|
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() {
|
2022-05-12 15:41:12 +08:00
|
|
|
// getSalaryAcctResultService(user).calculate(calculateParam, simpleEmployee);
|
2022-05-07 15:20:39 +08:00
|
|
|
// }
|
|
|
|
|
// };
|
2022-05-12 15:41:12 +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
|
|
|
|
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
|
|
|
/**
|
|
|
|
|
* 鲁控数字薪资核算结果批量更新
|
|
|
|
|
* @param param
|
|
|
|
|
*/
|
|
|
|
|
public void lkszBatchUpdate(SalaryAcctResultBatchUpdateParam param) {
|
|
|
|
|
getSalaryAcctResultService(user).lkszBatchUpdate(param);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 鲁控数字薪资核算结果批量编辑
|
|
|
|
|
* @param param
|
|
|
|
|
*/
|
|
|
|
|
public void lkszBatchEdit(SalaryAcctResultBatchEditParam param) {
|
|
|
|
|
getSalaryAcctResultService(user).lkszBatchEdit(param);
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-02 16:58:19 +08:00
|
|
|
|
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);
|
|
|
|
|
// }
|
|
|
|
|
}
|