Merge branch 'release/2.15.2.2409.01' into release/个税版本

# Conflicts:
#	src/com/engine/salary/constant/SalaryDefaultTenantConstant.java
#	src/com/engine/salary/web/SalaryCommonController.java
#	src/com/engine/salary/wrapper/SalaryCommonWrapper.java
This commit is contained in:
钱涛 2024-10-15 14:29:08 +08:00
commit 06d6854ff3
42 changed files with 1130 additions and 240 deletions

View File

@ -0,0 +1,8 @@
ALTER TABLE hrsa_acct_result_template ADD (
type number NULL
);
/
update hrsa_acct_result_template set type = 0;
/

View File

@ -0,0 +1,13 @@
create table hrsa_page_list_setting
(
id number primary key ,
setting clob ,
page varchar2(200),
creator number,
create_time date ,
update_time date,
delete_type int ,
tenant_key varchar2(10)
);
/

View File

@ -0,0 +1,8 @@
ALTER TABLE hrsa_acct_result_template ADD (
type number NULL
);
/
update hrsa_acct_result_template set type = 0;
/

View File

@ -0,0 +1,13 @@
create table hrsa_page_list_setting
(
id number primary key ,
setting clob ,
page varchar2(200),
creator number,
create_time date ,
update_time date,
delete_type int ,
tenant_key varchar2(10)
);
/

View File

@ -0,0 +1,8 @@
ALTER TABLE hrsa_acct_result_template ADD (
type number NULL
);
/
update hrsa_acct_result_template set type = 0;
/

View File

@ -0,0 +1,13 @@
create table hrsa_page_list_setting
(
id number primary key ,
setting clob ,
page varchar2(200),
creator number,
create_time date ,
update_time date,
delete_type int ,
tenant_key varchar2(10)
);
/

View File

@ -0,0 +1,3 @@
ALTER TABLE hrsa_acct_result_template ADD COLUMN type int(0) NULL ;
update hrsa_acct_result_template set type = 0;

View File

@ -0,0 +1,12 @@
CREATE TABLE hrsa_page_list_setting
(
id bigint(0) NOT NULL ,
setting text ,
page varchar(200),
creator bigint(0),
create_time datetime(0) ,
update_time datetime(0),
delete_type int(0) ,
tenant_key varchar(10) ,
PRIMARY KEY (id)
);

View File

@ -0,0 +1,7 @@
ALTER TABLE hrsa_acct_result_template ADD (
type number NULL
)
/
update hrsa_acct_result_template set type = 0
/

View File

@ -0,0 +1,12 @@
create table hrsa_page_list_setting
(
id number primary key ,
setting clob ,
page varchar2(200),
creator number,
create_time date ,
update_time date,
delete_type int ,
tenant_key varchar2(10)
)
/

View File

@ -0,0 +1,3 @@
alter table hrsa_acct_result_template add type int null ;
update hrsa_acct_result_template set type = 0;

View File

@ -0,0 +1,11 @@
create table hrsa_page_list_setting
(
id bigint primary key ,
setting text ,
page varchar(200),
creator bigint,
create_time timestamp ,
update_time timestamp,
delete_type int ,
tenant_key varchar(10)
);

View File

@ -0,0 +1,5 @@
ALTER TABLE hrsa_acct_result_template ADD type int NULL
GO
update hrsa_acct_result_template set type = 0
GO

View File

@ -0,0 +1,12 @@
create table hrsa_page_list_setting
(
id bigint primary key ,
setting ntext ,
page varchar(200),
creator bigint,
create_time datetime ,
update_time datetime,
delete_type int ,
tenant_key varchar(10)
)
GO

View File

@ -0,0 +1,8 @@
ALTER TABLE hrsa_acct_result_template ADD (
type number NULL
);
/
update hrsa_acct_result_template set type = 0;
/

View File

@ -0,0 +1,13 @@
create table hrsa_page_list_setting
(
id number primary key ,
setting clob ,
page varchar2(200),
creator number,
create_time date ,
update_time date,
delete_type int ,
tenant_key varchar2(10)
);
/

View File

@ -18,6 +18,7 @@ import java.util.Date;
@NoArgsConstructor
@Builder
@Data
//hrsa_acct_result_template
public class SalaryAcctResultTemplatePO {
/**
* 主键id
@ -29,6 +30,11 @@ public class SalaryAcctResultTemplatePO {
*/
private String templateName;
/**
* 模板类型, 0导出模板 1公共导出模板 2导入模板
*/
private Integer type;
/**
* 薪资账套id
*/
@ -51,4 +57,5 @@ public class SalaryAcctResultTemplatePO {
//主键id集合
private Collection<Long> ids;
private Collection<Integer> types;
}

View File

@ -0,0 +1,20 @@
package com.engine.salary.entity.setting.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 薪资帐套表
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PageListSettingDTO {
private String name;
private String value;
}

View File

@ -0,0 +1,22 @@
package com.engine.salary.entity.setting.param;
import com.engine.salary.util.valid.DataCheck;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 薪资帐套表
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PageListSettingQueryParam {
@DataCheck(require = true,message = "请选择页面")
private String page;
private String name;
}

View File

@ -0,0 +1,31 @@
package com.engine.salary.entity.setting.param;
import com.engine.salary.util.valid.DataCheck;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 薪资帐套表
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PageListSettingSaveParam {
/**
* 页面0薪资明细
*/
@DataCheck(require = true,message = "请选择页面")
private String page;
/**
* 设置
*/
@DataCheck(require = true,message = "请选择设置")
private List<Long> setting;
}

View File

@ -0,0 +1,72 @@
package com.engine.salary.entity.setting.po;
import com.engine.hrmelog.annotation.ElogTransform;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Collection;
import java.util.Date;
/**
* 薪资帐套表
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PageListSettingPO {
@ElogTransform(name = "")
private Long id;
/**
* 页面0薪资明细
*/
@ElogTransform(name = "页面0薪资明细")
private String page;
/**
* 设置
*/
@ElogTransform(name = "设置")
private String setting;
/**
* 更新时间
*/
@ElogTransform(name = "更新时间")
private Date updateTime;
/**
* 创建时间
*/
@ElogTransform(name = "创建时间")
private Date createTime;
/**
* 创建人
*/
@ElogTransform(name = "创建人")
private Long creator;
/**
* 是否已删除0未删除1已删除
*/
@ElogTransform(name = "是否已删除。0未删除、1已删除")
private Integer deleteType;
/**
* 租户ID
*/
@ElogTransform(name = "租户ID")
private String tenantKey;
//主键id集合
private Collection<Long> ids;
}

View File

@ -11,6 +11,7 @@
<result column="template_name" property="templateName" />
<result column="tenant_key" property="tenantKey" />
<result column="update_time" property="updateTime" />
<result column="type" property="type" />
</resultMap>
<!-- 表字段 -->
@ -24,6 +25,7 @@
, t.template_name
, t.tenant_key
, t.update_time
, t.type
</sql>
<!-- 查询全部 -->
@ -75,12 +77,21 @@
<if test="updateTime != null">
AND update_time = #{updateTime}
</if>
<if test="type != null">
AND type = #{type}
</if>
<if test="ids != null and ids.size()>0">
AND id IN
<foreach collection="ids" open="(" item="id" separator="," close=")">
#{id}
</foreach>
</if>
<if test="types != null and types.size()>0">
AND type IN
<foreach collection="types" open="(" item="type" separator="," close=")">
#{type}
</foreach>
</if>
ORDER BY id DESC
</select>
@ -117,6 +128,9 @@
<if test="updateTime != null">
update_time,
</if>
<if test="type != null">
type,
</if>
</trim>
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
<if test="createTime != null" >
@ -146,6 +160,9 @@
<if test="updateTime != null" >
#{updateTime},
</if>
<if test="type != null" >
#{type},
</if>
</trim>
</insert>
@ -161,6 +178,7 @@
template_name=#{templateName},
tenant_key=#{tenantKey},
update_time=#{updateTime},
type=#{type},
</set>
WHERE id = #{id} AND delete_type = 0
</update>
@ -194,6 +212,9 @@
<if test="updateTime != null" >
update_time=#{updateTime},
</if>
<if test="type != null" >
type=#{type},
</if>
</set>
WHERE id = #{id} AND delete_type = 0
</update>

View File

