|
|
|
|
@ -57,6 +57,7 @@ import com.engine.salary.util.SalaryDateUtil;
|
|
|
|
|
import com.engine.salary.util.SalaryEntityUtil;
|
|
|
|
|
import com.engine.salary.util.SalaryI18nUtil;
|
|
|
|
|
import com.engine.salary.util.db.MapperProxyFactory;
|
|
|
|
|
import com.engine.salary.util.excel.ExcelUtil;
|
|
|
|
|
import com.engine.salary.util.page.Column;
|
|
|
|
|
import com.engine.salary.util.page.PageInfo;
|
|
|
|
|
import com.engine.salary.util.page.SalaryPageUtil;
|
|
|
|
|
@ -71,6 +72,7 @@ import org.apache.commons.collections4.CollectionUtils;
|
|
|
|
|
import org.apache.commons.collections4.MapUtils;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.apache.commons.lang3.math.NumberUtils;
|
|
|
|
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
|
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
|
|
|
|
@ -1619,6 +1621,15 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
// Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).listByIds(empIds), DataCollectionEmployee::getEmployeeId);
|
|
|
|
|
// 查询快照表中人员信息
|
|
|
|
|
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).snapshot(empIds, SalaryDateUtil.localDateToDate(yearMonth.atDay(1))), DataCollectionEmployee::getEmployeeId);
|
|
|
|
|
// 获取直接人工分摊表中成本中心数据
|
|
|
|
|
Map<String, String> ltCbzxMap = new HashMap<>();
|
|
|
|
|
String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
|
|
|
|
|
RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
|
|
|
|
|
extRs.execute(" select user_code,sap_cost_center_name,sap_cost_center_name_desc from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
|
|
|
|
|
while (extRs.next()) {
|
|
|
|
|
ltCbzxMap.put(extRs.getString("user_code"), extRs.getString("sap_cost_center_name_desc"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 删除建模数据
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
rs.execute("delete from uf_bmsbmxb where xzszy = '" + salaryMonth+ "'");
|
|
|
|
|
@ -1640,7 +1651,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
.append(employee.getDepartmentId()).append(",")
|
|
|
|
|
.append(employee.getJobtitleId()).append(",'")
|
|
|
|
|
.append(salaryMonth).append("','")
|
|
|
|
|
.append(Utils.null2String(employee.getLtCbzx())).append("'");
|
|
|
|
|
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
|
|
|
|
|
.append("'");
|
|
|
|
|
|
|
|
|
|
for (LtSalaryReportConfigDTO dto : configs) {
|
|
|
|
|
String val = Utils.null2String(firstData.get(Utils.null2String(dto.getItem()) + "_variableItem" ));
|
|
|
|
|
@ -1672,7 +1684,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
.append(employeePo.getDepartmentId()).append(",")
|
|
|
|
|
.append(employeePo.getJobtitleId()).append(",'")
|
|
|
|
|
.append(salaryMonth).append("','")
|
|
|
|
|
.append(Utils.null2String(employeePo.getLtCbzx())).append("'");
|
|
|
|
|
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
|
|
|
|
|
.append("'");
|
|
|
|
|
for (LtSalaryReportConfigDTO dto : configs) {
|
|
|
|
|
String val = Utils.null2String(data.getOrDefault(Utils.null2String(dto.getItem()) + "_variableItem", ""));
|
|
|
|
|
sb.append(",").append(NumberUtils.isCreatable(val) ? val : 0);
|
|
|
|
|
@ -1728,6 +1741,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
// Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).listByIds(empIds), DataCollectionEmployee::getEmployeeId);
|
|
|
|
|
// 查询快照表中人员信息
|
|
|
|
|
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).snapshot(empIds, SalaryDateUtil.localDateToDate(yearMonth.atDay(1))), DataCollectionEmployee::getEmployeeId);
|
|
|
|
|
// 获取直接人工分摊表中成本中心数据
|
|
|
|
|
Map<String, String> ltCbzxMap = new HashMap<>();
|
|
|
|
|
String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
|
|
|
|
|
RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
|
|
|
|
|
extRs.execute(" select user_code,sap_cost_center_name,sap_cost_center_name_desc from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
|
|
|
|
|
while (extRs.next()) {
|
|
|
|
|
ltCbzxMap.put(extRs.getString("user_code"), extRs.getString("sap_cost_center_name_desc"));
|
|
|
|
|
}
|
|
|
|
|
// 删除建模数据
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
rs.execute("delete from uf_bmgjjmxb where xzszy = '" + salaryMonth+ "'");
|
|
|
|
|
@ -1749,7 +1770,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
.append(employee.getDepartmentId()).append(",")
|
|
|
|
|
.append(employee.getJobtitleId()).append(",'")
|
|
|
|
|
.append(salaryMonth).append("','")
|
|
|
|
|
.append(Utils.null2String(employee.getLtCbzx())).append("'");
|
|
|
|
|
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
|
|
|
|
|
.append("'");
|
|
|
|
|
|
|
|
|
|
for (LtSalaryReportConfigDTO dto : configs) {
|
|
|
|
|
String val = Utils.null2String(firstData.getOrDefault(Utils.null2String(dto.getItem()) + "_variableItem", ""));
|
|
|
|
|
@ -1781,7 +1803,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
.append(employeePo.getDepartmentId()).append(",")
|
|
|
|
|
.append(employeePo.getJobtitleId()).append(",'")
|
|
|
|
|
.append(salaryMonth).append("','")
|
|
|
|
|
.append(Utils.null2String(employeePo.getLtCbzx())).append("'");
|
|
|
|
|
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
|
|
|
|
|
.append("'");
|
|
|
|
|
for (LtSalaryReportConfigDTO dto : configs) {
|
|
|
|
|
String val = Utils.null2String(data.getOrDefault(Utils.null2String(dto.getItem()) + "_variableItem", ""));
|
|
|
|
|
sb.append(",").append(NumberUtils.isCreatable(val) ? val : 0);
|
|
|
|
|
@ -1821,12 +1844,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
List<Map<String, Object>> variableMapList = getVariableArchiveService(user).listBySalaryMonthAndItems(yearMonth, variableItemIds);
|
|
|
|
|
log.info("部门工资奖金明细表计提size{} ",variableMapList == null ? 0 :variableMapList.size());
|
|
|
|
|
// 获取直接人工工资分摊表的人
|
|
|
|
|
Map<String, String> ltCbzxMap = new HashMap<>();
|
|
|
|
|
String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
|
|
|
|
|
RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
|
|
|
|
|
extRs.execute(" select month, user_code from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
|
|
|
|
|
extRs.execute(" select month, user_code,sap_cost_center_name_desc from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
|
|
|
|
|
List<String> needExcludeWorkCodeList = new ArrayList<>();
|
|
|
|
|
while (extRs.next()) {
|
|
|
|
|
needExcludeWorkCodeList.add(extRs.getString("user_code"));
|
|
|
|
|
ltCbzxMap.put(extRs.getString("user_code"), extRs.getString("sap_cost_center_name_desc"));
|
|
|
|
|
}
|
|
|
|
|
if (CollectionUtils.isNotEmpty(needExcludeWorkCodeList)) {
|
|
|
|
|
// 获取需要去除的人员id
|
|
|
|
|
@ -1920,7 +1945,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
.append(employee.getDepartmentId()).append(",")
|
|
|
|
|
.append(employee.getJobtitleId()).append(",'")
|
|
|
|
|
.append(salaryMonth).append("','")
|
|
|
|
|
.append(Utils.null2String(employee.getLtCbzx())).append("',")
|
|
|
|
|
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
|
|
|
|
|
.append("',")
|
|
|
|
|
.append(jxgz);
|
|
|
|
|
|
|
|
|
|
for (LtSalaryReportConfigDTO dto : reportConfigs) {
|
|
|
|
|
@ -1966,7 +1992,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
.append(employee.getDepartmentId()).append(",")
|
|
|
|
|
.append(employee.getJobtitleId()).append(",'")
|
|
|
|
|
.append(salaryMonth).append("','")
|
|
|
|
|
.append(Utils.null2String(employee.getLtCbzx())).append("',")
|
|
|
|
|
// .append(Utils.null2String(employee.getLtCbzx()))
|
|
|
|
|
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
|
|
|
|
|
.append("',")
|
|
|
|
|
.append(jxgz);
|
|
|
|
|
for (LtSalaryReportConfigDTO dto : reportConfigs) {
|
|
|
|
|
BigDecimal val = new BigDecimal("0");
|
|
|
|
|
@ -2012,13 +2040,16 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
List<Map<String, Object>> variableMapList = getVariableArchiveService(user).listBySalaryMonthAndItems(yearMonth, variableItemIds);
|
|
|
|
|
log.info("部门工资奖金明细表实发size{} ",variableMapList == null ? 0 : variableMapList.size());
|
|
|
|
|
// 获取直接人工工资分摊表的人
|
|
|
|
|
Map<String, String> ltCbzxMap = new HashMap<>();
|
|
|
|
|
String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
|
|
|
|
|
RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
|
|
|
|
|
extRs.execute(" select month, user_code from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
|
|
|
|
|
extRs.execute(" select month, user_code,sap_cost_center_name_desc from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
|
|
|
|
|
List<String> needExcludeWorkCodeList = new ArrayList<>();
|
|
|
|
|
while (extRs.next()) {
|
|
|
|
|
needExcludeWorkCodeList.add(extRs.getString("user_code"));
|
|
|
|
|
ltCbzxMap.put(extRs.getString("user_code"), extRs.getString("sap_cost_center_name_desc"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(needExcludeWorkCodeList)) {
|
|
|
|
|
// 获取需要去除的人员id
|
|
|
|
|
List<String> excludeEmpIds = getSalaryEmployeeService(user).listByWorkCodes(needExcludeWorkCodeList).stream().map(emp -> Utils.null2String(emp.getEmployeeId())).collect(Collectors.toList());
|
|
|
|
|
@ -2111,7 +2142,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
.append(employee.getDepartmentId()).append(",")
|
|
|
|
|
.append(employee.getJobtitleId()).append(",'")
|
|
|
|
|
.append(salaryMonth).append("','")
|
|
|
|
|
.append(Utils.null2String(employee.getLtCbzx())).append("',")
|
|
|
|
|
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
|
|
|
|
|
// .append(Utils.null2String(employee.getLtCbzx()))
|
|
|
|
|
.append("',")
|
|
|
|
|
.append(jxgz);
|
|
|
|
|
|
|
|
|
|
for (LtSalaryReportConfigDTO dto : reportConfigs) {
|
|
|
|
|
@ -2156,7 +2189,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
.append(employee.getDepartmentId()).append(",")
|
|
|
|
|
.append(employee.getJobtitleId()).append(",'")
|
|
|
|
|
.append(salaryMonth).append("','")
|
|
|
|
|
.append(Utils.null2String(employee.getLtCbzx())).append("',")
|
|
|
|
|
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
|
|
|
|
|
// .append(Utils.null2String(employee.getLtCbzx()))
|
|
|
|
|
.append("',")
|
|
|
|
|
.append(jxgz);
|
|
|
|
|
for (LtSalaryReportConfigDTO dto : reportConfigs) {
|
|
|
|
|
BigDecimal val = new BigDecimal("0");
|
|
|
|
|
@ -2238,7 +2273,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
|
|
|
|
|
// 查询快照表中人员信息
|
|
|
|
|
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).snapshot(employeeIdList, SalaryDateUtil.localDateToDate(yearMonth.atDay(1))), DataCollectionEmployee::getEmployeeId);
|
|
|
|
|
|
|
|
|
|
// 获取直接人工分摊表中成本中心数据
|
|
|
|
|
Map<String, String> ltCbzxMap = new HashMap<>();
|
|
|
|
|
String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
|
|
|
|
|
RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
|
|
|
|
|
extRs.execute(" select user_code,sap_cost_center_name,sap_cost_center_name_desc from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
|
|
|
|
|
while (extRs.next()) {
|
|
|
|
|
ltCbzxMap.put(extRs.getString("user_code"), extRs.getString("sap_cost_center_name_desc"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 入库
|
|
|
|
|
// 删除建模数据
|
|
|
|
|
@ -2301,7 +2343,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
.append(employee.getJobtitleId()).append(",")
|
|
|
|
|
.append(employee.getLtRylb()).append(",'")
|
|
|
|
|
.append(salaryMonth).append("','")
|
|
|
|
|
.append(Utils.null2String(employee.getLtCbzx())).append("',")
|
|
|
|
|
// .append(Utils.null2String(employee.getLtCbzx()))
|
|
|
|
|
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
|
|
|
|
|
.append("',")
|
|
|
|
|
.append(jx).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
|
|
|
|
|
|
|
|
|
|
for (LtSalaryReportConfigDTO dto : reportConfigs) {
|
|
|
|
|
@ -2387,7 +2431,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
.append(employee.getJobtitleId()).append(",")
|
|
|
|
|
.append(employee.getLtRylb()).append(",'")
|
|
|
|
|
.append(salaryMonth).append("','")
|
|
|
|
|
.append(Utils.null2String(employee.getLtCbzx())).append("',")
|
|
|
|
|
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
|
|
|
|
|
// .append(Utils.null2String(employee.getLtCbzx()))
|
|
|
|
|
.append("',")
|
|
|
|
|
.append(jx).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
|
|
|
|
|
|
|
|
|
|
for (LtSalaryReportConfigDTO dto : reportConfigs) {
|
|
|
|
|
@ -2541,6 +2587,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
|
|
|
|
|
// 查询快照表中人员信息
|
|
|
|
|
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).snapshot(totalEmpIds.stream().collect(Collectors.toList()), SalaryDateUtil.localDateToDate(yearMonth.atDay(1))), DataCollectionEmployee::getEmployeeId);
|
|
|
|
|
// 获取直接人工分摊表中成本中心数据
|
|
|
|
|
Map<String, String> ltCbzxMap = new HashMap<>();
|
|
|
|
|
String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id");
|
|
|
|
|
RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId);
|
|
|
|
|
extRs.execute(" select user_code,sap_cost_center_name,sap_cost_center_name_desc from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'");
|
|
|
|
|
while (extRs.next()) {
|
|
|
|
|
ltCbzxMap.put(extRs.getString("user_code"), extRs.getString("sap_cost_center_name_desc"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 入库
|
|
|
|
|
// 删除建模数据
|
|
|
|
|
@ -2577,7 +2631,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
.append(employee.getJobtitleId()).append(",")
|
|
|
|
|
.append(employee.getLtRylb()).append(",'")
|
|
|
|
|
.append(salaryMonth).append("','")
|
|
|
|
|
.append(Utils.null2String(employee.getLtCbzx())).append("',")
|
|
|
|
|
// .append(Utils.null2String(employee.getLtCbzx()))
|
|
|
|
|
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
|
|
|
|
|
.append("',")
|
|
|
|
|
.append(0).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
|
|
|
|
|
|
|
|
|
|
for (LtSalaryReportConfigDTO dto : reportConfigs) {
|
|
|
|
|
@ -2638,7 +2694,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
.append(employee.getJobtitleId()).append(",")
|
|
|
|
|
.append(employee.getLtRylb()).append(",'")
|
|
|
|
|
.append(salaryMonth).append("','")
|
|
|
|
|
.append(Utils.null2String(employee.getLtCbzx())).append("',")
|
|
|
|
|
.append(StringUtils.isBlank(ltCbzxMap.get(employee.getWorkcode())) ? Utils.null2String(employee.getLtCbzx()) : ltCbzxMap.get(employee.getWorkcode()))
|
|
|
|
|
// .append(Utils.null2String(employee.getLtCbzx()))
|
|
|
|
|
.append("',")
|
|
|
|
|
.append(0).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
|
|
|
|
|
|
|
|
|
|
for (LtSalaryReportConfigDTO dto : reportConfigs) {
|
|
|
|
|
@ -4386,28 +4444,28 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
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()) {
|
|
|
|
|
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(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")));
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
@ -4575,28 +4633,28 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
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()) {
|
|
|
|
|
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(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")));
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
@ -4762,7 +4820,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
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");
|
|
|
|
|
rs.execute("select gh,szbm,szgw,yfgz,ydjx,jdjx,nzj,qjlxj,bndjx from uf_rymxgzsf where qj >= '" + year + "-01' and qj <= '"+year+"-12'");
|
|
|
|
|
List<LtRymxgzDTO> ltRymxgzDTOList = new ArrayList<>();
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
ltRymxgzDTOList.add(LtRymxgzDTO.builder()
|
|
|
|
|
@ -4772,6 +4830,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
.gz(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yfgz")))
|
|
|
|
|
.jx(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("ydjx")))
|
|
|
|
|
.jdjx(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("jdjx")))
|
|
|
|
|
.bndjx(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("bndjx")))
|
|
|
|
|
.qtjlxj(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("qjlxj")))
|
|
|
|
|
.nzj(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("nzj")))
|
|
|
|
|
.build());
|
|
|
|
|
@ -4781,7 +4840,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
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");
|
|
|
|
|
String modeId = baseBean.getPropValue("ltSalaryReport", "gwpjgzcx_mode_id");
|
|
|
|
|
// 入库前先删除
|
|
|
|
|
rs.execute("delete from uf_gwpjgzcxb where nf ='" + year +"'");
|
|
|
|
|
|
|
|
|
|
@ -4804,6 +4863,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
}
|
|
|
|
|
// 计算平均月薪
|
|
|
|
|
BigDecimal empAveMonthSalary = empYearSumVal.divide(new BigDecimal(String.valueOf(ghDtoList.size())), 2, RoundingMode.HALF_UP);
|
|
|
|
|
sumEmpAveMonthSalary = sumEmpAveMonthSalary.add(empAveMonthSalary);
|
|
|
|
|
empNums++;
|
|
|
|
|
}
|
|
|
|
|
BigDecimal aveValue = sumEmpAveMonthSalary.divide(new BigDecimal(String.valueOf(empNums)), 2, RoundingMode.HALF_UP);
|
|
|
|
|
@ -4830,4 +4890,618 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 联特 表8 - 工资分摊表
|
|
|
|
|
* @param salaryMonth
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> ltGenGzftb(String salaryMonth) {
|
|
|
|
|
if (!SalaryDateUtil.checkYearMonth(salaryMonth)) {
|
|
|
|
|
throw new SalaryRunTimeException("年月错误");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BaseBean baseBean = new BaseBean();
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
// 获取武汉间接部门表数据
|
|
|
|
|
ArrayList<LtWhjjbmPO> ltWhjjbmPOS = new ArrayList<>();
|
|
|
|
|
rs.executeQuery("select xm,cbzx,jjbm,zb from uf_whjj where xzssy = ?", salaryMonth);
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
ltWhjjbmPOS.add(LtWhjjbmPO.builder()
|
|
|
|
|
.xm(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))
|
|
|
|
|
.cbzx(rs.getString("cbzx"))
|
|
|
|
|
.jjbm(rs.getString("jjbm"))
|
|
|
|
|
.zb(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("zb"))).build());
|
|
|
|
|
}
|
|
|
|
|
// 计算武汉间接部门对应的工资及工资额度
|
|
|
|
|
calWhjjbmGz(salaryMonth, ltWhjjbmPOS);
|
|
|
|
|
// 获取公共的是哪些成本中心
|
|
|
|
|
List<String> ggcbzxList = new ArrayList<>();
|
|
|
|
|
try {
|
|
|
|
|
String ggcbzxStr = new String(rs.getPropValue("ltSalaryReport", "gzftb_ggcbzx").getBytes("ISO-8859-1"), "utf-8");
|
|
|
|
|
ggcbzxList = Arrays.stream(ggcbzxStr.split(",")).collect(Collectors.toList());
|
|
|
|
|
} catch (UnsupportedEncodingException e) {
|
|
|
|
|
}
|
|
|
|
|
// 过滤成本中心和和公共数据
|
|
|
|
|
List<LtWhjjbmPO> cbzxWhjjbmList = new ArrayList<>();
|
|
|
|
|
List<LtWhjjbmPO> ggWhjjbmList = new ArrayList<>();
|
|
|
|
|
List<String> finalGgcbzxList = ggcbzxList;
|
|
|
|
|
ltWhjjbmPOS.stream().forEach(po -> {
|
|
|
|
|
if (finalGgcbzxList.contains(po.getCbzx())) {
|
|
|
|
|
ggWhjjbmList.add(po);
|
|
|
|
|
} else {
|
|
|
|
|
cbzxWhjjbmList.add(po);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 获取所有的间接部门
|
|
|
|
|
List<String> allJjbmList = cbzxWhjjbmList.stream().map(LtWhjjbmPO::getJjbm).distinct().sorted(String::compareTo).collect(Collectors.toList());
|
|
|
|
|
// 成本中心数据根据成本中心分组展示
|
|
|
|
|
Map<String, List<LtWhjjbmPO>> cbzxWhjjbmMapGroupByCbzx = SalaryEntityUtil.group2Map(cbzxWhjjbmList, LtWhjjbmPO::getCbzx);
|
|
|
|
|
// 所有成本中心的工资总额
|
|
|
|
|
BigDecimal allCbzxGzzeVal = new BigDecimal("0");
|
|
|
|
|
List<Map<String, Object>> dtoList = new ArrayList<>();
|
|
|
|
|
for (Map.Entry<String, List<LtWhjjbmPO>> entry : cbzxWhjjbmMapGroupByCbzx.entrySet()) {
|
|
|
|
|
Map<String, Object> singleCbzxValueMap = new HashMap<>();
|
|
|
|
|
List<LtWhjjbmPO> singleCbzxWhjjbmList = entry.getValue();
|
|
|
|
|
BigDecimal singleAllJjbmVal = new BigDecimal("0");
|
|
|
|
|
for (String jjbm : allJjbmList) {
|
|
|
|
|
BigDecimal sumVal = singleCbzxWhjjbmList.stream().filter(po -> po.getJjbm().equals(jjbm))
|
|
|
|
|
.map(LtWhjjbmPO::getGzed)
|
|
|
|
|
.filter(gzed -> gzed != null)
|
|
|
|
|
.reduce(new BigDecimal("0"), BigDecimal::add);
|
|
|
|
|
singleCbzxValueMap.put(jjbm, sumVal.toPlainString());
|
|
|
|
|
singleAllJjbmVal= singleAllJjbmVal.add(sumVal);
|
|
|
|
|
}
|
|
|
|
|
singleCbzxValueMap.put("hj", singleAllJjbmVal.toPlainString());
|
|
|
|
|
singleCbzxValueMap.put("cbzx", entry.getKey());
|
|
|
|
|
allCbzxGzzeVal = allCbzxGzzeVal.add(singleAllJjbmVal);
|
|
|
|
|
dtoList.add(singleCbzxValueMap);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 计算比例
|
|
|
|
|
BigDecimal totalBl = new BigDecimal("0");
|
|
|
|
|
for (Map<String, Object> singleCbzxValueMap : dtoList) {
|
|
|
|
|
BigDecimal singleHjVal = SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(singleCbzxValueMap.get("hj")));
|
|
|
|
|
BigDecimal blVal = singleHjVal.divide(allCbzxGzzeVal, 4, RoundingMode.HALF_UP);
|
|
|
|
|
totalBl = totalBl.add(blVal);
|
|
|
|
|
singleCbzxValueMap.put("bl", blVal.toString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (totalBl.compareTo(new BigDecimal("1")) != 0) {
|
|
|
|
|
// 计算比例差异
|
|
|
|
|
BigDecimal cyValue = new BigDecimal("1").subtract(totalBl);
|
|
|
|
|
for (Map<String, Object> singleCbzxValueMap : dtoList) {
|
|
|
|
|
BigDecimal blVal = SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(singleCbzxValueMap.get("bl")));
|
|
|
|
|
if (blVal.compareTo(new BigDecimal("0")) != 0) {
|
|
|
|
|
blVal = blVal.add(cyValue);
|
|
|
|
|
singleCbzxValueMap.put("bl", blVal.toString());
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 所有公共分摊的合计值
|
|
|
|
|
BigDecimal ggftSumVal = ggWhjjbmList.stream().map(LtWhjjbmPO::getGzed).filter(gzed -> gzed != null).reduce(new BigDecimal("0"), BigDecimal::add);
|
|
|
|
|
// 计算每一个成本中心对应的公共分摊值
|
|
|
|
|
for (Map<String, Object> singleCbzxValueMap : dtoList) {
|
|
|
|
|
BigDecimal blVal = SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(singleCbzxValueMap.get("bl")));
|
|
|
|
|
singleCbzxValueMap.put("ggft", ggftSumVal.multiply(blVal));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 合计值
|
|
|
|
|
Map<String, BigDecimal> sumMap = new HashMap<>();
|
|
|
|
|
for (Map<String, Object> singleCbzxValueMap : dtoList) {
|
|
|
|
|
BigDecimal ggft = sumMap.computeIfAbsent("ggft", k -> new BigDecimal("0"));
|
|
|
|
|
BigDecimal ggftSum = ggft.add(SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(singleCbzxValueMap.get("ggft"))));
|
|
|
|
|
sumMap.put("ggft", ggftSum);
|
|
|
|
|
BigDecimal hj = sumMap.computeIfAbsent("hj", k -> new BigDecimal("0"));
|
|
|
|
|
BigDecimal hjSum = hj.add(SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(singleCbzxValueMap.get("hj"))));
|
|
|
|
|
sumMap.put("hj", hjSum);
|
|
|
|
|
for (String jjbm : allJjbmList) {
|
|
|
|
|
BigDecimal jjbmVal = sumMap.computeIfAbsent(jjbm, k -> new BigDecimal("0"));
|
|
|
|
|
BigDecimal jjbmSum = jjbmVal.add(SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(singleCbzxValueMap.get(jjbm))));
|
|
|
|
|
sumMap.put(jjbm, jjbmSum);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Map<String, Object> sumValueMap = new HashMap<>();
|
|
|
|
|
sumValueMap.put("cbzx", "合计");
|
|
|
|
|
sumValueMap.put("ggft", sumMap.get("ggft") == null ? "0" : sumMap.get("ggft").toPlainString());
|
|
|
|
|
sumValueMap.put("hj", sumMap.get("hj") == null ? "0" : sumMap.get("hj").toPlainString());
|
|
|
|
|
for (String jjbm : allJjbmList) {
|
|
|
|
|
sumValueMap.put(jjbm, sumMap.get(jjbm) == null ? 0 : sumMap.get(jjbm).toPlainString());
|
|
|
|
|
}
|
|
|
|
|
dtoList.add(sumValueMap);
|
|
|
|
|
|
|
|
|
|
List<Column> columns = new ArrayList<>();
|
|
|
|
|
columns.add(new Column("成本中心","cbzx","cbzx"));
|
|
|
|
|
columns.add(new Column("公共分摊","ggft","ggft"));
|
|
|
|
|
for (String jjbm : allJjbmList) {
|
|
|
|
|
columns.add(new Column(jjbm,jjbm,jjbm));
|
|
|
|
|
}
|
|
|
|
|
columns.add(new Column("合计","hj","hj"));
|
|
|
|
|
|
|
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
|
|
resultMap.put("data", dtoList);
|
|
|
|
|
resultMap.put("columns", columns);
|
|
|
|
|
|
|
|
|
|
return resultMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 计算武汉间接部门对应的工资及工资额度
|
|
|
|
|
private void calWhjjbmGz(String salaryMonth, List<LtWhjjbmPO> ltWhjjbmPOS) {
|
|
|
|
|
if (CollectionUtils.isEmpty(ltWhjjbmPOS)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// 获取对应的实发数据
|
|
|
|
|
List<Long> employeeIds = ltWhjjbmPOS.stream().map(LtWhjjbmPO::getXm).collect(Collectors.toList());
|
|
|
|
|
// 获取对应期间人员明细工资实发表
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
BaseBean baseBean = new BaseBean();
|
|
|
|
|
String sfFieldsStr = baseBean.getPropValue("ltSalaryReport", "gzftb_sum_sf_fields");
|
|
|
|
|
List<String> sfFieldList = Arrays.stream(sfFieldsStr.split(",")).filter(field -> StringUtils.isNotBlank(field)).collect(Collectors.toList());
|
|
|
|
|
List<LtRymxgzDTO> ltRymxgzDTOList = new ArrayList<>();
|
|
|
|
|
List<List<Long>> empIdPartition = Lists.partition(employeeIds, 800);
|
|
|
|
|
empIdPartition.forEach(part -> {
|
|
|
|
|
rs.execute("select xm,"+sfFieldsStr+" from uf_rymxgzsf where qj = '"+salaryMonth+"' and xm in (" + StringUtils.join(part, ",") + ")");
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
BigDecimal sfValue = new BigDecimal("0");
|
|
|
|
|
for (String field : sfFieldList) {
|
|
|
|
|
sfValue = sfValue.add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString(field)));
|
|
|
|
|
}
|
|
|
|
|
ltRymxgzDTOList.add(LtRymxgzDTO.builder()
|
|
|
|
|
.xm(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))
|
|
|
|
|
.gz(sfValue)
|
|
|
|
|
.build());
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Map<Long, LtRymxgzDTO> ltRymxgzDTOMap = SalaryEntityUtil.convert2Map(ltRymxgzDTOList, LtRymxgzDTO::getXm);
|
|
|
|
|
|
|
|
|
|
for (LtWhjjbmPO po : ltWhjjbmPOS) {
|
|
|
|
|
LtRymxgzDTO ltRymxgzDTO = ltRymxgzDTOMap.get(po.getXm());
|
|
|
|
|
if (ltRymxgzDTO != null) {
|
|
|
|
|
po.setGz(ltRymxgzDTO.getGz());
|
|
|
|
|
if (po.getZb() != null) {
|
|
|
|
|
po.setGzed(ltRymxgzDTO.getGz().multiply(po.getZb()).setScale(2, RoundingMode.HALF_UP));
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
po.setGz(new BigDecimal("0"));
|
|
|
|
|
po.setGzed(new BigDecimal("0"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public XSSFWorkbook exportLtGzftb(LtReportParam param) {
|
|
|
|
|
Map<String, Object> map = ltGenGzftb(param.getSalaryMonth());
|
|
|
|
|
List<Column> columns = (List<Column>)map.get("columns");
|
|
|
|
|
List<Map<String, Object>> dataList = (List<Map<String, Object>>)map.get("data");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<List<Object>> rowList = new ArrayList<>();
|
|
|
|
|
rowList.add(columns.stream().map(Column::getTitle).collect(Collectors.toList()));
|
|
|
|
|
for (Map<String, Object> valueMap : dataList) {
|
|
|
|
|
List<Object> singleList = new ArrayList<>();
|
|
|
|
|
for (Column col : columns) {
|
|
|
|
|
Object o = valueMap.get(col.getKey());
|
|
|
|
|
singleList.add(o);
|
|
|
|
|
}
|
|
|
|
|
rowList.add(singleList);
|
|
|
|
|
}
|
|
|
|
|
return ExcelUtil.genWorkbookV2(rowList, "工资分摊表");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 联特 表10 - 销售薪资分摊明细表
|
|
|
|
|
* @param param
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> ltKhjlgzftList(LtReportParam param) {
|
|
|
|
|
String year = param.getYear();
|
|
|
|
|
if (!NumberUtils.isCreatable(year)) {
|
|
|
|
|
throw new SalaryRunTimeException("参数错误");
|
|
|
|
|
}
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
// 获取销售crm表数据
|
|
|
|
|
List<LtXsCrmPO> ltXsCrmPOS = new ArrayList<>();
|
|
|
|
|
rs.executeQuery("select kh,ny,khjl,srje from uf_xscrm where ny >= ? and ny <=?", Arrays.asList(year+"-01", year+"-12"));
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
YearMonth yearMonth = SalaryDateUtil.String2YearMonth(rs.getString("ny"));
|
|
|
|
|
ltXsCrmPOS.add(LtXsCrmPO.builder()
|
|
|
|
|
.kh(Utils.null2String(rs.getString("kh")))
|
|
|
|
|
.salaryMonth(rs.getString("ny"))
|
|
|
|
|
.month(yearMonth == null ? 0 : yearMonth.getMonthValue())
|
|
|
|
|
.khjl(SalaryEntityUtil.string2LongDefault0(rs.getString("khjl")))
|
|
|
|
|
.srje(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("srje"))).build());
|
|
|
|
|
}
|
|
|
|
|
// crm 数据根据客户经理、月份分组
|
|
|
|
|
Map<String, List<LtXsCrmPO>> crmGroupByKhjlAndMonth = SalaryEntityUtil.group2Map(ltXsCrmPOS, po -> po.getKhjl() + "_split" + po.getSalaryMonth());
|
|
|
|
|
LinkedHashMap<String, List<LtXsCrmPO>> sortedCrmGroupByKhjlAndMonth = crmGroupByKhjlAndMonth.entrySet().stream()
|
|
|
|
|
.sorted(Map.Entry.comparingByKey())
|
|
|
|
|
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue,
|
|
|
|
|
LinkedHashMap::new));
|
|
|
|
|
|
|
|
|
|
// 获取客户经理的实发表工资数据
|
|
|
|
|
List<Long> khjlIds = ltXsCrmPOS.stream().map(LtXsCrmPO::getKhjl).distinct().collect(Collectors.toList());
|
|
|
|
|
Map<Long, String> empIdMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).listByIds(khjlIds), DataCollectionEmployee::getEmployeeId, DataCollectionEmployee::getUsername);
|
|
|
|
|
BaseBean baseBean = new BaseBean();
|
|
|
|
|
String sfFieldsStr = baseBean.getPropValue("ltSalaryReport", "xsxzftmx_sum_sf_fields");
|
|
|
|
|
List<String> sfFieldList = Arrays.stream(sfFieldsStr.split(",")).filter(field -> StringUtils.isNotBlank(field)).collect(Collectors.toList());
|
|
|
|
|
List<LtRymxgzDTO> ltRymxgzDTOList = new ArrayList<>();
|
|
|
|
|
List<List<Long>> empIdPartition = Lists.partition(khjlIds, 800);
|
|
|
|
|
empIdPartition.forEach(part -> {
|
|
|
|
|
rs.execute("select xm,qj,"+sfFieldsStr+" from uf_rymxgzsf where qj >= '"+year+"-01' and qj <= '"+year+"-12' and xm in (" + StringUtils.join(part, ",") + ")");
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
BigDecimal sfValue = new BigDecimal("0");
|
|
|
|
|
for (String field : sfFieldList) {
|
|
|
|
|
sfValue = sfValue.add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString(field)));
|
|
|
|
|
}
|
|
|
|
|
ltRymxgzDTOList.add(LtRymxgzDTO.builder()
|
|
|
|
|
.xm(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))
|
|
|
|
|
.qj(Utils.null2String(rs.getString("qj")))
|
|
|
|
|
.gz(sfValue)
|
|
|
|
|
.build());
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Map<String, LtRymxgzDTO> ltRymxgzDTOMap = SalaryEntityUtil.convert2Map(ltRymxgzDTOList, dto -> dto.getXm()+"_split"+dto.getQj());
|
|
|
|
|
// 获取所有的客户
|
|
|
|
|
List<String> khList = ltXsCrmPOS.stream().map(LtXsCrmPO::getKh).distinct().sorted(String::compareTo).collect(Collectors.toList());
|
|
|
|
|
List<Map<String, Object>> dataList = new ArrayList<>();
|
|
|
|
|
for (Map.Entry<String, List<LtXsCrmPO>> entry : sortedCrmGroupByKhjlAndMonth.entrySet()) {
|
|
|
|
|
String[] split = entry.getKey().split("_split");
|
|
|
|
|
String khjl = split != null && split.length > 0 ? split[0] : "";
|
|
|
|
|
String salaryMonth = split != null && split.length > 1 ? split[1] : "";
|
|
|
|
|
Map<String, Object> singleRowMap = new HashMap<>();
|
|
|
|
|
for (String kh : khList) {
|
|
|
|
|
BigDecimal khSrjeVal = entry.getValue().stream().filter(po -> Utils.null2String(po.getKh()).equals(kh))
|
|
|
|
|
.map(LtXsCrmPO::getSrje).filter(je -> je != null)
|
|
|
|
|
.reduce(new BigDecimal("0"), BigDecimal::add);
|
|
|
|
|
singleRowMap.put(kh, khSrjeVal.toPlainString());
|
|
|
|
|
}
|
|
|
|
|
LtRymxgzDTO ltRymxgzDTO = ltRymxgzDTOMap.get(entry.getKey());
|
|
|
|
|
singleRowMap.put("gz", ltRymxgzDTO == null ? "0" : ltRymxgzDTO.getGz());
|
|
|
|
|
singleRowMap.put("khjl", empIdMap.get(SalaryEntityUtil.string2Long(khjl)));
|
|
|
|
|
singleRowMap.put("ny", salaryMonth);
|
|
|
|
|
dataList.add(singleRowMap);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<Column> columns = new ArrayList<>();
|
|
|
|
|
columns.add(new Column("客户经理","khjl","khjl"));
|
|
|
|
|
columns.add(new Column("年月","ny","ny"));
|
|
|
|
|
for (String kh : khList) {
|
|
|
|
|
columns.add(new Column(kh,kh,kh));
|
|
|
|
|
}
|
|
|
|
|
columns.add(new Column("工资","gz","gz"));
|
|
|
|
|
|
|
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
|
|
resultMap.put("data", dataList);
|
|
|
|
|
resultMap.put("columns", columns);
|
|
|
|
|
|
|
|
|
|
if (param.getExport() != null && param.getExport()) {
|
|
|
|
|
Map<String, Object> sumMap = new HashMap<>();
|
|
|
|
|
sumMap.put("khjl", "合计");
|
|
|
|
|
Map<String, List<LtXsCrmPO>> crmGroupByKh = SalaryEntityUtil.group2Map(ltXsCrmPOS, po -> po.getKh());
|
|
|
|
|
for (String kh : khList) {
|
|
|
|
|
List<LtXsCrmPO> khCrmList = crmGroupByKh.get(kh);
|
|
|
|
|
if (CollectionUtils.isNotEmpty(khCrmList)) {
|
|
|
|
|
BigDecimal sumVal = khCrmList.stream().map(LtXsCrmPO::getSrje).filter(je -> je != null).reduce(new BigDecimal("0"), BigDecimal::add);
|
|
|
|
|
sumMap.put(kh, sumVal.toPlainString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
BigDecimal gzSumVal = dataList.stream().map(map -> SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(map.get("gz")))).reduce(new BigDecimal("0"), BigDecimal::add);
|
|
|
|
|
sumMap.put("gz", gzSumVal.toPlainString());
|
|
|
|
|
resultMap.put("sumRow", sumMap);
|
|
|
|
|
}
|
|
|
|
|
return resultMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> ltKhjlgzftSum(String year) {
|
|
|
|
|
if (!NumberUtils.isCreatable(year)) {
|
|
|
|
|
throw new SalaryRunTimeException("参数错误");
|
|
|
|
|
}
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
// 获取销售crm表数据
|
|
|
|
|
List<LtXsCrmPO> ltXsCrmPOS = new ArrayList<>();
|
|
|
|
|
rs.executeQuery("select kh,ny,khjl,srje from uf_xscrm where ny >= ? and ny <=?", Arrays.asList(year+"-01", year+"-12"));
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
YearMonth yearMonth = SalaryDateUtil.String2YearMonth(rs.getString("ny"));
|
|
|
|
|
ltXsCrmPOS.add(LtXsCrmPO.builder()
|
|
|
|
|
.kh(Utils.null2String(rs.getString("kh")))
|
|
|
|
|
.salaryMonth(rs.getString("ny"))
|
|
|
|
|
.month(yearMonth == null ? 0 : yearMonth.getMonthValue())
|
|
|
|
|
.khjl(SalaryEntityUtil.string2LongDefault0(rs.getString("khjl")))
|
|
|
|
|
.srje(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("srje"))).build());
|
|
|
|
|
}
|
|
|
|
|
// crm 数据根据客户分组
|
|
|
|
|
Map<String, List<LtXsCrmPO>> crmGroupByKhjlAndMonth = SalaryEntityUtil.group2Map(ltXsCrmPOS, po -> po.getKh());
|
|
|
|
|
|
|
|
|
|
// 获取客户经理的实发表工资数据
|
|
|
|
|
List<Long> khjlIds = ltXsCrmPOS.stream().map(LtXsCrmPO::getKhjl).distinct().collect(Collectors.toList());
|
|
|
|
|
Map<Long, String> empIdMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).listByIds(khjlIds), DataCollectionEmployee::getEmployeeId, DataCollectionEmployee::getUsername);
|
|
|
|
|
BaseBean baseBean = new BaseBean();
|
|
|
|
|
String sfFieldsStr = baseBean.getPropValue("ltSalaryReport", "xsxzftmx_sum_sf_fields");
|
|
|
|
|
List<String> sfFieldList = Arrays.stream(sfFieldsStr.split(",")).filter(field -> StringUtils.isNotBlank(field)).collect(Collectors.toList());
|
|
|
|
|
List<LtRymxgzDTO> ltRymxgzDTOList = new ArrayList<>();
|
|
|
|
|
List<List<Long>> empIdPartition = Lists.partition(khjlIds, 800);
|
|
|
|
|
final BigDecimal[] totalSfVal = {new BigDecimal("0")};
|
|
|
|
|
empIdPartition.forEach(part -> {
|
|
|
|
|
rs.execute("select xm,qj,"+sfFieldsStr+" from uf_rymxgzsf where qj >= '"+year+"-01' and qj <= '"+year+"-12' and xm in (" + StringUtils.join(part, ",") + ")");
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
for (String field : sfFieldList) {
|
|
|
|
|
totalSfVal[0] = totalSfVal[0].add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString(field)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Map<String, Object> sumMap = new HashMap<>();
|
|
|
|
|
sumMap.put("khjl", "合计");
|
|
|
|
|
sumMap.put("gz", totalSfVal[0].toPlainString());
|
|
|
|
|
// 获取所有的客户
|
|
|
|
|
List<String> khList = ltXsCrmPOS.stream().map(LtXsCrmPO::getKh).distinct().sorted(String::compareTo).collect(Collectors.toList());
|
|
|
|
|
for (String kh : khList) {
|
|
|
|
|
List<LtXsCrmPO> ltXsCrmPOList = crmGroupByKhjlAndMonth.get(kh);
|
|
|
|
|
if (CollectionUtils.isNotEmpty(ltXsCrmPOList)) {
|
|
|
|
|
BigDecimal khSumVal = ltXsCrmPOList.stream().map(LtXsCrmPO::getSrje).filter(je -> je != null).reduce(new BigDecimal("0"), BigDecimal::add);
|
|
|
|
|
sumMap.put(kh, khSumVal.toPlainString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
|
|
resultMap.put("sumRow", sumMap);
|
|
|
|
|
return resultMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public XSSFWorkbook exportKhjlgzftList(String year) {
|
|
|
|
|
LtReportParam build = LtReportParam.builder().year(year).build();
|
|
|
|
|
build.setExport(true);
|
|
|
|
|
Map<String, Object> map = ltKhjlgzftList(build);
|
|
|
|
|
List<Column> columns = (List<Column>)map.get("columns");
|
|
|
|
|
List<Map<String, Object>> dataList = (List<Map<String, Object>>)map.get("data");
|
|
|
|
|
Map<String, Object> sumRow = (Map<String, Object>)map.get("sumRow");
|
|
|
|
|
dataList.add(sumRow);
|
|
|
|
|
|
|
|
|
|
List<List<Object>> rowList = new ArrayList<>();
|
|
|
|
|
rowList.add(columns.stream().map(Column::getTitle).collect(Collectors.toList()));
|
|
|
|
|
for (Map<String, Object> valueMap : dataList) {
|
|
|
|
|
List<Object> singleList = new ArrayList<>();
|
|
|
|
|
for (Column col : columns) {
|
|
|
|
|
Object o = valueMap.get(col.getKey());
|
|
|
|
|
singleList.add(o);
|
|
|
|
|
}
|
|
|
|
|
rowList.add(singleList);
|
|
|
|
|
}
|
|
|
|
|
return ExcelUtil.genWorkbookV2(rowList, "客户经理工资分摊表");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> ltXsxzftList(LtReportParam param) {
|
|
|
|
|
String year = param.getYear();
|
|
|
|
|
if (!NumberUtils.isCreatable(year)) {
|
|
|
|
|
throw new SalaryRunTimeException("参数错误");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (param.getKhjl() == null) {
|
|
|
|
|
throw new SalaryRunTimeException("客户经理不能为空");
|
|
|
|
|
}
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
// 获取销售crm表数据
|
|
|
|
|
List<LtXsCrmPO> ltXsCrmPOS = new ArrayList<>();
|
|
|
|
|
rs.executeQuery("select kh,ny,khjl,srje from uf_xscrm where ny >= ? and ny <=? and khjl=?", Arrays.asList(year+"-01", year+"-12", param.getKhjl()));
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
YearMonth yearMonth = SalaryDateUtil.String2YearMonth(rs.getString("ny"));
|
|
|
|
|
ltXsCrmPOS.add(LtXsCrmPO.builder()
|
|
|
|
|
.kh(Utils.null2String(rs.getString("kh")))
|
|
|
|
|
.salaryMonth(rs.getString("ny"))
|
|
|
|
|
.month(yearMonth == null ? 0 : yearMonth.getMonthValue())
|
|
|
|
|
.khjl(SalaryEntityUtil.string2LongDefault0(rs.getString("khjl")))
|
|
|
|
|
.srje(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("srje"))).build());
|
|
|
|
|
}
|
|
|
|
|
// 获取所有的月份数据
|
|
|
|
|
List<String> allSalaryMonthList = ltXsCrmPOS.stream().map(LtXsCrmPO::getSalaryMonth).distinct().sorted(String::compareTo).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
// crm 数据根据月份分组
|
|
|
|
|
Map<String, List<LtXsCrmPO>> crmGroupBySalaryMonth = SalaryEntityUtil.group2Map(ltXsCrmPOS, po -> po.getSalaryMonth());
|
|
|
|
|
// 获取每个月份所有客户的合计值
|
|
|
|
|
Map<String, String> sumValGroupByMonth = new HashMap<>();
|
|
|
|
|
for (Map.Entry<String, List<LtXsCrmPO>> entry : crmGroupBySalaryMonth.entrySet()) {
|
|
|
|
|
BigDecimal sumValByMonth = entry.getValue().stream().map(LtXsCrmPO::getSrje).filter(je -> je != null && je.compareTo(new BigDecimal("0")) > 0).reduce(new BigDecimal("0"), BigDecimal::add);
|
|
|
|
|
sumValGroupByMonth.put(entry.getKey(), sumValByMonth.toPlainString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// crm 数据根据客户分组
|
|
|
|
|
Map<String, List<LtXsCrmPO>> crmGroupByKh = SalaryEntityUtil.group2Map(ltXsCrmPOS, po -> po.getKh());
|
|
|
|
|
LinkedHashMap<String, List<LtXsCrmPO>> sortedCrmGroupByKh = crmGroupByKh.entrySet().stream()
|
|
|
|
|
.sorted(Map.Entry.comparingByKey())
|
|
|
|
|
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue,
|
|
|
|
|
LinkedHashMap::new));
|
|
|
|
|
|
|
|
|
|
// 获取客户经理的实发表工资数据
|
|
|
|
|
BaseBean baseBean = new BaseBean();
|
|
|
|
|
String sfFieldsStr = baseBean.getPropValue("ltSalaryReport", "xsxzftmx_sum_sf_fields");
|
|
|
|
|
List<String> sfFieldList = Arrays.stream(sfFieldsStr.split(",")).filter(field -> StringUtils.isNotBlank(field)).collect(Collectors.toList());
|
|
|
|
|
List<LtRymxgzDTO> ltRymxgzDTOList = new ArrayList<>();
|
|
|
|
|
rs.execute("select xm,qj,"+sfFieldsStr+" from uf_rymxgzsf where qj >= '"+year+"-01' and qj <= '"+year+"-12' and xm =" + param.getKhjl());
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
BigDecimal sfValue = new BigDecimal("0");
|
|
|
|
|
for (String field : sfFieldList) {
|
|
|
|
|
sfValue = sfValue.add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString(field)));
|
|
|
|
|
}
|
|
|
|
|
ltRymxgzDTOList.add(LtRymxgzDTO.builder()
|
|
|
|
|
.xm(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))
|
|
|
|
|
.qj(Utils.null2String(rs.getString("qj")))
|
|
|
|
|
.gz(sfValue)
|
|
|
|
|
.build());
|
|
|
|
|
}
|
|
|
|
|
Map<String, List<LtRymxgzDTO>> ltRymxgzDTOMap = SalaryEntityUtil.group2Map(ltRymxgzDTOList, dto -> dto.getQj());
|
|
|
|
|
// 获取所有的客户
|
|
|
|
|
List<Map<String, Object>> dataList = new ArrayList<>();
|
|
|
|
|
for (Map.Entry<String, List<LtXsCrmPO>> entry : sortedCrmGroupByKh.entrySet()) {
|
|
|
|
|
Map<String, Object> singleRowMap = new HashMap<>();
|
|
|
|
|
for (String salaryMonth : allSalaryMonthList) {
|
|
|
|
|
// 获取该月份所有客户的合计值
|
|
|
|
|
BigDecimal sumValByMonth = SalaryEntityUtil.string2BigDecimalDefault0(sumValGroupByMonth.get(salaryMonth));
|
|
|
|
|
// 该月该客户金额值
|
|
|
|
|
BigDecimal srjeVal = entry.getValue().stream().filter(po -> Utils.null2String(po.getSalaryMonth()).equals(salaryMonth))
|
|
|
|
|
.map(LtXsCrmPO::getSrje).filter(je -> je != null)
|
|
|
|
|
.reduce(new BigDecimal("0"), BigDecimal::add);
|
|
|
|
|
// 获取该客户经理该月工资
|
|
|
|
|
BigDecimal gz = new BigDecimal("0");
|
|
|
|
|
List<LtRymxgzDTO> ltRymxgzDTOS = ltRymxgzDTOMap.get(salaryMonth);
|
|
|
|
|
if (CollectionUtils.isNotEmpty(ltRymxgzDTOS)) {
|
|
|
|
|
gz = ltRymxgzDTOS.stream().map(LtRymxgzDTO::getGz).filter(g -> g != null).reduce(new BigDecimal("0"), BigDecimal::add);
|
|
|
|
|
}
|
|
|
|
|
String ftgz = "0";
|
|
|
|
|
if (srjeVal != null && srjeVal.compareTo(new BigDecimal("0")) > 0 && sumValByMonth != null && sumValByMonth.compareTo(new BigDecimal("0")) > 0 ) {
|
|
|
|
|
ftgz = gz.multiply(srjeVal).divide(sumValByMonth,2, RoundingMode.HALF_UP).toPlainString();
|
|
|
|
|
}
|
|
|
|
|
singleRowMap.put(salaryMonth, ftgz);
|
|
|
|
|
}
|
|
|
|
|
singleRowMap.put("kh", entry.getKey());
|
|
|
|
|
dataList.add(singleRowMap);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<Column> columns = new ArrayList<>();
|
|
|
|
|
columns.add(new Column("客户","kh","kh"));
|
|
|
|
|
for (String salaryMonth : allSalaryMonthList) {
|
|
|
|
|
columns.add(new Column(salaryMonth + "分摊工资",salaryMonth,salaryMonth));
|
|
|
|
|
}
|
|
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
|
|
resultMap.put("data", dataList);
|
|
|
|
|
resultMap.put("columns", columns);
|
|
|
|
|
|
|
|
|
|
if (param.getExport() != null && param.getExport()) {
|
|
|
|
|
Map<String, Object> sumMap = new HashMap<>();
|
|
|
|
|
sumMap.put("kh", "合计");
|
|
|
|
|
for (String salaryMonth : allSalaryMonthList) {
|
|
|
|
|
BigDecimal sumVal = dataList.stream().map(map -> SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(map.get(salaryMonth)))).reduce(new BigDecimal("0"), BigDecimal::add);
|
|
|
|
|
sumMap.put(salaryMonth, sumVal);
|
|
|
|
|
}
|
|
|
|
|
resultMap.put("sumRow", sumMap);
|
|
|
|
|
}
|
|
|
|
|
return resultMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> ltXsxzftSum(LtReportParam param) {
|
|
|
|
|
String year = param.getYear();
|
|
|
|
|
if (!NumberUtils.isCreatable(year)) {
|
|
|
|
|
throw new SalaryRunTimeException("参数错误");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (param.getKhjl() == null) {
|
|
|
|
|
throw new SalaryRunTimeException("客户经理不能为空");
|
|
|
|
|
}
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
// 获取销售crm表数据
|
|
|
|
|
List<LtXsCrmPO> ltXsCrmPOS = new ArrayList<>();
|
|
|
|
|
rs.executeQuery("select kh,ny,khjl,srje from uf_xscrm where ny >= ? and ny <=? and khjl=?", Arrays.asList(year+"-01", year+"-12", param.getKhjl()));
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
YearMonth yearMonth = SalaryDateUtil.String2YearMonth(rs.getString("ny"));
|
|
|
|
|
ltXsCrmPOS.add(LtXsCrmPO.builder()
|
|
|
|
|
.kh(Utils.null2String(rs.getString("kh")))
|
|
|
|
|
.salaryMonth(rs.getString("ny"))
|
|
|
|
|
.month(yearMonth == null ? 0 : yearMonth.getMonthValue())
|
|
|
|
|
.khjl(SalaryEntityUtil.string2LongDefault0(rs.getString("khjl")))
|
|
|
|
|
.srje(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("srje"))).build());
|
|
|
|
|
}
|
|
|
|
|
// 获取所有的月份数据
|
|
|
|
|
List<String> allSalaryMonthList = ltXsCrmPOS.stream().map(LtXsCrmPO::getSalaryMonth).distinct().sorted(String::compareTo).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
// crm 数据根据月份分组
|
|
|
|
|
Map<String, List<LtXsCrmPO>> crmGroupBySalaryMonth = SalaryEntityUtil.group2Map(ltXsCrmPOS, po -> po.getSalaryMonth());
|
|
|
|
|
// 获取每个月份所有客户的合计值
|
|
|
|
|
Map<String, String> sumValGroupByMonth = new HashMap<>();
|
|
|
|
|
for (Map.Entry<String, List<LtXsCrmPO>> entry : crmGroupBySalaryMonth.entrySet()) {
|
|
|
|
|
BigDecimal sumValByMonth = entry.getValue().stream().map(LtXsCrmPO::getSrje).filter(je -> je != null && je.compareTo(new BigDecimal("0")) > 0).reduce(new BigDecimal("0"), BigDecimal::add);
|
|
|
|
|
sumValGroupByMonth.put(entry.getKey(), sumValByMonth.toPlainString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// crm 数据根据客户分组
|
|
|
|
|
Map<String, List<LtXsCrmPO>> crmGroupByKh = SalaryEntityUtil.group2Map(ltXsCrmPOS, po -> po.getKh());
|
|
|
|
|
LinkedHashMap<String, List<LtXsCrmPO>> sortedCrmGroupByKh = crmGroupByKh.entrySet().stream()
|
|
|
|
|
.sorted(Map.Entry.comparingByKey())
|
|
|
|
|
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue,
|
|
|
|
|
LinkedHashMap::new));
|
|
|
|
|
|
|
|
|
|
// 获取客户经理的实发表工资数据
|
|
|
|
|
BaseBean baseBean = new BaseBean();
|
|
|
|
|
String sfFieldsStr = baseBean.getPropValue("ltSalaryReport", "xsxzftmx_sum_sf_fields");
|
|
|
|
|
List<String> sfFieldList = Arrays.stream(sfFieldsStr.split(",")).filter(field -> StringUtils.isNotBlank(field)).collect(Collectors.toList());
|
|
|
|
|
List<LtRymxgzDTO> ltRymxgzDTOList = new ArrayList<>();
|
|
|
|
|
rs.execute("select xm,qj,"+sfFieldsStr+" from uf_rymxgzsf where qj >= '"+year+"-01' and qj <= '"+year+"-12' and xm =" + param.getKhjl());
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
BigDecimal sfValue = new BigDecimal("0");
|
|
|
|
|
for (String field : sfFieldList) {
|
|
|
|
|
sfValue = sfValue.add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString(field)));
|
|
|
|
|
}
|
|
|
|
|
ltRymxgzDTOList.add(LtRymxgzDTO.builder()
|
|
|
|
|
.xm(SalaryEntityUtil.string2LongDefault0(rs.getString("xm")))
|
|
|
|
|
.qj(Utils.null2String(rs.getString("qj")))
|
|
|
|
|
.gz(sfValue)
|
|
|
|
|
.build());
|
|
|
|
|
}
|
|
|
|
|
Map<String, List<LtRymxgzDTO>> ltRymxgzDTOMap = SalaryEntityUtil.group2Map(ltRymxgzDTOList, dto -> dto.getQj());
|
|
|
|
|
// 获取所有的客户
|
|
|
|
|
List<Map<String, Object>> dataList = new ArrayList<>();
|
|
|
|
|
for (Map.Entry<String, List<LtXsCrmPO>> entry : sortedCrmGroupByKh.entrySet()) {
|
|
|
|
|
Map<String, Object> singleRowMap = new HashMap<>();
|
|
|
|
|
for (String salaryMonth : allSalaryMonthList) {
|
|
|
|
|
// 获取该月份所有客户的合计值
|
|
|
|
|
BigDecimal sumValByMonth = SalaryEntityUtil.string2BigDecimalDefault0(sumValGroupByMonth.get(salaryMonth));
|
|
|
|
|
// 该月该客户金额值
|
|
|
|
|
BigDecimal srjeVal = entry.getValue().stream().filter(po -> Utils.null2String(po.getSalaryMonth()).equals(salaryMonth))
|
|
|
|
|
.map(LtXsCrmPO::getSrje).filter(je -> je != null)
|
|
|
|
|
.reduce(new BigDecimal("0"), BigDecimal::add);
|
|
|
|
|
// 获取该客户经理该月工资
|
|
|
|
|
BigDecimal gz = new BigDecimal("0");
|
|
|
|
|
List<LtRymxgzDTO> ltRymxgzDTOS = ltRymxgzDTOMap.get(salaryMonth);
|
|
|
|
|
if (CollectionUtils.isNotEmpty(ltRymxgzDTOS)) {
|
|
|
|
|
gz = ltRymxgzDTOS.stream().map(LtRymxgzDTO::getGz).filter(g -> g != null).reduce(new BigDecimal("0"), BigDecimal::add);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String ftgz = "0";
|
|
|
|
|
if (srjeVal != null && srjeVal.compareTo(new BigDecimal("0")) > 0 && sumValByMonth != null && sumValByMonth.compareTo(new BigDecimal("0")) > 0 ) {
|
|
|
|
|
ftgz = gz.multiply(srjeVal).divide(sumValByMonth,2, RoundingMode.HALF_UP).toPlainString();
|
|
|
|
|
}
|
|
|
|
|
singleRowMap.put(salaryMonth, ftgz);
|
|
|
|
|
}
|
|
|
|
|
singleRowMap.put("kh", entry.getKey());
|
|
|
|
|
dataList.add(singleRowMap);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, Object> sumMap = new HashMap<>();
|
|
|
|
|
sumMap.put("kh", "合计");
|
|
|
|
|
for (String salaryMonth : allSalaryMonthList) {
|
|
|
|
|
BigDecimal sumVal = dataList.stream().map(map -> SalaryEntityUtil.string2BigDecimalDefault0(Utils.null2String(map.get(salaryMonth)))).reduce(new BigDecimal("0"), BigDecimal::add);
|
|
|
|
|
sumMap.put(salaryMonth, sumVal);
|
|
|
|
|
}
|
|
|
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
|
|
|
resultMap.put("sumRow", sumMap);
|
|
|
|
|
return resultMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public XSSFWorkbook exportXsxzftList(LtReportParam param) {
|
|
|
|
|
param.setExport(true);
|
|
|
|
|
Map<String, Object> map = ltXsxzftList(param);
|
|
|
|
|
List<Column> columns = (List<Column>)map.get("columns");
|
|
|
|
|
List<Map<String, Object>> dataList = (List<Map<String, Object>>)map.get("data");
|
|
|
|
|
Map<String, Object> sumRow = (Map<String, Object>)map.get("sumRow");
|
|
|
|
|
dataList.add(sumRow);
|
|
|
|
|
|
|
|
|
|
List<List<Object>> rowList = new ArrayList<>();
|
|
|
|
|
rowList.add(columns.stream().map(Column::getTitle).collect(Collectors.toList()));
|
|
|
|
|
for (Map<String, Object> valueMap : dataList) {
|
|
|
|
|
List<Object> singleList = new ArrayList<>();
|
|
|
|
|
for (Column col : columns) {
|
|
|
|
|
Object o = valueMap.get(col.getKey());
|
|
|
|
|
singleList.add(o);
|
|
|
|
|
}
|
|
|
|
|
rowList.add(singleList);
|
|
|
|
|
}
|
|
|
|
|
return ExcelUtil.genWorkbookV2(rowList, "销售薪资分摊明细表");
|
|
|
|
|
}
|
|
|
|
|
}
|