This commit is contained in:
Harryxzy 2023-08-29 10:08:18 +08:00
parent 7f17c68c9c
commit e6b4b4c4da
20 changed files with 847 additions and 23 deletions

View File

@ -10,6 +10,7 @@ import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO;
import com.engine.salary.entity.salarysob.po.SalarySobPO;
import com.engine.salary.enums.salaryaccounting.ApprovalWorkflowStatusEnum;
import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.SalaryEntityUtil;
@ -45,7 +46,8 @@ public class SalaryAcctRecordBO {
List<SalarySobPO> salarySobs,
List<DataCollectionEmployee> employeeComInfos,
List<SalaryAcctEmployeeCountDTO> salaryAcctEmployeeCountDTOS,
List<SalarySendCheckDTO> salarySendCheckResult) {
List<SalarySendCheckDTO> salarySendCheckResult,
Map<String, String> workflowStatusMap) {
if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) {
return Collections.emptyList();
}
@ -57,6 +59,15 @@ public class SalaryAcctRecordBO {
.map(salaryAcctRecordPO -> {
SalarySobPO salarySobPO = salarySobMap.get(salaryAcctRecordPO.getSalarySobId());
SalaryAcctRecordStatusEnum salaryAcctRecordStatusEnum = SalaryAcctRecordStatusEnum.parseByValue(salaryAcctRecordPO.getStatus());
// 获取审批流程状态
ApprovalWorkflowStatusEnum workflowStatusEnum;
if (StringUtils.isBlank(salaryAcctRecordPO.getApprovalRequestId()) || StringUtils.isBlank(workflowStatusMap.get(salaryAcctRecordPO.getApprovalRequestId())) ) {
workflowStatusEnum = ApprovalWorkflowStatusEnum.UNAPPROVED;
} else if (StringUtils.equals(workflowStatusMap.get(salaryAcctRecordPO.getApprovalRequestId()),"3")) {
workflowStatusEnum = ApprovalWorkflowStatusEnum.APPROVED;
} else {
workflowStatusEnum = ApprovalWorkflowStatusEnum.UNDER_APPROVAL;
}
// 只有未归档时可以"核算""删除""归档"
// 归档后工资单全部发放以后可以"查看""重新核算""回算"
// 归档后申报后可以"查看""重新核算"
@ -70,11 +81,15 @@ public class SalaryAcctRecordBO {
btnList.add(new WeaTableOperate("归档", null, "2"));
} else if (SalaryAcctRecordStatusEnum.ARCHIVED == salaryAcctRecordStatusEnum && ( salarySendMap.get(salaryAcctRecordPO.getId()) ==Boolean.TRUE ) ){
btnList.add(new WeaTableOperate("查看", null, "3"));
btnList.add(new WeaTableOperate("重新核算", null, "4"));
if (workflowStatusEnum != ApprovalWorkflowStatusEnum.APPROVED) {
btnList.add(new WeaTableOperate("重新核算", null, "4"));
}
btnList.add(new WeaTableOperate("回算", null, "5"));
} else {
btnList.add(new WeaTableOperate("查看", null, "3"));
btnList.add(new WeaTableOperate("重新核算", null, "4"));
if (workflowStatusEnum != ApprovalWorkflowStatusEnum.APPROVED) {
btnList.add(new WeaTableOperate("重新核算", null, "4"));
}
}
return SalaryAcctRecordListDTO.builder()
.id(salaryAcctRecordPO.getId())
@ -84,6 +99,7 @@ public class SalaryAcctRecordBO {
.status(Optional.ofNullable(salaryAcctRecordStatusEnum)
.map(o -> SalaryI18nUtil.getI18nLabel(o.getLabelId(), o.getDefaultLabel()))
.orElse(StringUtils.EMPTY))
.workflowStatus(workflowStatusEnum.getDefaultLabel())
.acctTimes(salaryAcctRecordPO.getAcctTimes())
.acctTimesViable(salaryAcctRecordPO.getAcctTimes() >= 1)
.backCalcStatus(salaryAcctRecordPO.getBackCalcStatus() == null ? 0 : salaryAcctRecordPO.getBackCalcStatus())

View File

@ -57,6 +57,8 @@ public class SalaryAcctRecordListDTO {
@TableTitle(title = "状态", dataIndex = "status", key = "status")
private String status;
@TableTitle(title = "流程状态", dataIndex = "workflowStatus", key = "workflowStatus")
private String workflowStatus;
@TableTitle(title = "核算人数", dataIndex = "employeeSize", key = "employeeSize")
private Long employeeSize;

View File

@ -113,6 +113,16 @@ public class SalaryAcctRecordPO {
*/
private List<Long> lockSalaryItemIds;
/**
* 审核流程请求id
*/
private String approvalRequestId;
/**
* 审核流程id
*/
private String approvalWorkflowId;
//查询条件-------------------------------
Collection<Long> ids;

View File

@ -143,7 +143,9 @@ public class SalarySobBO {
.setAttendCycleFromDay(salarySobPO.getAttendCycleFromDay())
.setSocialSecurityCycleType(salarySobPO.getSocialSecurityCycleType())
.setTaxAgentId(salarySobPO.getTaxAgentId())
.setDescription(salarySobPO.getDescription());
.setDescription(salarySobPO.getDescription())
.setApprovalUrl(salarySobPO.getApprovalUrl())
.setApprovalWorkflowId(salarySobPO.getApprovalWorkflowId());
}
}

View File

@ -7,6 +7,7 @@ import com.engine.salary.enums.sicategory.DeleteTypeEnum;
import com.engine.salary.util.SalaryEntityUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.mzlion.core.utils.BeanUtils;
import dm.jdbc.util.IdGenerator;
import lombok.Data;
import lombok.experimental.Accessors;
@ -69,6 +70,8 @@ public class SalarySobItemBO {
Date now = new Date();
// 需要保存的隐藏项目
List<SalarySobItemHidePO> needInsertItemHides = new ArrayList<>();
// 需要保存的隐藏项目
List<WorkflowItemHidePO> needInsertWorkflowItemHides = new ArrayList<>();
// 处理薪资账套默认的薪资项目分类
Map<Long, Long> salarySobItemGroupIdMap = Maps.newHashMapWithExpectedSize(salarySobDefaultItemGroupPOS.size());
List<SalarySobItemGroupPO> salarySobItemGroups = Lists.newArrayListWithExpectedSize(salarySobDefaultItemGroupPOS.size());
@ -129,18 +132,21 @@ public class SalarySobItemBO {
.build());
// 保存薪资项目隐藏信息
needInsertItemHides.add(SalarySobItemHidePO.builder()
SalarySobItemHidePO salarySobItemHidePO = SalarySobItemHidePO.builder()
.id(IdGenerator.generate())
.salarySobId(salarySobId)
.salaryItemId(salaryItemPO.getId())
.isGroup(0)
.itemHide(Long.valueOf(salaryItemPO.getHideDefault()== null ? 0 : salaryItemPO.getHideDefault()))
.itemHide(Long.valueOf(salaryItemPO.getHideDefault() == null ? 0 : salaryItemPO.getHideDefault()))
.creator(employeeId)
.createTime(now)
.updateTime(now)
.deleteType(NumberUtils.INTEGER_ZERO)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build());
.build();
needInsertItemHides.add(salarySobItemHidePO);
// 保存薪资项目是否在审批流程中展示(默认不隐藏)
needInsertWorkflowItemHides.add(getWorkflowItemHidePO(salarySobItemHidePO, 0L));
}
// 处理薪资账套默认的自定义薪资项目开启了"默认使用"
for (int i = 0; i < defaultSalaryItemPOS.size(); i++) {
@ -168,7 +174,7 @@ public class SalarySobItemBO {
.deleteType(NumberUtils.INTEGER_ZERO)
.build());
// 保存薪资项目隐藏信息
needInsertItemHides.add(SalarySobItemHidePO.builder()
SalarySobItemHidePO salarySobItemHidePO = SalarySobItemHidePO.builder()
.id(IdGenerator.generate())
.salarySobId(salarySobId)
.salaryItemId(salaryItemPO.getId())
@ -179,7 +185,10 @@ public class SalarySobItemBO {
.updateTime(now)
.deleteType(NumberUtils.INTEGER_ZERO)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build());
.build();
needInsertItemHides.add(salarySobItemHidePO);
// 保存薪资项目是否在审批流程中展示(默认不隐藏)
needInsertWorkflowItemHides.add(getWorkflowItemHidePO(salarySobItemHidePO, 0L));
}
// 薪资账套默认的回算薪资项目
@ -207,7 +216,16 @@ public class SalarySobItemBO {
}
return new Result().setNeedInsertSalarySobItems(salarySobItems).setNeedInsertSalarySobItemGroups(salarySobItemGroups)
.setNeedInsertSalarySobBackItems(salarySobBackItems).setNeedInsertItemHides(needInsertItemHides);
.setNeedInsertSalarySobBackItems(salarySobBackItems).setNeedInsertItemHides(needInsertItemHides)
.setNeedInsertWorkflowItemHides(needInsertWorkflowItemHides);
}
public static WorkflowItemHidePO getWorkflowItemHidePO(SalarySobItemHidePO salarySobItemHidePO, Long hideInApprovalWorkflow) {
WorkflowItemHidePO workflowItemHidePO = new WorkflowItemHidePO();
BeanUtils.copyProperties(salarySobItemHidePO, workflowItemHidePO);
workflowItemHidePO.setId(IdGenerator.generate());
workflowItemHidePO.setItemHide(hideInApprovalWorkflow);
return workflowItemHidePO;
}
@Data
@ -233,5 +251,10 @@ public class SalarySobItemBO {
* 需要保存的薪资项目隐藏信息
*/
List<SalarySobItemHidePO> needInsertItemHides;
/**
* 需要保存的薪资项目在审批流程中的隐藏信息
*/
List<WorkflowItemHidePO> needInsertWorkflowItemHides;
}
}

View File

@ -94,6 +94,16 @@ public class SalarySobBasicFormDTO {
*/
private Boolean canEdit;
/**
* 审批流程地址
*/
private String approvalUrl;
/**
* 审批流程id
*/
private String approvalWorkflowId;
/**
* 薪资账套详情-薪资周期/考勤周期
*

View File

@ -96,4 +96,15 @@ public class SalarySobBasicSaveParam {
*/
@DataCheck(max = 80, message = "备注不能超过80个字符")
private String description;
/**
* 审批流程地址
*/
@DataCheck(max = 200, message = "审批流程地址不能超过200字符")
private String approvalUrl;
/**
* 审批流程id
*/
private String approvalWorkflowId;
}

View File

@ -73,9 +73,12 @@ public class SalarySobItemSaveParam {
//公式")
private Long formulaId;
//分类是否隐藏0不隐藏1隐藏
//项目是否隐藏0不隐藏1隐藏
private Long itemHide;
//该项目是否在审批时隐藏0不隐藏1隐藏
private Long hideInApprovalWorkflow;
private Boolean canDelete;
/**
@ -116,5 +119,8 @@ public class SalarySobItemSaveParam {
//该分类是否隐藏0不隐藏1隐藏
private Long itemHide;
//该分类是否在审批时隐藏0不隐藏1隐藏
private Long hideInApprovalWorkflow;
}
}

View File

@ -69,6 +69,14 @@ public class SalarySobPO {
* 描述
*/
private String description;
/**
* 审批流程地址
*/
private String approvalUrl;
/**
* 审批流程id
*/
private String approvalWorkflowId;
/**
* 创建人
*/

View File

@ -0,0 +1,54 @@
package com.engine.salary.entity.salarysob.po;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Collection;
import java.util.Date;
/**
* @author Harryxzy
* @ClassName workflowItemHidePO
* @date 2023/08/28 11:38
* @description 在审批流程中隐藏的薪资项目
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WorkflowItemHidePO {
private Long id;
// 账套id
private Long salarySobId;
// 薪资项目id
private Long salaryItemId;
// 是否是项目组0不是 1是
private Integer isGroup;
// 是否隐藏(0不隐藏 1隐藏)
private Long itemHide;
// 创建人
private Long creator;
// 是否已删除0未删除1已删除
private Integer deleteType;
// 租户
private String tenantKey;
// 创建时间
private Date createTime;
// 更新时间
private Date updateTime;
//主键id集合
private Collection<Long> ids;
}

View File

@ -0,0 +1,57 @@
package com.engine.salary.enums.salaryaccounting;
import com.engine.salary.enums.BaseEnum;
import java.util.Objects;
/**
* 审批流程的状态
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
public enum ApprovalWorkflowStatusEnum implements BaseEnum<Integer> {
UNAPPROVED(1, "未审批", 0),
UNDER_APPROVAL(2, "审批中", 0),
APPROVED(3, "已审批", 0),
;
private int value;
private String defaultLabel;
private int labelId;
ApprovalWorkflowStatusEnum(int value, String defaultLabel, int labelId) {
this.value = value;
this.defaultLabel = defaultLabel;
this.labelId = labelId;
}
@Override
public Integer getValue() {
return value;
}
@Override
public Integer getLabelId() {
return labelId;
}
@Override
public String getDefaultLabel() {
return defaultLabel;
}
public static ApprovalWorkflowStatusEnum parseByValue(Integer value) {
for (ApprovalWorkflowStatusEnum salaryAcctRecordStatusEnum : ApprovalWorkflowStatusEnum.values()) {
if (Objects.equals(salaryAcctRecordStatusEnum.getValue(), value)) {
return salaryAcctRecordStatusEnum;
}
}
return null;
}
}

View File

@ -35,7 +35,9 @@
, t.delete_type
, t.tenant_key
, t.back_calc_status
,t.lock_salary_item_ids
, t.lock_salary_item_ids
, t.approval_request_id
, t.approval_workflow_id
</sql>
<!-- 查询全部 -->

View File

@ -42,6 +42,8 @@
, t.delete_type
, t.tenant_key
, t.tax_agent_id
, t.approval_url
, t.approval_workflow_id
</sql>
<!-- 查询全部 -->
@ -189,6 +191,12 @@
<if test="taxAgentId != null">
tax_agent_id,
</if>
<if test="approvalUrl != null">
approval_url,
</if>
<if test="approvalWorkflowId != null">
approval_workflow_id,
</if>
</trim>
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
<if test="id != null">
@ -242,6 +250,12 @@
<if test="taxAgentId != null">
#{taxAgentId},
</if>
<if test="approvalUrl != null">
#{approvalUrl},
</if>
<if test="approvalWorkflowId != null">
#{approvalWorkflowId},
</if>
</trim>
</insert>
@ -306,6 +320,12 @@
<if test="taxAgentId != null">
tax_agent_id,
</if>
<if test="approvalUrl != null">
approval_url,
</if>
<if test="approvalWorkflowId != null">
approval_workflow_id,
</if>
</trim>
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
<if test="id != null">
@ -359,6 +379,12 @@
<if test="taxAgentId != null">
#{taxAgentId},
</if>
<if test="approvalUrl != null">
#{approvalUrl},
</if>
<if test="approvalWorkflowId != null">
#{approvalWorkflowId},
</if>
</trim>
</insert>

View File

@ -0,0 +1,84 @@
package com.engine.salary.mapper.salarysob;
import com.engine.salary.entity.salarysob.po.WorkflowItemHidePO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author Harryxzy
* @ClassName SalarySobItemHideWorkflowMapper
* @date 2023/08/28 11:42
* @description 薪资项目在审批流程中隐藏
*/
public interface WorkflowItemHideMapper {
/**
* 查询所有记录
*
* @return 返回集合没有返回空List
*/
List<WorkflowItemHidePO> listAll();
/**
* 条件查询
*
* @return 返回集合没有返回空List
*/
List<WorkflowItemHidePO> listSome(WorkflowItemHidePO salarySobItemHideWorkflow);
/**
* 根据主键查询
*
* @param id 主键
* @return 返回记录没有返回null
*/
WorkflowItemHidePO getById(Long id);
/**
* 新增忽略null字段
*
* @param salarySobItemHideWorkflow 新增的记录
* @return 返回影响行数
*/
int insertIgnoreNull(WorkflowItemHidePO salarySobItemHideWorkflow);
/**
* 修改修改所有字段
*
* @param salarySobItemHideWorkflow 修改的记录
* @return 返回影响行数
*/
int update(WorkflowItemHidePO salarySobItemHideWorkflow);
/**
* 修改忽略null字段
*
* @param salarySobItemHideWorkflow 修改的记录
* @return 返回影响行数
*/
int updateIgnoreNull(WorkflowItemHidePO salarySobItemHideWorkflow);
/**
* 删除记录
*
* @param salarySobItemHideWorkflow 待删除的记录
* @return 返回影响行数
*/
int delete(WorkflowItemHidePO salarySobItemHideWorkflow);
/**
* 根据薪资账套id删除记录
*
* @param salarySobIds 薪资账套id
* @return 返回影响行数
*/
void deleteBySalarySobIds(@Param("salarySobIds") List<Long> salarySobIds);
/**
* 批量插入
* @param workflowItemHidePOS
*/
void batchInsert(List<WorkflowItemHidePO> workflowItemHidePOS);
}

View File

@ -0,0 +1,306 @@
<?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.salarysob.WorkflowItemHideMapper">
<resultMap id="BaseResultMap" type="com.engine.salary.entity.salarysob.po.WorkflowItemHidePO">
<result column="id" property="id" />
<result column="salary_sob_id" property="salarySobId" />
<result column="salary_item_id" property="salaryItemId" />
<result column="is_group" property="isGroup" />
<result column="item_hide" property="itemHide" />
<result column="creator" property="creator" />
<result column="delete_type" property="deleteType" />
<result column="tenant_key" property="tenantKey" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
</resultMap>
<!-- 表字段 -->
<sql id="baseColumns">
t.id
, t.salary_sob_id
, t.salary_item_id
, t.is_group
, t.item_hide
, t.creator
, t.delete_type
, t.tenant_key
, t.create_time
, t.update_time
</sql>
<!-- 查询全部 -->
<select id="listAll" resultMap="BaseResultMap">
SELECT
<include refid="baseColumns" />
FROM hrsa_workflow_item_hide t
WHERE delete_type = 0
</select>
<!-- 根据主键获取单条记录 -->
<select id="getById" resultMap="BaseResultMap" parameterType="Long">
SELECT
<include refid="baseColumns" />
FROM hrsa_workflow_item_hide t
WHERE id = #{id} AND delete_type = 0
</select>
<!-- 条件查询 -->
<select id="listSome" resultMap="BaseResultMap" parameterType="com.engine.salary.entity.salarysob.po.WorkflowItemHidePO">
SELECT
<include refid="baseColumns" />
FROM hrsa_workflow_item_hide t
WHERE delete_type = 0
<if test="id != null">
AND id = #{id}
</if>
<if test="salarySobId != null">
AND salary_sob_id = #{salarySobId}
</if>
<if test="salaryItemId != null">
AND salary_item_id = #{salaryItemId}
</if>
<if test="isGroup != null">
AND is_group = #{isGroup}
</if>
<if test="itemHide != null">
AND item_hide = #{itemHide}
</if>
<if test="creator != null">
AND creator = #{creator}
</if>
<if test="deleteType != null">
AND delete_type = #{deleteType}
</if>
<if test="tenantKey != null">
AND tenant_key = #{tenantKey}
</if>
<if test="createTime != null">
AND create_time = #{createTime}
</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.salarysob.po.WorkflowItemHidePO">
INSERT INTO hrsa_workflow_item_hide
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="salarySobId != null">
salary_sob_id,
</if>
<if test="salaryItemId != null">
salary_item_id,
</if>
<if test="isGroup != null">
is_group,
</if>
<if test="itemHide != null">
item_hide,
</if>
<if test="creator != null">
creator,
</if>
<if test="deleteType != null">
delete_type,
</if>
<if test="tenantKey != null">
tenant_key,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
</trim>
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
<if test="id != null" >
#{id},
</if>
<if test="salarySobId != null" >
#{salarySobId},
</if>
<if test="salaryItemId != null" >
#{salaryItemId},
</if>
<if test="isGroup != null" >
#{isGroup},
</if>
<if test="itemHide != null" >
#{itemHide},
</if>
<if test="creator != null" >
#{creator},
</if>
<if test="deleteType != null" >
#{deleteType},
</if>
<if test="tenantKey != null" >
#{tenantKey},
</if>
<if test="createTime != null" >
#{createTime},
</if>
<if test="updateTime != null" >
#{updateTime},
</if>
</trim>
</insert>
<insert id="batchInsert">
INSERT INTO hrsa_workflow_item_hide (
id,
salary_sob_id,
salary_item_id,
is_group,
item_hide,
creator,
delete_type,
tenant_key,
create_time,
update_time
)
VALUES
<foreach collection="collection" item="item" separator=",">
(
#{item.id},
#{item.salarySobId},
#{item.salaryItemId},
#{item.isGroup},
#{item.itemHide},
#{item.creator},
#{item.tenantKey},
#{item.createTime},
#{item.updateTime},
0
)
</foreach>
</insert>
<insert id="batchInsert" databaseId="oracle">
insert into hrsa_workflow_item_hide (id,salary_sob_id,salary_item_id,is_group,item_hide,
creator,tenant_key,create_time,update_time,delete_type)
<foreach collection="collection" item="item" separator="union all">
select
#{item.id,jdbcType=DOUBLE},
#{item.salarySobId,jdbcType=DOUBLE},
#{item.salaryItemId,jdbcType=DOUBLE},
#{item.isGroup,jdbcType=INTEGER},
#{item.itemHide,jdbcType=INTEGER},
#{item.creator,jdbcType=DOUBLE},
#{item.tenantKey,jdbcType=VARCHAR},
#{item.createTime,jdbcType=DATE},
#{item.updateTime,jdbcType=DATE},
0
from dual
</foreach>
</insert>
<insert id="batchInsert" databaseId="sqlserver">
<foreach collection="collection" item="item" separator=";">
insert into hrsa_workflow_item_hide (id,salary_sob_id,salary_item_id,is_group,item_hide,
creator,tenant_key,create_time,update_time,delete_type)
VALUES
(
#{item.id},
#{item.salarySobId},
#{item.salaryItemId},
#{item.isGroup},
#{item.itemHide},
#{item.creator},
#{item.tenantKey},
#{item.createTime},
#{item.updateTime},
0
)
</foreach>
</insert>
<!-- 更新,更新全部字段 -->
<update id="update" parameterType="com.engine.salary.entity.salarysob.po.WorkflowItemHidePO">
UPDATE hrsa_workflow_item_hide
<set>
salary_sob_id=#{salarySobId},
salary_item_id=#{salaryItemId},
is_group=#{isGroup},
item_hide=#{itemHide},
creator=#{creator},
delete_type=#{deleteType},
tenant_key=#{tenantKey},
create_time=#{createTime},
update_time=#{updateTime},
</set>
WHERE id = #{id} AND delete_type = 0
</update>
<!-- 更新不为NULL的字段 -->
<update id="updateIgnoreNull" parameterType="com.engine.salary.entity.salarysob.po.WorkflowItemHidePO">
UPDATE hrsa_workflow_item_hide
<set>
<if test="salarySobId != null" >
salary_sob_id=#{salarySobId},
</if>
<if test="salaryItemId != null" >
salary_item_id=#{salaryItemId},
</if>
<if test="isGroup != null" >
is_group=#{isGroup},
</if>
<if test="itemHide != null" >
item_hide=#{itemHide},
</if>
<if test="creator != null" >
creator=#{creator},
</if>
<if test="deleteType != null" >
delete_type=#{deleteType},
</if>
<if test="tenantKey != null" >
tenant_key=#{tenantKey},
</if>
<if test="createTime != null" >
create_time=#{createTime},
</if>
<if test="updateTime != null" >
update_time=#{updateTime},
</if>
</set>
WHERE id = #{id} AND delete_type = 0
</update>
<!-- 根据主键删除记录 -->
<delete id="delete" parameterType="com.engine.salary.entity.salarysob.po.WorkflowItemHidePO">
UPDATE hrsa_workflow_item_hide
SET delete_type=1
WHERE id = #{id} AND delete_type = 0
</delete>
<delete id="deleteBySalarySobIds">
UPDATE hrsa_workflow_item_hide
SET delete_type=1
WHERE delete_type = 0
<if test="salarySobIds != null and salarySobIds.size()>0">
AND salary_sob_id IN
<foreach collection="salarySobIds" open="(" item="id" separator="," close=")">
#{id}
</foreach>
</if>
</delete>
</mapper>

View File

@ -0,0 +1,77 @@
package com.engine.salary.service;
import com.engine.salary.entity.salarysob.po.WorkflowItemHidePO;
import java.util.List;
/**
* @author Harryxzy
* @ClassName SalarySobItemHideWorkflowService
* @date 2023/08/28 11:45
* @description
*/
public interface WorkflowItemHideService {
/**
* 查询所有记录
*
* @return 返回集合没有返回空List
*/
List<WorkflowItemHidePO> listAll();
List<WorkflowItemHidePO> listSome(WorkflowItemHidePO po);
/**
* 根据主键查询
*
* @param id 主键
* @return 返回记录没有返回null
*/
WorkflowItemHidePO getById(Long id);
/**
* 新增忽略null字段
*
* @param salarySobItemHideWorkflow 新增的记录
* @return 返回影响行数
*/
int insertIgnoreNull(WorkflowItemHidePO salarySobItemHideWorkflow);
/**
* 修改修改所有字段
*
* @param salarySobItemHideWorkflow 修改的记录
* @return 返回影响行数
*/
int update(WorkflowItemHidePO salarySobItemHideWorkflow);
/**
* 修改忽略null字段
*
* @param salarySobItemHideWorkflow 修改的记录
* @return 返回影响行数
*/
int updateIgnoreNull(WorkflowItemHidePO salarySobItemHideWorkflow);
/**
* 删除记录
*
* @param salarySobItemHideWorkflow 待删除的记录
* @return 返回影响行数
*/
int delete(WorkflowItemHidePO salarySobItemHideWorkflow);
/**
* 根据薪资账套id删除
* @param singletonList
*/
void deleteBySalarySobIds(List<Long> singletonList);
/**
* 批量插入
* @param needInsertWorkflowItemHide
*/
void batchInsert(List<WorkflowItemHidePO> needInsertWorkflowItemHide);
}

View File

@ -10,6 +10,7 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant;
import com.engine.salary.entity.salaryformula.ExpressFormula;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO;
import com.engine.salary.entity.salarysob.bo.SalarySobItemBO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO;
import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam;
@ -89,9 +90,14 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
return (SalarySobBackItemService) ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user);
}
private WorkflowItemHideService getWorkflowItemHideService(User user) {
return (WorkflowItemHideService) ServiceUtil.getService(WorkflowItemHideServiceImpl.class, user);
}
private SalarySobDefaultItemMapper getSalarySobDefaultItemMapper() {
return MapperProxyFactory.getProxy(SalarySobDefaultItemMapper.class);
}
// private LoggerTemplate salarySobLoggerTemplate;
@Override
@ -319,9 +325,11 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
// getSalarySobItemGroupService(user).deleteBySalarySobIds(Collections.singleton(salarySobId));
// 删除薪资项目是否显示
deleteItemShowBySalarySobIds(Collections.singleton(salarySobId));
// 删除薪资项目是否在审批时隐藏
getWorkflowItemHideService(user).deleteBySalarySobIds(Collections.singletonList(salarySobId));
}
/**
* 保存项目信息
*
@ -354,6 +362,8 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
// 需要保存的隐藏项目
List<SalarySobItemHidePO> needInsertItemShow = new ArrayList<>();
// 需要保存的审批流程中隐藏的项目
List<WorkflowItemHidePO> needInsertWorkflowItemHide = new ArrayList<>();
//先保存项目分类获取分类id
Collection<SalarySobItemPO> salarySobItems = new ArrayList<>();
@ -390,7 +400,6 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
needInsertItemShow.add(salarySobGroupItemHidePO);
// salarySobItemMapper.InsertItemShow(salarySobGroupItemHidePO);
for (SalarySobItemSaveParam.SalarySobItemParam itemParam : itemGroupParam.getItems()) {
@ -428,13 +437,13 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
.deleteType(NumberUtils.INTEGER_ZERO)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
// salarySobItemMapper.InsertItemShow(salarySobItemHidePO);
needInsertItemShow.add(salarySobItemHidePO);
// 保存薪资项目是否在审批流程中展示
needInsertWorkflowItemHide.add(SalarySobItemBO.getWorkflowItemHidePO(salarySobItemHidePO, itemParam.getHideInApprovalWorkflow()));
}
}
//更新分组
for (SalarySobItemSaveParam.SalarySobItemGroupParam itemGroupParam : needUpdateGroup) {
Long groupId = itemGroupParam.getId();
@ -508,6 +517,9 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
needInsertItemShow.add(salarySobItemHidePO);
// 保存薪资项目是否在审批流程中展示
needInsertWorkflowItemHide.add(SalarySobItemBO.getWorkflowItemHidePO(salarySobItemHidePO, itemParam.getHideInApprovalWorkflow()));
}
//更新
for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needUpdateItems) {
@ -528,7 +540,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
getSalarySobItemMapper().updateIgnoreNull(salarySobItemPO);
// 保存薪资项目是否展示
Long salarySobItemShowId = IdGenerator.generate();
needInsertItemShow.add(SalarySobItemHidePO.builder()
SalarySobItemHidePO salarySobItemHidePO = SalarySobItemHidePO.builder()
.id(salarySobItemShowId)
.salarySobId(salarySobId)
.salaryItemId(itemParam.getSalaryItemId())
@ -539,9 +551,12 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
.updateTime(now)
.deleteType(NumberUtils.INTEGER_ZERO)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build());
}
.build();
needInsertItemShow.add(salarySobItemHidePO);
// 保存薪资项目是否在审批流程中展示
needInsertWorkflowItemHide.add(SalarySobItemBO.getWorkflowItemHidePO(salarySobItemHidePO, itemParam.getHideInApprovalWorkflow()));
}
//删除
salarySobItemMapper.deleteByIds(needDeleteItemIds);
@ -597,8 +612,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
.deleteType(NumberUtils.INTEGER_ZERO)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
// salarySobItemMapper.InsertItemShow(salarySobItemHidePO);
needInsertItemShow.add(salarySobItemHidePO);
// 保存薪资项目是否在审批流程中展示
needInsertWorkflowItemHide.add(SalarySobItemBO.getWorkflowItemHidePO(salarySobItemHidePO, itemParam.getHideInApprovalWorkflow()));
}
for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needUpdateItems) {
@ -629,8 +646,9 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
.deleteType(NumberUtils.INTEGER_ZERO)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build();
// salarySobItemMapper.InsertItemShow(salarySobItemHidePO);
needInsertItemShow.add(salarySobItemHidePO);
// 保存薪资项目是否在审批流程中展示
needInsertWorkflowItemHide.add(SalarySobItemBO.getWorkflowItemHidePO(salarySobItemHidePO, itemParam.getHideInApprovalWorkflow()));
}
if (CollectionUtils.isNotEmpty(needDeleteItemIds)) {
@ -642,8 +660,13 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
// 保存薪资账套的薪资项目隐藏信息
batchSaveShow(needInsertItemShow);
// 保存薪资账套的薪资项目是否在审批流程中隐藏
getWorkflowItemHideService(user).batchInsert(needInsertWorkflowItemHide);
}
private SalaryItemPO checkItemExists(Long salaryItemId, Map<Long, SalaryItemPO> salaryItemsMap) {
SalaryItemPO salaryItemPO = salaryItemsMap.get(salaryItemId);
if (ObjectUtils.isEmpty(salaryItemPO)){

View File

@ -131,6 +131,10 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
}
private WorkflowItemHideService getWorkflowItemHideService(User user) {
return ServiceUtil.getService(WorkflowItemHideServiceImpl.class, user);
}
@Override
public SalarySobPO getById(Long id) {
return salarySobMapper.getById(id);
@ -385,6 +389,9 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
.values());
salarySobItemService.batchInsertItemShow(list);
}
if (CollectionUtils.isNotEmpty(result.getNeedInsertWorkflowItemHides())) {
getWorkflowItemHideService(user).batchInsert(result.getNeedInsertWorkflowItemHides());
}
}
/**

View File

@ -0,0 +1,81 @@
package com.engine.salary.service.impl;
import com.engine.core.impl.Service;
import com.engine.salary.entity.salarysob.po.WorkflowItemHidePO;
import com.engine.salary.mapper.salarysob.WorkflowItemHideMapper;
import com.engine.salary.service.WorkflowItemHideService;
import com.engine.salary.util.db.MapperProxyFactory;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author Harryxzy
* @ClassName SalarySobItemHideWorkflowServiceImpl
* @date 2023/08/28 11:47
* @description
*/
public class WorkflowItemHideServiceImpl extends Service implements WorkflowItemHideService {
private WorkflowItemHideMapper getWorkflowItemHideMapper() {
return MapperProxyFactory.getProxy(WorkflowItemHideMapper.class);
}
@Override
public List<WorkflowItemHidePO> listAll() {
return getWorkflowItemHideMapper().listAll();
}
@Override
public List<WorkflowItemHidePO> listSome(WorkflowItemHidePO po) {
return getWorkflowItemHideMapper().listSome(po);
}
@Override
public WorkflowItemHidePO getById(Long id) {
return getWorkflowItemHideMapper().getById(id);
}
@Override
public int insertIgnoreNull(WorkflowItemHidePO salarySobItemHideWorkflow) {
return getWorkflowItemHideMapper().insertIgnoreNull(salarySobItemHideWorkflow);
}
@Override
public int update(WorkflowItemHidePO salarySobItemHideWorkflow) {
return getWorkflowItemHideMapper().update(salarySobItemHideWorkflow);
}
@Override
public int updateIgnoreNull(WorkflowItemHidePO salarySobItemHideWorkflow) {
return getWorkflowItemHideMapper().updateIgnoreNull(salarySobItemHideWorkflow);
}
@Override
public int delete(WorkflowItemHidePO salarySobItemHideWorkflow) {
return getWorkflowItemHideMapper().delete(salarySobItemHideWorkflow);
}
@Override
public void deleteBySalarySobIds(List<Long> salarySobIds) {
if (CollectionUtils.isNotEmpty(salarySobIds)) {
List<List<Long>> partition = Lists.partition(salarySobIds, 1000);
partition.forEach(getWorkflowItemHideMapper()::deleteBySalarySobIds);
}
}
@Override
public void batchInsert(List<WorkflowItemHidePO> insertList) {
if (CollectionUtils.isNotEmpty(insertList)) {
//前端可能传重复数据去重
List<WorkflowItemHidePO> list = new ArrayList<>(insertList.stream()
.collect(Collectors.toMap(WorkflowItemHidePO::getSalaryItemId, Function.identity(), (oldValue, newValue) -> oldValue))
.values());
List<List<WorkflowItemHidePO>> partition = Lists.partition(insertList, 1000);
partition.forEach(getWorkflowItemHideMapper()::batchInsert);
}
}
}

View File

@ -23,12 +23,15 @@ import com.engine.salary.util.SalarySobUtil;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.wrapper.proxy.SalaryAcctRecordWrapperProxy;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import weaver.conn.RecordSet;
import weaver.hrm.User;
import java.util.*;
import java.util.stream.Collectors;
/**
* 薪资核算记录
* <p>Copyright: Copyright (c) 2022</p>
@ -90,9 +93,12 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord
List<SalaryAcctEmployeeCountDTO> salaryAcctEmployeeCountDTOS = getSalaryAcctEmployeeService(user).countBySalaryAcctRecordId(salaryAcctRecordIds);
// 查询工资单的查询情况
List<SalarySendCheckDTO> salarySendCheckResult = getSalarySendService(user).getSalarySendCheckResult(salaryAcctRecordIds);
// TODO查询审批流程状态
Set<String> requestIds = SalaryEntityUtil.properties(list, SalaryAcctRecordPO::getApprovalRequestId);
// 获取流程状态 key:流程请求id value:流程状态
Map<String, String> workflowStatusMap = getWorkflowStatusMap(requestIds);
// 转换成列表dto
List<SalaryAcctRecordListDTO> salaryAcctRecordListDTOS = SalaryAcctRecordBO.convert2ListDTO(list, salarySobPOS, employeeComInfos, salaryAcctEmployeeCountDTOS, salarySendCheckResult);
List<SalaryAcctRecordListDTO> salaryAcctRecordListDTOS = SalaryAcctRecordBO.convert2ListDTO(list, salarySobPOS, employeeComInfos, salaryAcctEmployeeCountDTOS, salarySendCheckResult, workflowStatusMap);
dtoPage.setList(salaryAcctRecordListDTOS);
}
// WeaTable<SalaryAcctRecordListDTO> weaTable = SalaryFormatUtil.<SalaryAcctRecordListDTO>getInstance().buildTable(SalaryAcctRecordListDTO.class, dtoPage);
@ -116,6 +122,19 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord
return dtoPage;
}
private Map<String, String> getWorkflowStatusMap(Set<String> requestIds) {
Map<String, String> resut = new HashMap<>();
RecordSet rs = new RecordSet();
String sql = "select requestid,currentnodetype from workflow_requestbase where requestid in (" + StringUtils.join(requestIds,",") + ")";
rs.execute(sql);
while (rs.next()) {
int requestid = rs.getInt("requestid");
String currentnodetype = rs.getString("currentnodetype");
resut.put(String.valueOf(requestid), currentnodetype);
}
return resut;
}
/**
* @description 处理历史数据给薪资项目都增加个默认排序
* @return null