@ -0,0 +1,73 @@
package com.engine.salary.mapper.setting;
import com.engine.salary.entity.setting.po.PageListSettingPO;
import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.List;
public interface PageListSettingMapper {
/**
* 查询所有记录
*
* @return 返回集合没有返回空List
*/
List<PageListSettingPO> listAll();
/**
* 条件查询
*
* @return 返回集合没有返回空List
*/
List<PageListSettingPO> listSome(PageListSettingPO pageListSetting);
/**
* 根据主键查询
*
* @param id 主键
* @return 返回记录没有返回null
*/
PageListSettingPO getById(Long id);
/**
* 新增忽略null字段
*
* @param pageListSetting 新增的记录
* @return 返回影响行数
*/
int insertIgnoreNull(PageListSettingPO pageListSetting);
/**
* 修改修改所有字段
*
* @param pageListSetting 修改的记录
* @return 返回影响行数
*/
int update(PageListSettingPO pageListSetting);
/**
* 修改忽略null字段
*
* @param pageListSetting 修改的记录
* @return 返回影响行数
*/
int updateIgnoreNull(PageListSettingPO pageListSetting);
/**
* 删除记录
*
* @param pageListSetting 待删除的记录
* @return 返回影响行数
*/
int delete(PageListSettingPO pageListSetting);
/**
* 批量删除记录
* @param ids 主键id集合
*/
void deleteByIds(@Param("ids") Collection<Long> ids);
PageListSettingPO getByPage(String page);
}

View File

@ -0,0 +1,218 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.engine.salary.mapper.setting.PageListSettingMapper">
<resultMap id="BaseResultMap" type="com.engine.salary.entity.setting.po.PageListSettingPO">
<result column="create_time" property="createTime"/>
<result column="creator" property="creator"/>
<result column="delete_type" property="deleteType"/>
<result column="id" property="id"/>
<result column="page" property="page"/>
<result column="setting" property="setting"/>
<result column="tenant_key" property="tenantKey"/>
<result column="update_time" property="updateTime"/>
</resultMap>
<!-- 表字段 -->
<sql id="baseColumns">
t
.
create_time
, t.creator
, t.delete_type
, t.id
, t.page
, t.setting
, t.tenant_key
, t.update_time
</sql>
<!-- 查询全部 -->
<select id="listAll" resultMap="BaseResultMap">
SELECT
<include refid="baseColumns"/>
FROM hrsa_page_list_setting t
WHERE delete_type = 0
</select>
<!-- 根据主键获取单条记录 -->
<select id="getById" resultMap="BaseResultMap" parameterType="Long">
SELECT
<include refid="baseColumns"/>
FROM hrsa_page_list_setting t
WHERE id = #{id} AND delete_type = 0
</select>
<!-- 条件查询 -->
<select id="listSome" resultMap="BaseResultMap"
parameterType="com.engine.salary.entity.setting.po.PageListSettingPO">
SELECT
<include refid="baseColumns"/>
FROM hrsa_page_list_setting t
WHERE delete_type = 0
<if test="createTime != null">
AND create_time = #{createTime}
</if>
<if test="creator != null">
AND creator = #{creator}
</if>
<if test="deleteType != null">
AND delete_type = #{deleteType}
</if>
<if test="id != null">
AND id = #{id}
</if>
<if test="page != null">
AND page = #{page}
</if>
<if test="setting != null">
AND setting = #{setting}
</if>
<if test="tenantKey != null">
AND tenant_key = #{tenantKey}
</if>
<if test="updateTime != null">
AND update_time = #{updateTime}
</if>
<if test="ids != null and ids.size()>0">
AND id IN
<foreach collection="ids" open="(" item="id" separator="," close=")">
#{id}
</foreach>
</if>
ORDER BY id DESC
</select>
<!-- 插入不为NULL的字段 -->
<insert id="insertIgnoreNull" parameterType="com.engine.salary.entity.setting.po.PageListSettingPO">
INSERT INTO hrsa_page_list_setting
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="createTime != null">
create_time,
</if>
<if test="creator != null">
creator,
</if>
<if test="deleteType != null">
delete_type,
</if>
<if test="id != null">
id,
</if>
<if test="page != null">
page,
</if>
<if test="setting != null">
setting,
</if>
<if test="tenantKey != null">
tenant_key,
</if>
<if test="updateTime != null">
update_time,
</if>
</trim>
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
<if test="createTime != null">
#{createTime},
</if>
<if test="creator != null">
#{creator},
</if>
<if test="deleteType != null">
#{deleteType},
</if>
<if test="id != null">
#{id},
</if>
<if test="page != null">
#{page},
</if>
<if test="setting != null">
#{setting},
</if>
<if test="tenantKey != null">
#{tenantKey},
</if>
<if test="updateTime != null">
#{updateTime},
</if>
</trim>
</insert>
<!-- 更新,更新全部字段 -->
<update id="update" parameterType="com.engine.salary.entity.setting.po.PageListSettingPO">
UPDATE hrsa_page_list_setting
<set>
create_time=#{createTime},
creator=#{creator},
delete_type=#{deleteType},
page=#{page},
setting=#{setting},
tenant_key=#{tenantKey},
update_time=#{updateTime},
</set>
WHERE id = #{id} AND delete_type = 0
</update>
<!-- 更新不为NULL的字段 -->
<update id="updateIgnoreNull" parameterType="com.engine.salary.entity.setting.po.PageListSettingPO">
UPDATE hrsa_page_list_setting
<set>
<if test="createTime != null">
create_time=#{createTime},
</if>
<if test="creator != null">
creator=#{creator},
</if>
<if test="deleteType != null">
delete_type=#{deleteType},
</if>
<if test="page != null">
page=#{page},
</if>
<if test="setting != null">
setting=#{setting},
</if>
<if test="tenantKey != null">
tenant_key=#{tenantKey},
</if>
<if test="updateTime != null">
update_time=#{updateTime},
</if>
</set>
WHERE id = #{id} AND delete_type = 0
</update>
<!-- 根据主键删除记录 -->
<delete id="delete">
UPDATE hrsa_page_list_setting
SET delete_type=1
WHERE id = #{id}
AND delete_type = 0
</delete>
<delete id="deleteByIds">
UPDATE hrsa_page_list_setting
SET delete_type = 1
WHERE delete_type = 0
AND id IN
<foreach collection="ids" open="(" item="id" separator="," close=")">
#{id}
</foreach>
</delete>
<select id="getByPage" resultMap="BaseResultMap">
SELECT
<include refid="baseColumns"/>
FROM hrsa_page_list_setting t
WHERE delete_type = 0
and page = #{page}
</select>
</mapper>

View File

