五院二开-部门汇总表
This commit is contained in:
parent
b4f0acf4ce
commit
7b9a8eac9b
|
|
@ -102,7 +102,8 @@ public class SalaryPageUtil {
|
|||
if (width != null && width != 0) {
|
||||
return width + "";
|
||||
}
|
||||
Rectangle2D bounds = font.getStringBounds(chars, frc);
|
||||
//五院二开,默认6个字符
|
||||
Rectangle2D bounds = font.getStringBounds("只用占六字符", frc);
|
||||
int pxLength = (int) Math.ceil(bounds.getWidth()) + 55;
|
||||
return pxLength < 90 ? 90+"" : pxLength+"";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -454,6 +454,14 @@ public class SalaryAcctController {
|
|||
return new ResponseResult<SalaryAcctResultQueryParam, Map<String, Object>>(user).run(getSalaryAcctResultWrapper(user)::listPage, param);
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/acctresult/department/list")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String departmentResult(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultQueryParam param) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<SalaryAcctResultQueryParam, Map<String, Object>>(user).run(getSalaryAcctResultWrapper(user)::departmentListPage, param);
|
||||
}
|
||||
|
||||
//合计行
|
||||
@POST
|
||||
@Path("/acctresult/sum")
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package com.engine.salary.wrapper;
|
||||
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import com.cloudstore.eccom.pc.table.WeaTableColumn;
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.salary.cache.SalaryCacheKey;
|
||||
|
|
@ -10,12 +12,16 @@ 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.*;
|
||||
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
|
||||
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
|
||||
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
|
||||
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
|
||||
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;
|
||||
|
|
@ -23,10 +29,12 @@ import com.engine.salary.wrapper.proxy.SalaryAcctResultWrapperProxy;
|
|||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang.math.NumberUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 薪资核算结果
|
||||
|
|
@ -78,6 +86,14 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult
|
|||
return ServiceUtil.getService(SalaryApprovalRuleServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) {
|
||||
return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryItemService getSalaryItemService(User user) {
|
||||
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 薪资核算列表
|
||||
*
|
||||
|
|
@ -105,6 +121,64 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult
|
|||
return datas;
|
||||
}
|
||||
|
||||
|
||||
public Map<String, Object> departmentListPage(SalaryAcctResultQueryParam queryParam) {
|
||||
|
||||
// 查询薪资核算记录
|
||||
Long salaryAcctRecordId = queryParam.getSalaryAcctRecordId();
|
||||
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId);
|
||||
if (Objects.isNull(salaryAcctRecordPO)) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
|
||||
}
|
||||
|
||||
//查询配置的薪资项目
|
||||
String salaryItemIdsStr = new BaseBean().getPropValue("hrmSalaryWuYuan", "salaryItemIds");
|
||||
if (StringUtils.isBlank(salaryItemIdsStr)) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资项ID不能为空"));
|
||||
}
|
||||
List<Long> salaryItemIds = Arrays.stream(salaryItemIdsStr.split(",")).map(Long::valueOf).collect(Collectors.toList());
|
||||
List<SalaryItemPO> salaryItemPOList = getSalaryItemService(user).listByIds(salaryItemIds);
|
||||
Map<Long, String> itemNameMap = SalaryEntityUtil.convert2LinkedMap(salaryItemPOList, SalaryItemPO::getId, SalaryItemPO::getName);
|
||||
|
||||
// 表格表头
|
||||
List<WeaTableColumn> columns = itemNameMap.keySet().stream().map(itemId -> new WeaTableColumn("100px", itemNameMap.get(itemId), itemId.toString())).collect(Collectors.toList());
|
||||
columns.add(0, new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "部门"), "departmentName"));
|
||||
|
||||
|
||||
//核算内的人员
|
||||
List<SalaryAcctEmployeePO> employeePOS = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecordId);
|
||||
List<Long> salaryAcctEmpIds = SalaryEntityUtil.properties(employeePOS, SalaryAcctEmployeePO::getId, Collectors.toList());
|
||||
|
||||
//核算数据结果
|
||||
List<SalaryAcctResultPO> list = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds);
|
||||
Map<Long, List<SalaryAcctResultPO>> acctEmpIdMap = SalaryEntityUtil.group2Map(list, SalaryAcctResultPO::getSalaryAcctEmpId);
|
||||
|
||||
//按部门分组
|
||||
List<Map<String, String>> result = new ArrayList<>();
|
||||
Map<Long, List<SalaryAcctEmployeePO>> departmentEmpMap = SalaryEntityUtil.group2Map(employeePOS, SalaryAcctEmployeePO::getDepartmentId);
|
||||
for (Long departmentId : departmentEmpMap.keySet()) {
|
||||
List<SalaryAcctEmployeePO> departmentEmps = departmentEmpMap.get(departmentId);
|
||||
List<Long> departmentEmpIds = SalaryEntityUtil.properties(departmentEmps, SalaryAcctEmployeePO::getId, Collectors.toList());
|
||||
Map<Long, List<SalaryAcctResultPO>> resultMap = acctEmpIdMap.keySet().stream().filter(departmentEmpIds::contains).map(acctEmpIdMap::get).flatMap(Collection::stream).collect(Collectors.groupingBy(SalaryAcctResultPO::getSalaryItemId));
|
||||
|
||||
Map<String, String> row = new HashMap<>();
|
||||
row.put("departmentName", departmentEmps.get(0).getDepartmentName());
|
||||
|
||||
resultMap.keySet().forEach(itemId -> {
|
||||
BigDecimal sum = resultMap.getOrDefault(itemId, new ArrayList<>()).stream().map(SalaryAcctResultPO::getResultValue).filter(NumberUtil::isNumber).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
row.put(itemId.toString(), sum.toPlainString());
|
||||
});
|
||||
|
||||
result.add(row);
|
||||
}
|
||||
|
||||
Map<String, Object> datas = new HashMap<>();
|
||||
datas.put("columns", columns);
|
||||
datas.put("list", result);
|
||||
|
||||
return datas;
|
||||
}
|
||||
|
||||
/**
|
||||
* 合计行
|
||||
*
|
||||
|
|
@ -230,18 +304,11 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult
|
|||
// 检查是否正在核算中
|
||||
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());
|
||||
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);
|
||||
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() {
|
||||
|
|
@ -261,6 +328,7 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult
|
|||
|
||||
/**
|
||||
* 检查是否有薪资核算结果的查看权限
|
||||
*
|
||||
* @param salaryAcctRecordId
|
||||
*/
|
||||
public Boolean checkAuth(Long salaryAcctRecordId) {
|
||||
|
|
@ -273,6 +341,7 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult
|
|||
|
||||
/**
|
||||
* 薪资核算结果批量更新
|
||||
*
|
||||
* @param param
|
||||
*/
|
||||
public void batchUpdate(SalaryAcctResultBatchUpdateParam param) {
|
||||
|
|
|
|||
|
|
@ -537,7 +537,7 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy
|
|||
List<WeaTableColumn> columns = buildDetailListWeaTableColumns();
|
||||
|
||||
for (SalaryTemplateSalaryItemListDTO salaryItem : salaryItems) {
|
||||
columns.add(new WeaTableColumn("100px", salaryItem.getName(), salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX));
|
||||
columns.add(new WeaTableColumn(SalaryPageUtil.selfAdaption(salaryItem.getName(), 0), salaryItem.getName(), salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX));
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -569,11 +569,11 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy
|
|||
List<WeaTableColumn> list = new ArrayList<>();
|
||||
WeaTableColumn idColumn = new WeaTableColumn("0px", "id", "id");
|
||||
idColumn.setDisplay(WeaBoolAttr.TRUE);
|
||||
list.add(new WeaTableColumn("100px", "姓名", "username"));
|
||||
list.add(new WeaTableColumn("100px", "个税扣缴义务人", "taxAgent"));
|
||||
list.add(new WeaTableColumn("100px", "部门", "department"));
|
||||
list.add(new WeaTableColumn("100px", "手机号", "mobile"));
|
||||
list.add(new WeaTableColumn("100px", "工号", "jobNum"));
|
||||
list.add(new WeaTableColumn(SalaryPageUtil.selfAdaption("姓名", 0), "姓名", "username"));
|
||||
list.add(new WeaTableColumn(SalaryPageUtil.selfAdaption("个税扣缴义务人", 0), "个税扣缴义务人", "taxAgent"));
|
||||
list.add(new WeaTableColumn(SalaryPageUtil.selfAdaption("部门", 0), "部门", "department"));
|
||||
list.add(new WeaTableColumn(SalaryPageUtil.selfAdaption("手机号", 0), "手机号", "mobile"));
|
||||
list.add(new WeaTableColumn(SalaryPageUtil.selfAdaption("工号", 0), "工号", "jobNum"));
|
||||
return list;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue