Merge branch 'feature_liuliang_20220705' into develop

This commit is contained in:
liuliang 2022-07-20 15:58:49 +08:00
commit 32c15c1c35
11 changed files with 524 additions and 2 deletions

View File

@ -0,0 +1,10 @@
package com.api.salary.web;
import com.engine.salary.action.salaryArchive.SalaryArchiveActionAPI;
import javax.ws.rs.Path;
@Path("/bs/hrmsalary/salaryArchiveAction")
public class SalaryArchiveActionAPIController extends SalaryArchiveActionAPI {
}

View File

@ -0,0 +1,80 @@
package com.engine.salary.action.salaryArchive;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveTaxAgentFormDTO;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam;
import com.engine.salary.util.ResponseResult;
import com.engine.salary.wrapper.SalaryArchiveWrapper;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import lombok.extern.slf4j.Slf4j;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.RequestInfo;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import java.util.Map;
/**
* 薪资档案流程使用
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author liuliang
* @version 1.0
**/
@Slf4j
public class SalaryArchiveActionAPI {
private SalaryArchiveWrapper getSalaryArchiveWrapper(User user) {
return ServiceUtil.getService(SalaryArchiveWrapper.class, user);
}
/**
* 获取薪资档案列表
*
* @return
* @param importType=salaryItemAdjust(调薪),taxAgentAdjust(调整个税扣缴义务人),init(档案初始化)
*/
@GET
@Path("/selectSalaryArchiveColumns")
@Produces(MediaType.APPLICATION_JSON)
public String selectSalarySobList(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam("importType") String importType) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String,Map<String,Object>>(user).run(getSalaryArchiveWrapper(user)::selectSalaryArchiveColumns,importType);
}
/**
* 前置校验列表添加接口
* @param importData
* @return
*/
@POST
@Path("/checkImportSalaryArchiveListAdd")
@Produces(MediaType.APPLICATION_JSON)
public String importSalaryArchiveInit(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveImportActionParam importData) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryArchiveImportActionParam, Map<String, Object>>(user).run(getSalaryArchiveWrapper(user)::importSalaryArchiveInit, importData);
}
/**
* 导入薪资档案附件上传前置校验
* @param importParam
* @return
*/
@POST
@Path("/checkImportSalaryArchiveUpload")
@Produces(MediaType.APPLICATION_JSON)
public String checkParam(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveImportHandleParam importParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryArchiveImportHandleParam, Map<String, Object>>(user).run(getSalaryArchiveWrapper(user)::checkImportSalaryArchive, importParam);
}
}

View File

@ -0,0 +1,46 @@
package com.engine.salary.action.salaryArchive;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import weaver.conn.RecordSet;
import weaver.soa.workflow.request.RequestInfo;
import java.util.List;
import java.util.Map;
public class SalaryArchiveCommon {
public static Map<String,Object> getImportDatas(String requestId,String tableName){
RecordSet rs = new RecordSet();
String sql = "select xzxmdr,xzxmpldr from "+tableName+" where requestid="+requestId;
rs.executeQuery(sql);
Map<String,Object> dataMap = Maps.newHashMap();
List<Map<String, Object>> importDatas = Lists.newArrayList();
dataMap.put("importDatas",importDatas);
if (rs.next()){
String data = rs.getString("xzxmdr");
dataMap.put("imageId",rs.getString("xzxmpldr"));
if (data != null && !"".equals(data)){
if (data.contains("&quot;")){
data = data.replaceAll("&quot;","\"");
}
JSONArray jsonObject = JSONObject.parseArray(data);
jsonObject.forEach(e -> {
Map<String, Object> map = (Map<String, Object>)e;
importDatas.add(map);
});
}
}
String queryImageId = "select imagefileid from docimagefile where docid = ?";
if (dataMap.get("imageId") != null && !"".equals(dataMap.get("imageId"))){
rs.executeQuery(queryImageId,dataMap.get("imageId"));
if (rs.next()){
dataMap.put("imageId",rs.getString("imagefileid"));
}
}
return dataMap;
}
}

View File