@ -10,6 +10,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.po.SalarySobPO;
import com.engine.salary.entity.setting.param.PageListSettingQueryParam;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.enums.UserStatusEnum;
import com.engine.salary.enums.datacollection.UseEmployeeTypeEnum;
@ -25,10 +26,7 @@ import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeSalaryQuery
import com.engine.salary.report.service.SalaryStatisticsEmployeeService;
import com.engine.salary.service.*;
import com.engine.salary.service.impl.*;
import com.engine.salary.util.SalaryAssert;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.*;
import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
@ -89,6 +87,10 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala
return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
}
private SettingService getSettingService(User user) {
return ServiceUtil.getService(SettingServiceImpl.class, user);
}
@Override
public PageInfo<SalaryStatisticsEmployeeListDTO> listPage(SalaryStatisticsEmployeeQueryParam queryParam) {
List<SalaryStatisticsEmployeeListDTO> list = Collections.emptyList();
@ -270,7 +272,7 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala
map.put("id", se.getId().toString());
map.put("salaryMonth", SalaryDateUtil.getFormatYearMonth(se.getSalaryMonth()));
map.put("taxAgent", taxAgentMap.get(se.getTaxAgentId()));
map.put("salarySob",SalarySobMap.get(se.getSalarySobId()));
map.put("salarySob", SalarySobMap.get(se.getSalarySobId()));
map.put("acctTimes", salaryAcctRecordMap.get(se.getSalaryAcctRecordId()));
map.put("userName", Util.null2String(emp.getUsername()));
map.put("subCompany", Util.null2String(emp.getSubcompanyName()));
@ -278,6 +280,7 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala
map.put("jobTitle", Util.null2String(emp.getJobtitleName()));
map.put("status", Util.null2String(NumberUtil.isNumber(emp.getStatus()) ? SalaryEmployeeStatusEnum.parseByValue(Integer.valueOf(emp.getStatus())).getDefaultLabel() : null));
map.put("workCode", Util.null2String(emp.getWorkcode()));
map.put("companystartdate", Util.null2String(emp.getCompanystartdate()));
// IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(Integer.parseInt(se.getIncomeCategory()));
// map.put("incomeCategory", Objects.isNull(incomeCategoryEnum) ? "" : SalaryI18nUtil.getI18nLabel(incomeCategoryEnum.getLabelId(), incomeCategoryEnum.getDefaultLabel()));
@ -288,9 +291,6 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala
@Override
public PageInfo<SalaryAcctEmployeePO> listSalaryAcctEmp(SalaryStatisticsEmployeeSalaryQueryParam queryParam) {
List<SalaryStatisticsEmployeeListDTO> list = Collections.emptyList();
PageInfo<SalaryStatisticsEmployeeListDTO> page = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, SalaryStatisticsEmployeeListDTO.class);
// 1.分权处理, 首先获取个税扣缴义务人参数
Collection<TaxAgentPO> taxAgentViews = getTaxAgentService(user).listAllTaxAgents((long) user.getUID());
List<Long> taxAgentIds = Objects.isNull(taxAgentViews) ? Lists.newArrayList() : taxAgentViews.stream().map(TaxAgentPO::getId).collect(Collectors.toList());
@ -304,10 +304,10 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala
// 2.年月参数处理注意薪资所属月居然是用字符串存储的无法通过sql between处理
List<Date> dataParam = new ArrayList<>();
if (StringUtils.isNotBlank(queryParam.getStartDateStr())) {
dataParam.add(SalaryDateUtil.dateStrToLocalTime(queryParam.getStartDateStr()+ "-01 00:00:00"));
dataParam.add(SalaryDateUtil.dateStrToLocalTime(queryParam.getStartDateStr() + "-01 00:00:00"));
}
if (StringUtils.isNotBlank(queryParam.getEndDateStr())) {
dataParam.add(SalaryDateUtil.dateStrToLocalTime(queryParam.getEndDateStr()+ "-01 00:00:00"));
dataParam.add(SalaryDateUtil.dateStrToLocalTime(queryParam.getEndDateStr() + "-01 00:00:00"));
}
Set<Date> salaryMonths = SalaryStatisticsEmployeeBO.getSalaryMonths(null, dataParam)
.stream()
@ -315,18 +315,19 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala
.collect(Collectors.toSet());
// 查询薪资核算人员
List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listByTaxAgentAndSalaryMonth(taxAgentIds, salaryMonths);
SalaryAcctEmployeeQueryParam salaryAcctEmployeeQueryParam = SalaryAcctEmployeeQueryParam.builder().salaryMonths(salaryMonths).taxAgentIds(taxAgentIds).build();
List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listByParam(salaryAcctEmployeeQueryParam);
if (CollectionUtils.isNotEmpty(queryParam.getSubCompanyIds()) || CollectionUtils.isNotEmpty(queryParam.getDepartmentIds()) || StringUtils.isNotBlank(queryParam.getKeyword())) {
// 根据分部部门筛选
List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listBySubCompanyOrDepartment(queryParam.getSubCompanyIds(), queryParam.getDepartmentIds());
// 根据关键词过滤
if(StringUtils.isNotBlank(queryParam.getKeyword())) {
if (StringUtils.isNotBlank(queryParam.getKeyword())) {
employeeList = employeeList.stream()
.filter(e -> (e.getUsername().contains(queryParam.getKeyword()) || (StringUtils.isNotEmpty(e.getWorkcode()) && e.getWorkcode().contains(queryParam.getKeyword()))))
.collect(Collectors.toList());
}
List<Long> employeeIds = employeeList.stream().map(DataCollectionEmployee::getEmployeeId).collect(Collectors.toList());
salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter( acctEmp -> employeeIds.contains(acctEmp.getEmployeeId())).collect(Collectors.toList());
salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter(acctEmp -> employeeIds.contains(acctEmp.getEmployeeId())).collect(Collectors.toList());
}
if (CollectionUtils.isEmpty(salaryAcctEmployeeList)) {
return new PageInfo<>();
@ -336,8 +337,7 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala
if (CollectionUtils.isNotEmpty(queryParam.getIds())) {
salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter(emp -> queryParam.getIds().contains(emp.getId())).collect(Collectors.toList());
}
salaryAcctEmployeeList = salaryAcctEmployeeList.stream().sorted(Comparator.comparing(SalaryAcctEmployeePO::getSalaryMonth)).collect(Collectors.toList());
Collections.reverse(salaryAcctEmployeeList);
salaryAcctEmployeeList = salaryAcctEmployeeList.stream().sorted(Comparator.comparing(SalaryAcctEmployeePO::getSalaryMonth).reversed()).collect(Collectors.toList());
PageInfo<SalaryAcctEmployeePO> SalaryAcctEmployeePageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), salaryAcctEmployeeList);
if (queryParam.isExport()) {
SalaryAcctEmployeePageInfo.setList(salaryAcctEmployeeList);
@ -347,11 +347,33 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala
@Override
public SalaryStatisticsEmployeeDetailResultDTO getDetailSalaryAcctResultByAcctEmp(List<SalaryAcctEmployeePO> salaryAcctEmployeeList) {
// 3.获取薪资项目
PageListSettingQueryParam param = PageListSettingQueryParam.builder().page("salary_details_report").build();
Map setting = getSettingService(user).getPageListSetting(param);
List<Long> checked = setting.get("checked") != null ? JsonUtil.parseList(setting.get("checked"), Long.class) : new ArrayList<>();
List<SalaryItemPO> salaryItemList = getSalaryItemService(user).listByIds(checked);
// salaryItemList = salaryItemList.stream()
// .sorted(new Comparator<SalaryItemPO>() {
// @Override
// public int compare(SalaryItemPO o1, SalaryItemPO o2) {
// if (o1.getSortedIndex() == null && o2.getSortedIndex() == null) {
// Integer systemType1 = o1.getSystemType() == null ? 0 : o1.getSystemType();
// Integer systemType2 = o2.getSystemType() == null ? 0 : o2.getSystemType();
// return systemType1.compareTo(systemType2);
// } else {
// Integer sortedIndex1 = o1.getSortedIndex() == null ? 0 : o1.getSortedIndex();
// Integer sortedIndex2 = o2.getSortedIndex() == null ? 0 : o2.getSortedIndex();
// return sortedIndex2.compareTo(sortedIndex1);
// }
// }
// })
// .collect(Collectors.toList());
if (CollectionUtils.isEmpty(salaryAcctEmployeeList)) {
return SalaryStatisticsEmployeeDetailResultDTO.builder()
.salaryAcctEmployeeList(Collections.emptyList())
.salaryAcctResultValueList(Collections.emptyList())
.salaryItemList(Collections.emptyList())
.salaryItemList(salaryItemList)
.build();
}
@ -359,24 +381,7 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala
List<Long> salaryAcctEmployeeIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList());
List<SalaryAcctResultPO> salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds);
// 3.获取薪资项目
List<SalaryItemPO> salaryItemList = getSalaryItemService(user).listAll();
salaryItemList = salaryItemList.stream()
.sorted(new Comparator<SalaryItemPO>() {
@Override
public int compare(SalaryItemPO o1, SalaryItemPO o2) {
if (o1.getSortedIndex() == null && o2.getSortedIndex() == null) {
Integer systemType1 = o1.getSystemType() == null ? 0 : o1.getSystemType();
Integer systemType2 = o2.getSystemType() == null ? 0 : o2.getSystemType();
return systemType1.compareTo(systemType2);
} else {
Integer sortedIndex1 = o1.getSortedIndex() == null ? 0 : o1.getSortedIndex();
Integer sortedIndex2 = o2.getSortedIndex() == null ? 0 : o2.getSortedIndex();
return sortedIndex2.compareTo(sortedIndex1);
}
}
})
.collect(Collectors.toList());
return SalaryStatisticsEmployeeDetailResultDTO.builder()
.salaryAcctEmployeeList(salaryAcctEmployeeList)

View File

@ -33,6 +33,8 @@ import com.engine.salary.report.service.SalaryStatisticsReportService;
import com.engine.salary.report.util.ReportTimeUtil;
import com.engine.salary.service.*;
import com.engine.salary.service.impl.*;
import com.engine.salary.sys.service.SalarySysConfService;
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
import com.engine.salary.util.*;
import com.engine.salary.util.db.IdGenerator;
import com.engine.salary.util.db.MapperProxyFactory;
@ -54,6 +56,8 @@ import weaver.wechat.util.Utils;
import java.util.*;
import java.util.stream.Collectors;
import static com.engine.salary.sys.constant.SalarySysConstant.REPORT_ORGANIZATIN_TYPE;
/**
* 薪酬统计报表
* <p>Copyright: Copyright (c) 2022</p>
@ -71,6 +75,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
public static final String LAST_INFO = "lastInfoList";
public static final String SAME_INFO = "sameInfoList";
private final boolean isRealOrg = "1".equals(getSalarySysConfService(user).getValueByCode(REPORT_ORGANIZATIN_TYPE));
private SalaryStatisticsReportMapper getSalaryStatisticsReportMapper() {
return MapperProxyFactory.getProxy(SalaryStatisticsReportMapper.class);
@ -112,6 +117,9 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
return ServiceUtil.getService(SalaryCacheServiceImpl.class, user);
}
private SalarySysConfService getSalarySysConfService(User user) {
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
}
// private ExtEmployeeService extEmployeeService;
//
// private HrmCommonEmployeeService hrmCommonEmployeeService;
@ -197,16 +205,16 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
this.getSalaryStatisticsReportMapper().updateIgnoreNull(poNew);
// 记录日志
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(poNew.getId()));
loggerContext.setTargetName(poNew.getReportName());
loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "更新报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "更新报表"));
loggerContext.setOldValues(po);
loggerContext.setNewValues(poNew);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(poNew.getId()));
loggerContext.setTargetName(poNew.getReportName());
loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "更新报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更新报表"));
loggerContext.setOldValues(po);
loggerContext.setNewValues(poNew);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
} else {
List<SalaryStatisticsReportPO> list = listByName(saveParam.getReportName());
if (CollectionUtils.isNotEmpty(list)) {
@ -217,15 +225,15 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
getSalaryStatisticsReportMapper().insertIgnoreNull(poNew);
// 记录日志
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(poNew.getId()));
loggerContext.setTargetName(poNew.getReportName());
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "新增报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "新增报表"));
loggerContext.setNewValues(poNew);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(poNew.getId()));
loggerContext.setTargetName(poNew.getReportName());
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增报表"));
loggerContext.setNewValues(poNew);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
}
return StringUtils.EMPTY;
}
@ -305,16 +313,16 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
getSalaryStatisticsItemService(user).saveOrUpdateBatch(salaryStatisticsItemList);
//记录日志
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(po.getId()));
loggerContext.setTargetName(po.getReportName());
loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "更新报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更新报表"));
loggerContext.setOldValues(oldPO);
loggerContext.setNewValues(po);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(po.getId()));
loggerContext.setTargetName(po.getReportName());
loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "更新报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更新报表"));
loggerContext.setOldValues(oldPO);
loggerContext.setNewValues(po);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
return StringUtils.EMPTY;
}
@ -333,17 +341,17 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
getSalaryStatisticsReportMapper().deleteByIds(deleteIds);
//删除薪资项
getSalaryStatisticsItemService(user).deleteByReportIds(deleteIds);
list.forEach(e -> {
// 记录日志
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(e.getId()));
loggerContext.setTargetName(e.getReportName());
loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "删除报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "删除报表") + e.getReportName());
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
});
list.forEach(e -> {
// 记录日志
LoggerContext<SalaryStatisticsReportPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId(String.valueOf(e.getId()));
loggerContext.setTargetName(e.getReportName());
loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除报表") + e.getReportName());
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
});
}
Map<String, Object> resultMap = new HashMap<>(2);
@ -396,8 +404,8 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
loggerContext.setTargetId(String.valueOf(po.getId()));
loggerContext.setTargetName(po.getReportName());
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "新增报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "新增报表"));
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增报表"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增报表"));
loggerContext.setNewValues(po);
SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext);
}
@ -479,7 +487,15 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryStatisticsReportParam(queryParam);
// 设置dimensionValue为维度值
SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder().list(salaryAcctEmployeeList).lastList(Collections.emptyList()).sameList(Collections.emptyList()).salaryStatisticsItemList(salaryStatisticsItemPOS).employeeId((long) user.getUID()).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).dimensionValue(param.getDimensionValue()).build();
SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder()
.list(salaryAcctEmployeeList)
.lastList(Collections.emptyList())
.sameList(Collections.emptyList())
.salaryStatisticsItemList(salaryStatisticsItemPOS)
.employeeId((long) user.getUID())
.dimensionValue(param.getDimensionValue())
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
Map<Long, Map<String, String>> resultMap = new HashMap<>();
List<Long> salaryAcctEmployeeIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList());
@ -785,38 +801,74 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
Map<Long, String> subComIdNameMap = new HashMap<>();
Map<Long, Long> lastEmpIdSubComMap = new HashMap<>();
Map<Long, Long> sameEmpIdSubComMap = new HashMap<>();
comInfoMap.forEach((k, v) -> {
subComIdNameMap.put(v.getSubcompanyid(), v.getSubcompanyName());
empIdSubComMap.put(k, v.getSubcompanyid());
subComIds.add(v.getSubcompanyid());
});
lastComInfoMap.forEach((k, v) -> {
lastEmpIdSubComMap.put(k, v.getSubcompanyid());
});
sameComInfoMap.forEach((k, v) -> {
sameEmpIdSubComMap.put(k, v.getSubcompanyid());
});
if (isRealOrg) {
comInfoMap.forEach((k, v) -> {
subComIdNameMap.put(v.getSubcompanyid(), v.getSubcompanyName());
empIdSubComMap.put(k, v.getSubcompanyid());
subComIds.add(v.getSubcompanyid());
});
lastComInfoMap.forEach((k, v) -> {
lastEmpIdSubComMap.put(k, v.getSubcompanyid());
});
sameComInfoMap.forEach((k, v) -> {
sameEmpIdSubComMap.put(k, v.getSubcompanyid());
});
} else {
data.getList().forEach(employee -> {
if (employee.getSubcompanyId() != null && employee.getSubcompanyId() != null) {
subComIdNameMap.put(employee.getSubcompanyId(), employee.getSubcompanyName());
subComIds.add(employee.getDepartmentId());
empIdSubComMap.put(employee.getEmployeeId(), employee.getSubcompanyId());
}
});
data.getLastList().forEach(employee -> {
if (employee.getSubcompanyId() != null && employee.getSubcompanyId() != null) {
lastEmpIdSubComMap.put(employee.getEmployeeId(), employee.getSubcompanyId());
}
});
data.getSameList().forEach(employee -> {
if (employee.getSubcompanyId() != null && employee.getSubcompanyId() != null) {
sameEmpIdSubComMap.put(employee.getEmployeeId(), employee.getSubcompanyId());
}
});
}
String dimensionValue = data.getDimensionValue();
subComIds.forEach(subComId -> {
if (dimensionValue == null) {
List<SalaryAcctEmployeePO> subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(po.getSubcompanyId(), subComId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(po.getSubcompanyId(), subComId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(po.getSubcompanyId(), subComId)).collect(Collectors.toList());
if (isRealOrg) {
subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
}
Map<String, Object> temp = new HashMap<>();
temp.put(DM, subComIdNameMap.get(subComId));
temp.putAll(SalaryStatisticsReportBO.calculateItem(subComEmployeePOS, lastSubComEmployeePOS, sameSubComEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()));
records.add(temp);
} else if (StringUtils.equals(dimensionValue, subComIdNameMap.get(subComId))) {
List<SalaryAcctEmployeePO> subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(po.getSubcompanyId(), subComId)).collect(Collectors.toList());
if (isRealOrg) {
subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList());
}
data.setListByDimensionValue(subComEmployeePOS);
}
});
if (dimensionValue == null) {
List<SalaryAcctEmployeePO> noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> noGroupingList = data.getList().stream().filter(po -> po.getSubcompanyId() == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastNoGroupingList = data.getLastList().stream().filter(po -> po.getSubcompanyId() == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameNoGroupingList = data.getSameList().stream().filter(po -> po.getSubcompanyId() == null).collect(Collectors.toList());
if (isRealOrg) {
noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
}
if (CollectionUtils.isNotEmpty(noGroupingList)) {
Map<String, Object> noGrouping = new HashMap<>();
noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组"));
@ -825,6 +877,9 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
}
} else if (StringUtils.equals(dimensionValue, "无分组")) {
List<SalaryAcctEmployeePO> noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
if (isRealOrg) {
noGroupingList = data.getList().stream().filter(po -> po.getSubcompanyId() == null).collect(Collectors.toList());
}
data.setListByDimensionValue(noGroupingList);
}
@ -848,44 +903,78 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
Map<Long, Long> lastEmpIdDepartIdMap = new HashMap<>();
Map<Long, Long> sameEmpIdDepartIdMap = new HashMap<>();
Map<Long, String> departIdNameMap = new HashMap<>();
simpleEmployeeList.forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
departIdNameMap.put(employee.getDepartmentId(), employee.getDepartmentName());
departIds.add(employee.getDepartmentId());
empIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
lastSimpleEmployeeList.forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
lastEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
sameSimpleEmployeeList.forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
sameEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
if (isRealOrg) {
simpleEmployeeList.forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
departIdNameMap.put(employee.getDepartmentId(), employee.getDepartmentName());
departIds.add(employee.getDepartmentId());
empIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
lastSimpleEmployeeList.forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
lastEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
sameSimpleEmployeeList.forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
sameEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
} else {
data.getList().forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
departIdNameMap.put(employee.getDepartmentId(), employee.getDepartmentName());
departIds.add(employee.getDepartmentId());
empIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
data.getLastList().forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
lastEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
data.getSameList().forEach(employee -> {
if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) {
sameEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId());
}
});
}
String dimensionValue = data.getDimensionValue();
departIds.forEach(departId -> {
if (dimensionValue == null) {
List<SalaryAcctEmployeePO> departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(po.getDepartmentId(), departId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(po.getDepartmentId(), departId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(po.getDepartmentId(), departId)).collect(Collectors.toList());
if (isRealOrg) {
departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
}
Map<String, Object> temp = new HashMap<>();
temp.put(DM, departIdNameMap.get(departId));
temp.putAll(SalaryStatisticsReportBO.calculateItem(departEmployeePOS, lastDepartEmployeePOS, sameDepartEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()));
records.add(temp);
} else if (StringUtils.equals(dimensionValue, departIdNameMap.get(departId))) {
List<SalaryAcctEmployeePO> departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
List<SalaryAcctEmployeePO> departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(po.getDepartmentId(), departId)).collect(Collectors.toList());
if (isRealOrg) {
departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList());
}
data.setListByDimensionValue(departEmployeePOS);
}
});
if (dimensionValue == null) {
List<SalaryAcctEmployeePO> noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> noGroupingList = data.getList().stream().filter(po -> po.getDepartmentId() == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> lastNoGroupingList = data.getLastList().stream().filter(po -> po.getDepartmentId() == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> sameNoGroupingList = data.getSameList().stream().filter(po -> po.getDepartmentId() == null).collect(Collectors.toList());
if (isRealOrg) {
noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
}
if (CollectionUtils.isNotEmpty(noGroupingList)) {
Map<String, Object> noGrouping = new HashMap<>();
noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组"));
@ -893,7 +982,10 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
records.add(noGrouping);
}
} else if (StringUtils.equals(dimensionValue, "无分组")) {
List<SalaryAcctEmployeePO> noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
List<SalaryAcctEmployeePO> noGroupingList = data.getList().stream().filter(po -> po.getDepartmentId() == null).collect(Collectors.toList());
if (isRealOrg) {
noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList());
}
data.setListByDimensionValue(noGroupingList);
}

View File

@ -73,7 +73,7 @@ public class SalaryStatisticsEmployeeController {
}
/**
* 员工薪资列表
* 薪资明细
*
* @param queryParam
* @return

View File

@ -136,6 +136,7 @@ public class SalaryStatisticsEmployeeWrapper extends Service {
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "岗位"), "jobTitle"));
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "员工状态"), "status"));
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "工号"), "workCode"));
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "入职日期"), "companystartdate"));
}
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "次数"), "acctTimes").setDisplay(WeaBoolAttr.FALSE));
// columns.add(new WeaTableColumn("100px",SalaryI18nUtil.getI18nLabel( 121908, "收入所得项目"), "incomeCategory"));
@ -228,6 +229,9 @@ public class SalaryStatisticsEmployeeWrapper extends Service {
// 获取发薪人员
PageInfo<SalaryAcctEmployeePO> salaryAcctEmployeePageInfo = getSalaryStatisticsEmployeeService(user).listSalaryAcctEmp(queryParam);
List<SalaryAcctEmployeePO> employeePOS = salaryAcctEmployeePageInfo.getList();
if (CollectionUtils.isEmpty(employeePOS)){
return resultMap;
}
Map<String, Object> sumResultMap = Maps.newHashMap();

View File

@ -117,7 +117,7 @@ public interface SalaryAcctExcelService {
ExcelPreviewDTO previewImportSalaryAcctResult(SalaryAcctImportParam param);
void cacheImportField(List<Long> salaryItems);
void cacheImportField(SalaryAcctResultTemplateSaveParam param);
void cacheExportField(List<Long> salaryItems);

View File

@ -75,5 +75,5 @@ public interface SalaryAcctResultTemplateService {
* @param salarySobId
* @return
*/
List<SalaryAcctResultTemplatePO> listBySalarySobId(Long salarySobId);
List<SalaryAcctResultTemplatePO> listBySalarySobId(Long salarySobId,List<Integer> types);
}

