医博项目--更新薪资核算状态

This commit is contained in:
dxfeng 2025-07-21 10:31:22 +08:00
parent 1263514a81
commit 0b4e41d871
21 changed files with 258 additions and 15 deletions

View File

@ -0,0 +1,3 @@
alter table hrsa_salary_acct_emp add calculate_status int;
/

View File

@ -0,0 +1,3 @@
alter table hrsa_salary_acct_emp add calculate_status int;
/

View File

@ -0,0 +1,3 @@
alter table hrsa_salary_acct_emp add calculate_status int;
/

View File

@ -0,0 +1,2 @@
alter table hrsa_salary_acct_emp add calculate_status int
;

View File

@ -0,0 +1,2 @@
alter table hrsa_salary_acct_emp add calculate_status int
/

View File

@ -0,0 +1 @@
alter table hrsa_salary_acct_emp add calculate_status int

View File

@ -0,0 +1,2 @@
alter table hrsa_salary_acct_emp add calculate_status int
GO

View File

@ -0,0 +1,3 @@
alter table hrsa_salary_acct_emp add calculate_status int;
/

View File

@ -0,0 +1,12 @@
package com.api.salary.web;
import javax.ws.rs.Path;
/**
* @author:dxfeng
* @createTime: 2025/06/18
* @version: 1.0
*/
@Path("/bs/hrmsalary/ybsalarycalculate")
public class YbSalaryCalculateController extends com.engine.salary.web.YbSalaryCalculateController {
}

View File

@ -77,17 +77,17 @@ public class SalaryAcctRecordBO {
}
} 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 (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"));
//}
} else {
btnList.add(new WeaTableOperate("查看", null, "3"));
if (approvalCanReCalc || !needApprovalSalarySobIds.contains(salaryAcctRecordPO.getSalarySobId())) {
btnList.add(new WeaTableOperate("重新核算", null, "4"));
}
//if (approvalCanReCalc || !needApprovalSalarySobIds.contains(salaryAcctRecordPO.getSalarySobId())) {
// btnList.add(new WeaTableOperate("重新核算", null, "4"));
//}
}
String taxAgentName = salarySobPO.getTaxAgentIds().stream().map(id -> taxAgentMap.getOrDefault(id, "")).collect(Collectors.joining(","));
return SalaryAcctRecordListDTO.builder()

View File

@ -326,6 +326,7 @@ public class SalaryAcctResultBO {
}
map.put(salarySobEmpField.getFieldCode() + DATA_TYPE_SUFFIX, SalaryDataTypeEnum.STRING.getValue());
}
map.put("calculateStatus",e.getCalculateStatus());
// 主键id
map.put("id", e.getId());
//锁定数据

View File

@ -164,6 +164,8 @@ public class SalaryAcctEmployeePO {
*/
private Integer accountType;
private String calculateStatus;
//--------条件----------

View File

@ -27,6 +27,7 @@
<result column="status" property="status"/>
<result column="lock_items" property="lockItems" typeHandler="com.engine.salary.handle.SalaryListTypeHandler"/>
<result column="account_type" property="accountType"/>
<result column="calculate_status" property="calculateStatus"/>
</resultMap>
<resultMap id="SalaryAccEmployeeCountMap"
@ -62,7 +63,8 @@
t.jobcall_id,
t.status,
t.lock_items,
t.account_type
t.account_type,
t.calculate_status
</sql>
<sql id="emp1Column">

View File

@ -0,0 +1,14 @@
package com.engine.salary.mapper.yb;
import org.apache.ibatis.annotations.Param;
/**
* @author:dxfeng
* @createTime: 2025/06/18
* @version: 1.0
*/
public interface YbSalaryCalculateMapper {
int updateCalculateStatus(@Param("id") String id, @Param("calculateStatus") String calculateStatus);
}

View File

@ -0,0 +1,37 @@
<?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.yb.YbSalaryCalculateMapper">
<resultMap id="SalaryAccEmployeeMap"
type="com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO">
<id column="id" property="id"/>
<result column="salary_acct_record_id" property="salaryAcctRecordId"/>
<result column="salary_sob_id" property="salarySobId"/>
<result column="employee_id" property="employeeId"/>
<result column="tax_agent_id" property="taxAgentId"/>
<result column="salary_month" property="salaryMonth"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<result column="creator" property="creator"/>
<result column="delete_type" property="deleteType"/>
<result column="tenant_key" property="tenantKey"/>
<result column="employee_type" property="employeeType"/>
<result column="lock_status" property="lockStatus"/>
<result column="subcompany_name" property="subcompanyName"/>
<result column="subcompany_id" property="subcompanyId"/>
<result column="department_name" property="departmentName"/>
<result column="department_id" property="departmentId"/>
<result column="jobtitle_name" property="jobtitleName"/>
<result column="jobtitle_id" property="jobtitleId"/>
<result column="jobcall" property="jobcall"/>
<result column="jobcall_id" property="jobcallId"/>
<result column="status" property="status"/>
<result column="lock_items" property="lockItems" typeHandler="com.engine.salary.handle.SalaryListTypeHandler"/>
<result column="account_type" property="accountType"/>
</resultMap>
<update id="updateCalculateStatus">
update hrsa_salary_acct_emp set calculate_status = #{calculateStatus} where id = #{id}
</update>
</mapper>

View File

@ -0,0 +1,19 @@
package com.engine.salary.service;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2025/06/18
* @version: 1.0
*/
public interface YbSalaryCalculateService {
/**
* 更新薪资核算状态
*
* @param params
* @return
*/
Map<String, Object> updateCalculateStatus(Map<String, Object> params);
}

View File

@ -0,0 +1,31 @@
package com.engine.salary.service.impl;
import com.engine.core.impl.Service;
import com.engine.salary.mapper.yb.YbSalaryCalculateMapper;
import com.engine.salary.service.YbSalaryCalculateService;
import com.engine.salary.util.db.MapperProxyFactory;
import weaver.general.Util;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2025/06/18
* @version: 1.0
*/
public class YbSalaryCalculateServiceImpl extends Service implements YbSalaryCalculateService {
private YbSalaryCalculateMapper getYbSalaryCalculateMapper() {
return MapperProxyFactory.getProxy(YbSalaryCalculateMapper.class);
}
@Override
public Map<String, Object> updateCalculateStatus(Map<String, Object> params) {
String id = Util.null2String(params.get("id"));
String calculateStatus = Util.null2String(params.get("calculateStatus"));
// 更新
getYbSalaryCalculateMapper().updateCalculateStatus(id, calculateStatus);
return null;
}
}

View File

@ -0,0 +1,42 @@
package com.engine.salary.web;
import com.engine.common.util.ParamUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.util.ResponseResult;
import com.engine.salary.wrapper.YbSalaryCalculateWrapper;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2025/06/18
* @version: 1.0
*/
public class YbSalaryCalculateController {
private YbSalaryCalculateWrapper getYbSalaryCalculateWrapper(User user) {
return ServiceUtil.getService(YbSalaryCalculateWrapper.class, user);
}
/**
* 浮动薪酬项目列表
*
* @return
*/
@POST
@Path("/updateCalculateStatus")
@Produces(MediaType.APPLICATION_JSON)
public String updateCalculateStatus(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
Map<String, Object> map = ParamUtil.request2Map(request);
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getYbSalaryCalculateWrapper(user)::updateCalculateStatus, map);
}
}