@ -0,0 +1,56 @@
package com.engine.salary.action.salaryArchive;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam;
import com.engine.salary.service.SalaryArchiveService;
import com.engine.salary.service.impl.SalaryArchiveServiceImpl;
import weaver.general.BaseBean;
import weaver.hrm.User;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.RequestInfo;
import java.util.List;
import java.util.Map;
/**
* 薪资档案流程使用,导入薪资档案初始化)
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author liuliang
* @version 1.0
**/
public class SalaryArchiveInitAction extends BaseBean implements Action {
private SalaryArchiveService getSalaryArchiveService(User user) {
return (SalaryArchiveService) ServiceUtil.getService(SalaryArchiveServiceImpl.class, user);
}
@Override
public String execute(RequestInfo requestInfo) {
String requestId = requestInfo.getRequestid();
String tableName = requestInfo.getRequestManager().getBillTableName();
writeLog("requestId:"+requestId);
writeLog("tableName:"+tableName);
Map<String,Object> dataMap = SalaryArchiveCommon.getImportDatas(requestId,tableName);
List<Map<String, Object>> importDatas = (List<Map<String, Object>>)dataMap.get("importDatas");
String imageId = dataMap.get("imageId") == null?"":dataMap.get("imageId").toString();
User user = new User(Integer.valueOf(importDatas.get(0).get("userId").toString()));
//手动列表添加导入
if (importDatas.size() > 0){
SalaryArchiveImportActionParam importData = SalaryArchiveImportActionParam.builder().importDatas(importDatas)
.importType("init").build();
Map<String, Object> resultMap = getSalaryArchiveService(user).importSalaryArchiveAction(importData,true);
writeLog("result :"+resultMap.toString());
}
//附件上传导入
if (!"".equals(imageId)){
SalaryArchiveImportHandleParam param = SalaryArchiveImportHandleParam.builder().imageId(imageId).importType("init").build();
Map<String,Object> responseMap = getSalaryArchiveService(user).importSalaryArchive(param);
writeLog("result :"+responseMap.toString());
}
return SUCCESS;
}
}

View File

@ -0,0 +1,55 @@
package com.engine.salary.action.salaryArchive;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.action.salaryArchive.SalaryArchiveCommon;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam;
import com.engine.salary.service.SalaryArchiveService;
import com.engine.salary.service.impl.SalaryArchiveServiceImpl;
import weaver.general.BaseBean;
import weaver.hrm.User;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.RequestInfo;
import java.util.List;
import java.util.Map;
/**
* 薪资档案流程使用,导入薪资档案调薪
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author liuliang
* @version 1.0
**/
public class SalaryArchiveSalaryItemAdjustAction extends BaseBean implements Action {
private SalaryArchiveService getSalaryArchiveService(User user) {
return (SalaryArchiveService) ServiceUtil.getService(SalaryArchiveServiceImpl.class, user);
}
@Override
public String execute(RequestInfo requestInfo) {
String requestId = requestInfo.getRequestid();
String tableName = requestInfo.getRequestManager().getBillTableName();
writeLog("requestId:"+requestId);
writeLog("tableName:"+tableName);
Map<String,Object> dataMap = SalaryArchiveCommon.getImportDatas(requestId,tableName);
List<Map<String, Object>> importDatas = (List<Map<String, Object>>)dataMap.get("importDatas");
String imageId = dataMap.get("imageId").toString();
User user = new User(Integer.valueOf(importDatas.get(0).get("userId").toString()));
if (importDatas.size() > 0){
SalaryArchiveImportActionParam importData = SalaryArchiveImportActionParam.builder().importDatas(importDatas)
.importType("salaryItemAdjust").build();
Map<String, Object> resultMap = getSalaryArchiveService(user).importSalaryArchiveAction(importData,true);
writeLog("result :"+resultMap.toString());
}
//附件上传导入
if (!"".equals(imageId)){
SalaryArchiveImportHandleParam param = SalaryArchiveImportHandleParam.builder().imageId(imageId).importType("salaryItemAdjust").build();
Map<String,Object> responseMap = getSalaryArchiveService(user).importSalaryArchive(param);
writeLog("result :"+responseMap.toString());
}
return SUCCESS;
}
}