View File

@ -0,0 +1,12 @@
package com.engine.salary.service;
import com.engine.salary.entity.setting.param.PageListSettingQueryParam;
import com.engine.salary.entity.setting.param.PageListSettingSaveParam;
import java.util.Map;
public interface SettingService {
void savePageListSetting(PageListSettingSaveParam pageListSettingSaveParam);
Map getPageListSetting(PageListSettingQueryParam param);
}

View File

@ -48,6 +48,8 @@ import weaver.hrm.User;
import java.util.*;
import java.util.stream.Collectors;
import static com.engine.salary.sys.constant.SalarySysConstant.REPORT_ORGANIZATIN_TYPE;
/**
* 薪资核算人员
* <p>Copyright: Copyright (c) 2022</p>
@ -103,6 +105,11 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
}
private SalaryCacheService getSalaryCacheService(User user) {
return ServiceUtil.getService(SalaryCacheServiceImpl.class, user);
}
private boolean isRealOrg = "1".equals(getSalaryCacheService(user).get(REPORT_ORGANIZATIN_TYPE));
@Override
public List<SalaryAcctEmployeeCountDTO> countBySalaryAcctRecordId(Collection<Long> salaryAcctRecordIds) {
@ -662,11 +669,6 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
lambdaQueryChainWrapper.setSalaryMonths(yearMonths);
}
// 收入所得项目
// if (CollectionUtils.isNotEmpty(param.getIncomeCategory())) {
// lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getIncomeCategory, param.getIncomeCategory().stream().map(Object::toString).collect(Collectors.toList()));
// }
//排除未归档数据
List<SalaryAcctRecordPO> salaryAcctRecordPOS = getSalaryAcctRecordService(user).listAll();
List<Long> salaryAcctRecordIds = salaryAcctRecordPOS.stream()
@ -696,70 +698,47 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
// 获取分部信息
List<Long> subCompanyIds = param.getSubCompany();
if (CollectionUtils.isNotEmpty(subCompanyIds)) {
// SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo();
// List<String> allSubcompanyIds = new ArrayList<>();
// for (Long subCompanyId : subCompanyIds) {
// String organizationIds = Util.null2String(subCompanyId);
// String allChildSubcompanyId = subCompanyComInfo.getAllChildSubcompanyId(subCompanyId.toString(), organizationIds);
// allSubcompanyIds.addAll(Arrays.asList(allChildSubcompanyId.split(",")));
// }
employeeList = employeeList.stream().filter(emp -> subCompanyIds.contains(emp.getSubcompanyid())).collect(Collectors.toList());
if (isRealOrg) {
employeeList = employeeList.stream().filter(emp -> subCompanyIds.contains(emp.getSubcompanyid())).collect(Collectors.toList());
} else {
list.stream().filter(emp -> subCompanyIds.contains(emp.getSubcompanyId())).collect(Collectors.toList());
}
}
// 部门过滤
List<Long> depart = param.getDepart();
if (CollectionUtils.isNotEmpty(depart)) {
// List<String> allDepartIds = new ArrayList<>();
// for (Long subDepartId : depart) {
// String ids = Util.null2String(subDepartId);
// try {
// String allDepartId = DepartmentComInfo.getAllChildDepartId(subDepartId.toString(), ids);
// allDepartIds.addAll(Arrays.asList(allDepartId.toString().split(",")));
// } catch (Exception e) {
// log.error("获取子部门失败", e);
// }
// }
employeeList = employeeList.stream().filter(emp -> depart.contains(emp.getDepartmentId())).collect(Collectors.toList());
if (isRealOrg) {
employeeList = employeeList.stream().filter(emp -> depart.contains(emp.getDepartmentId())).collect(Collectors.toList());
} else {
list = list.stream().filter(emp -> depart.contains(emp.getDepartmentId())).collect(Collectors.toList());
}
}
// 职级过滤
// if (CollectionUtils.isNotEmpty(param.getGrade())) {
// Set<Long> employeeIdsByGradeFilter = new HashSet<>();
// simpleEmployeeList.forEach(simpleEmployee -> {
// if (simpleEmployee.getGrade() != null && param.getGrade().contains(simpleEmployee.getGrade().getId())) {
// employeeIdsByGradeFilter.add(simpleEmployee.getEmployeeId());
// }
// });
// if (CollectionUtils.isEmpty(employeeIdsByGradeFilter)) {
// return Lists.newArrayList();
// }
// list = list.stream().filter(po -> employeeIdsByGradeFilter.contains(po.getEmployeeId())).collect(Collectors.toList());
// }
// 岗位过滤
List<Long> position = param.getPosition();
if (CollectionUtils.isNotEmpty(position)) {
// Set<Long> employeeIdsByPostionFilter = new HashSet<>();
// simpleEmployeeList.forEach(simpleEmployee -> {
// if (simpleEmployee.getPosition() != null && param.getPosition().contains(simpleEmployee.getPosition().getId())) {
// employeeIdsByPostionFilter.add(simpleEmployee.getEmployeeId());
// }
// });
// if (CollectionUtils.isEmpty(employeeIdsByPostionFilter)) {
// return Lists.newArrayList();
// }
employeeList = employeeList.stream().filter(emp -> position.contains(emp.getJobtitleId())).collect(Collectors.toList());
if (isRealOrg) {
employeeList = employeeList.stream().filter(emp -> position.contains(emp.getJobtitleId())).collect(Collectors.toList());
} else {
list = list.stream().filter(emp -> position.contains(emp.getJobtitleId())).collect(Collectors.toList());
}
}
// 人事状态过滤
if (CollectionUtils.isNotEmpty(param.getStatus())) {
Set<Long> employeeIdsByStatus = new HashSet<>();
employeeList.forEach(simpleEmployee -> {
if (simpleEmployee.getStatus() != null && param.getStatus().contains(simpleEmployee.getStatus())) {
employeeIdsByStatus.add(simpleEmployee.getEmployeeId());
if (isRealOrg) {
Set<Long> employeeIdsByStatus = new HashSet<>();
employeeList.forEach(simpleEmployee -> {
if (simpleEmployee.getStatus() != null && param.getStatus().contains(simpleEmployee.getStatus())) {
employeeIdsByStatus.add(simpleEmployee.getEmployeeId());
}
});
if (CollectionUtils.isEmpty(employeeIdsByStatus)) {
return Lists.newArrayList();
}
});
if (CollectionUtils.isEmpty(employeeIdsByStatus)) {
return Lists.newArrayList();
list = list.stream().filter(po -> employeeIdsByStatus.contains(po.getEmployeeId())).collect(Collectors.toList());
} else {
list = list.stream().filter(po -> po.getStatus() != null && param.getStatus().contains(po.getStatus())).collect(Collectors.toList());
}
list = list.stream().filter(po -> employeeIdsByStatus.contains(po.getEmployeeId())).collect(Collectors.toList());
}
// 入职日期
if (CollectionUtils.isNotEmpty(param.getHiredate())) {
@ -775,27 +754,15 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
}
list = list.stream().filter(po -> employeeIdsByHiredate.contains(po.getEmployeeId())).collect(Collectors.toList());
}
// // 离职日期 todo
// if (CollectionUtils.isNotEmpty(param.getLeavedate())) {
// Set<Long> employeeIdsByLeavedate = new HashSet<>();
// simpleEmployeeList.forEach(simpleEmployee -> {
//
// if (simpleEmployee.get() != null && ) {
// employeeIdsByLeavedate.add(simpleEmployee.getEmployeeId());
// }
// });
// if (CollectionUtils.isEmpty(employeeIdsByLeavedate)) {
// return Lists.newArrayList();
// }
// list = list.stream().filter(po -> employeeIdsByLeavedate.contains(po.getEmployeeId())).collect(Collectors.toList());
// }
// 人员
if (CollectionUtils.isNotEmpty(param.getEmployee())) {
list = list.stream().filter(po -> param.getEmployee().contains(po.getEmployeeId())).collect(Collectors.toList());
}
Set<Long> empIds = SalaryEntityUtil.properties(employeeList, DataCollectionEmployee::getEmployeeId);
list = list.stream().filter(po -> empIds.contains(po.getEmployeeId())).collect(Collectors.toList());
if(isRealOrg){
Set<Long> empIds = SalaryEntityUtil.properties(employeeList, DataCollectionEmployee::getEmployeeId);
list = list.stream().filter(po -> empIds.contains(po.getEmployeeId())).collect(Collectors.toList());
}
return list;
}

View File

@ -1,6 +1,7 @@
package com.engine.salary.service.impl;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.api.formmode.mybatis.util.SqlProxyHandle;
import com.cloudstore.dev.api.util.Util_DataCache;
import com.engine.common.util.ServiceUtil;
@ -459,7 +460,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
SalaryAcctRecordPO byId = getSalaryAcctRecordService(user).getById(salaryAcctRecordPO.getId());
boolean isBackCalc = Objects.equals(byId.getBackCalcStatus(), 1);
// 查询薪资账套下的薪资项目+员工信息字段
SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateWithItemHideBySalarySobId(salaryAcctRecordPO.getId(),salaryAcctRecordPO.getSalarySobId(), isBackCalc);
SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateWithItemHideBySalarySobId(salaryAcctRecordPO.getId(), salaryAcctRecordPO.getSalarySobId(), isBackCalc);
// 构建薪资核算结果列表表头
List<WeaTableColumnGroup> columnList = SalaryAcctResultBO.buildTableColumns(salarySobItemAggregateDTO, ListUtils.emptyIfNull(salaryAcctRecordPO.getLockSalaryItemIds()));
// 获取固定列头数
@ -591,11 +592,12 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// .build())
// .collect(Collectors.toList());
// 缓存勾选
String cacheKey = user.getUID() + SalaryItemConstant.RESULT_IMPORT_FIELD_SIGN;
String cacheValue = (String) Util_DataCache.getObjVal(cacheKey);
List<Long> checkItems = JsonUtil.parseList(cacheValue, Long.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, Long.class);
// 转换成dto
// return SalaryAcctImportFieldDTO.builder().formulaItems(formulaItems).sqlItems(sqlItems).inputItems(inputItems).checkItems(checkItems).build();
List<Long> checkItems = new ArrayList<>();
List<SalaryAcctResultTemplatePO> salaryAcctResultTemplatePOS = getSalaryAcctResultTemplateService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), Arrays.asList(2));
if (CollectionUtils.isNotEmpty(salaryAcctResultTemplatePOS)) {
String items = salaryAcctResultTemplatePOS.get(0).getSalaryItemIds();
checkItems = StrUtil.isNotEmpty(items) ? Arrays.stream(items.split(",")).map(Long::valueOf).collect(Collectors.toList()) : new ArrayList<>();
}
return SalaryAcctImportFieldDTO.builder().itemsByGroup(itemsByGroup).checkItems(checkItems).build();
}
@ -667,18 +669,22 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
@Override
public XSSFWorkbook exportImportTemplate(SalaryAcctImportTemplateParam param) {
// ValidUtil.doValidator(param);
// 从缓存中获取所选的薪资项目
String cacheKey = user.getUID() + SalaryItemConstant.RESULT_IMPORT_FIELD_SIGN;
String cacheValue = (String) Util_DataCache.getObjVal(cacheKey);
List<Long> checkItems = JsonUtil.parseList(cacheValue, Long.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, Long.class);
// 查询薪资核算记录
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(param.getSalaryAcctRecordId());
if (Objects.isNull(salaryAcctRecordPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
}
List<Long> checkItems = new ArrayList<>();
List<SalaryAcctResultTemplatePO> salaryAcctResultTemplatePOS = getSalaryAcctResultTemplateService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), Arrays.asList(2));
if (CollectionUtils.isNotEmpty(salaryAcctResultTemplatePOS)) {
String items = salaryAcctResultTemplatePOS.get(0).getSalaryItemIds();
checkItems = StrUtil.isNotEmpty(items) ? Arrays.stream(items.split(",")).map(Long::valueOf).collect(Collectors.toList()) : new ArrayList<>();
}
// 必须选择导入模板所需的薪资项目
if (CollectionUtils.isEmpty(checkItems)) {
// 获取所有可以选择的薪资项目
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(param.getSalaryAcctRecordId());
if (Objects.isNull(salaryAcctRecordPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
}
// 查询薪资核算记录所用的薪资账套的薪资项目副本
List<SalarySobItemPO> salarySobItems = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId());
List<Long> salaryItemIds = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId, Collectors.toList());
@ -688,11 +694,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
checkItems = salaryItemIds;
}
param.setSalaryItemIds(checkItems);
// 查询薪资核算记录
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(param.getSalaryAcctRecordId());
if (Objects.isNull(salaryAcctRecordPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
}
// // 模板表头(默认必带"个税扣缴义务人""姓名")
// List<Object> headerList = Lists.newArrayList(SalaryI18nUtil.getI18nLabel(85429, "姓名"),
// "部门",
@ -890,7 +892,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// headerList.add("手机号");
// headerList.add("工号");
// 查询薪资账套下的薪资项目
SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateByRecordId(exportParam.getSalaryAcctRecordId(),true);
SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateByRecordId(exportParam.getSalaryAcctRecordId(), true);
// // 员工信息
// for (SalarySobEmpFieldDTO item : salarySobItemAggregateDTO.getEmpFields()) {
@ -976,9 +978,32 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
}
@Override
public void cacheImportField(List<Long> salaryItems) {
String cacheKey = user.getUID() + SalaryItemConstant.RESULT_IMPORT_FIELD_SIGN;
Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(salaryItems));
public void cacheImportField(SalaryAcctResultTemplateSaveParam saveParam) {
Long salaryAcctRecordId = saveParam.getSalaryAcctRecordId();
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId);
if (salaryAcctRecordPO == null) {
throw new SalaryRunTimeException("薪资核算记录不存在");
}
List<SalaryAcctResultTemplatePO> salaryAcctResultTemplatePOS = getSalaryAcctResultTemplateService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), Collections.singletonList(2));
if (CollectionUtils.isNotEmpty(salaryAcctResultTemplatePOS)) {
salaryAcctResultTemplatePOS.forEach(templatePO -> getSalaryAcctResultTemplateService(user).deleteById(templatePO.getId()));
}
Date now = new Date();
SalaryAcctResultTemplatePO templatePO = SalaryAcctResultTemplatePO.builder()
.id(IdGenerator.generate())
.type(2)
.salarySobId(salaryAcctRecordPO.getSalarySobId())
.salaryItemIds(StringUtils.join(saveParam.getSalaryItemIds(), ","))
.templateName("")
.creator((long) user.getUID())
.createTime(now)
.updateTime(now)
.deleteType(0)
.build();
getSalaryAcctResultTemplateService(user).insertIgnoreNull(templatePO);
}
@Override
@ -1145,7 +1170,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
//salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空"), i, i, j, j);
} else {
//筛选导入人员信息可以在人力资源池中匹配到的人员信息
List<DataCollectionEmployee> employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue, salaryEmployees, dataValue, deparmentName, mobile, workcode,idNo, null);
List<DataCollectionEmployee> employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue, salaryEmployees, dataValue, deparmentName, mobile, workcode, idNo, null);
if (CollectionUtils.isEmpty(employeeSameIds)) {
isError = true;
@ -1467,7 +1492,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
throw new SalaryRunTimeException("薪资核算记录不存在");
}
saveParam.setSalarySobId(salaryAcctRecordPO.getSalarySobId());
List<SalaryAcctResultTemplatePO> templateBySobId = getSalaryAcctResultTemplateService(user).listBySalarySobId(saveParam.getSalarySobId());
List<SalaryAcctResultTemplatePO> templateBySobId = getSalaryAcctResultTemplateService(user).listBySalarySobId(saveParam.getSalarySobId(), Arrays.asList(0, 1));
if (saveParam.getId() != null) {
Optional<SalaryAcctResultTemplatePO> saveNameOptional = templateBySobId.stream().filter(po -> po.getTemplateName().equals(saveParam.getTemplateName()) && !po.getId().equals(saveParam.getId())).findFirst();
if (saveNameOptional.isPresent()) {
@ -1480,6 +1505,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
}
salaryAcctResultTemplatePO.setSalaryItemIds(StringUtils.join(saveParam.getSalaryItemIds(), ","));
salaryAcctResultTemplatePO.setTemplateName(saveParam.getTemplateName());
salaryAcctResultTemplatePO.setType(0);
salaryAcctResultTemplatePO.setUpdateTime(new Date());
getSalaryAcctResultTemplateService(user).update(salaryAcctResultTemplatePO);
} else {
@ -1489,16 +1515,18 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
}
// 新建
Date now = new Date();
getSalaryAcctResultTemplateService(user).insertIgnoreNull(SalaryAcctResultTemplatePO.builder()
SalaryAcctResultTemplatePO templatePO = SalaryAcctResultTemplatePO.builder()
.id(IdGenerator.generate())
.type(0)
.salarySobId(saveParam.getSalarySobId())
.salaryItemIds(StringUtils.join(saveParam.getSalaryItemIds(), ","))
.templateName(saveParam.getTemplateName())
.creator(Long.valueOf(user.getUID()))
.creator((long) user.getUID())
.createTime(now)
.updateTime(now)
.deleteType(0)
.build());
.build();
getSalaryAcctResultTemplateService(user).insertIgnoreNull(templatePO);
}
}
@ -1525,7 +1553,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
if (salaryAcctRecordPO == null) {
throw new SalaryRunTimeException("薪资核算记录为空");
}
List<SalaryAcctResultTemplatePO> salaryAcctResultTemplatePOS = getSalaryAcctResultTemplateService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId());
List<SalaryAcctResultTemplatePO> salaryAcctResultTemplatePOS = getSalaryAcctResultTemplateService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), Arrays.asList(0, 1));
if (StringUtils.isNotBlank(param.getTemplateName())) {
salaryAcctResultTemplatePOS = salaryAcctResultTemplatePOS.stream().filter(po -> po.getTemplateName().contains(param.getTemplateName())).collect(Collectors.toList());
}

View File

@ -63,10 +63,10 @@ public class SalaryAcctResultTemplateServiceImpl extends Service implements Sala
}
@Override
public List<SalaryAcctResultTemplatePO> listBySalarySobId(Long salarySobId) {
public List<SalaryAcctResultTemplatePO> listBySalarySobId(Long salarySobId,List<Integer> types) {
if (salarySobId == null) {
return Collections.emptyList();
}
return getSalaryAcctResultTemplateMapper().listSome(SalaryAcctResultTemplatePO.builder().salarySobId(salarySobId).build());
return getSalaryAcctResultTemplateMapper().listSome(SalaryAcctResultTemplatePO.builder().salarySobId(salarySobId).types(types).build());
}
}

View File

@ -0,0 +1,107 @@
package com.engine.salary.service.impl;
import cn.hutool.core.util.StrUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.setting.param.PageListSettingQueryParam;
import com.engine.salary.entity.setting.param.PageListSettingSaveParam;
import com.engine.salary.entity.setting.po.PageListSettingPO;
import com.engine.salary.mapper.setting.PageListSettingMapper;
import com.engine.salary.service.SalaryItemService;
import com.engine.salary.service.SalarySobService;
import com.engine.salary.service.SettingService;
import com.engine.salary.util.JsonUtil;
import com.engine.salary.util.db.IdGenerator;
import com.engine.salary.util.db.MapperProxyFactory;
import weaver.hrm.User;
import java.util.*;
import java.util.stream.Collectors;
import static com.engine.salary.constant.SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY;
/**
* 薪资核算
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
public class SettingServiceImpl extends Service implements SettingService {
private PageListSettingMapper getPageListSettingMapper() {
return MapperProxyFactory.getProxy(PageListSettingMapper.class);
}
private SalarySobService getSalarySobService(User user) {
return ServiceUtil.getService(SalarySobServiceImpl.class, user);
}
private SalaryItemService getSalaryItemService(User user) {
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
}
@Override
public void savePageListSetting(PageListSettingSaveParam pageListSettingSaveParam) {
Date now = new Date();
PageListSettingPO pageListSettingPO = getPageListSettingMapper().getByPage(pageListSettingSaveParam.getPage());
if (pageListSettingPO != null) {
pageListSettingPO.setSetting(JsonUtil.toJsonString(pageListSettingSaveParam.getSetting()));
pageListSettingPO.setUpdateTime(now);
getPageListSettingMapper().updateIgnoreNull(pageListSettingPO);
} else {
pageListSettingPO = PageListSettingPO.builder()
.id(IdGenerator.generate())
.page(pageListSettingSaveParam.getPage())
.setting(JsonUtil.toJsonString(pageListSettingSaveParam.getSetting()))
.creator((long) user.getUID())
.createTime(now)
.updateTime(now)
.deleteType(0)
.tenantKey(DEFAULT_TENANT_KEY)
.build();
getPageListSettingMapper().insertIgnoreNull(pageListSettingPO);
}
}
@Override
public Map getPageListSetting(PageListSettingQueryParam param) {
String page = param.getPage();
Map result = new HashMap();
PageListSettingPO pageListSettingPO = getPageListSettingMapper().getByPage(page);
if ("salary_details_report".equals(page)) {
List<SalaryItemPO> salaryItemList = getSalaryItemService(user).listAll();
salaryItemList = salaryItemList.stream()
.filter(po -> {
String name = param.getName();
if (StrUtil.isNotEmpty(name)) {
return po.getName() != null && po.getName().contains(name);
}
return true;
})
.sorted((o1, o2) -> {
if (o1.getSortedIndex() == null && o2.getSortedIndex() == null) {
Integer systemType1 = o1.getSystemType() == null ? 0 : o1.getSystemType();
Integer systemType2 = o2.getSystemType() == null ? 0 : o2.getSystemType();
return systemType1.compareTo(systemType2);
} else {
Integer sortedIndex1 = o1.getSortedIndex() == null ? 0 : o1.getSortedIndex();
Integer sortedIndex2 = o2.getSortedIndex() == null ? 0 : o2.getSortedIndex();
return sortedIndex2.compareTo(sortedIndex1);
}
})
.collect(Collectors.toList());
result.put("setting", salaryItemList);
if (pageListSettingPO != null && StrUtil.isNotEmpty(pageListSettingPO.getSetting())) {
result.put("checked", JsonUtil.parseList(pageListSettingPO.getSetting(), Long.class));
} else {
List<Long> collect = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList());
result.put("checked", collect);
}
}
return result;
}
}

View File

@ -145,4 +145,15 @@ public class SalarySysConstant {
* 我的薪资福利工资单个税扣缴义务人显示状态
*/
public static final String TAX_AGENT_SHOW_STATUS = "taxAgentShowStatus";
/**
* 报表是否开启缓存0关闭 1开启
*/
public static final String REPORT_CACHE = "REPORT_CACHE";
/**
* 报表组织类型null/0 核算时组织信息 1实时组织信息
*/
public static final String REPORT_ORGANIZATIN_TYPE = "REPORT_ORGANIZATIN_TYPE";
}

