package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; import com.engine.salary.entity.salaryacct.param.SalaryAcctCalculateParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctResultSaveParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctResultUpdateLockStatusParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.valid.ValidUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.math.NumberUtils; import org.apache.commons.lang3.StringUtils; import weaver.hrm.User; import java.math.BigDecimal; import java.util.*; /** * 薪资核算结果 *

Copyright: Copyright (c) 2022

*

Company: 泛微软件

* * @author qiantao * @version 1.0 **/ @Slf4j public class SalaryAcctResultWrapper extends Service { private SalaryAcctResultService getSalaryAcctResultService(User user) { return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); } private SalaryAcctRecordService getSalaryAcctRecordService(User user) { return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); } private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } private SalarySobItemService getSalarySobItemService(User user) { return ServiceUtil.getService(SalarySobItemServiceImpl.class, user); } private SalaryAcctEmployeeWrapper getSalaryAcctEmployeeWrapper(User user) { return ServiceUtil.getService(SalaryAcctEmployeeWrapper.class, user); } private ProgressService getSalaryAcctProgressService(User user) { return ServiceUtil.getService(ProgressServiceImpl.class, user); } // private SalaryCheckResultService salaryCheckResultService; private SalaryAcctExcelService getSalaryAcctExcelService(User user) { return ServiceUtil.getService(SalaryAcctExcelServiceImpl.class, user); } private SalarySysConfService getSalarySysConfService(User user) { return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } /** * 薪资核算列表 * * @param queryParam 列表查询条件 * @return */ public Map listPage(SalaryAcctResultQueryParam queryParam) { ValidUtil.doValidator(queryParam); // 查询薪资核算记录 SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId()); if (Objects.isNull(salaryAcctRecordPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); } // 查询薪资核算结果(分页) PageInfo> page = getSalaryAcctResultService(user).listPageByParam(queryParam); // 构建薪资核算结果列表的表头 List columns = getSalaryAcctExcelService(user).listWeaTableColumn(salaryAcctRecordPO); Map datas = new HashMap<>(); datas.put("pageInfo", page); datas.put("columns", columns); return datas; } /** * 合计行 * * @param queryParam 列表查询条件 * @return */ public Map sumSalaryAcctResult(SalaryAcctResultQueryParam queryParam) { ValidUtil.doValidator(queryParam); Map datas = new HashMap<>(); //合计 // SalarySysConfPO openSum = getSalarySysConfService(user).getOneByCode(OPEN_ACCT_RESULT_SUM); Map sumRow = getSalaryAcctResultService(user).sumRow(queryParam); datas.put("sumRow", sumRow); return datas; } /** * 薪资核算列表-报表使用 * * @param queryParam 列表查询条件 * @return */ @Deprecated public Map list(SalaryAcctResultQueryParam queryParam) { ValidUtil.doValidator(queryParam); // 查询薪资核算记录 SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId()); if (Objects.isNull(salaryAcctRecordPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); } // 查询薪资核算结果 List> list = getSalaryAcctResultService(user).listByParam(queryParam); // 构建薪资核算结果列表的表头 Map columns = getSalaryAcctExcelService(user).listColumn(salaryAcctRecordPO); Map datas = new HashMap<>(); datas.put("list", list); datas.put("columns", columns); return datas; } /** * 薪资核算结果详情 * * @param salaryAcctEmployeeId 薪资核算人员id * @return */ public SalaryAcctResultDetailDTO getForm(Long salaryAcctEmployeeId) { // 获取薪资核算结果详情 return getSalaryAcctResultService(user).getBySalaryAcctEmployeeId(salaryAcctEmployeeId); } /** * 获取合并计税详情 * * @param salaryAcctEmployeeId 薪资核算人员id * @return */ public ConsolidatedTaxDetailDTO getConsolidatedTaxDetail(Long salaryAcctEmployeeId) { // 获取合并计税详情 return getSalaryAcctResultService(user).getConsolidatedTaxDetail(salaryAcctEmployeeId); } /** * 根据薪资核算记录id获取表头数据 * * @param salaryAcctRecordId * @return */ public Map getColumnBySalaryAcctRecordId(Long salaryAcctRecordId) { return getSalaryAcctResultService(user).getColumnBySalaryAcctRecordId(salaryAcctRecordId); } /** * 保存薪资核算结果 * * @param saveParam 保存参数 */ public void save(SalaryAcctResultSaveParam saveParam) { getSalaryAcctResultService(user).save(saveParam); } /** * 更新薪资核算结果的值的锁定状态 * * @param updateParam */ public void updateLockStatusByParam(SalaryAcctResultUpdateLockStatusParam updateParam) { getSalaryAcctResultService(user).updateLockStatusByParam(updateParam); } /** * 薪资核算-核算 * * @param calculateParam 薪资核算的参数 */ public void calculate(SalaryAcctCalculateParam calculateParam) { log.info("开始核算V1{}", calculateParam); //报表参数 List emps = getSalaryEmployeeService(user).listAllForReport(); calculateParam.setEmps(SalaryEntityUtil.convert2Map(emps, DataCollectionEmployee::getEmployeeId)); //当前登陆人员 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) { 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(); } /** * 检查是否有薪资核算结果的查看权限 * @param salaryAcctRecordId */ public Boolean checkAuth(Long salaryAcctRecordId) { if(Objects.isNull(salaryAcctRecordId)){ return false; } return getSalaryAcctResultService(user).checkAuth(salaryAcctRecordId); } /** * 薪资核算-校验 * * @param checkParam 薪资核算的参数 * @param simpleEmployee 当前登陆人员 * @param tenantKey 租户key */ // public void check(SalaryAcctCheckParam checkParam, DataCollectionEmployee simpleEmployee, String tenantKey) { // // 检查是否正在核算中 // 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); // } }