港湾temp

This commit is contained in:
Harryxzy 2023-12-15 15:17:28 +08:00
parent ed1234ae49
commit 9191e00d33
7 changed files with 473 additions and 8 deletions

View File

@ -10,13 +10,9 @@ import weaver.conn.RecordSet;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.Property;
import weaver.soa.workflow.request.RequestInfo;
import weaver.soa.workflow.request.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@ -45,8 +41,6 @@ public class EditSalaryAction implements Action {
Property[] properties = requestInfo.getMainTableInfo().getProperty();
Map<String, String> fieldMap = Arrays.stream(properties).collect(Collectors.toMap(Property::getName,
property -> Util.null2String(property.getValue())));
RecordSet rs = new RecordSet();
String queryImageId = "select salaryname,processfield from " + tableName + " where workflowid = ?";

View File

@ -0,0 +1,146 @@
package com.engine.salary.action;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.service.SalaryItemService;
import com.engine.salary.service.impl.SalaryItemServiceImpl;
import com.engine.salary.wrapper.SalaryArchiveWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.*;
import java.util.*;
import java.util.stream.Collectors;
/**
* 上海港湾 - 第六层级批量流程调薪
*/
@Slf4j
public class shgwPltxAction implements Action {
private SalaryArchiveWrapper getSalaryArchiveWrapper(User user) {
return ServiceUtil.getService(SalaryArchiveWrapper.class, user);
}
private SalaryItemService getSalaryItemService(User user) {
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
}
@Override
public String execute(RequestInfo requestInfo) {
try {
User user = new User();
user.setLoginid("sysadmin");
user.setUid(1);
BaseBean baseBean = new BaseBean();
Property[] properties = requestInfo.getMainTableInfo().getProperty();
Map<String, String> fieldMap = Arrays.stream(properties).collect(Collectors.toMap(Property::getName,
property -> Util.null2String(property.getValue())));
// 明细数据
List<Map<String, String>> detailPropertyMap = new ArrayList<>();
DetailTable[] detailTable = requestInfo.getDetailTableInfo().getDetailTable();// 获取所有明细表
if (detailTable.length > 0) {
// 指定明细表
for (DetailTable dt : detailTable) {
Row[] s = dt.getRow();// 当前明细表的所有数据,按行存储
// 指定行
for (Row r : s) {
Cell[] c = r.getCell();// 每行数据再按列存储
// 指定列
HashMap<String, String> rowMap = new HashMap<>();
for (Cell c1 : c) {
String name = c1.getName();// 明细字段名称
String value = c1.getValue();// 明细字段的值
rowMap.put(name,value);
}
detailPropertyMap.add(rowMap);
}
// 只获取明细表1的数据
break;
}
}
String salaryItemId = baseBean.getPropValue("shgwSalary", "pltxSalaryItemId");
SalaryItemPO salaryItemPO = getSalaryItemService(user).getById(Long.valueOf(salaryItemId));
List<Map<String, Object>> importData = new ArrayList<>();
for (Map<String, String> detailMap : detailPropertyMap) {
HashMap<String, Object> map = new HashMap<>();
map.put("员工id", detailMap.get("xm"));
map.put("调薪原因", "调薪");
map.put("个税扣缴义务人", detailMap.get("gskjywr"));
map.put("生效日期", fieldMap.get("sxrq"));
map.put(salaryItemPO.getName(), detailMap.get("jbgz"));
importData.add(map);
}
SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder()
.importDatas(importData)
.build();
Map<String, Object> map = getSalaryArchiveWrapper(user).adjustmentSalaryArchive(build);
List errorNotice = (List) map.get("errorNotice");
if (CollectionUtils.isNotEmpty(errorNotice)) {
log.error("调薪存在异常 requestId:{} map:{}", requestInfo.getRequestid(), map);
List<Map<String, String>> excelComments = (List<Map<String, String>>) map.get("errorNotice");
StringBuilder message = new StringBuilder("");
for (Map<String, String> comments : excelComments) {
message.append(comments.get("message")).append("\n");
}
requestInfo.getRequestManager().setMessage(message.toString());
return FAILURE_AND_CONTINUE;
}
} catch (Exception e) {
log.error("调薪异常", e);
requestInfo.getRequestManager().setMessage(e.getMessage());
return FAILURE_AND_CONTINUE;
}
return SUCCESS;
}
class SalaryField {
private String processField;
private String salaryName;
private String value;
public String getProcessField() {
return processField;
}
public void setProcessField(String processField) {
this.processField = processField;
}
public String getSalaryName() {
return salaryName;
}
public void setSalaryName(String salaryName) {
this.salaryName = salaryName;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public SalaryField(String processField, String salaryName, String value) {
this.processField = processField;
this.salaryName = salaryName;
this.value = value;
}
}
}

View File

@ -0,0 +1,41 @@
package com.engine.salary.entity.salaryacct.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author Harryxzy
* @ClassName pltxEmployeeDTO
* @date 2023/12/14 14:06
* @description
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class pltxEmployeeDTO {
// 姓名
private Long employee;
// 个税扣缴义务人
private String gskjywr;
// 去年绩效分数
private Double qnjxfs;
// 基本工资
private Double jbgz;
// 调薪
private Double dx;
// 调薪后基本工资
private Double dxhjbgz;
// 调整比例
private Double dxbl;
}

View File

@ -0,0 +1,39 @@
package com.engine.salary.entity.salaryacct.param;
import com.engine.salary.util.valid.DataCheck;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PltxInitEmployeeParam {
/**
* 个税扣缴义务人
*/
String gskjywr;
/**
* 调薪层级
*/
@DataCheck(require = true, message = "请输入调薪层级")
Integer txcj;
/**
* 调薪层级审批人
*/
@DataCheck(require = true, message = "请输入调薪层级审批人")
Integer spr;
// 生效日期
String sxrq;
// 姓名
Integer xm;
}

View File

@ -2,6 +2,7 @@ package com.engine.salary.service;
import com.engine.salary.component.WeaTableColumnGroup;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctImportFieldDTO;
import com.engine.salary.entity.salaryacct.dto.pltxEmployeeDTO;
import com.engine.salary.entity.salaryacct.param.*;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@ -120,6 +121,25 @@ public interface SalaryAcctExcelService {
void cacheExportField(List<Long> salaryItems);
/**
* 选择调薪层级审批人后带出人员
* @param pltxInitEmployeeParam
*/
List<pltxEmployeeDTO> pltxInitEmp(PltxInitEmployeeParam pltxInitEmployeeParam);
/**
* 根据审批人过滤能够看到编辑的明细数据
* @param pltxInitEmployeeParam
*/
List<pltxEmployeeDTO> pltxFilterData(PltxInitEmployeeParam pltxInitEmployeeParam);
/**
* 根据义务人姓名获取基本工资
* @param param
*/
pltxEmployeeDTO pltxGetJbgz(PltxInitEmployeeParam param);
//
// /**
// * 薪资核算结果校验异常导出

View File

@ -15,8 +15,11 @@ import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultLogBO;
import com.engine.salary.entity.salaryacct.dto.SalaryAccEmployeeListDTO;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctImportFieldDTO;
import com.engine.salary.entity.salaryacct.dto.SalaryComparisonResultListDTO;
import com.engine.salary.entity.salaryacct.dto.pltxEmployeeDTO;
import com.engine.salary.entity.salaryacct.param.*;
import com.engine.salary.entity.salaryacct.po.*;
import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO;
import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO;
import com.engine.salary.entity.salarysob.dto.SalarySobEmpFieldDTO;
@ -24,6 +27,7 @@ import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO;
import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO;
import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO;
import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.enums.UserStatusEnum;
import com.engine.salary.enums.salaryaccounting.LockStatusEnum;
@ -59,7 +63,9 @@ import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import weaver.conn.RecordSet;
import weaver.file.ImageFileManager;
import weaver.general.BaseBean;
import weaver.hrm.User;
import java.io.InputStream;
@ -144,6 +150,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
return ServiceUtil.getService(SalarySobItemWrapper.class, user);
}
private SalaryArchiveService getSalaryArchiveService(User user) {
return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user);
}
@Override
public XSSFWorkbook exportSalaryAcctEmployee(SalaryAcctEmployeeQueryParam queryParam) {
ValidUtil.doValidator(queryParam);
@ -1427,4 +1437,170 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// }
// return excelSheetData;
// }
/**
* 选择调薪层级审批人后带出人员
* @param param
*/
@Override
public List<pltxEmployeeDTO> pltxInitEmp(PltxInitEmployeeParam param) {
ValidUtil.doValidator(param);
List<pltxEmployeeDTO> result = new ArrayList<>();
RecordSet rs = new RecordSet();
BaseBean bb = new BaseBean();
if (param.getTxcj() == 0) {
// 第一层级带出所有的被调薪人
rs.execute("select bdxr,gskjywr from uf_pltxjzgljmb ");
List<SalaryAcctEmployeePO> allEmps = new ArrayList<>();
// 查询所有义务人信息
List<TaxAgentPO> taxAgentPOS = getTaxAgentService(user).listAll();
Map<String, Long> taxAgentMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getName, TaxAgentPO::getId);
Map<Long, String> taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getId, TaxAgentPO::getName);
while (rs.next()) {
Long taxAgentId = taxAgentMap.getOrDefault(StringUtils.isBlank(rs.getString("gskjywr")) ? "" : rs.getString("gskjywr"), -1L);
allEmps.add(SalaryAcctEmployeePO.builder().employeeId(Long.valueOf(rs.getInt("bdxr"))).taxAgentId(taxAgentId).build());
}
// 查询这些人的基本工资
Long salaryItemId = Long.valueOf(bb.getPropValue("shgwSalary", "pltxSalaryItemId").trim());
SalaryItemPO salaryItemPO = getSalaryItemService(user).getById(salaryItemId);
if (ObjectUtils.isEmpty(salaryItemPO)) {
throw new SalaryRunTimeException("薪资项目不存在");
}
// 查询这些人的薪资档案
List<Long> empIds = allEmps.stream().map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toList());
List<String> taxAgentEmpList = allEmps.stream().map(emp -> emp.getTaxAgentId() + "-" + emp.getEmployeeId()).collect(Collectors.toList());
List<SalaryArchivePO> salaryArchivePOS = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().employeeIds(empIds).build());
// 过滤薪资档案
salaryArchivePOS = salaryArchivePOS.stream().filter(po -> taxAgentEmpList.contains(po.getTaxAgentId()+"-"+po.getEmployeeId())).collect(Collectors.toList());
// key:义务人id-人员id value:薪资档案id
Map<String, Long> salaryArchiveMap = SalaryEntityUtil.convert2Map(salaryArchivePOS, s -> s.getTaxAgentId() + "-" + s.getEmployeeId(), SalaryArchivePO::getId);
List<SalaryArchiveItemPO> salaryArchiveItemList = getSalaryArchiveService(user).getCurrentEffectiveItemList(salaryArchivePOS.stream().map(SalaryArchivePO::getId).collect(Collectors.toList()), Collections.singletonList(salaryItemId));
Map<Long, SalaryArchiveItemPO> salaryArchiveItemMap = SalaryEntityUtil.convert2Map(salaryArchiveItemList, SalaryArchiveItemPO::getSalaryArchiveId);
allEmps.stream().forEach(emp -> {
// 获取他的薪资档案id
Long archiveId = salaryArchiveMap.get(emp.getTaxAgentId() + "-" + emp.getEmployeeId());
pltxEmployeeDTO dto = pltxEmployeeDTO.builder().employee(emp.getEmployeeId()).gskjywr(taxAgentNameMap.get(emp.getTaxAgentId())).build();
if (archiveId != null) {
SalaryArchiveItemPO salaryArchiveItemPO = salaryArchiveItemMap.get(archiveId);
if (salaryArchiveItemPO != null) {
dto.setJbgz(Double.valueOf(StringUtils.isBlank(salaryArchiveItemPO.getItemValue()) ? "0" : salaryArchiveItemPO.getItemValue()));
}
}
result.add(dto);
});
} else {
// 是二六层级获取中间建模的值直接拉过来
if (StringUtils.isBlank(param.getSxrq())) {
throw new SalaryRunTimeException("生效日期不能为空");
}
rs.execute("select id from uf_txjlgljmb where nd='"+ param.getSxrq().substring(0,5) + "'");
rs.next();
int mainId = rs.getInt("id");
// 获取明细数据
rs.execute("select * from uf_txjlgljmb_dt1 where mainid="+mainId);
while (rs.next()) {
result.add(pltxEmployeeDTO.builder()
.employee(Long.valueOf(rs.getInt("xm")))
.qnjxfs(rs.getDouble("qnjxfs"))
.jbgz(rs.getDouble("jbgz"))
.dx(rs.getDouble("dx"))
.dxhjbgz(rs.getDouble("dxhjbgz"))
.dxbl(rs.getDouble("dxbl"))
.build());
}
}
return result.stream().filter(r -> r.getEmployee() != -1).collect(Collectors.toList());
}
/**
* 根据审批人过滤能够看到编辑的明细数据
* @param param
*/
@Override
public List<pltxEmployeeDTO> pltxFilterData(PltxInitEmployeeParam param) {
ValidUtil.doValidator(param);
RecordSet rs = new RecordSet();
List<String> fieldList = Arrays.asList("dxyjspr", "dxejspr", "dxsajspr", "dxsijspr", "dxwjspr", "dxljspr");
List<pltxEmployeeDTO> canManageList = new ArrayList<>();
if (param.getTxcj() == 0) {
// 一级
rs.execute(" SELECT bdxr,gskjywr FROM uf_pltxjzgljmb where dxyjspr= " + param.getSpr());
while (rs.next()) {
int bdxr = rs.getInt("bdxr");
String gskjywr = rs.getString("gskjywr");
canManageList.add(pltxEmployeeDTO.builder().employee(Long.valueOf(bdxr)).gskjywr(gskjywr).build());
}
} else {
buildCanManageList(param, fieldList, canManageList);
}
return canManageList;
}
private void buildCanManageList(PltxInitEmployeeParam param, List<String> fieldList, List<pltxEmployeeDTO> canManageList ) {
Integer txcj = param.getTxcj();
RecordSet rs = new RecordSet();
List<Integer> sprList = new ArrayList<>();
for (int i = txcj; i > 0 ; i--) {
if (i == txcj) {
rs.execute(" SELECT " + fieldList.get(i-1) + " FROM uf_pltxjzgljmb where "+ fieldList.get(i)+"= " + param.getSpr());
while (rs.next()) {
sprList.add(rs.getInt(fieldList.get(i-1)));
}
} else {
rs.execute(" SELECT " + fieldList.get(i-1) + " FROM uf_pltxjzgljmb where "+ fieldList.get(i)+ " in ( " + StringUtils.join(sprList, ",") + ")");
while (rs.next()) {
sprList.add(rs.getInt(fieldList.get(i-1)));
}
}
}
// 不包含当前审批人
String sprStrWithoutCurrent = StringUtils.join(sprList, ",");
// 加上当前审批人
sprList.add(param.getSpr());
String sprStrs = StringUtils.join(sprList, ",");
StringBuilder selectConditionStr = new StringBuilder();
for (int i = 0; i <= txcj; i++) {
if (i != txcj) {
selectConditionStr.append(fieldList.get(i) + " in (" + sprStrs + ") or ");
} else {
selectConditionStr.append(fieldList.get(i) + " in (" + sprStrs + ") ");
}
}
if (StringUtils.isNotBlank(sprStrWithoutCurrent)) {
rs.execute(" SELECT bdxr,gskjywr FROM uf_pltxjzgljmb where " + selectConditionStr.toString() + " or bdxr in (" + sprStrWithoutCurrent +") ");
} else {
rs.execute(" SELECT bdxr,gskjywr FROM uf_pltxjzgljmb where " + selectConditionStr.toString());
}
while (rs.next()) {
int bdxr = rs.getInt("bdxr");
String gskjywr = rs.getString("gskjywr");
canManageList.add(pltxEmployeeDTO.builder().employee(Long.valueOf(bdxr)).gskjywr(gskjywr).build());
}
}
@Override
public pltxEmployeeDTO pltxGetJbgz(PltxInitEmployeeParam param) {
List<TaxAgentPO> taxAgentPOList = getTaxAgentService(user).list(TaxAgentQueryParam.builder().name(param.getGskjywr()).build());
if (CollectionUtils.isEmpty(taxAgentPOList)) {
return pltxEmployeeDTO.builder().build();
}
List<SalaryArchivePO> salaryArchivePOS = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().employeeId(Long.valueOf(param.getXm())).taxAgentId(taxAgentPOList.get(0).getId()).build());
BaseBean baseBean = new BaseBean();
String salaryItemId = baseBean.getPropValue("shgwSalary", "pltxSalaryItemId");
List<SalaryArchiveItemPO> salaryArchiveItemList = getSalaryArchiveService(user).getCurrentEffectiveItemList(salaryArchivePOS.stream().map(SalaryArchivePO::getId).collect(Collectors.toList()), Collections.singletonList(Long.valueOf(salaryItemId)));
if (CollectionUtils.isEmpty(salaryArchiveItemList)) {
return pltxEmployeeDTO.builder().build();
}
SalaryArchiveItemPO salaryArchiveItemPO = salaryArchiveItemList.get(0);
return pltxEmployeeDTO.builder()
.employee(salaryArchiveItemPO.getEmployeeId())
.gskjywr(param.getGskjywr())
.jbgz(Double.valueOf(StringUtils.isEmpty(salaryArchiveItemPO.getItemValue()) ? "0" : salaryArchiveItemPO.getItemValue()))
.build();
}
}