View File

@ -0,0 +1,56 @@
package com.engine.salary.action.salaryArchive;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam;
import com.engine.salary.service.SalaryArchiveService;
import com.engine.salary.service.impl.SalaryArchiveServiceImpl;
import weaver.general.BaseBean;
import weaver.hrm.User;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.RequestInfo;
import java.util.List;
import java.util.Map;
/**
* 薪资档案流程使用,导入薪资档案调整个税扣缴义务人
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author liuliang
* @version 1.0
**/
public class SalaryArchiveTaxAgentAdjustAction extends BaseBean implements Action {
private SalaryArchiveService getSalaryArchiveService(User user) {
return (SalaryArchiveService) ServiceUtil.getService(SalaryArchiveServiceImpl.class, user);
}
@Override
public String execute(RequestInfo requestInfo) {
String requestId = requestInfo.getRequestid();
String tableName = requestInfo.getRequestManager().getBillTableName();
writeLog("requestId:"+requestId);
writeLog("tableName:"+tableName);
Map<String,Object> dataMap = SalaryArchiveCommon.getImportDatas(requestId,tableName);
List<Map<String, Object>> importDatas = (List<Map<String, Object>>)dataMap.get("importDatas");
String imageId = dataMap.get("imageId").toString();
User user = new User(Integer.valueOf(importDatas.get(0).get("userId").toString()));
if (importDatas.size() > 0){
SalaryArchiveImportActionParam importData = SalaryArchiveImportActionParam.builder().importDatas(importDatas)
.importType("taxAgentAdjust").build();
Map<String, Object> resultMap = getSalaryArchiveService(user).importSalaryArchiveAction(importData,true);
writeLog("result :"+resultMap.toString());
}
//附件上传导入
if (!"".equals(imageId)){
SalaryArchiveImportHandleParam param = SalaryArchiveImportHandleParam.builder().imageId(imageId).importType("taxAgentAdjust").build();
Map<String,Object> responseMap = getSalaryArchiveService(user).importSalaryArchive(param);
writeLog("result :"+responseMap.toString());
}
return SUCCESS;
}
}

View File

@ -0,0 +1,38 @@
package com.engine.salary.entity.salaryarchive.param;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import com.engine.salary.enums.salaryarchive.SalaryArchiveImportTypeEnum;
import java.util.List;
import java.util.Map;
/**
* 薪资档案导入处理参数(action使用)
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author liuliang
* @version 1.0
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SalaryArchiveImportActionParam {
/**
* 导入类型
*
* @see SalaryArchiveImportTypeEnum
*/
String importType;
/**
* 导入数据
*
*/
List<Map<String,Object>> importDatas;
}

View File

@ -4,6 +4,7 @@ import com.engine.salary.common.LocalDateRange;
import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO;
import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveDimissionSaveParam;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam;
import com.engine.salary.entity.salaryarchive.po.SalaryArchiveDimissionPO;
@ -125,7 +126,21 @@ public interface SalaryArchiveService {
Map<String,Object> importSalaryArchive(SalaryArchiveImportHandleParam param);
Map<String,Object> importSalaryArchive(SalaryArchiveImportHandleParam param,boolean ifImportData);
Map<String, Object> preview(SalaryArchiveImportHandleParam param);
/**
* 查询薪酬档案所有列名
* @return
*/
Map<String, Object> selectSalaryArchiveColumns(SalaryArchiveImportTypeEnum salaryArchiveImportTypeEnum);
/**
* 导入薪资档案action使用
* @param importData
* @return
*/
Map<String, Object> importSalaryArchiveAction(SalaryArchiveImportActionParam importData, boolean ifImportData);
}

View File

