联特报表

This commit is contained in:
Harryxzy 2025-09-10 16:23:32 +08:00
parent 0c1c3bab6e
commit a9916d9ff0
12 changed files with 992 additions and 13 deletions

View File

@ -126,6 +126,7 @@ public class DataCollectionEmployee {
private Integer accountType;
private String ltCbzx;
private String ltRylb;
//是否是系统管理员
private Boolean isAdmin;

View File

@ -436,6 +436,8 @@ public class HrmSnapshotPO {
private String ltGwpc;
private String ltXcbzsc;
private String ltRylb;
//主键id集合
private Collection<Long> ids;

View File

@ -0,0 +1,42 @@
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 LtRymxgzDTO
* @date 2025/09/04 18:03
* @description 联特 人员明细工资
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LtRymxgzDTO {
private String key;
// 项目号
private String xmh;
// 姓名
private Long xm;
// 工资
private BigDecimal gz;
// 绩效
private BigDecimal jx;
// 季度绩效
private BigDecimal jdjx;
// 年终奖
private BigDecimal nzj;
}

View File

@ -0,0 +1,37 @@
package com.engine.salary.entity.salaryacct.po;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author Harryxzy
* @ClassName LtYfgsPO
* @date 2025/09/04 10:04
* @description 研发工时
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LtYfgsPO {
// 姓名
private Long xm;
// 项目号
private String xmh;
// 成本中心
private String cbzx;
// 项目所属事业部
private String xmszsyb;
// 所属分部
private Long szfb;
// 所属部门
private Long szbm;
}

View File

@ -18,7 +18,7 @@ public interface HrmSnapshotMapper {
List<HrmSnapshotPO> snapshot(@Param("employeeId")Long employeeId, @Param("snapshotTime")Date snapshotTime);
List<Date> getSnapshotTime(@Param("startTime")Date startTime, @Param("emdTime")Date emdTime);
List<Date> getSnapshotTime(@Param("startTime")Date startTime, @Param("endTime")Date emdTime);
Integer countByStatusAndSnapshotTime(@Param("statusList")List<Integer> statusList, @Param("snapshotTime")Date snapshotTime);
/**

View File

@ -71,6 +71,10 @@
<result column="workstartdate" property="workstartdate"/>
<result column="workyear" property="workyear"/>
<result column="lt_cbzx" property="ltCbzx"/>
<result column="lt_cbzxcode" property="ltCbzxcode"/>
<result column="lt_gwpc" property="ltGwpc"/>
<result column="lt_xcbzsc" property="ltXcbzsc"/>
<result column="lt_rylb" property="ltRylb"/>
</resultMap>
<!-- 表字段 -->
@ -146,6 +150,11 @@
, t.workstartdate
, t.workyear
, t.lt_cbzx
, t.lt_cbzxcode
, t.lt_gwpc
, t.lt_xcbzsc
, t.lt_rylb
</sql>
<!-- 查询全部 -->
@ -614,6 +623,9 @@
<if test="ltXcbzsc != null">
lt_xcbzsc,
</if>
<if test="ltRylb != null">
lt_rylb,
</if>
</trim>
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
<if test="accountid1 != null">
@ -832,6 +844,9 @@
<if test="ltXcbzsc != null">
#{ltXcbzsc},
</if>
<if test="ltRylb != null">
#{ltRylb},
</if>
</trim>
</insert>
@ -1237,7 +1252,7 @@
count(1)
FROM hrsa_hrm_snapshot t
WHERE snapshot_time = #{snapshotTime}
<if test="ids != null and ids.size()>0">
<if test="statusList != null and statusList.size()>0">
AND status IN
<foreach collection="statusList" open="(" item="status" separator="," close=")">
#{status}

View File

@ -323,4 +323,46 @@ public interface SalaryAcctResultService {
* @return
*/
String ltGenKb(String salaryMonth);
/**
* 联特表5 - 研发项目工资分摊表-当月计提
* @param salaryMonth
* @return
*/
String ltGenYfxmgzftbdyjt(String salaryMonth);
/**
* 联特表5 - 研发项目工资分摊表-当月实发
* @param salaryMonth
* @return
*/
String ltGenYfxmgzftbdysf(String salaryMonth);
/**
* 联特表5 - 研发项目工资分摊表
* @param salaryMonth
* @return
*/
String ltGenYfxmgzftb(String salaryMonth);
/**
* 联特表5 - 部门项目工资分摊表-计提
* @param salaryMonth
* @return
*/
String ltGenBmyfxmgzftbjt(String salaryMonth);
/**
* 联特表5 - 部门项目工资分摊表-实发
* @param salaryMonth
* @return
*/
String ltGenBmyfxmgzftbsf(String salaryMonth);
/**
* 联特表5 - 部门项目工资分摊表
* @param salaryMonth
* @return
*/
String ltGenBmxmgzftb(String salaryMonth);
}

View File

@ -2291,12 +2291,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
}
// 获取薪资核算结果
Map<String, Object> singleAcctResultMap = acctResultMapByAcctEmpId.get(Utils.null2String(salaryAcctEmp.getId()));
firstSb.append("insert into uf_mxgzbjt(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,qj,cbzx,ydjx,jdjx,bndjx,nzj,"+fieldStr+") values (");
firstSb.append("insert into uf_mxgzbjt(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,szgw,rylx,qj,cbzx,ydjx,jdjx,bndjx,nzj,"+fieldStr+") values (");
firstSb.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'")
.append(employee.getWorkcode()).append("',")
.append(employee.getEmployeeId()).append(",")
.append(employee.getSubcompanyid()).append(",")
.append(employee.getDepartmentId()).append(",'")
.append(employee.getDepartmentId()).append(",")
.append(employee.getJobtitleId()).append(",")
.append(employee.getLtRylb()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
.append(jx).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
@ -2336,7 +2338,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
List<List<SalaryAcctEmployeePO>> partition = Lists.partition(salaryAcctEmployeeList, 500);
for (List<SalaryAcctEmployeePO> part : partition) {
StringBuilder sb = new StringBuilder();
sb.append("insert into uf_mxgzbjt(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,qj,cbzx,ydjx,jdjx,bndjx,nzj,"+fieldStr+") values ");
sb.append("insert into uf_mxgzbjt(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,szgw,rylx,qj,cbzx,ydjx,jdjx,bndjx,nzj,"+fieldStr+") values ");
for (SalaryAcctEmployeePO salaryAcctEmployeePO : part) {
employee = employeeMap.getOrDefault(salaryAcctEmployeePO.getEmployeeId(), DataCollectionEmployee.builder().build());
singleAcctResultMap = acctResultMapByAcctEmpId.get(Utils.null2String(salaryAcctEmployeePO.getId()));
@ -2380,7 +2382,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.append(employee.getWorkcode()).append("',")
.append(employee.getEmployeeId()).append(",")
.append(employee.getSubcompanyid()).append(",")
.append(employee.getDepartmentId()).append(",'")
.append(employee.getDepartmentId()).append(",")
.append(employee.getJobtitleId()).append(",")
.append(employee.getLtRylb()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
.append(jx).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
@ -2563,12 +2567,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
String bndjx = NumberUtils.isCreatable(Utils.null2String(singleBndAcctResultMap.get(bndItemId.toString()))) ? Utils.null2String(singleBndAcctResultMap.get(bndItemId.toString())) : "0";
Map<String, Object> singleNzjAcctResultMap = nzjAcctResultMapByKey.getOrDefault(key, new HashMap<>());
String nzj = NumberUtils.isCreatable(Utils.null2String(singleNzjAcctResultMap.get(nzjItemId.toString()))) ? Utils.null2String(singleNzjAcctResultMap.get(nzjItemId.toString())) : "0";
firstSb.append("insert into uf_rymxgzsf(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,qj,cbzx,ydjx,jdjx,bndjx,nzj,"+fieldStr+") values (");
firstSb.append("insert into uf_rymxgzsf(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,szgw,rylx,qj,cbzx,ydjx,jdjx,bndjx,nzj,"+fieldStr+") values (");
firstSb.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'")
.append(employee.getWorkcode()).append("',")
.append(employee.getEmployeeId()).append(",")
.append(employee.getSubcompanyid()).append(",")
.append(employee.getDepartmentId()).append(",'")
.append(employee.getDepartmentId()).append(",")
.append(employee.getJobtitleId()).append(",")
.append(employee.getLtRylb()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
.append(0).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
@ -2608,7 +2614,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
List<List<String>> partition = Lists.partition(keyList, 500);
for (List<String> part : partition) {
StringBuilder sb = new StringBuilder();
sb.append("insert into uf_rymxgzsf(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,qj,cbzx,ydjx,jdjx,bndjx,nzj,"+fieldStr+") values ");
sb.append("insert into uf_rymxgzsf(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,szgw,rylx,qj,cbzx,ydjx,jdjx,bndjx,nzj,"+fieldStr+") values ");
for (String keyStr : part) {
split = keyStr.split("_split");
empId = split != null && split.length > 1 ? SalaryEntityUtil.string2LongDefault0(split[1]) : 0L;
@ -2627,7 +2633,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
.append(employee.getWorkcode()).append("',")
.append(employee.getEmployeeId()).append(",")
.append(employee.getSubcompanyid()).append(",")
.append(employee.getDepartmentId()).append(",'")
.append(employee.getDepartmentId()).append(",")
.append(employee.getJobtitleId()).append(",")
.append(employee.getLtRylb()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
.append(0).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
@ -3660,7 +3668,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
String currTime = String.format("'%s'", sdf.format(new Date()));
StringBuilder insertSql = new StringBuilder("insert into uf_kb (formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,nf,rjcz,xse,zndrts) values (")
.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'")
.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",")
.append(year).append(",").append(gsxse.divide(empNums, 2, RoundingMode.HALF_UP).toPlainString())
.append(",").append(gsxse).append(",").append(empNums.toString()).append(")");
rs.execute(insertSql.toString());
@ -3679,4 +3687,691 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
return "";
}
/**
* 联特表5 - 研发项目工资分摊表-当月计提
* @param salaryMonth
* @return
*/
@Override
public String ltGenYfxmgzftbdyjt(String salaryMonth) {
if (!SalaryDateUtil.checkYearMonth(salaryMonth)) {
throw new SalaryRunTimeException("年月错误");
}
Date salaryMonthDate = SalaryDateUtil.dateStrToLocalYearMonth(salaryMonth);
BaseBean baseBean = new BaseBean();
RecordSet rs = new RecordSet();
// 获取研发工时表对应数据
List<LtYfgsPO> yfgsList = getLtYfgsList(salaryMonthDate);
Map<Long, String> xmhMap = SalaryEntityUtil.convert2Map(yfgsList, LtYfgsPO::getXm, LtYfgsPO::getXmh);
// 获取需要统计赋值哪些字段人员明细工资计提表 研发项目工资分摊表-当月计提 这些字段的数据库字段名需保持一致
List<String> fieldList = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "yfxmgzftbdyjt_sum_fields").split(",")).filter(key -> StringUtils.isNotBlank(key)).collect(Collectors.toList());
List<String> selectFieldList = new ArrayList<>();
selectFieldList.addAll(fieldList);
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");
// 获取对应期间人员明细工资计提表
rs.execute("select xm,"+ StringUtils.join(selectFieldList,",")+" from uf_mxgzbjt where qj ='" + SalaryDateUtil.getFormatYearMonth(salaryMonthDate) +"'");
HashMap<String, List<Map<String, String>>> listGroupByXmh = new HashMap<>();
while (rs.next()) {
Long xm = SalaryEntityUtil.string2LongDefault0(rs.getString("xm"));
String xmh = SalaryEntityUtil.null2String(xmhMap.get(xm));
List<Map<String, String>> xmhList = listGroupByXmh.computeIfAbsent(xmh, k -> new ArrayList<>());
Map<String, String> singleEmpValueMap = new HashMap<>();
for (String field : fieldList) {
singleEmpValueMap.put(field, Utils.null2String(rs.getString(field)));
}
// 5个写死的逻辑
BigDecimal yldw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj")));
singleEmpValueMap.put("ylbxdw", yldw.toPlainString());
BigDecimal gsdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdwbj")));
singleEmpValueMap.put("gsbxdw", gsdw.toPlainString());
BigDecimal sydw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydwbj")));
singleEmpValueMap.put("sybxdw", sydw.toPlainString());
BigDecimal yldw1 = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw1")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj1")));
singleEmpValueMap.put("ylbxdw1", yldw1.toPlainString());
BigDecimal gjjdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdwbj")));
singleEmpValueMap.put("zfgjjdw", gjjdw.toPlainString());
xmhList.add(singleEmpValueMap);
}
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", "yfxmgzftbdyjt_mode_id");
// 入库前先删除
rs.execute("delete from uf_yfxmgzftbjt where qj ='" + salaryMonth +"'");
fieldList.add("ylbxdw");
fieldList.add("gsbxdw");
fieldList.add("sybxdw");
fieldList.add("ylbxdw1");
fieldList.add("zfgjjdw");
for (Map.Entry<String, List<Map<String, String>>> entry : listGroupByXmh.entrySet()) {
List<Map<String, String>> valueList = entry.getValue();
Map<String, String> sumValueMap = new HashMap<>();
for(String fieldKey : fieldList) {
BigDecimal sumVal = valueList.stream().map(valueMap -> valueMap.get(fieldKey))
.filter(NumberUtils::isCreatable)
.map(BigDecimal::new)
.reduce(new BigDecimal("0"), BigDecimal::add);
sumValueMap.put(fieldKey, sumVal.toPlainString());
}
// 入库
StringBuilder insertSqlSb = new StringBuilder("insert into uf_yfxmgzftbjt (formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,qj,xmh,"+StringUtils.join(fieldList, ",")+")VALUES(")
.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'").append(salaryMonth).append("','").append(entry.getKey()).append("',");
for (String fieldKey : fieldList) {
insertSqlSb.append(SalaryEntityUtil.string2BigDecimalDefault0(sumValueMap.get(fieldKey)).toPlainString()).append(",");
}
insertSqlSb.append(")");
insertSqlSb.deleteCharAt(insertSqlSb.lastIndexOf(","));
rs.execute(insertSqlSb.toString());
// 权限重构
// 获取最大值 作为权限重构的起始id
rs.execute("select max(id) from uf_yfxmgzftbjt");
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 "";
}
/**
* 获取研发工时表对应数据
* @param salaryMonthDate
* @return
*/
private List<LtYfgsPO> getLtYfgsList(Date salaryMonthDate) {
if (salaryMonthDate == null) {
return Collections.emptyList();
}
RecordSet rs = new RecordSet();
rs.execute("select xm,xmh,xmszsyb,szfb,szbm,cbzx from uf_yfgs where qj='"+SalaryDateUtil.getFormatYearMonth(salaryMonthDate)+"'");
List<LtYfgsPO> resultList = new ArrayList<>();
while (rs.next()) {
LtYfgsPO po = new LtYfgsPO();
po.setXm(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")));
po.setXmh(Utils.null2String(rs.getString("xmh")));
po.setXmszsyb(Utils.null2String(rs.getString("xmszsyb")));
po.setSzfb(SalaryEntityUtil.string2LongDefault0(rs.getString("szfb")));
po.setSzbm(SalaryEntityUtil.string2LongDefault0(rs.getString("szbm")));
po.setCbzx(Utils.null2String(rs.getString("cbzx")));
resultList.add(po);
}
return resultList;
}
/**
* 联特表5 - 研发项目工资分摊表-当月实发
* @param salaryMonth
* @return
*/
@Override
public String ltGenYfxmgzftbdysf(String salaryMonth) {
if (!SalaryDateUtil.checkYearMonth(salaryMonth)) {
throw new SalaryRunTimeException("年月错误");
}
Date salaryMonthDate = SalaryDateUtil.dateStrToLocalYearMonth(salaryMonth);
BaseBean baseBean = new BaseBean();
RecordSet rs = new RecordSet();
// 获取研发工时表对应数据
List<LtYfgsPO> yfgsList = getLtYfgsList(salaryMonthDate);
Map<Long, String> xmhMap = SalaryEntityUtil.convert2Map(yfgsList, LtYfgsPO::getXm, LtYfgsPO::getXmh);
// 获取需要统计赋值哪些字段人员明细工资实发表 研发项目工资分摊表-当月实发 这些字段的数据库字段名需保持一致
List<String> fieldList = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "yfxmgzftbdysf_sum_fields").split(",")).filter(key -> StringUtils.isNotBlank(key)).collect(Collectors.toList());
List<String> selectFieldList = new ArrayList<>();
selectFieldList.addAll(fieldList);
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");
// 获取对应期间人员明细工资实发表
rs.execute("select xm,"+ StringUtils.join(selectFieldList,",")+" from uf_rymxgzsf where qj ='" + SalaryDateUtil.getFormatYearMonth(salaryMonthDate) +"'");
HashMap<String, List<Map<String, String>>> listGroupByXmh = new HashMap<>();
while (rs.next()) {
Long xm = SalaryEntityUtil.string2LongDefault0(rs.getString("xm"));
String xmh = SalaryEntityUtil.null2String(xmhMap.get(xm));
List<Map<String, String>> xmhList = listGroupByXmh.computeIfAbsent(xmh, k -> new ArrayList<>());
Map<String, String> singleEmpValueMap = new HashMap<>();
for (String field : fieldList) {
singleEmpValueMap.put(field, Utils.null2String(rs.getString(field)));
}
// 5个写死的逻辑
BigDecimal yldw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj")));
singleEmpValueMap.put("ylbxdw", yldw.toPlainString());
BigDecimal gsdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdwbj")));
singleEmpValueMap.put("gsbxdw", gsdw.toPlainString());
BigDecimal sydw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydwbj")));
singleEmpValueMap.put("sybxdw", sydw.toPlainString());
BigDecimal yldw1 = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw1")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj1")));
singleEmpValueMap.put("ylbxdw1", yldw1.toPlainString());
BigDecimal gjjdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdwbj")));
singleEmpValueMap.put("zfgjjdw", gjjdw.toPlainString());
xmhList.add(singleEmpValueMap);
}
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", "yfxmgzftbdysf_mode_id");
// 入库前先删除
rs.execute("delete from uf_yfxmgzftbsf where qj ='" + salaryMonth +"'");
fieldList.add("ylbxdw");
fieldList.add("gsbxdw");
fieldList.add("sybxdw");
fieldList.add("ylbxdw1");
fieldList.add("zfgjjdw");
for (Map.Entry<String, List<Map<String, String>>> entry : listGroupByXmh.entrySet()) {
List<Map<String, String>> valueList = entry.getValue();
Map<String, String> sumValueMap = new HashMap<>();
for(String fieldKey : fieldList) {
BigDecimal sumVal = valueList.stream().map(valueMap -> valueMap.get(fieldKey))
.filter(NumberUtils::isCreatable)
.map(BigDecimal::new)
.reduce(new BigDecimal("0"), BigDecimal::add);
sumValueMap.put(fieldKey, sumVal.toPlainString());
}
// 入库
StringBuilder insertSqlSb = new StringBuilder("insert into uf_yfxmgzftbsf (formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,qj,xmh,"+StringUtils.join(fieldList, ",")+")VALUES(")
.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'").append(salaryMonth).append("','").append(entry.getKey()).append("',");
for (String fieldKey : fieldList) {
insertSqlSb.append(SalaryEntityUtil.string2BigDecimalDefault0(sumValueMap.get(fieldKey)).toPlainString()).append(",");
}
insertSqlSb.append(")");
insertSqlSb.deleteCharAt(insertSqlSb.lastIndexOf(","));
rs.execute(insertSqlSb.toString());
// 权限重构
// 获取最大值 作为权限重构的起始id
rs.execute("select max(id) from uf_yfxmgzftbsf");
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 "";
}
/**
* 联特表5 - 研发项目工资分摊表
* @param salaryMonth
* @return
*/
@Override
public String ltGenYfxmgzftb(String salaryMonth) {
if (!SalaryDateUtil.checkYearMonth(salaryMonth)) {
throw new SalaryRunTimeException("年月错误");
}
Date salaryMonthDate = SalaryDateUtil.dateStrToLocalYearMonth(salaryMonth);
BaseBean baseBean = new BaseBean();
RecordSet rs = new RecordSet();
// 获取研发工时表对应数据
List<LtYfgsPO> yfgsList = getLtYfgsList(salaryMonthDate);
Map<Long, String> xmhMap = SalaryEntityUtil.convert2Map(yfgsList, LtYfgsPO::getXm, LtYfgsPO::getXmh);
// 获取对应的上月当月对应的计提实发 的人员明细工资表数据
Date lastMonthDate = SalaryDateUtil.localDateToDate(SalaryDateUtil.dateToLocalDate(salaryMonthDate).minusMonths(1));
// 本月计提数据
List<LtRymxgzDTO> thisMonthJtInfo = listLtRymxgzInfo(salaryMonthDate, true, xmhMap);
Map<String, List<LtRymxgzDTO>> thisMonthJtInfoMap = SalaryEntityUtil.group2Map(thisMonthJtInfo, LtRymxgzDTO::getXmh);
// 上月计提数据
List<LtRymxgzDTO> lastMonthJtInfo = listLtRymxgzInfo(lastMonthDate, true, xmhMap);
Map<String, List<LtRymxgzDTO>> lastMonthJtInfoMap = SalaryEntityUtil.group2Map(lastMonthJtInfo, LtRymxgzDTO::getXmh);
// 本月实发数据
List<LtRymxgzDTO> thisMonthSfInfo = listLtRymxgzInfo(salaryMonthDate, false, xmhMap);
Map<String, List<LtRymxgzDTO>> thisMonthSfInfoMap = SalaryEntityUtil.group2Map(thisMonthSfInfo, LtRymxgzDTO::getXmh);
// 上月实发数据
List<LtRymxgzDTO> lastMonthSfInfo = listLtRymxgzInfo(lastMonthDate, false, xmhMap);
Map<String, List<LtRymxgzDTO>> lastMonthSfInfoMap = SalaryEntityUtil.group2Map(lastMonthSfInfo, LtRymxgzDTO::getXmh);
// 获取所有的项目号
Set<String> xmhList = new HashSet<>();
xmhList.addAll(thisMonthJtInfoMap.keySet());
xmhList.addAll(lastMonthJtInfoMap.keySet());
xmhList.addAll(thisMonthSfInfoMap.keySet());
xmhList.addAll(lastMonthSfInfoMap.keySet());
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", "yfxmgzftb_mode_id");
// 入库前先删除
rs.execute("delete from uf_yfxmgzftb where qj ='" + salaryMonth +"'");
YearMonth yearMonth = SalaryDateUtil.String2YearMonth(salaryMonth);
int monthValue = yearMonth.getMonthValue();
for (String xmh : xmhList) {
BigDecimal gz = new BigDecimal("0");
List<LtRymxgzDTO> thisMonthJtList = CollectionUtils.isEmpty(thisMonthJtInfoMap.get(xmh)) ? new ArrayList<>() : thisMonthJtInfoMap.get(xmh) ;
List<LtRymxgzDTO> lastMonthJtList = CollectionUtils.isEmpty(lastMonthJtInfoMap.get(xmh)) ? new ArrayList<>() : lastMonthJtInfoMap.get(xmh) ;
List<LtRymxgzDTO> thisMonthSfList = CollectionUtils.isEmpty(thisMonthSfInfoMap.get(xmh)) ? new ArrayList<>() : thisMonthSfInfoMap.get(xmh) ;
List<LtRymxgzDTO> lastMonthSfList = CollectionUtils.isEmpty(lastMonthSfInfoMap.get(xmh)) ? new ArrayList<>() : lastMonthSfInfoMap.get(xmh) ;
if (monthValue == 2 || monthValue == 3 || monthValue == 5 || monthValue == 6 || monthValue == 8 || monthValue == 9 || monthValue == 11) {
gz = gz.add(lastMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(lastMonthSfList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(thisMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.subtract(thisMonthJtList.stream().map(LtRymxgzDTO::getJx).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
} else if (monthValue == 4 || monthValue == 7 || monthValue == 10) {
gz = gz.add(lastMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(lastMonthSfList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(thisMonthJtList.stream().map(LtRymxgzDTO::getJdjx).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(thisMonthSfList.stream().map(LtRymxgzDTO::getJdjx).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.subtract(thisMonthJtList.stream().map(LtRymxgzDTO::getJx).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.subtract(thisMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
} else if (monthValue == 12) {
gz = gz.add(lastMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(lastMonthSfList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(thisMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.subtract(thisMonthSfList.stream().map(LtRymxgzDTO::getNzj).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
} else {
gz = gz.add(lastMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(lastMonthSfList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(thisMonthJtList.stream().map(LtRymxgzDTO::getNzj).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(thisMonthSfList.stream().map(LtRymxgzDTO::getNzj).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.subtract(thisMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.subtract(thisMonthJtList.stream().map(LtRymxgzDTO::getJx).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
}
// 入库
StringBuilder insertSqlSb = new StringBuilder("insert into uf_yfxmgzftb (formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,qj,xmh,yfgz)VALUES(")
.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'").append(salaryMonth).append("','").append(xmh).append("',").append(gz.toPlainString()).append(")");
rs.execute(insertSqlSb.toString());
// 权限重构
// 获取最大值 作为权限重构的起始id
rs.execute("select max(id) from uf_yfxmgzftb");
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 "";
}
/**
* 联特 获取人员明细工资表数据
* @param salaryMonthDate 期间
* @param isJt 是否是计提
* @return
*/
private List<LtRymxgzDTO> listLtRymxgzInfo(Date salaryMonthDate, boolean isJt, Map<Long, String> xmhMap) {
if (salaryMonthDate == null) {
return Collections.emptyList();
}
String yearMonthStr = SalaryDateUtil.getFormatYearMonth(salaryMonthDate);
List<LtRymxgzDTO> resultList = new ArrayList<>();
RecordSet rs = new RecordSet();
if (isJt) {
// 计提表取数
rs.execute("select xm,yfgz,ydjx,jdjx,nzj from uf_mxgzbjt where qj = '" + yearMonthStr + "'");
while (rs.next()) {
resultList.add(LtRymxgzDTO.builder()
.key(Utils.null2String(xmhMap.get(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))))
.xmh(Utils.null2String(xmhMap.get(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))))
.xm(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))
.gz(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yfgz")))
.jx(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("ydjx")))
.jdjx(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("jdjx")))
.nzj(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("nzj")))
.build());
}
} else {
// 实发表取数
rs.execute("select xm,yfgz,ydjx,jdjx,nzj from uf_rymxgzsf where qj = '" + yearMonthStr + "'");
while (rs.next()) {
resultList.add(LtRymxgzDTO.builder()
.key(Utils.null2String(xmhMap.get(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))))
.xmh(Utils.null2String(xmhMap.get(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))))
.xm(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))
.gz(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yfgz")))
.jx(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("ydjx")))
.jdjx(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("jdjx")))
.nzj(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("nzj")))
.build());
}
}
return resultList;
}
/**
* 联特表5 - 部门项目工资分摊表-计提
* @param salaryMonth
* @return
*/
@Override
public String ltGenBmyfxmgzftbjt(String salaryMonth) {
if (!SalaryDateUtil.checkYearMonth(salaryMonth)) {
throw new SalaryRunTimeException("年月错误");
}
Date salaryMonthDate = SalaryDateUtil.dateStrToLocalYearMonth(salaryMonth);
BaseBean baseBean = new BaseBean();
RecordSet rs = new RecordSet();
// 获取研发工时表对应数据
List<LtYfgsPO> yfgsList = getLtYfgsList(salaryMonthDate);
Map<Long, String> groupMap = SalaryEntityUtil.convert2Map(yfgsList, LtYfgsPO::getXm, po -> po.getCbzx() + "_split" + po.getXmh() + "_split" + po.getXmszsyb());
// 获取需要统计赋值哪些字人员明细工资计提表 部门项目工资分摊表-计提 这些字段的数据库字段名需保持一致
List<String> fieldList = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "bmxmgzftbjt_sum_fields").split(",")).filter(key -> StringUtils.isNotBlank(key)).collect(Collectors.toList());
List<String> selectFieldList = new ArrayList<>();
selectFieldList.addAll(fieldList);
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");
// 获取对应期间人员明细工资计提表
rs.execute("select xm,"+ StringUtils.join(selectFieldList,",")+" from uf_mxgzbjt where qj ='" + SalaryDateUtil.getFormatYearMonth(salaryMonthDate) +"'");
HashMap<String, List<Map<String, String>>> listGroupByXmh = new HashMap<>();
while (rs.next()) {
Long xm = SalaryEntityUtil.string2LongDefault0(rs.getString("xm"));
String groupKey = SalaryEntityUtil.null2String(groupMap.get(xm));
List<Map<String, String>> groupKeyList = listGroupByXmh.computeIfAbsent(groupKey, k -> new ArrayList<>());
Map<String, String> singleEmpValueMap = new HashMap<>();
for (String field : fieldList) {
singleEmpValueMap.put(field, Utils.null2String(rs.getString(field)));
}
// 5个写死的逻辑
BigDecimal yldw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj")));
singleEmpValueMap.put("ylbxdw", yldw.toPlainString());
BigDecimal gsdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdwbj")));
singleEmpValueMap.put("gsbxdw", gsdw.toPlainString());
BigDecimal sydw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydwbj")));
singleEmpValueMap.put("sybxdw", sydw.toPlainString());
BigDecimal yldw1 = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw1")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj1")));
singleEmpValueMap.put("ylbxdw1", yldw1.toPlainString());
BigDecimal gjjdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdwbj")));
singleEmpValueMap.put("zfgjjdw", gjjdw.toPlainString());
groupKeyList.add(singleEmpValueMap);
}
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", "bmxmgzftbjt_mode_id");
// 入库前先删除
rs.execute("delete from uf_bmxmgzftbjt where qj ='" + salaryMonth +"'");
fieldList.add("ylbxdw");
fieldList.add("gsbxdw");
fieldList.add("sybxdw");
fieldList.add("ylbxdw1");
fieldList.add("zfgjjdw");
for (Map.Entry<String, List<Map<String, String>>> entry : listGroupByXmh.entrySet()) {
List<Map<String, String>> valueList = entry.getValue();
Map<String, String> sumValueMap = new HashMap<>();
for(String fieldKey : fieldList) {
BigDecimal sumVal = valueList.stream().map(valueMap -> valueMap.get(fieldKey))
.filter(NumberUtils::isCreatable)
.map(BigDecimal::new)
.reduce(new BigDecimal("0"), BigDecimal::add);
sumValueMap.put(fieldKey, sumVal.toPlainString());
}
String[] split = entry.getKey().split("_split");
String cbzx = split != null && split.length > 0 ? split[0] : "";
String xmh = split != null && split.length > 1 ? split[1] : "";
String xmszsyb = split != null && split.length > 2 ? split[2] : "";
// 入库
StringBuilder insertSqlSb = new StringBuilder("insert into uf_bmxmgzftbjt (formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,qj,cbzx,xmh,xmszsyb,"+StringUtils.join(fieldList, ",")+")VALUES(")
.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'").append(salaryMonth).append("','").append(cbzx).append("','").append(xmh).append("','").append(xmszsyb).append("',");
for (String fieldKey : fieldList) {
insertSqlSb.append(SalaryEntityUtil.string2BigDecimalDefault0(sumValueMap.get(fieldKey)).toPlainString()).append(",");
}
insertSqlSb.append(")");
insertSqlSb.deleteCharAt(insertSqlSb.lastIndexOf(","));
rs.execute(insertSqlSb.toString());
// 权限重构
// 获取最大值 作为权限重构的起始id
rs.execute("select max(id) from uf_bmxmgzftbjt");
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 "";
}
/**
* 联特表5 - 部门项目工资分摊表-实发
* @param salaryMonth
* @return
*/
@Override
public String ltGenBmyfxmgzftbsf(String salaryMonth) {
if (!SalaryDateUtil.checkYearMonth(salaryMonth)) {
throw new SalaryRunTimeException("年月错误");
}
Date salaryMonthDate = SalaryDateUtil.dateStrToLocalYearMonth(salaryMonth);
BaseBean baseBean = new BaseBean();
RecordSet rs = new RecordSet();
// 获取研发工时表对应数据
List<LtYfgsPO> yfgsList = getLtYfgsList(salaryMonthDate);
Map<Long, String> groupMap = SalaryEntityUtil.convert2Map(yfgsList, LtYfgsPO::getXm, po -> po.getCbzx() + "_split" + po.getXmh() + "_split" + po.getXmszsyb());
// 获取需要统计赋值哪些字人员明细工资实发表 部门项目工资分摊表-实发 这些字段的数据库字段名需保持一致
List<String> fieldList = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "bmxmgzftbsf_sum_fields").split(",")).filter(key -> StringUtils.isNotBlank(key)).collect(Collectors.toList());
List<String> selectFieldList = new ArrayList<>();
selectFieldList.addAll(fieldList);
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");
// 获取对应期间人员明细工资实发表
rs.execute("select xm,"+ StringUtils.join(selectFieldList,",")+" from uf_rymxgzsf where qj ='" + SalaryDateUtil.getFormatYearMonth(salaryMonthDate) +"'");
HashMap<String, List<Map<String, String>>> listGroupByXmh = new HashMap<>();
while (rs.next()) {
Long xm = SalaryEntityUtil.string2LongDefault0(rs.getString("xm"));
String groupKey = SalaryEntityUtil.null2String(groupMap.get(xm));
List<Map<String, String>> groupKeyList = listGroupByXmh.computeIfAbsent(groupKey, k -> new ArrayList<>());
Map<String, String> singleEmpValueMap = new HashMap<>();
for (String field : fieldList) {
singleEmpValueMap.put(field, Utils.null2String(rs.getString(field)));
}
// 5个写死的逻辑
BigDecimal yldw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj")));
singleEmpValueMap.put("ylbxdw", yldw.toPlainString());
BigDecimal gsdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdwbj")));
singleEmpValueMap.put("gsbxdw", gsdw.toPlainString());
BigDecimal sydw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydwbj")));
singleEmpValueMap.put("sybxdw", sydw.toPlainString());
BigDecimal yldw1 = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw1")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj1")));
singleEmpValueMap.put("ylbxdw1", yldw1.toPlainString());
BigDecimal gjjdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdwbj")));
singleEmpValueMap.put("zfgjjdw", gjjdw.toPlainString());
groupKeyList.add(singleEmpValueMap);
}
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", "bmxmgzftbsf_mode_id");
// 入库前先删除
rs.execute("delete from uf_bmxmgzftbsf where qj ='" + salaryMonth +"'");
fieldList.add("ylbxdw");
fieldList.add("gsbxdw");
fieldList.add("sybxdw");
fieldList.add("ylbxdw1");
fieldList.add("zfgjjdw");
for (Map.Entry<String, List<Map<String, String>>> entry : listGroupByXmh.entrySet()) {
List<Map<String, String>> valueList = entry.getValue();
Map<String, String> sumValueMap = new HashMap<>();
for(String fieldKey : fieldList) {
BigDecimal sumVal = valueList.stream().map(valueMap -> valueMap.get(fieldKey))
.filter(NumberUtils::isCreatable)
.map(BigDecimal::new)
.reduce(new BigDecimal("0"), BigDecimal::add);
sumValueMap.put(fieldKey, sumVal.toPlainString());
}
String[] split = entry.getKey().split("_split");
String cbzx = split != null && split.length > 0 ? split[0] : "";
String xmh = split != null && split.length > 1 ? split[1] : "";
String xmszsyb = split != null && split.length > 2 ? split[2] : "";
// 入库
StringBuilder insertSqlSb = new StringBuilder("insert into uf_bmxmgzftbsf (formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,qj,cbzx,xmh,xmszsyb,"+StringUtils.join(fieldList, ",")+")VALUES(")
.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'").append(salaryMonth).append("','").append(cbzx).append("','").append(xmh).append("','").append(xmszsyb).append("',");
for (String fieldKey : fieldList) {
insertSqlSb.append(SalaryEntityUtil.string2BigDecimalDefault0(sumValueMap.get(fieldKey)).toPlainString()).append(",");
}
insertSqlSb.append(")");
insertSqlSb.deleteCharAt(insertSqlSb.lastIndexOf(","));
rs.execute(insertSqlSb.toString());
// 权限重构
// 获取最大值 作为权限重构的起始id
rs.execute("select max(id) from uf_bmxmgzftbsf");
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 "";
}
@Override
public String ltGenBmxmgzftb(String salaryMonth) {
if (!SalaryDateUtil.checkYearMonth(salaryMonth)) {
throw new SalaryRunTimeException("年月错误");
}
Date salaryMonthDate = SalaryDateUtil.dateStrToLocalYearMonth(salaryMonth);
BaseBean baseBean = new BaseBean();
RecordSet rs = new RecordSet();
// 获取研发工时表对应数据
List<LtYfgsPO> yfgsList = getLtYfgsList(salaryMonthDate);
Map<Long, String> groupMap = SalaryEntityUtil.convert2Map(yfgsList, LtYfgsPO::getXm, po -> po.getCbzx() + "_split" + po.getXmh() + "_split" + po.getXmszsyb());
// 获取对应的上月当月对应的计提实发 的人员明细工资表数据
Date lastMonthDate = SalaryDateUtil.localDateToDate(SalaryDateUtil.dateToLocalDate(salaryMonthDate).minusMonths(1));
// 本月计提数据
List<LtRymxgzDTO> thisMonthJtInfo = listLtRymxgzInfo(salaryMonthDate, true, groupMap);
Map<String, List<LtRymxgzDTO>> thisMonthJtInfoMap = SalaryEntityUtil.group2Map(thisMonthJtInfo, LtRymxgzDTO::getKey);
// 上月计提数据
List<LtRymxgzDTO> lastMonthJtInfo = listLtRymxgzInfo(lastMonthDate, true, groupMap);
Map<String, List<LtRymxgzDTO>> lastMonthJtInfoMap = SalaryEntityUtil.group2Map(lastMonthJtInfo, LtRymxgzDTO::getKey);
// 本月实发数据
List<LtRymxgzDTO> thisMonthSfInfo = listLtRymxgzInfo(salaryMonthDate, false, groupMap);
Map<String, List<LtRymxgzDTO>> thisMonthSfInfoMap = SalaryEntityUtil.group2Map(thisMonthSfInfo, LtRymxgzDTO::getKey);
// 上月实发数据
List<LtRymxgzDTO> lastMonthSfInfo = listLtRymxgzInfo(lastMonthDate, false, groupMap);
Map<String, List<LtRymxgzDTO>> lastMonthSfInfoMap = SalaryEntityUtil.group2Map(lastMonthSfInfo, LtRymxgzDTO::getKey);
// 获取所有的项目号
Set<String> keyList = new HashSet<>();
keyList.addAll(thisMonthJtInfoMap.keySet());
keyList.addAll(lastMonthJtInfoMap.keySet());
keyList.addAll(thisMonthSfInfoMap.keySet());
keyList.addAll(lastMonthSfInfoMap.keySet());
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", "bmxmgzftb_mode_id");
// 入库前先删除
rs.execute("delete from uf_bmxmfzftb where qj ='" + salaryMonth +"'");
YearMonth yearMonth = SalaryDateUtil.String2YearMonth(salaryMonth);
int monthValue = yearMonth.getMonthValue();
for (String key : keyList) {
BigDecimal gz = new BigDecimal("0");
List<LtRymxgzDTO> thisMonthJtList = CollectionUtils.isEmpty(thisMonthJtInfoMap.get(key)) ? new ArrayList<>() : thisMonthJtInfoMap.get(key) ;
List<LtRymxgzDTO> lastMonthJtList = CollectionUtils.isEmpty(lastMonthJtInfoMap.get(key)) ? new ArrayList<>() : lastMonthJtInfoMap.get(key) ;
List<LtRymxgzDTO> thisMonthSfList = CollectionUtils.isEmpty(thisMonthSfInfoMap.get(key)) ? new ArrayList<>() : thisMonthSfInfoMap.get(key) ;
List<LtRymxgzDTO> lastMonthSfList = CollectionUtils.isEmpty(lastMonthSfInfoMap.get(key)) ? new ArrayList<>() : lastMonthSfInfoMap.get(key) ;
if (monthValue == 2 || monthValue == 3 || monthValue == 5 || monthValue == 6 || monthValue == 8 || monthValue == 9 || monthValue == 11) {
gz = gz.add(lastMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(lastMonthSfList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(thisMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.subtract(thisMonthJtList.stream().map(LtRymxgzDTO::getJx).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
} else if (monthValue == 4 || monthValue == 7 || monthValue == 10) {
gz = gz.add(lastMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(lastMonthSfList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(thisMonthJtList.stream().map(LtRymxgzDTO::getJdjx).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(thisMonthSfList.stream().map(LtRymxgzDTO::getJdjx).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.subtract(thisMonthJtList.stream().map(LtRymxgzDTO::getJx).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.subtract(thisMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
} else if (monthValue == 12) {
gz = gz.add(lastMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(lastMonthSfList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(thisMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.subtract(thisMonthSfList.stream().map(LtRymxgzDTO::getNzj).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
} else {
gz = gz.add(lastMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(lastMonthSfList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(thisMonthJtList.stream().map(LtRymxgzDTO::getNzj).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.add(thisMonthSfList.stream().map(LtRymxgzDTO::getNzj).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.subtract(thisMonthJtList.stream().map(LtRymxgzDTO::getGz).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
gz = gz.subtract(thisMonthJtList.stream().map(LtRymxgzDTO::getJx).filter(v -> v != null).reduce(new BigDecimal("0"), BigDecimal::add));
}
String[] split = key.split("_split");
String cbzx = split != null && split.length > 0 ? split[0] : "";
String xmh = split != null && split.length > 1 ? split[1] : "";
String xmszsyb = split != null && split.length > 2 ? split[2] : "";
// 入库
StringBuilder insertSqlSb = new StringBuilder("insert into uf_bmxmfzftb (formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,qj,cbzx,xmh,xmszsyb,yfgz)VALUES(")
.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'").append(salaryMonth).append("','").append(cbzx).append("','").append(xmh).append("','").append(xmszsyb).append("',").append(gz.toPlainString()).append(")");
rs.execute(insertSqlSb.toString());
// 权限重构
// 获取最大值 作为权限重构的起始id
rs.execute("select max(id) from uf_bmxmfzftb");
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 "";
}
}

View File

@ -698,6 +698,7 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee
.accountTypeName(AccountTypeEnum.getDefaultLabelByValue(hrmSnapshotPO.getAccounttype()))
.accountType(hrmSnapshotPO.getAccounttype())
.ltCbzx(hrmSnapshotPO.getLtCbzx())
.ltRylb(hrmSnapshotPO.getLtRylb())
.build())
.orElse(currentEmployeeMap.get(employeeId));
}).collect(Collectors.toList());

View File

@ -40,13 +40,16 @@ public class HrmSnapshotJob extends BaseCronJob {
BaseBean baseBean = new BaseBean();
String cbzxField = baseBean.getPropValue("ltSalaryReport", "cbzx_field_name");
String cbzxCodeField = baseBean.getPropValue("ltSalaryReport", "cbzx_code_field_name");
String rylbField = baseBean.getPropValue("ltSalaryReport", "rylb_field_name");
RecordSet rs = new RecordSet();
rs.execute("select id,"+cbzxField +","+cbzxCodeField+" from cus_fielddata where scopeid=3 ");
rs.execute("select id,"+cbzxField +","+cbzxCodeField+","+rylbField+" from cus_fielddata where scopeid=3 ");
HashMap<Long, String> ltCbzxMap = new HashMap<>();
HashMap<Long, String> ltCbzxCodeMap = new HashMap<>();
HashMap<Long, String> ltRylbMap = new HashMap<>();
while (rs.next()) {
ltCbzxMap.put(Long.valueOf(rs.getInt("id")), rs.getString(cbzxField));
ltCbzxCodeMap.put(Long.valueOf(rs.getInt("id")), rs.getString(cbzxCodeField));
ltRylbMap.put(Long.valueOf(rs.getInt("id")), rs.getString(rylbField));
}
@ -66,6 +69,7 @@ public class HrmSnapshotJob extends BaseCronJob {
po.setLtCbzxcode(Utils.null2String(ltCbzxCodeMap.get(po.getEmployeeId())));
po.setLtGwpc(Utils.null2String(ltGwpcMap.get(po.getEmployeeId())));
po.setLtXcbzsc(Utils.null2String(ltXcbzscMap.get(po.getEmployeeId())));
po.setLtRylb(Utils.null2String(ltRylbMap.get(po.getEmployeeId())));
});
Date snapshotTime = StrUtil.isNotBlank(appointSnapshotTime) && SalaryDateUtil.checkDay(appointSnapshotTime) ? SalaryDateUtil.dateStrToLocalDate(appointSnapshotTime) : SalaryDateUtil.localDateToDate(LocalDate.now());

View File

@ -1147,7 +1147,93 @@ public class SalaryAcctController {
@Produces(MediaType.APPLICATION_JSON)
public String ltGenKb(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam(value = "salaryMonth") String salaryMonth) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, Map<String, Object>>(user).run(getSalaryAcctResultWrapper(user)::ltGenKb, salaryMonth);
return new ResponseResult<String, String>(user).run(getSalaryAcctResultWrapper(user)::ltGenKb, salaryMonth);
}
/**
* 联特 表5 - 研发项目工资分摊表-当月计提
* @param request
* @param response
* @return
*/
@GET
@Path("/ltSalaryReport/genYfxmgzftbdyjt")
@Produces(MediaType.APPLICATION_JSON)
public String ltGenYfxmgzftbdyjt(@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)::ltGenYfxmgzftbdyjt, salaryMonth);
}
/**
* 联特 表5 - 研发项目工资分摊表-当月实发
* @param request
* @param response
* @return
*/
@GET
@Path("/ltSalaryReport/genYfxmgzftbdysf")
@Produces(MediaType.APPLICATION_JSON)
public String ltGenYfxmgzftbdysf(@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)::ltGenYfxmgzftbdysf, salaryMonth);
}
/**
* 联特 表5 - 研发项目工资分摊表
* @param request
* @param response
* @return
*/
@GET
@Path("/ltSalaryReport/genYfxmgzftb")
@Produces(MediaType.APPLICATION_JSON)
public String ltGenYfxmgzftb(@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)::ltGenYfxmgzftb, salaryMonth);
}
/**
* 联特表5 - 部门研发项目工资分摊表-计提
* @param request
* @param response
* @return
*/
@GET
@Path("/ltSalaryReport/genBmyfxmgzftbjt")
@Produces(MediaType.APPLICATION_JSON)
public String ltGenBmyfxmgzftbjt(@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)::ltGenBmyfxmgzftbjt, salaryMonth);
}
/**
* 联特表5 - 部门研发项目工资分摊表-实发
* @param request
* @param response
* @return
*/
@GET
@Path("/ltSalaryReport/genBmyfxmgzftbsf")
@Produces(MediaType.APPLICATION_JSON)
public String ltGenBmyfxmgzftbsf(@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)::ltGenBmyfxmgzftbsf, salaryMonth);
}
/**
* 联特 表5 - 部门项目工资分摊表
* @param request
* @param response
* @return
*/
@GET
@Path("/ltSalaryReport/genBmxmgzftb")
@Produces(MediaType.APPLICATION_JSON)
public String ltGenBmxmgzftb(@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)::ltGenBmxmgzftb, salaryMonth);
}
/**********************************联特 报表end*********************************/
}

View File

@ -450,4 +450,58 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult
public String ltGenKb(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenKb(salaryMonth);
}
/**
* 表5 - 研发项目工资分摊表-当月计提
* @param salaryMonth
* @return
*/
public String ltGenYfxmgzftbdyjt(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenYfxmgzftbdyjt(salaryMonth);
}
/**
* 表5 - 研发项目工资分摊表-当月实发
* @param salaryMonth
* @return
*/
public String ltGenYfxmgzftbdysf(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenYfxmgzftbdysf(salaryMonth);
}
/**
* 表5 - 研发项目工资分摊表
* @param salaryMonth
* @return
*/
public String ltGenYfxmgzftb(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenYfxmgzftb(salaryMonth);
}
/**
* 表5 - 部门研发项目工资分摊表-计提
* @param salaryMonth
* @return
*/
public String ltGenBmyfxmgzftbjt(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenBmyfxmgzftbjt(salaryMonth);
}
/**
* 表5 - 部门研发项目工资分摊表-实发
* @param salaryMonth
* @return
*/
public String ltGenBmyfxmgzftbsf(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenBmyfxmgzftbsf(salaryMonth);
}
/**
* 表5 - 部门项目工资分摊表-实发
* @param salaryMonth
* @return
*/
public String ltGenBmxmgzftb(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenBmxmgzftb(salaryMonth);
}
}