View File

@ -859,4 +859,53 @@ public class SalaryAcctController {
}
/**********************************线下对比 end*********************************/
/**********************************上海港湾 批量调薪流程 start********************************/
/**
* 选择调薪层级审批人后带出人员
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/pltxInitEmp")
@Produces(MediaType.APPLICATION_JSON)
public String pltxInitEmp(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody PltxInitEmployeeParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<PltxInitEmployeeParam, List<pltxEmployeeDTO>>(user).run(getSalaryAcctExcelService(user)::pltxInitEmp, param);
}
/**
* 根据审批人过滤能够看到编辑的明细数据
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/pltxFilterData")
@Produces(MediaType.APPLICATION_JSON)
public String pltxFilterData(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody PltxInitEmployeeParam param) {
User user = HrmUserVarify.getUser(request, response);
param.setSpr(user.getUID());
return new ResponseResult<PltxInitEmployeeParam, List<pltxEmployeeDTO>>(user).run(getSalaryAcctExcelService(user)::pltxFilterData, param);
}
/**
* 根据义务人姓名获取基本工资
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/pltxGetJbgz")
@Produces(MediaType.APPLICATION_JSON)
public String pltxGetJbgz(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody PltxInitEmployeeParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<PltxInitEmployeeParam, pltxEmployeeDTO>(user).run(getSalaryAcctExcelService(user)::pltxGetJbgz, param);
}
/**********************************上海港湾 批量调薪流程 end*********************************/
}