View File

@ -27,6 +27,7 @@ import weaver.hrm.User;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.IntStream;
/**
* 薪资核算结果
@ -101,6 +102,25 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult
Map<String, Object> datas = new HashMap<>();
datas.put("pageInfo", page);
datas.put("columns", columns);
//
List<Map<String, Object>> list = page.getList();
boolean allApproved = true;
String calculateMsg = null;
// 使用流查找第一个未通过记录的索引
OptionalInt firstUnapprovedIndex = IntStream.range(0, list.size())
.filter(i -> !"1".equals(list.get(i).get("calculateStatus")))
.findFirst();
if (firstUnapprovedIndex.isPresent()) {
allApproved = false;
calculateMsg = "序号" + (firstUnapprovedIndex.getAsInt() + 1) + "未完成审批,请勾选后再提交";
}
datas.put("calculateAll", allApproved);
if (!allApproved) {
datas.put("calculateMsg", calculateMsg);
}
return datas;
}
@ -230,7 +250,7 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult
// 检查是否正在核算中
ProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId());
if (Objects.nonNull(salaryAcctProgressDTO) && salaryAcctProgressDTO.isStatus() && Optional.ofNullable(salaryAcctProgressDTO.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) {
log.warn("正在核算中,无法再次执行"+calculateParam.getSalaryAcctRecordId());
log.warn("正在核算中,无法再次执行" + calculateParam.getSalaryAcctRecordId());
return;
}
// 初始化进度

View File

@ -30,10 +30,8 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.math.NumberUtils;
import weaver.hrm.User;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.stream.IntStream;
import static com.engine.salary.sys.constant.SalarySysConstant.SALARY_ACCT_FIXED_COLUMNS;
@ -155,6 +153,26 @@ public class SalaryApprovalWrapper extends Service {
datas.put("pageInfo", page);
datas.put("columns", columns);
//
List<Map<String, Object>> list = page.getList();
boolean allApproved = true;
String calculateMsg = null;
// 使用流查找第一个未通过记录的索引
OptionalInt firstUnapprovedIndex = IntStream.range(0, list.size())
.filter(i -> !"1".equals(list.get(i).get("calculateStatus")))
.findFirst();
if (firstUnapprovedIndex.isPresent()) {
allApproved = false;
calculateMsg = "序号" + (firstUnapprovedIndex.getAsInt() + 1) + "未完成审批,请勾选后再提交";
}
datas.put("calculateAll", allApproved);
if (!allApproved) {
datas.put("calculateMsg", calculateMsg);
}
return datas;
}

View File

@ -0,0 +1,26 @@
package com.engine.salary.wrapper;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.service.YbSalaryCalculateService;
import com.engine.salary.service.impl.YbSalaryCalculateServiceImpl;
import weaver.hrm.User;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2025/06/18
* @version: 1.0
*/
public class YbSalaryCalculateWrapper extends Service {
private YbSalaryCalculateService getYbSalaryCalculateService(User user) {
return ServiceUtil.getService(YbSalaryCalculateServiceImpl.class, user);
}
public Map<String, Object> updateCalculateStatus(Map<String, Object> params) {
return getYbSalaryCalculateService(user).updateCalculateStatus(params);
}
}