@ -479,7 +479,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
/**
* 导入薪资档案
*/
public Map<String, Object> importSalaryArchive(SalaryArchiveImportHandleParam param) {
public Map<String, Object> importSalaryArchive(SalaryArchiveImportHandleParam param,boolean ifImportData) {
//1参数校验
vaildImportParam(param);
@ -544,7 +544,9 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
}
// 4.数据入库处理
handleImportData(isInit, importHandleParam);
if (ifImportData){
handleImportData(isInit, importHandleParam);
}
Map<String, Object> apidatas = new HashMap<>();
@ -560,6 +562,78 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
}
public Map<String, Object> importSalaryArchive(SalaryArchiveImportHandleParam param){
return importSalaryArchive(param,true);
}
/**
* 导入薪资档案action使用
* @param importData 导入参数
* @return
*/
public Map<String, Object> importSalaryArchiveAction(SalaryArchiveImportActionParam importData,boolean ifImportData){
// 1.构建导入需要的数据
SalaryArchiveImportHandleParam importHandleParam = buildImportHandleParam();
//导入类型
String importType = importData.getImportType();
// 需要导入的数据
List<Map<String, Object>> data = importData.getImportDatas();
// 成功数量
int successCount = 0;
// 错误数量
int errorCount = 0;
// 错误数据
List<Map<String, Object>> errorData = Lists.newArrayList();
// 错误提示
List<Map<String, String>> excelComments = new ArrayList<>();
List<SalaryArchiveInitImportDTO> initImportData = Lists.newArrayList();
boolean isInit = importType.equals(SalaryArchiveImportTypeEnum.INIT.getValue());
for (int i = 0; i < data.size(); i++) {
Map<String, Object> map = data.get(i);
List<String> headers = Lists.newArrayList();
map.keySet().forEach(headers::add);
int effectiveTimeIndex = 0;
for (int j = 0; j < headers.size(); j++) {
if (headers.get(j).equals(SalaryI18nUtil.getI18nLabel(85904, "生效日期"))) {
effectiveTimeIndex = j;
break;
}
}
map.put("index", i + 2);
// 3.校验行内容
boolean isError = singleRowCheck(importType, Lists.newArrayList(), map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam);
if (isError) {
errorCount += 1;
// 添加错误数据
errorData.add(map);
} else {
successCount += 1;
}
// 初始化导入对重复记录校验
if (isInit) {
Map<String, Object> validMap = validInitImportData(isError, i, map, excelComments, errorCount, successCount, errorData, initImportData, importHandleParam);
errorCount = Integer.parseInt(validMap.getOrDefault("errorCount", errorCount).toString());
successCount = Integer.parseInt(validMap.getOrDefault("successCount", successCount).toString());
}
}
// 4.数据入库处理
if (ifImportData){
handleImportData(isInit, importHandleParam);
}
Map<String, Object> apidatas = new HashMap<>();
apidatas.put("successCount", successCount);
apidatas.put("errorCount", errorCount);
apidatas.put("errorNotice", excelComments);
return apidatas;
}
@Override
public Map<String, Object> preview(SalaryArchiveImportHandleParam param) {
//1参数校验
@ -1387,4 +1461,38 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
salaryArchiveItemMapper.batchInsert(salaryArchiveItemSaves);
}
}
@Override
public Map<String, Object> selectSalaryArchiveColumns(SalaryArchiveImportTypeEnum salaryArchiveImportTypeEnum) {
HashMap<String,Object> map = Maps.newHashMap();
//类型为档案初始化
boolean isInit = salaryArchiveImportTypeEnum.getValue().equals(SalaryArchiveImportTypeEnum.INIT.getValue());
//类型为调整个税扣缴义务人
boolean isTaxAgentAdjust = salaryArchiveImportTypeEnum.getValue().equals(SalaryArchiveImportTypeEnum.TAXAGENTADJUST.getValue());
//类型为调薪
boolean isSalaryItemAdjust = salaryArchiveImportTypeEnum.getValue().equals(SalaryArchiveImportTypeEnum.SALARYITEMADJUST.getValue());
//固定列
map.put(SalaryI18nUtil.getI18nLabel(85429, "姓名"),"username");
map.put(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"),"taxAgentName");
map.put(SalaryI18nUtil.getI18nLabel(85904, "生效日期"),"taxAgentEffectiveTime");
map.put(SalaryI18nUtil.getI18nLabel(86185, "部门"),"departmentName");
map.put(SalaryI18nUtil.getI18nLabel(86186, "手机号"),"mobile");
map.put(SalaryI18nUtil.getI18nLabel(91075, "员工状态"),"employeeStatus");
List<SalaryItemPO> salaryItems = salaryItemMapper.getCanAdjustSalaryItems();
if (isTaxAgentAdjust || isSalaryItemAdjust) {
map.put(SalaryI18nUtil.getI18nLabel(85431, "调整原因"),"adjustReason");
}
//动态列
// 获取所有可被引用的薪资项目
if (isInit || isSalaryItemAdjust) {
for (SalaryItemPO salaryItem : salaryItems) {
map.put(salaryItem.getName(),salaryItem.getCode());
}
}
return map;
}
}

