联特报表temp

This commit is contained in:
Harryxzy 2025-09-12 15:37:12 +08:00
parent a9916d9ff0
commit 3a83f20552
7 changed files with 606 additions and 5 deletions

View File

@ -26,6 +26,15 @@ public class LtRymxgzDTO {
// 姓名
private Long xm;
// 工号
private String gh;
// 部门
private Long bm;
// 岗位
private Long gw;
// 工资
private BigDecimal gz;
@ -38,5 +47,11 @@ public class LtRymxgzDTO {
// 年终奖
private BigDecimal nzj;
// 其他奖励小计
private BigDecimal qtjlxj;
// 半年度绩效
private BigDecimal bndjx;
}

View File

@ -0,0 +1,36 @@
package com.engine.salary.entity.salaryacct.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @author Harryxzy
* @ClassName LtZjrggzftDTO
* @date 2025/09/10 16:33
* @description 联特直接人工工资分摊表数据
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LtZjrggzftDTO {
// 年月
private String ny;
// 工号
private String gh;
// 成本中心编码
private String cbzxbm;
// 成本中心
private String cbzx;
// 占比
private BigDecimal zb;
}

View File

@ -365,4 +365,25 @@ public interface SalaryAcctResultService {
* @return
*/
String ltGenBmxmgzftb(String salaryMonth);
/**
* 联特 表7 - 直接人工工时分摊表-计提
* @param salaryMonth
* @return
*/
String ltGenZjrggsftbjt(String salaryMonth);
/**
* 联特 表7 - 直接人工工时分摊表-实发
* @param salaryMonth
* @return
*/
String ltGenZjrggsftbsf(String salaryMonth);
/**
* 联特 表9 - 岗位平均工资查询表
* @param salaryMonth
* @return
*/
String ltGenGwpjgzcxb(String salaryMonth);
}

View File

@ -254,7 +254,11 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction
String imageId = Util.null2String(importParam.getImageId());
Validate.notBlank(imageId, "imageId为空");
// 获取所有个税扣缴义务人
Collection<TaxAgentManageRangeEmployeeDTO> taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId);
// 获取所有个税扣缴义务人
TaxAgentQueryParam param = TaxAgentQueryParam.builder().build();
param.setFilterType(AuthFilterTypeEnum.ADMIN_DATA);
Collection<TaxAgentPO> taxAgentList = getTaxAgentService(user).listAuth(param);
// Collection<TaxAgentManageRangeEmployeeDTO> taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId);
//个税扣缴义务人
String taxAgentId = Util.null2String(importParam.getTaxAgentId());
// 获取租户下所有的人员
@ -356,17 +360,17 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction
errorData.add(errorMessageMap);
errorSum += 1;
} else {
Optional<TaxAgentManageRangeEmployeeDTO> optionalTemp = taxAgentList.stream().filter(m -> m.getTaxAgentName().equals(taxAgentName)).findFirst();
Optional<TaxAgentPO> optionalTemp = taxAgentList.stream().filter(m -> m.getName().equals(taxAgentName)).findFirst();
if (optionalTemp.isPresent()) {
if (StringUtils.isNotEmpty(taxAgentId) && !optionalTemp.get().getTaxAgentId().equals(Long.valueOf(taxAgentId))) {
if (StringUtils.isNotEmpty(taxAgentId) && !optionalTemp.get().getId().equals(Long.valueOf(taxAgentId))) {
//个税扣缴义务人与导入时选择的不一致
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + "个税扣缴义务人与导入时选择的不一致");
errorData.add(errorMessageMap);
errorSum += 1;
} else {
addUpDeduction.setTaxAgentId(optionalTemp.get().getTaxAgentId());
taxAgentEmployees = optionalTemp.get().getEmployeeList();
addUpDeduction.setTaxAgentId(optionalTemp.get().getId());
// taxAgentEmployees = optionalTemp.get().getEmployeeList();
}
} else {
//个税扣缴义务人不存在

View File

@ -83,6 +83,7 @@ import weaver.general.TimeUtil;
import weaver.hrm.User;
import weaver.wechat.util.Utils;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
@ -4374,4 +4375,459 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
}
return "";
}
@Override
public String ltGenZjrggsftbjt(String salaryMonth) {
if (!SalaryDateUtil.checkYearMonth(salaryMonth)) {
throw new SalaryRunTimeException("年月错误");
}
Date salaryMonthDate = SalaryDateUtil.dateStrToLocalYearMonth(salaryMonth);
BaseBean baseBean = new BaseBean();
RecordSet rs = new RecordSet();
// 获取直接人工工资分摊表的人
ArrayList<LtZjrggzftDTO> ltZjrggzftList = new ArrayList<>();
// String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
// RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
// extRs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
// while (extRs.next()) {
// LtZjrggzftDTO dto = new LtZjrggzftDTO();
// dto.setNy(extRs.getString("month"));
// dto.setGh(extRs.getString("user_code"));
// dto.setCbzxbm(extRs.getString("sap_cost_center_name"));
// dto.setCbzx(extRs.getString("sap_cost_center_name_desc"));
// dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(extRs.getString("proportion")));
// ltZjrggzftList.add(dto);
// }
rs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from uf_testygcqgsftb where month='"+salaryMonth+"'");
while (rs.next()) {
LtZjrggzftDTO dto = new LtZjrggzftDTO();
dto.setNy(rs.getString("month"));
dto.setGh(rs.getString("user_code"));
dto.setCbzxbm(rs.getString("sap_cost_center_name"));
dto.setCbzx(rs.getString("sap_cost_center_name_desc"));
dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("proportion")));
ltZjrggzftList.add(dto);
}
Map<String, List<LtZjrggzftDTO>> LtZjrggzfGroupByGh = SalaryEntityUtil.group2Map(ltZjrggzftList, LtZjrggzftDTO::getGh);
// 获取自招部分需要统计赋值哪些字段
List<String> selectFieldList = new ArrayList<>();
selectFieldList.add("yldw");
selectFieldList.add("yldwbj");
selectFieldList.add("gsdw");
selectFieldList.add("gsdwbj");
selectFieldList.add("sydw");
selectFieldList.add("sydwbj");
selectFieldList.add("yldw1");
selectFieldList.add("yldwbj1");
selectFieldList.add("gjjdw");
selectFieldList.add("gjjdwbj");
selectFieldList.add("fwf");
selectFieldList.add("sb");
selectFieldList.add("yfgz");
selectFieldList.add("ydyxyg");
selectFieldList.add("qjl");
selectFieldList.add("lsjl");
selectFieldList.add("nzj");
// 获取对应期间人员明细工资计提表
rs.execute("select xm,rylx,gh,zjgs,"+ StringUtils.join(selectFieldList,",")+" from uf_mxgzbjt where qj ='" + SalaryDateUtil.getFormatYearMonth(salaryMonthDate) +"'");
Map<String, List<Map<String, String>>> listGroupByCbzx = new HashMap<>();
while (rs.next()) {
List<LtZjrggzftDTO> ltZjrggzftDTOList = LtZjrggzfGroupByGh.get(Utils.null2String(rs.getString("gh")));
if (CollectionUtils.isNotEmpty(ltZjrggzftDTOList)) {
for (LtZjrggzftDTO ftDTO : ltZjrggzftDTOList) {
BigDecimal zb = ftDTO.getZb();
String cbzx = ftDTO.getCbzxbm();
List<Map<String, String>> cbzxList = listGroupByCbzx.computeIfAbsent(cbzx, k -> new ArrayList<>());
Map<String, String> singleEmpValueMap = new HashMap<>();
singleEmpValueMap.put("rylb", Utils.null2String(rs.getString("rylx")));
singleEmpValueMap.put("cbzx", ftDTO.getCbzx());
singleEmpValueMap.put("zjgs", Utils.null2String(rs.getString("zjgs")));
BigDecimal yldw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj")));
singleEmpValueMap.put("ylbxdw", yldw.multiply(zb).toPlainString());
BigDecimal gsdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdwbj")));
singleEmpValueMap.put("gsbxdw", gsdw.multiply(zb).toPlainString());
BigDecimal sydw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydwbj")));
singleEmpValueMap.put("sybxdw", sydw.multiply(zb).toPlainString());
BigDecimal yldw1 = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw1")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj1")));
singleEmpValueMap.put("ylbxdw1", yldw1.multiply(zb).toPlainString());
BigDecimal gjjdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdwbj")));
singleEmpValueMap.put("zfgjjdw", gjjdw.multiply(zb).toPlainString());
singleEmpValueMap.put("fwf", SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("fwf")).multiply(zb).toPlainString());
singleEmpValueMap.put("sb", SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sb")).multiply(zb).toPlainString());
// 奖金=月度优秀员工+其他奖励+临时激励
BigDecimal jj = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("ydyxyg")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("qjl"))).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("lsjl")));
singleEmpValueMap.put("jj", jj.multiply(zb).toPlainString());
BigDecimal nzj = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("nzj"));
singleEmpValueMap.put("nzj", nzj.multiply(zb).toPlainString());
// 应发工资
BigDecimal gz = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yfgz")).subtract(jj).subtract(nzj);
singleEmpValueMap.put("gz", gz.multiply(zb).toPlainString());
cbzxList.add(singleEmpValueMap);
}
}
}
// 获取外包字段信息
Map<String, String> zjInfoMap = new HashMap<>();
List<String> zjfields = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "zjrggzftbjt_zj_filds").split(",")).filter(key -> StringUtils.isNotBlank(key)).collect(Collectors.toList());
for (String field : zjfields) {
String fieldInfo = baseBean.getPropValue("ltSalaryReport", "zjrggzftbjt_" + field + "_info");
try {
fieldInfo = new String(fieldInfo.getBytes("ISO-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
fieldInfo = "";
}
zjInfoMap.put(field, fieldInfo);
}
String currDate = String.format("'%s'", TimeUtil.getCurrentDateString());
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String currTime = String.format("'%s'", sdf.format(new Date()));
// 获取建模模块id
String modeId = baseBean.getPropValue("ltSalaryReport", "zjrggzftbjt_mode_id");
// 入库前先删除
rs.execute("delete from uf_zjrggzftjt where xzszy ='" + salaryMonth +"'");
String insertStartSql = new String("insert into uf_zjrggzftjt (formmodeid,modedatacreater," +
"modedatacreatertype,modedatacreatedate,modedatacreatetime,xzszy,cbzx,cbzxsm,gz,jj,nzj,gjjdw,yldw,yldw1,sydw,gsdw,"
+ StringUtils.join(zjfields, ",") + ")VALUES(");
// 自招字段
List<String> zzFields = Arrays.asList("gz","jj","nzj","gjjdw","yldw","yldw1","sydw","gsdw");
for (Map.Entry<String, List<Map<String, String>>> entry : listGroupByCbzx.entrySet()) {
// 已根据成本中心分组并乘以了对应的占比成本中心中需要分中介公司人员类别和自招
List<Map<String, String>> list = entry.getValue();
if (CollectionUtils.isEmpty(list)) {
continue;
}
Map<String, List<Map<String, String>>> groupByzjAndRylb = new HashMap<>();
list.stream().forEach(map -> {
String zjgs = Utils.null2String(map.get("zjgs"));
if (StringUtils.isBlank(zjgs)) {
// 自招
List<Map<String, String>> zzList = groupByzjAndRylb.computeIfAbsent("zz", k -> new ArrayList<>());
zzList.add(map);
} else {
String rylb = Utils.null2String(map.get("rylb"));
List<Map<String, String>> zjList = groupByzjAndRylb.computeIfAbsent(zjgs+rylb, k -> new ArrayList<>());
zjList.add(map);
}
});
// 获取自招合计数据
List<Map<String, String>> zzList = groupByzjAndRylb.get("zz");
Map<String, String> zzSumMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(zzList)) {
for (String zzField : zzFields) {
String sumVal = zzList.stream().map(map -> Utils.null2String(map.get(zzField))).filter(NumberUtils::isCreatable).map(BigDecimal::new)
.reduce(new BigDecimal("0"), BigDecimal::add).setScale(2, RoundingMode.HALF_UP).toPlainString();
zzSumMap.put(zzField, sumVal);
}
}
// 入库
StringBuilder insertSqlSb = new StringBuilder(insertStartSql)
.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'")
.append(salaryMonth).append("','").append(entry.getKey()).append("','").append(Utils.null2String(list.get(0).get("cbzx"))).append("',");
for (String zzField : zzFields) {
insertSqlSb.append(SalaryEntityUtil.string2BigDecimalDefault0(zzSumMap.get(zzField)).toString()).append(",");
}
for (String zjfield : zjfields) {
String zjInfo = Utils.null2String(zjInfoMap.get(zjfield));
List<Map<String, String>> zjList = groupByzjAndRylb.get(zjInfo);
BigDecimal zjSumVal = new BigDecimal("0");
if (CollectionUtils.isNotEmpty(zjList)) {
BigDecimal fwf = zjList.stream().map(map -> Utils.null2String(map.get("fwf"))).filter(NumberUtils::isCreatable).map(BigDecimal::new)
.reduce(new BigDecimal("0"), BigDecimal::add);
BigDecimal sb = zjList.stream().map(map -> Utils.null2String(map.get("sb"))).filter(NumberUtils::isCreatable).map(BigDecimal::new)
.reduce(new BigDecimal("0"), BigDecimal::add);
zjSumVal = fwf.add(sb).setScale(2, RoundingMode.HALF_UP);
}
insertSqlSb.append(zjSumVal.toPlainString()).append(",");
}
insertSqlSb.append(")");
insertSqlSb.deleteCharAt(insertSqlSb.lastIndexOf(","));
rs.execute(insertSqlSb.toString());
// 权限重构
// 获取最大值 作为权限重构的起始id
rs.execute("select max(id) from uf_zjrggzftjt");
int maxId = 0;
if (rs.next()) {
maxId = rs.getInt(1);
}
if (modeId != null && NumberUtils.isCreatable(modeId)) {
ModeRightInfo ModeRightInfo = new ModeRightInfo();
ModeRightInfo.setNewRight(true);
ModeRightInfo.editModeDataShare(1, Integer.valueOf(modeId), maxId);
}
}
return null;
}
@Override
public String ltGenZjrggsftbsf(String salaryMonth) {
if (!SalaryDateUtil.checkYearMonth(salaryMonth)) {
throw new SalaryRunTimeException("年月错误");
}
Date salaryMonthDate = SalaryDateUtil.dateStrToLocalYearMonth(salaryMonth);
BaseBean baseBean = new BaseBean();
RecordSet rs = new RecordSet();
// 获取直接人工工资分摊表的人
ArrayList<LtZjrggzftDTO> ltZjrggzftList = new ArrayList<>();
// String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
// RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
// extRs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
// while (extRs.next()) {
// LtZjrggzftDTO dto = new LtZjrggzftDTO();
// dto.setNy(extRs.getString("month"));
// dto.setGh(extRs.getString("user_code"));
// dto.setCbzxbm(extRs.getString("sap_cost_center_name"));
// dto.setCbzx(extRs.getString("sap_cost_center_name_desc"));
// dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(extRs.getString("proportion")));
// ltZjrggzftList.add(dto);
// }
rs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from uf_testygcqgsftb where month='"+salaryMonth+"'");
while (rs.next()) {
LtZjrggzftDTO dto = new LtZjrggzftDTO();
dto.setNy(rs.getString("month"));
dto.setGh(rs.getString("user_code"));
dto.setCbzxbm(rs.getString("sap_cost_center_name"));
dto.setCbzx(rs.getString("sap_cost_center_name_desc"));
dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("proportion")));
ltZjrggzftList.add(dto);
}
Map<String, List<LtZjrggzftDTO>> LtZjrggzfGroupByGh = SalaryEntityUtil.group2Map(ltZjrggzftList, LtZjrggzftDTO::getGh);
// 获取自招部分需要统计赋值哪些字段
List<String> selectFieldList = new ArrayList<>();
selectFieldList.add("yldw");
selectFieldList.add("yldwbj");
selectFieldList.add("gsdw");
selectFieldList.add("gsdwbj");
selectFieldList.add("sydw");
selectFieldList.add("sydwbj");
selectFieldList.add("yldw1");
selectFieldList.add("yldwbj1");
selectFieldList.add("gjjdw");
selectFieldList.add("gjjdwbj");
selectFieldList.add("fwf");
selectFieldList.add("sb");
selectFieldList.add("yfgz");
selectFieldList.add("ydyxyg");
selectFieldList.add("qjl");
selectFieldList.add("lsjl");
selectFieldList.add("nzj");
// 获取对应期间人员明细工资实发表
rs.execute("select xm,rylx,gh,zjgs,"+ StringUtils.join(selectFieldList,",")+" from uf_rymxgzsf where qj ='" + SalaryDateUtil.getFormatYearMonth(salaryMonthDate) +"'");
Map<String, List<Map<String, String>>> listGroupByCbzx = new HashMap<>();
while (rs.next()) {
List<LtZjrggzftDTO> ltZjrggzftDTOList = LtZjrggzfGroupByGh.get(Utils.null2String(rs.getString("gh")));
if (CollectionUtils.isNotEmpty(ltZjrggzftDTOList)) {
for (LtZjrggzftDTO ftDTO : ltZjrggzftDTOList) {
BigDecimal zb = ftDTO.getZb();
String cbzx = ftDTO.getCbzxbm();
List<Map<String, String>> cbzxList = listGroupByCbzx.computeIfAbsent(cbzx, k -> new ArrayList<>());
Map<String, String> singleEmpValueMap = new HashMap<>();
singleEmpValueMap.put("rylb", Utils.null2String(rs.getString("rylx")));
singleEmpValueMap.put("cbzx", ftDTO.getCbzx());
singleEmpValueMap.put("zjgs", Utils.null2String(rs.getString("zjgs")));
BigDecimal yldw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj")));
singleEmpValueMap.put("ylbxdw", yldw.multiply(zb).toPlainString());
BigDecimal gsdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdwbj")));
singleEmpValueMap.put("gsbxdw", gsdw.multiply(zb).toPlainString());
BigDecimal sydw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydwbj")));
singleEmpValueMap.put("sybxdw", sydw.multiply(zb).toPlainString());
BigDecimal yldw1 = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw1")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj1")));
singleEmpValueMap.put("ylbxdw1", yldw1.multiply(zb).toPlainString());
BigDecimal gjjdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdwbj")));
singleEmpValueMap.put("zfgjjdw", gjjdw.multiply(zb).toPlainString());
singleEmpValueMap.put("fwf", SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("fwf")).multiply(zb).toPlainString());
singleEmpValueMap.put("sb", SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sb")).multiply(zb).toPlainString());
// 奖金=月度优秀员工+其他奖励+临时激励
BigDecimal jj = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("ydyxyg")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("qjl"))).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("lsjl")));
singleEmpValueMap.put("jj", jj.multiply(zb).toPlainString());
BigDecimal nzj = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("nzj"));
singleEmpValueMap.put("nzj", nzj.multiply(zb).toPlainString());
// 应发工资
BigDecimal gz = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yfgz")).subtract(jj).subtract(nzj);
singleEmpValueMap.put("gz", gz.multiply(zb).toPlainString());
cbzxList.add(singleEmpValueMap);
}
}
}
// 获取外包字段信息
Map<String, String> zjInfoMap = new HashMap<>();
List<String> zjfields = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "zjrggzftbjt_zj_filds").split(",")).filter(key -> StringUtils.isNotBlank(key)).collect(Collectors.toList());
for (String field : zjfields) {
String fieldInfo = baseBean.getPropValue("ltSalaryReport", "zjrggzftbjt_" + field + "_info");
try {
fieldInfo = new String(fieldInfo.getBytes("ISO-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
fieldInfo = "";
}
zjInfoMap.put(field, fieldInfo);
}
String currDate = String.format("'%s'", TimeUtil.getCurrentDateString());
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String currTime = String.format("'%s'", sdf.format(new Date()));
// 获取建模模块id
String modeId = baseBean.getPropValue("ltSalaryReport", "zjrggzftbsf_mode_id");
// 入库前先删除
rs.execute("delete from uf_zjrggzftbsf where xzszy ='" + salaryMonth +"'");
String insertStartSql = new String("insert into uf_zjrggzftbsf (formmodeid,modedatacreater," +
"modedatacreatertype,modedatacreatedate,modedatacreatetime,xzszy,cbzx,cbzxsm,gz,jj,nzj,gjjdw,yldw,yldw1,sydw,gsdw,"
+ StringUtils.join(zjfields, ",") + ")VALUES(");
// 自招字段
List<String> zzFields = Arrays.asList("gz","jj","nzj","gjjdw","yldw","yldw1","sydw","gsdw");
for (Map.Entry<String, List<Map<String, String>>> entry : listGroupByCbzx.entrySet()) {
// 已根据成本中心分组并乘以了对应的占比成本中心中需要分中介公司人员类别和自招
List<Map<String, String>> list = entry.getValue();
if (CollectionUtils.isEmpty(list)) {
continue;
}
Map<String, List<Map<String, String>>> groupByzjAndRylb = new HashMap<>();
list.stream().forEach(map -> {
String zjgs = Utils.null2String(map.get("zjgs"));
if (StringUtils.isBlank(zjgs)) {
// 自招
List<Map<String, String>> zzList = groupByzjAndRylb.computeIfAbsent("zz", k -> new ArrayList<>());
zzList.add(map);
} else {
String rylb = Utils.null2String(map.get("rylb"));
List<Map<String, String>> zjList = groupByzjAndRylb.computeIfAbsent(zjgs+rylb, k -> new ArrayList<>());
zjList.add(map);
}
});
// 获取自招合计数据
List<Map<String, String>> zzList = groupByzjAndRylb.get("zz");
Map<String, String> zzSumMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(zzList)) {
for (String zzField : zzFields) {
String sumVal = zzList.stream().map(map -> Utils.null2String(map.get(zzField))).filter(NumberUtils::isCreatable).map(BigDecimal::new)
.reduce(new BigDecimal("0"), BigDecimal::add).setScale(2, RoundingMode.HALF_UP).toPlainString();
zzSumMap.put(zzField, sumVal);
}
}
// 入库
StringBuilder insertSqlSb = new StringBuilder(insertStartSql)
.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'")
.append(salaryMonth).append("','").append(entry.getKey()).append("','").append(Utils.null2String(list.get(0).get("cbzx"))).append("',");
for (String zzField : zzFields) {
insertSqlSb.append(SalaryEntityUtil.string2BigDecimalDefault0(zzSumMap.get(zzField)).toString()).append(",");
}
for (String zjfield : zjfields) {
String zjInfo = Utils.null2String(zjInfoMap.get(zjfield));
List<Map<String, String>> zjList = groupByzjAndRylb.get(zjInfo);
BigDecimal zjSumVal = new BigDecimal("0");
if (CollectionUtils.isNotEmpty(zjList)) {
BigDecimal fwf = zjList.stream().map(map -> Utils.null2String(map.get("fwf"))).filter(NumberUtils::isCreatable).map(BigDecimal::new)
.reduce(new BigDecimal("0"), BigDecimal::add);
BigDecimal sb = zjList.stream().map(map -> Utils.null2String(map.get("sb"))).filter(NumberUtils::isCreatable).map(BigDecimal::new)
.reduce(new BigDecimal("0"), BigDecimal::add);
zjSumVal = fwf.add(sb).setScale(2, RoundingMode.HALF_UP);
}
insertSqlSb.append(zjSumVal.toPlainString()).append(",");
}
insertSqlSb.append(")");
insertSqlSb.deleteCharAt(insertSqlSb.lastIndexOf(","));
rs.execute(insertSqlSb.toString());
// 权限重构
// 获取最大值 作为权限重构的起始id
rs.execute("select max(id) from uf_zjrggzftbsf");
int maxId = 0;
if (rs.next()) {
maxId = rs.getInt(1);
}
if (modeId != null && NumberUtils.isCreatable(modeId)) {
ModeRightInfo ModeRightInfo = new ModeRightInfo();
ModeRightInfo.setNewRight(true);
ModeRightInfo.editModeDataShare(1, Integer.valueOf(modeId), maxId);
}
}
return null;
}
@Override
public String ltGenGwpjgzcxb(String year) {
if (!NumberUtils.isCreatable(year)) {
throw new SalaryRunTimeException("年份错误");
}
BaseBean baseBean = new BaseBean();
RecordSet rs = new RecordSet();
// 获取全年人员明细工资实发表
rs.execute("select gh,szbm,szgw,yfgz,ydjx,jdjx,nzj,qjlxj from uf_rymxgzsf where qj >= '" + year + "-01' and qj <= '"+year+"'-12");
List<LtRymxgzDTO> ltRymxgzDTOList = new ArrayList<>();
while (rs.next()) {
ltRymxgzDTOList.add(LtRymxgzDTO.builder()
.gh(Utils.null2String(rs.getString("gh")))
.bm(SalaryEntityUtil.string2LongDefault0(rs.getString("szbm")))
.gw(SalaryEntityUtil.string2LongDefault0(rs.getString("szgw")))
.gz(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yfgz")))
.jx(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("ydjx")))
.jdjx(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("jdjx")))
.qtjlxj(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("qjlxj")))
.nzj(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("nzj")))
.build());
}
String currDate = String.format("'%s'", TimeUtil.getCurrentDateString());
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String currTime = String.format("'%s'", sdf.format(new Date()));
// 获取建模模块id
String modeId = baseBean.getPropValue("ltSalaryReport", "zjrggzftbsf_mode_id");
// 入库前先删除
rs.execute("delete from uf_gwpjgzcxb where nf ='" + year +"'");
String insertStartSql = new String("insert into uf_gwpjgzcxb (formmodeid,modedatacreater," +
"modedatacreatertype,modedatacreatedate,modedatacreatetime,nf,bm,gw,yjgz)VALUES(");
// 根据岗位部门汇总
Map<String, List<LtRymxgzDTO>> dtoGroupByGwBm = SalaryEntityUtil.group2Map(ltRymxgzDTOList, dto -> dto.getGw() + "_split" + dto.getBm());
for (Map.Entry<String, List<LtRymxgzDTO>> gwbmEntry : dtoGroupByGwBm.entrySet()) {
// 再根据工号汇总求出每个人的平均月薪
List<LtRymxgzDTO> gwbmDtoList = gwbmEntry.getValue();
Map<String, List<LtRymxgzDTO>> dtoGroupByGh = SalaryEntityUtil.group2Map(gwbmDtoList, dto -> dto.getGh());
BigDecimal sumEmpAveMonthSalary = new BigDecimal("0");
int empNums = 0;
for (Map.Entry<String, List<LtRymxgzDTO>> ghEntry: dtoGroupByGh.entrySet()) {
List<LtRymxgzDTO> ghDtoList = ghEntry.getValue();
BigDecimal empYearSumVal = new BigDecimal("0");
for (LtRymxgzDTO dto : ghDtoList) {
empYearSumVal = empYearSumVal.add(dto.getGz()).add(dto.getJx()).add(dto.getJdjx()).add(dto.getBndjx()).add(dto.getQtjlxj());
}
// 计算平均月薪
BigDecimal empAveMonthSalary = empYearSumVal.divide(new BigDecimal(String.valueOf(ghDtoList.size())), 2, RoundingMode.HALF_UP);
empNums++;
}
BigDecimal aveValue = sumEmpAveMonthSalary.divide(new BigDecimal(String.valueOf(empNums)), 2, RoundingMode.HALF_UP);
String[] split = gwbmEntry.getKey().split("_split");
Long gw = split != null && split.length > 0 ? SalaryEntityUtil.string2LongDefault0(split[0]) : 0L;
Long bm = split != null && split.length > 1 ? SalaryEntityUtil.string2LongDefault0(split[1]) : 0L;
// 入库
StringBuilder insertSqlSb = new StringBuilder(insertStartSql)
.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'")
.append(year).append("',").append(bm).append(",").append(gw).append(",").append(aveValue.toPlainString()).append(")");
rs.execute(insertSqlSb.toString());
// 权限重构
// 获取最大值 作为权限重构的起始id
rs.execute("select max(id) from uf_gwpjgzcxb");
int maxId = 0;
if (rs.next()) {
maxId = rs.getInt(1);
}
if (modeId != null && NumberUtils.isCreatable(modeId)) {
ModeRightInfo ModeRightInfo = new ModeRightInfo();
ModeRightInfo.setNewRight(true);
ModeRightInfo.editModeDataShare(1, Integer.valueOf(modeId), maxId);
}
}
return null;
}
}