View File

@ -40,6 +40,8 @@ public interface SalarySysConfService {
SalarySysConfPO getOneByCode(String code);
String getValueByCode(String code);
List<SalarySysConfPO> listSome(SalarySysConfPO build);
void save(SalarySysConfPO salarySysConfPO);

View File

@ -222,6 +222,12 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe
return getSalarySysConfMapper().getOneByCode(code);
}
@Override
public String getValueByCode(String code) {
SalarySysConfPO confPO = getSalarySysConfMapper().getOneByCode(code);
return confPO == null ? "" : confPO.getConfValue();
}
@Override
public List<SalarySysConfPO> listSome(SalarySysConfPO po) {
return getSalarySysConfMapper().listSome(po);

View File

@ -139,7 +139,7 @@ public class ExcelUtilPlus {
rowZeroCell.setCellValue(columnGroupItem.getText().toString());
rowZeroCell.setCellStyle(titleCellStyle);
//设置列宽
sheet.setColumnWidth(i, Math.max(12, columnGroupItem.getText().length() * 4) * 256);
sheet.setColumnWidth(i, Math.min(255, Math.max(12, columnGroupItem.getText().length() * 4)) * 256);
patternList.add(columnGroupItem.getPattern());
}
@ -266,7 +266,7 @@ public class ExcelUtilPlus {
//遍历设置列宽
List<Object> header = rowList.get(0);
for (int i = 0; i < header.size(); i++) {
sheet.setColumnWidth(i, Math.max(12, header.get(i).toString().length() * 4) * 256);
sheet.setColumnWidth(i, Math.min(255, Math.max(12, header.get(i).toString().length() * 4)) * 256);
}
for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) {
@ -353,7 +353,7 @@ public class ExcelUtilPlus {
//遍历设置列宽
List<Object> header = rowList.get(0);
for (int i = 0; i < header.size(); i++) {
sheet.setColumnWidth(i, Math.max(12, header.get(i).toString().length() * 4) * 256);
sheet.setColumnWidth(i, Math.min(255, Math.max(12, header.get(i).toString().length() * 4)) * 256);
}
for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) {
@ -458,7 +458,7 @@ public class ExcelUtilPlus {
//遍历设置列宽
List<Object> header = rowList.get(0);
for (int i = 0; i < header.size(); i++) {
sheet.setColumnWidth(i, Math.max(12, header.get(i).toString().length() * 4) * 256);
sheet.setColumnWidth(i, Math.min(255, Math.max(12, header.get(i).toString().length() * 4)) * 256);
}
for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) {
@ -592,7 +592,7 @@ public class ExcelUtilPlus {
rowOneCell.setCellValue(columnGroupItem.getText().toString());
rowOneCell.setCellStyle(titleCellStyle);
//设置列宽
sheet.setColumnWidth(startIndex, Math.max(12, columnGroupItem.getText().length() * 4) * 256);
sheet.setColumnWidth(startIndex, Math.min(255, Math.max(12, columnGroupItem.getText().length() * 4)) * 256);
startIndex++;
patternList.add(columnGroupItem.getPattern());
} else {
@ -614,7 +614,7 @@ public class ExcelUtilPlus {
subHeader.setCellValue(childrenItem.getText().toString());
subHeader.setCellStyle(titleCellStyle);
//设置列宽
sheet.setColumnWidth(startIndex + j, Math.max(12, childrenItem.getText().length() * 4) * 256);
sheet.setColumnWidth(startIndex + j, Math.min(255, Math.max(12, childrenItem.getText().length() * 4)) * 256);
patternList.add(childrenItem.getPattern());
}
@ -793,7 +793,7 @@ public class ExcelUtilPlus {
rowOneCell.setCellValue(columnGroupItem.getText().toString());
rowOneCell.setCellStyle(titleCellStyle);
//设置列宽
sheet.setColumnWidth(startIndex, Math.max(12, columnGroupItem.getText().length() * 4) * 256);
sheet.setColumnWidth(startIndex, Math.min(255, Math.max(12, columnGroupItem.getText().length() * 4)) * 256);
startIndex++;
} else {
List<WeaTableColumnGroup> childrenList = columnGroupItem.getChildren();
@ -814,7 +814,7 @@ public class ExcelUtilPlus {
subHeader.setCellValue(childrenItem.getText().toString());
subHeader.setCellStyle(titleCellStyle);
//设置列宽
sheet.setColumnWidth(startIndex + j, Math.max(12, childrenItem.getText().length() * 4) * 256);
sheet.setColumnWidth(startIndex + j, Math.min(255, Math.max(12, childrenItem.getText().length() * 4)) * 256);
}
startIndex += childrenList.size();

View File

@ -168,7 +168,7 @@ public class SalaryAcctController {
@GET
@Path("/compareSobConfig")
@Produces(MediaType.APPLICATION_JSON)
public String compareSobConfig(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam(value = "id") Long id) {
public String compareSobConfig(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<Long, Boolean>(user).run(getSalaryAcctRecordWrapper(user)::compareSobConfig, id);
}
@ -182,7 +182,7 @@ public class SalaryAcctController {
@GET
@Path("/updateSobConfig")
@Produces(MediaType.APPLICATION_JSON)
public String updateSobConfig(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam(value = "id") Long id) {
public String updateSobConfig(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<Long, Boolean>(user).run(getSalaryAcctRecordWrapper(user)::updateSobConfig, id);
}
@ -631,9 +631,9 @@ public class SalaryAcctController {
@POST
@Path("/acctresult/cacheImportField")
@Produces(MediaType.APPLICATION_JSON)
public String cacheImportField(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctImportParam param) {
public String cacheImportField(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultTemplateSaveParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<List<Long>, String>(user).run(getSalaryAcctExcelService(user)::cacheImportField, param.getSalaryItems());
return new ResponseResult<SalaryAcctResultTemplateSaveParam, String>(user).run(getSalaryAcctExcelService(user)::cacheImportField, param);
}
// 薪资核算导出字段缓存
@ -678,7 +678,7 @@ public class SalaryAcctController {
@Produces(MediaType.APPLICATION_JSON)
public String exportTemplateList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultTemplateSaveParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryAcctResultTemplateSaveParam, Map<String, Object>>(user).run(getSalaryAcctExcelService(user)::exportTemplateList, param);
return new ResponseResult<SalaryAcctResultTemplateSaveParam, Map<String, Object>>(user).run(getSalaryAcctExcelService(user)::exportTemplateList, param);
}

View File

@ -1,6 +1,8 @@
package com.engine.salary.web;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.entity.setting.param.PageListSettingQueryParam;
import com.engine.salary.entity.setting.param.PageListSettingSaveParam;
import com.engine.salary.entity.browser.dto.BrowserDataDTO;
import com.engine.salary.entity.browser.param.BrowserDataQueryParam;
import com.engine.salary.util.ResponseResult;
@ -59,4 +61,26 @@ public class SalaryCommonController {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<BrowserDataQueryParam, PageInfo<BrowserDataDTO>>(user).run(getSalaryCommonWrapper(user)::getBrowserData, param);
}
/**
* 页面模板设置
*
* @param param
* @return
*/
@POST
@Path("/pageList/save/setting")
@Produces(MediaType.APPLICATION_JSON)
public String savePageListSetting(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody PageListSettingSaveParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<PageListSettingSaveParam, String>(user).run(getSalaryCommonWrapper(user)::savePageListSetting, param);
}
@POST
@Path("/pageList/get/setting")
@Produces(MediaType.APPLICATION_JSON)
public String getPageListSetting(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody PageListSettingQueryParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<PageListSettingQueryParam, Map>(user).run(getSalaryCommonWrapper(user)::getPageListSetting, param);
}
}

View File

@ -5,16 +5,22 @@ import com.engine.core.impl.Service;
import com.engine.salary.entity.browser.dto.BrowserDataDTO;
import com.engine.salary.entity.browser.param.BrowserDataQueryParam;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.setting.param.PageListSettingQueryParam;
import com.engine.salary.entity.setting.param.PageListSettingSaveParam;
import com.engine.salary.service.SalaryCacheService;
import com.engine.salary.service.SalarySobItemService;
import com.engine.salary.service.SettingService;
import com.engine.salary.service.impl.SalaryCacheServiceImpl;
import com.engine.salary.service.impl.SalarySobItemServiceImpl;
import com.engine.salary.util.JsonUtil;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
import org.apache.commons.lang3.StringUtils;
import com.engine.salary.service.impl.SettingServiceImpl;
import weaver.hrm.User;
import java.util.Map;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@ -26,6 +32,10 @@ public class SalaryCommonWrapper extends Service {
return ServiceUtil.getService(SalaryCacheServiceImpl.class, user);
}
private SettingService getSettingService(User user) {
return ServiceUtil.getService(SettingServiceImpl.class, user);
}
private SalarySobItemService getSalarySobItemService(User user) {
return ServiceUtil.getService(SalarySobItemServiceImpl.class, user);
}
@ -57,4 +67,13 @@ public class SalaryCommonWrapper extends Service {
return null;
}
public void savePageListSetting(PageListSettingSaveParam pageListSettingSaveParam) {
getSettingService(user).savePageListSetting(pageListSettingSaveParam);
}
public Map getPageListSetting(PageListSettingQueryParam param) {
return getSettingService(user).getPageListSetting(param);
}
}