View File

@ -12,6 +12,7 @@ import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveBaseInfoFormDTO;
import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveFormDTO;
import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveDimissionSaveParam;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam;
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveQueryParam;
import com.engine.salary.entity.salaryarchive.po.SalaryArchiveDimissionPO;
@ -38,6 +39,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import weaver.conn.RecordSet;
import weaver.hrm.User;
import java.util.*;
@ -263,6 +265,19 @@ public class SalaryArchiveWrapper extends Service {
return getSalaryArchiveService(user).importSalaryArchive(param);
}
public Map<String,Object> checkImportSalaryArchive(SalaryArchiveImportHandleParam param) {
String queryImageId = "select imagefileid from docimagefile where docid = ?";
if (param.getImageId() != null && !"".equals(param.getImageId())){
RecordSet rs = new RecordSet();
rs.executeQuery(queryImageId,param.getImageId());
if (rs.next()){
param.setImageId(rs.getString("imagefileid"));
}
}
return getSalaryArchiveService(user).importSalaryArchive(param,false);
}
public XSSFWorkbook exportList(SalaryArchiveQueryParam queryParam) {
return getSalaryArchiveService(user).exportList(queryParam);
}
@ -280,5 +295,23 @@ public class SalaryArchiveWrapper extends Service {
return map;
}
public Map<String,Object> selectSalaryArchiveColumns(String importType){
return getSalaryArchiveService(user).selectSalaryArchiveColumns(SalaryArchiveImportTypeEnum.parseByValue(importType));
}
public Map<String, Object> importSalaryArchiveInit(SalaryArchiveImportActionParam importData){
importData.setImportType("init");
return getSalaryArchiveService(user).importSalaryArchiveAction(importData,false);
}
public Map<String, Object> importSalaryArchiveSalaryItemAdjust(SalaryArchiveImportActionParam importData){
importData.setImportType("salaryItemAdjust");
return getSalaryArchiveService(user).importSalaryArchiveAction(importData,false);
}
public Map<String, Object> importSalaryArchiveTaxAgentAdjust(SalaryArchiveImportActionParam importData){
importData.setImportType("taxAgentAdjust");
return getSalaryArchiveService(user).importSalaryArchiveAction(importData,false);
}
}

View File

@ -1,10 +1,18 @@
package com.engine.salary.biz;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.engine.salary.action.salaryArchive.SalaryArchiveInitAction;
import com.engine.salary.entity.siaccount.param.InsuranceAccountDetailParam;
import com.google.common.collect.Lists;
import weaver.general.GCONST;
import org.junit.Before;
import org.junit.Test;
import weaver.conn.RecordSet;
import weaver.soa.workflow.request.RequestInfo;
import java.util.List;
import java.util.Map;
public class SIAccountBizTest {
@Before
@ -21,4 +29,21 @@ public class SIAccountBizTest {
SIAccountBiz siAccountBiz = new SIAccountBiz();
siAccountBiz.overView(queryParam);
}
@Test
public void testSalaryArchiveInitAction(){
String requestId = "564566";
String tableName = "formtable_main_26";
RecordSet rs = new RecordSet();
String sql = "select xzxmdr from "+tableName+" where requestid="+requestId;
rs.executeQuery(sql);
List<Map<String, Object>> importDatas = Lists.newArrayList();
if (rs.next()){
String data = rs.getString("xzxmdr");
JSONArray jsonObject = JSONObject.parseArray(data);
jsonObject.forEach(e -> {
Map<String, Object> map = (Map<String, Object>)e;
importDatas.add(map);
});
}
}
}