百川港需求

This commit is contained in:
钱涛 2026-03-25 15:27:10 +08:00
parent 7b4ab93f4b
commit 7740241af8
21 changed files with 285 additions and 22 deletions

View File

@ -0,0 +1,2 @@
zyRoleId=29
jlRoleId=30

View File

@ -0,0 +1,9 @@
原始需求:
1、由人事专员正常进行薪资审核审核过程中人事专员无法对具体几个薪资项进行核算如经理基金项、实发工资等无法核算也无法查看指定薪资项
2、人事审核完成后指定人员可在薪资核算页面查看到由人事专员核算完成的薪资内容状态为待审批指定人员可对该核算信息进行审批审批时可针对人事专员审核节点无法核算的薪资项进行核算审批完成后更新薪资核算状态为已归档。
----------------------------------------------------------------------------------------------------------------------------------------
开发点:
1、新增人事专员角色可核算未隐藏的项目人事经理角色可核算所有新增项目 2
2、支持配置对于人事专员隐藏的项目 2
3、新增审批按钮人事专员提交审批后薪资核算状态改为“待审批” 1
4、人事经理审批提交审批核算状态改为归档 1

View File

@ -50,7 +50,10 @@ public class SalaryAcctRecordBO {
List<TaxAgentPO> taxAgentPOS,
List<Long> needApprovalSalarySobIds,
boolean approvalCanFile,
boolean approvalCanReCalc) {
boolean approvalCanReCalc,
boolean zy,
boolean jl
) {
if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) {
return Collections.emptyList();
}
@ -69,20 +72,30 @@ public class SalaryAcctRecordBO {
List<WeaTableOperate> btnList = new ArrayList<>();
if (SalaryAcctRecordStatusEnum.NOT_ARCHIVED == salaryAcctRecordStatusEnum) {
btnList.add(new WeaTableOperate("核算", null, "0"));
if(!Objects.equals(salaryAcctRecordPO.getBackCalcStatus(),NumberUtils.INTEGER_ONE)){
if (!Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE)) {
btnList.add(new WeaTableOperate("删除", null, "1"));
}
if (approvalCanFile || !needApprovalSalarySobIds.contains(salaryAcctRecordPO.getSalarySobId())) {
btnList.add(new WeaTableOperate("归档", null, "2"));
// if (approvalCanFile || !needApprovalSalarySobIds.contains(salaryAcctRecordPO.getSalarySobId())) {
// btnList.add(new WeaTableOperate("归档", null, "2"));
// }
} else if (SalaryAcctRecordStatusEnum.APPROVAL == salaryAcctRecordStatusEnum) {
if (zy) {
btnList.add(new WeaTableOperate("查看", null, "3"));
}
} else if (SalaryAcctRecordStatusEnum.ARCHIVED == salaryAcctRecordStatusEnum && ( salarySendMap.get(salaryAcctRecordPO.getId()) ==Boolean.TRUE ) ){
if(jl){
btnList.add(new WeaTableOperate("核算", null, "0"));
if (approvalCanFile || !needApprovalSalarySobIds.contains(salaryAcctRecordPO.getSalarySobId())) {
btnList.add(new WeaTableOperate("归档", null, "2"));
}
}
} else if (SalaryAcctRecordStatusEnum.ARCHIVED == salaryAcctRecordStatusEnum && (salarySendMap.get(salaryAcctRecordPO.getId()) == Boolean.TRUE)) {
btnList.add(new WeaTableOperate("查看", null, "3"));
if (approvalCanReCalc || !needApprovalSalarySobIds.contains(salaryAcctRecordPO.getSalarySobId())) {
btnList.add(new WeaTableOperate("重新核算", null, "4"));
}
if(salaryAcctRecordPO.getBackCalcStatus() == null || salaryAcctRecordPO.getBackCalcStatus() == NumberUtils.INTEGER_ZERO) {
btnList.add(new WeaTableOperate("回算", null, "5"));
}
// if (salaryAcctRecordPO.getBackCalcStatus() == null || salaryAcctRecordPO.getBackCalcStatus() == NumberUtils.INTEGER_ZERO) {
// btnList.add(new WeaTableOperate("回算", null, "5"));
// }
} else {
btnList.add(new WeaTableOperate("查看", null, "3"));
if (approvalCanReCalc || !needApprovalSalarySobIds.contains(salaryAcctRecordPO.getSalarySobId())) {

View File

@ -191,6 +191,7 @@ public class SalarySobDuplicateBO {
.description(salarySobItem.getDescription())
.canDelete(salarySobItem.getCanDelete())
.itemHide(salarySobItem.getItemHide())
.zyHide(salarySobItem.getZyHide())
.roundingMode(salarySobItem.getRoundingMode())
.pattern(salarySobItem.getPattern())
.valueType(salarySobItem.getValueType())

View File

@ -135,6 +135,7 @@ public class SalarySobItemAggregateBO {
.pattern(Optional.ofNullable(salarySobItemPO.getPattern()).orElse(salaryItemPO.getPattern()))
.name(salaryItemPO.getName())
.itemHide(salarySobItemPO.getItemHide())
.zyHide(salarySobItemPO.getZyHide())
.formulaId(salarySobItemPO.getFormulaId())
.formulaContent(formulaMap.getOrDefault(salarySobItemPO.getFormulaId(), ""))
.originFormulaContent(valueType == SalaryValueTypeEnum.FORMULA.getValue() ? formulaMap.getOrDefault(salarySobItemPO.getFormulaId(), "") : "")

View File

@ -99,6 +99,7 @@ public class SalarySobItemDTO {
//该分类是否隐藏0不隐藏1隐藏
@JsonSerialize(using = ToStringSerializer.class)
private Long itemHide;
private Integer zyHide;
/**
* 进位规则

View File

@ -38,6 +38,7 @@ public class SalarySobItemFormDTO {
//核算时隐藏")
@DataCheck(require = true, runtime = {RuntimeTypeEnum.UPDATE}, message = "核算时隐藏不允许为空")
private Integer itemHide;
private Integer zyHide;
//字段类型
/**

View File

@ -75,6 +75,7 @@ public class SalarySobItemSaveParam {
//该分类是否隐藏0不隐藏1隐藏
private Long itemHide;
private Integer zyHide;
private Boolean canDelete;

View File

@ -117,6 +117,9 @@ public class SalarySobItemPO {
@XStreamAsAttribute
private Long itemHide;
//百川二开是否人员专员隐藏 0否 1是
private Integer zyHide;
/**
* 默认值
*/
@ -194,6 +197,7 @@ public class SalarySobItemPO {
", pattern=" + pattern +
", valueType=" + valueType +
", itemHide=" + itemHide +
", zyHide=" + zyHide +
", defaultValue=" + defaultValue +
'}';
}

View File

@ -15,6 +15,7 @@ import java.util.Objects;
public enum SalaryAcctRecordStatusEnum implements BaseEnum<Integer> {
NOT_ARCHIVED(1, "未归档", 91870),
APPROVAL(4, "待审批", 91862),
ARCHIVED(2, "已归档", 91862),
DECLARED(3, "已申报", 100119),
;

View File

@ -16,6 +16,7 @@
<result column="update_time" property="updateTime"/>
<result column="can_delete" property="canDelete"/>
<result column="item_hide" property="itemHide"/>
<result column="zy_hide" property="zyHide"/>
<result column="default_value" property="defaultValue"/>
</resultMap>
@ -41,6 +42,7 @@
, t.value_type
, t.default_value
, t.item_hide
, t.zy_hide
</sql>
<!-- 查询全部 -->
@ -171,6 +173,7 @@
pattern=#{pattern},
value_type=#{valueType},
item_hide=#{itemHide},
zy_hide=#{zyHide},
default_value=#{defaultValue},
</set>
WHERE id = #{id} AND delete_type = 0
@ -232,6 +235,9 @@
<if test="itemHide != null">
item_hide=#{itemHide},
</if>
<if test="zyHide != null">
zy_hide=#{zyHide},
</if>
</set>
WHERE id = #{id} AND delete_type = 0
</update>
@ -278,7 +284,7 @@
<insert id="batchInsert">
INSERT INTO hrsa_salary_sob_item(salary_sob_id, salary_item_id, salary_sob_item_group_id, formula_id,
sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,item_hide,default_value)
sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,item_hide,zy_hide,default_value)
VALUES
<foreach collection="collection" item="item" separator=",">
(
@ -298,13 +304,14 @@
#{item.pattern},
#{item.valueType},
#{item.itemHide},
#{item.zyHide},
#{item.defaultValue}
)
</foreach>
</insert>
<insert id="batchInsert" databaseId="oracle">
INSERT INTO hrsa_salary_sob_item( salary_sob_id, salary_item_id, salary_sob_item_group_id, formula_id,
sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,item_hide,default_value)
sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,item_hide,zy_hide,default_value)
<foreach collection="collection" item="item" separator="union all">
select
@ -324,6 +331,7 @@
#{item.pattern,jdbcType=INTEGER},
#{item.valueType,jdbcType=INTEGER},
#{item.itemHide,jdbcType=DOUBLE},
#{item.zyHide,jdbcType=INTEGER},
#{item.defaultValue,jdbcType=VARCHAR}
from dual
</foreach>
@ -331,7 +339,7 @@
<insert id="batchInsert" databaseId="sqlserver">
<foreach collection="collection" item="item" separator=";">
INSERT INTO hrsa_salary_sob_item( salary_sob_id, salary_item_id, salary_sob_item_group_id, formula_id,
sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,item_hide,default_value)
sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,item_hide,zy_hide,default_value)
VALUES
(
#{item.salarySobId},
@ -350,6 +358,7 @@
#{item.pattern},
#{item.valueType},
#{item.itemHide},
#{item.zyHide},
#{item.defaultValue}
)
</foreach>

View File

@ -146,6 +146,9 @@ public interface SalaryAcctRecordService {
* @param id 薪资核算记录的id
*/
void file(Long id);
String role(Long id);
void approval(Long id);
void refuse(Long id);
/**
* 重新核算并不是重新执行公式而是变更薪资核算记录状态为未归档并且撤回生成的工资单

View File

@ -83,4 +83,18 @@ public interface SalaryAcctSobConfigService{
* @param salaryAcctRecordIds
*/
void deleteBySalaryAcctRecordIds(Collection<Long> salaryAcctRecordIds);
/**
* 是否是专员
* @param uid
* @return
*/
boolean isZY(Long uid);
/**
* 是否是经理
* @param uid
* @return
*/
boolean isJL(Long uid);
}

View File

@ -524,6 +524,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// 查询薪资核算记录所用的薪资账套的薪资项目副本
List<SalarySobItemPO> salarySobItems = config.getSalarySobItems();
salarySobItems = salarySobItems.stream().filter(salarySobItemPO -> salarySobItemPO.getItemHide() == null || salarySobItemPO.getItemHide() == 0).collect(Collectors.toList());
boolean zy = getSalaryAcctSobConfigService(user).isZY((long) user.getUID());
if(zy){
salarySobItems = salarySobItems.stream().filter(salarySobItemPO -> salarySobItemPO.getZyHide() == null || salarySobItemPO.getZyHide() == 0).collect(Collectors.toList());
}
Set<Long> salaryItemIds = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId);
// 查询薪资项目
List<SalaryItemPO> salaryItems = getSalaryItemService(user).listByIds(salaryItemIds);
@ -619,6 +623,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// 查询薪资核算记录所用的薪资账套的薪资项目副本
List<SalarySobItemPO> salarySobItems = salaryAcctConfig.getSalarySobItems();
salarySobItems = salarySobItems.stream().filter(salarySobItemPO -> salarySobItemPO.getItemHide() == null || salarySobItemPO.getItemHide() == 0).collect(Collectors.toList());
boolean zy = getSalaryAcctSobConfigService(user).isZY((long) user.getUID());
if(zy){
salarySobItems = salarySobItems.stream().filter(salarySobItemPO -> salarySobItemPO.getZyHide() == null || salarySobItemPO.getZyHide() == 0).collect(Collectors.toList());
}
Set<Long> salaryItemIds = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId);
// 查询薪资项目
List<SalaryItemPO> salaryItems = getSalaryItemService(user).listByIds(salaryItemIds);

View File

@ -89,6 +89,10 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
return ServiceUtil.getService(SalarySobItemServiceImpl.class, user);
}
private SalaryAcctSobConfigService getSalaryAcctSobConfigService(User user) {
return ServiceUtil.getService(SalaryAcctSobConfigServiceImpl.class, user);
}
// private SalaryCheckResultService salaryCheckResultService;
//
// private SalaryCheckResultDetailService salaryCheckResultDetailService;
@ -218,6 +222,16 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
List<SalaryAcctRecordPO> salaryAcctRecordPOS = getSalaryAcctRecordMapper().listSome(po);
salaryAcctRecordPOS = getAuthService(user).auth(salaryAcctRecordPOS, AuthFilterTypeEnum.DATA_OPT, SalaryAcctRecordPO.class);
boolean zy = getSalaryAcctSobConfigService(user).isZY((long) user.getUID());
boolean jl = getSalaryAcctSobConfigService(user).isJL((long) user.getUID());
if (zy) {
//百川二开人事专员能看到所有记录但只能修改未归档状态的记录
} else if (jl) {
//百川二开人事经理只能看到待审批的记录
salaryAcctRecordPOS = salaryAcctRecordPOS.stream().filter(e -> !Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())).collect(Collectors.toList());
}
return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(),
salaryAcctRecordPOS, SalaryAcctRecordPO.class);
@ -345,7 +359,7 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
//获取账套所属个税扣缴义务人的核算记录
SalarySobPO salarySobPO = getSalarySobService(user).getById(saveParam.getSalarySobId());
List<Long> taxAgentIds = salarySobPO.getTaxAgentIds();
taxAgentIds.forEach(taxAgentId->{
taxAgentIds.forEach(taxAgentId -> {
//查询扣缴义务人下的所有账套
List<SalarySobPO> salarySobPOS = getSalarySobService(user).listByTaxAgentId(taxAgentId);
Set<Long> salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId);
@ -578,6 +592,92 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext);
}
@Override
public String role(Long id) {
// 查询薪资核算记录
SalaryAcctRecordPO salaryAcctRecordPO = getById(id);
if (Objects.isNull(salaryAcctRecordPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
}
boolean zy = getSalaryAcctSobConfigService(user).isZY((long) user.getUID());
if (zy) {
return "zy";
}
boolean jl = getSalaryAcctSobConfigService(user).isJL((long) user.getUID());
if (jl) {
return "zy";
}
return "";
}
@Override
public void approval(Long id) {
// 查询薪资核算记录
SalaryAcctRecordPO salaryAcctRecordPO = getById(id);
if (Objects.isNull(salaryAcctRecordPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
}
List<SalaryAcctResultPO> salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(id));
if (CollectionUtils.isEmpty(salaryAcctResultPOS)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99691, "尚未核算,请先核算后再提交审批"));
}
// 更新薪资核算记录的状态
salaryAcctRecordPO.setStatus(SalaryAcctRecordStatusEnum.APPROVAL.getValue());
salaryAcctRecordPO.setUpdateTime(new Date());
getSalaryAcctRecordMapper().updateIgnoreNull(salaryAcctRecordPO);
// 记录日志
String targetName = getLogTargetNameById(id);
LoggerContext<SalaryAcctRecordPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId("" + salaryAcctRecordPO.getId());
loggerContext.setTargetName(targetName);
loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "提交薪资审批"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "提交薪资审批") + ": " + targetName);
loggerContext.setNewValues(salaryAcctRecordPO);
SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext);
}
@Override
public void refuse(Long id) {
// 查询薪资核算记录
SalaryAcctRecordPO salaryAcctRecordPO = getById(id);
if (Objects.isNull(salaryAcctRecordPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
}
List<SalaryAcctResultPO> salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(id));
if (CollectionUtils.isEmpty(salaryAcctResultPOS)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99691, "尚未核算,请先核算后再退回"));
}
// 更新薪资核算记录的状态
salaryAcctRecordPO.setStatus(SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue());
salaryAcctRecordPO.setUpdateTime(new Date());
getSalaryAcctRecordMapper().updateIgnoreNull(salaryAcctRecordPO);
// 记录日志
String targetName = getLogTargetNameById(id);
LoggerContext<SalaryAcctRecordPO> loggerContext = new LoggerContext<>();
loggerContext.setUser(user);
loggerContext.setTargetId("" + salaryAcctRecordPO.getId());
loggerContext.setTargetName(targetName);
loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "退回薪资审批"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "退回薪资审批") + ": " + targetName);
loggerContext.setNewValues(salaryAcctRecordPO);
SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext);
}
@Override
public void reCalculate(Long salaryAcctRecordId) {
// 查询薪资核算记录

View File

@ -1,6 +1,8 @@
package com.engine.salary.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.engine.common.service.HrmCommonService;
import com.engine.common.service.impl.HrmCommonServiceImpl;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.hrmelog.entity.dto.LoggerContext;
@ -68,6 +70,8 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.util.StopWatch;
import weaver.general.BaseBean;
import weaver.hrm.User;
import weaver.hrm.roles.RolesComInfo;
import weaver.workflow.request.WorkflowRequestMessage;
import java.math.BigDecimal;
import java.util.*;
@ -280,7 +284,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
List<SalarySobItemPO> salarySobItemPOS = salaryAcctConfig.getSalarySobItems();
// 过滤薪资项目
salarySobItemPOS = salarySobItemPOS.stream().filter(item -> item.getItemHide() == null || item.getItemHide().equals(0L)).collect(Collectors.toList());
boolean zy = getSalaryAcctSobConfigService(user).isZY((long) user.getUID());
if(zy){
salarySobItemPOS = salarySobItemPOS.stream().filter(salarySobItemPO -> salarySobItemPO.getZyHide() == null || salarySobItemPO.getZyHide() == 0).collect(Collectors.toList());
}
// 查询已发补发薪资项目
List<SalarySobBackItemPO> salarySobBackItemPOList = Collections.emptyList();
List<SalaryItemPO> salaryBackItemPOS = Collections.emptyList();

View File

@ -1,5 +1,8 @@
package com.engine.salary.service.impl;
import cn.hutool.core.util.StrUtil;
import com.engine.common.service.HrmCommonService;
import com.engine.common.service.impl.HrmCommonServiceImpl;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.cache.SalaryCacheKey;
@ -19,9 +22,11 @@ import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.db.MapperProxyFactory;
import org.apache.commons.lang3.StringUtils;
import weaver.general.BaseBean;
import weaver.hrm.User;
import java.util.*;
import java.util.stream.Collectors;
/**
* 薪资核算的账套副本配置
@ -197,4 +202,33 @@ public class SalaryAcctSobConfigServiceImpl extends Service implements SalaryAcc
public void deleteBySalaryAcctRecordIds(Collection<Long> salaryAcctRecordIds) {
getSalaryAcctSobConfigMapper().deleteBySalaryAcctRecordIds(salaryAcctRecordIds);
}
@Override
public boolean isZY(Long uid) {
BaseBean bb = new BaseBean();
String zyRoleId = bb.getPropValue("hrmSalaryBCG", "zyRoleId");
HrmCommonService hrmCommonService = new HrmCommonServiceImpl();
String roleMemberids = hrmCommonService.getRoleMemberIds(Integer.parseInt(zyRoleId), "0");
if (StrUtil.isNotBlank(roleMemberids)) {
return Arrays.stream(roleMemberids.split(",")).map(Long::valueOf).collect(Collectors.toList()).contains(uid);
}
return false;
}
@Override
public boolean isJL(Long uid) {
BaseBean bb = new BaseBean();
String jlRoleId = bb.getPropValue("hrmSalaryBCG", "jlRoleId");
HrmCommonService hrmCommonService = new HrmCommonServiceImpl();
String roleMemberids = hrmCommonService.getRoleMemberIds(jlRoleId, "0");
if (StrUtil.isNotBlank(roleMemberids)) {
return Arrays.stream(roleMemberids.split(",")).map(Long::valueOf).collect(Collectors.toList()).contains(uid);
}
return false;
}
}

View File

@ -161,6 +161,10 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary
List<SalarySobItemPO> salarySobItemPOS = salaryAcctConfig.getSalarySobItems();
// 过滤在账套中隐藏的薪资项目
salarySobItemPOS = salarySobItemPOS.stream().filter(po -> po.getItemHide() == null || po.getItemHide() == 0).collect(Collectors.toList());
boolean zy = getSalaryAcctSobConfigService(user).isZY((long) user.getUID());
if(zy){
salarySobItemPOS = salarySobItemPOS.stream().filter(salarySobItemPO -> salarySobItemPO.getZyHide() == null || salarySobItemPO.getZyHide() == 0).collect(Collectors.toList());
}
// 查询公式详情
Set<Long> formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId);
List<ExpressFormula> expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds);

View File

@ -216,6 +216,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
List<SalarySobItemPO> salarySobItemPOS = salaryAcctConfig.getSalarySobItems();
if (hideItem) {
salarySobItemPOS = salarySobItemPOS.stream().filter(po -> po.getItemHide() == null || po.getItemHide().equals(0L)).collect(Collectors.toList());
boolean zy = getSalaryAcctSobConfigService(user).isZY((long) user.getUID());
if (zy) {
salarySobItemPOS = salarySobItemPOS.stream().filter(salarySobItemPO -> salarySobItemPO.getZyHide() == null || salarySobItemPO.getZyHide() == 0).collect(Collectors.toList());
}
}
// 回算薪资项目
List<SalarySobBackItemPO> salarySobBackItems = salaryAcctConfig.getSalarySobBackItems();
@ -263,7 +267,10 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
// 查询薪资账套的薪资项目副本(已经过滤关闭分类显示按钮的薪资项目)
List<SalarySobItemPO> salarySobItemPOS = salaryAcctConfig.getSalarySobItems();
salarySobItemPOS = salarySobItemPOS.stream().filter(po -> po.getItemHide() == null || po.getItemHide().equals(0L)).collect(Collectors.toList());
boolean zy = getSalaryAcctSobConfigService(user).isZY((long) user.getUID());
if (zy) {
salarySobItemPOS = salarySobItemPOS.stream().filter(salarySobItemPO -> salarySobItemPO.getZyHide() == null || salarySobItemPO.getZyHide() == 0).collect(Collectors.toList());
}
// 回算薪资项目
List<SalarySobBackItemPO> salarySobBackItems = Collections.emptyList();
if (isBackCalc) {
@ -389,7 +396,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
for (SalarySobItemSaveParam.SalarySobItemParam itemParam : itemGroupParam.getItems()) {
SalaryItemPO salaryItemPO = checkItemExists(itemParam.getSalaryItemId(), salaryItemsMap);
SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder().salarySobId(salarySobId).salaryItemId(itemParam.getSalaryItemId()).salarySobItemGroupId(salarySobItemGroupId).formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)).sortedIndex(itemParam.getSortedIndex()).description(StringUtils.EMPTY).creator(employeeId).createTime(now).updateTime(now).deleteType(NumberUtils.INTEGER_ZERO).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)).roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()).pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()).valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()).itemHide(itemParam.getItemHide()).defaultValue(itemParam.getDefaultValue()).build();
SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder().salarySobId(salarySobId).salaryItemId(itemParam.getSalaryItemId()).salarySobItemGroupId(salarySobItemGroupId).formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)).sortedIndex(itemParam.getSortedIndex()).description(StringUtils.EMPTY).creator(employeeId).createTime(now).updateTime(now).deleteType(NumberUtils.INTEGER_ZERO).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)).roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()).pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()).valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()).itemHide(itemParam.getItemHide()).defaultValue(itemParam.getDefaultValue()).zyHide(itemParam.getZyHide()).build();
salarySobItems.add(salarySobItemPO);
}
}
@ -413,13 +420,13 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
//新增
for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needAddItems) {
SalaryItemPO salaryItemPO = checkItemExists(itemParam.getSalaryItemId(), salaryItemsMap);
SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder().salarySobId(salarySobId).salaryItemId(itemParam.getSalaryItemId()).salarySobItemGroupId(groupId).formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)).canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)).sortedIndex(itemParam.getSortedIndex()).description(StringUtils.EMPTY).creator(employeeId).createTime(now).updateTime(now).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).deleteType(NumberUtils.INTEGER_ZERO).roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()).pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()).valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()).itemHide(itemParam.getItemHide()).defaultValue(itemParam.getDefaultValue()).build();
SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder().salarySobId(salarySobId).salaryItemId(itemParam.getSalaryItemId()).salarySobItemGroupId(groupId).formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)).canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)).sortedIndex(itemParam.getSortedIndex()).description(StringUtils.EMPTY).creator(employeeId).createTime(now).updateTime(now).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).deleteType(NumberUtils.INTEGER_ZERO).roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()).pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()).valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()).itemHide(itemParam.getItemHide()).defaultValue(itemParam.getDefaultValue()).zyHide(itemParam.getZyHide()).build();
salarySobItems.add(salarySobItemPO);
}
//更新
for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needUpdateItems) {
SalaryItemPO salaryItemPO = checkItemExists(itemParam.getSalaryItemId(), salaryItemsMap);
SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder().id(itemParam.getId()).salaryItemId(itemParam.getSalaryItemId()).salarySobItemGroupId(groupId).formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)).sortedIndex(itemParam.getSortedIndex()).canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)).updateTime(now).deleteType(NumberUtils.INTEGER_ZERO).roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()).pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()).valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()).itemHide(itemParam.getItemHide()).defaultValue(itemParam.getDefaultValue()).build();
SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder().id(itemParam.getId()).salaryItemId(itemParam.getSalaryItemId()).salarySobItemGroupId(groupId).formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)).sortedIndex(itemParam.getSortedIndex()).canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)).updateTime(now).deleteType(NumberUtils.INTEGER_ZERO).roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()).pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()).valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()).itemHide(itemParam.getItemHide()).defaultValue(itemParam.getDefaultValue()).zyHide(itemParam.getZyHide()).build();
getSalarySobItemMapper().updateIgnoreNull(salarySobItemPO);
}
@ -446,13 +453,13 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needAddItems) {
SalaryItemPO salaryItemPO = checkItemExists(itemParam.getSalaryItemId(), salaryItemsMap);
SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder().salarySobId(salarySobId).salaryItemId(itemParam.getSalaryItemId()).salarySobItemGroupId(NumberUtils.LONG_ZERO).formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)).sortedIndex(itemParam.getSortedIndex()).description(StringUtils.EMPTY).creator(employeeId).createTime(now).updateTime(now).deleteType(NumberUtils.INTEGER_ZERO).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)).roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()).pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()).valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()).itemHide(itemParam.getItemHide()).defaultValue(itemParam.getDefaultValue()).build();
SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder().salarySobId(salarySobId).salaryItemId(itemParam.getSalaryItemId()).salarySobItemGroupId(NumberUtils.LONG_ZERO).formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)).sortedIndex(itemParam.getSortedIndex()).description(StringUtils.EMPTY).creator(employeeId).createTime(now).updateTime(now).deleteType(NumberUtils.INTEGER_ZERO).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)).roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()).pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()).valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()).itemHide(itemParam.getItemHide()).defaultValue(itemParam.getDefaultValue()).zyHide(itemParam.getZyHide()).build();
salarySobItems.add(salarySobItemPO);
}
for (SalarySobItemSaveParam.SalarySobItemParam itemParam : needUpdateItems) {
SalaryItemPO salaryItemPO = checkItemExists(itemParam.getSalaryItemId(), salaryItemsMap);
SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder().id(itemParam.getId()).formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)).sortedIndex(itemParam.getSortedIndex()).updateTime(now).canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)).roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()).pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()).valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()).itemHide(itemParam.getItemHide()).defaultValue(itemParam.getDefaultValue()).build();
SalarySobItemPO salarySobItemPO = SalarySobItemPO.builder().id(itemParam.getId()).formulaId(Optional.ofNullable(itemParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO)).sortedIndex(itemParam.getSortedIndex()).updateTime(now).canDelete(itemParam.getCanDelete() == null ? NumberUtils.INTEGER_ONE : (itemParam.getCanDelete() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)).roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()).pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()).valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()).itemHide(itemParam.getItemHide()).defaultValue(itemParam.getDefaultValue()).zyHide(itemParam.getZyHide()).build();
getSalarySobItemMapper().updateIgnoreNull(salarySobItemPO);
}
@ -551,7 +558,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
}
salarySobItemPO.setFormula(formulaPO);
}
if(SalaryEntityUtil.isNotNullOrEmpty(salarySobItemPO.getSalaryItemId())){
if (SalaryEntityUtil.isNotNullOrEmpty(salarySobItemPO.getSalaryItemId())) {
SalaryItemPO salaryItemPO = itemIdMap.get(salarySobItemPO.getSalaryItemId());
salarySobItemPO.setSalaryItem(salaryItemPO);
}
@ -599,7 +606,8 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe
salarySobItemFormDTO
.setId(salarySobItemPO.getId())
.setName(salaryItemPO.getName())
.setItemHide(salarySobItemPO.getItemHide()==null?0:Integer.parseInt(salarySobItemPO.getItemHide().toString()))
.setItemHide(salarySobItemPO.getItemHide() == null ? 0 : Integer.parseInt(salarySobItemPO.getItemHide().toString()))
.setZyHide(salarySobItemPO.getZyHide() == null ? 0 : salarySobItemPO.getZyHide())
.setDataType(salaryItemPO.getDataType())
.setRoundingMode(salarySobItemPO.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : salarySobItemPO.getRoundingMode())
.setPattern(salarySobItemPO.getPattern() == null ? salaryItemPO.getPattern() : salarySobItemPO.getPattern())

View File

@ -141,6 +141,32 @@ public class SalaryAcctController {
return new ResponseResult<Long, Long>(user).run(getSalaryAcctRecordWrapper(user)::reCalculate, param.getSalaryAcctRecordId());
}
@GET
@Path("/role")
@Produces(MediaType.APPLICATION_JSON)
public String role(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<Long, String>(user).run(getSalaryAcctRecordWrapper(user)::role, id);
}
//提交审批
@GET
@Path("/approval")
@Produces(MediaType.APPLICATION_JSON)
public String approval(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<Long, Long>(user).run(getSalaryAcctRecordWrapper(user)::approval, id);
}
//退回
@GET
@Path("/refuse")
@Produces(MediaType.APPLICATION_JSON)
public String refuse(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<Long, Long>(user).run(getSalaryAcctRecordWrapper(user)::refuse, id);
}
//薪资核算
@POST
@Path("/batAccounting")

View File

@ -56,6 +56,7 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord
private SalaryAcctRecordService getSalaryAcctRecordService(User user) {
return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user);
}
private SalaryAcctResultWrapper getSalaryAcctResultWrapper(User user) {
return ServiceUtil.getService(SalaryAcctResultWrapper.class, user);
}
@ -151,8 +152,11 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord
List<TaxAgentPO> taxAgentPOS = getTaxAgentService(user).listAll();
boolean zy = getSalaryAcctSobConfigService(user).isZY((long) user.getUID());
boolean jl = getSalaryAcctSobConfigService(user).isJL((long) user.getUID());
// 转换成列表dto
List<SalaryAcctRecordListDTO> salaryAcctRecordListDTOS = SalaryAcctRecordBO.convert2ListDTO(list, salarySobPOS, employeeComInfos, salaryAcctEmployeeCountDTOS, salarySendCheckResult, taxAgentPOS, needApprovalSalarySobIds, approvalCanFile, approvalCanReCalc);
List<SalaryAcctRecordListDTO> salaryAcctRecordListDTOS = SalaryAcctRecordBO.convert2ListDTO(list, salarySobPOS, employeeComInfos, salaryAcctEmployeeCountDTOS, salarySendCheckResult, taxAgentPOS, needApprovalSalarySobIds, approvalCanFile, approvalCanReCalc, zy, jl);
dtoPage.setList(salaryAcctRecordListDTOS);
// 规则设置中是否开启审批功能默认关闭
if (CollectionUtils.isEmpty(needApprovalSalarySobIds)) {
@ -276,6 +280,18 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord
getSalaryAcctRecordService(user).file(id);
}
public String role(Long id) {
return getSalaryAcctRecordService(user).role(id);
}
public void approval(Long id) {
getSalaryAcctRecordService(user).approval(id);
}
public void refuse(Long id) {
getSalaryAcctRecordService(user).refuse(id);
}
/**
* 重新核算
*