View File

@ -1235,5 +1235,47 @@ public class SalaryAcctController {
return new ResponseResult<String, String>(user).run(getSalaryAcctResultWrapper(user)::ltGenBmxmgzftb, salaryMonth);
}
/**
* 联特 表7 - 直接人工工时分摊表-计提
* @param request
* @param response
* @return
*/
@GET
@Path("/ltSalaryReport/genZjrggsftbjt")
@Produces(MediaType.APPLICATION_JSON)
public String ltGenZjrggsftbjt(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam(value = "salaryMonth") String salaryMonth) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, String>(user).run(getSalaryAcctResultWrapper(user)::ltGenZjrggsftbjt, salaryMonth);
}
/**
* 联特 表7 - 直接人工工时分摊表-实发
* @param request
* @param response
* @return
*/
@GET
@Path("/ltSalaryReport/genZjrggsftbsf")
@Produces(MediaType.APPLICATION_JSON)
public String ltGenZjrggsftbsf(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam(value = "salaryMonth") String salaryMonth) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, String>(user).run(getSalaryAcctResultWrapper(user)::ltGenZjrggsftbsf, salaryMonth);
}
/**
* 联特 表9 - 岗位平均工资查询表
* @param request
* @param response
* @return
*/
@GET
@Path("/ltSalaryReport/genGwpjgzcxb")
@Produces(MediaType.APPLICATION_JSON)
public String ltGenGwpjgzcxb(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam(value = "salaryMonth") String salaryMonth) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, String>(user).run(getSalaryAcctResultWrapper(user)::ltGenGwpjgzcxb, salaryMonth);
}
/**********************************联特 报表end*********************************/
}

View File

@ -504,4 +504,31 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult
public String ltGenBmxmgzftb(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenBmxmgzftb(salaryMonth);
}
/**
* 联特 表7 - 直接人工工时分摊表-计提
* @param salaryMonth
* @return
*/
public String ltGenZjrggsftbjt(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenZjrggsftbjt(salaryMonth);
}
/**
* 联特 表7 - 直接人工工时分摊表-实发
* @param salaryMonth
* @return
*/
public String ltGenZjrggsftbsf(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenZjrggsftbsf(salaryMonth);
}
/**
* 联特 表9 - 岗位平均工资查询表
* @param salaryMonth
* @return
*/
public String ltGenGwpjgzcxb(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenGwpjgzcxb(salaryMonth);
}
}