diff --git a/resource/sqlupgrade/DM/sql2025061801039TEST.sql b/resource/sqlupgrade/DM/sql2025061801039TEST.sql new file mode 100644 index 000000000..3891d3474 --- /dev/null +++ b/resource/sqlupgrade/DM/sql2025061801039TEST.sql @@ -0,0 +1,3 @@ +alter table hrsa_salary_acct_emp add calculate_status int; +/ + diff --git a/resource/sqlupgrade/GS/sql2025061801039TEST.sql b/resource/sqlupgrade/GS/sql2025061801039TEST.sql new file mode 100644 index 000000000..3891d3474 --- /dev/null +++ b/resource/sqlupgrade/GS/sql2025061801039TEST.sql @@ -0,0 +1,3 @@ +alter table hrsa_salary_acct_emp add calculate_status int; +/ + diff --git a/resource/sqlupgrade/JC/sql2025061801039TEST.sql b/resource/sqlupgrade/JC/sql2025061801039TEST.sql new file mode 100644 index 000000000..3891d3474 --- /dev/null +++ b/resource/sqlupgrade/JC/sql2025061801039TEST.sql @@ -0,0 +1,3 @@ +alter table hrsa_salary_acct_emp add calculate_status int; +/ + diff --git a/resource/sqlupgrade/Mysql/sql2025061801039TEST.sql b/resource/sqlupgrade/Mysql/sql2025061801039TEST.sql new file mode 100644 index 000000000..774d67a06 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql2025061801039TEST.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_acct_emp add calculate_status int +; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql2025061801039TEST.sql b/resource/sqlupgrade/Oracle/sql2025061801039TEST.sql new file mode 100644 index 000000000..65ae2732c --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql2025061801039TEST.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_acct_emp add calculate_status int +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql2025061801039TEST.sql b/resource/sqlupgrade/PG/sql2025061801039TEST.sql new file mode 100644 index 000000000..6daadc3c8 --- /dev/null +++ b/resource/sqlupgrade/PG/sql2025061801039TEST.sql @@ -0,0 +1 @@ +alter table hrsa_salary_acct_emp add calculate_status int \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql2025061801039TEST.sql b/resource/sqlupgrade/SQLServer/sql2025061801039TEST.sql new file mode 100644 index 000000000..d50e1ce0d --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql2025061801039TEST.sql @@ -0,0 +1,2 @@ +alter table hrsa_salary_acct_emp add calculate_status int +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql2025061801039TEST.sql b/resource/sqlupgrade/ST/sql2025061801039TEST.sql new file mode 100644 index 000000000..3891d3474 --- /dev/null +++ b/resource/sqlupgrade/ST/sql2025061801039TEST.sql @@ -0,0 +1,3 @@ +alter table hrsa_salary_acct_emp add calculate_status int; +/ + diff --git a/src/com/api/salary/web/YbSalaryCalculateController.java b/src/com/api/salary/web/YbSalaryCalculateController.java new file mode 100644 index 000000000..aec14f087 --- /dev/null +++ b/src/com/api/salary/web/YbSalaryCalculateController.java @@ -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 { +} diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java index 408da743f..b47a68891 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java @@ -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() diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index b906a6a37..6b22dca1f 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -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()); //锁定数据 diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java index c456e80da..f9b22d536 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java @@ -164,6 +164,8 @@ public class SalaryAcctEmployeePO { */ private Integer accountType; + private String calculateStatus; + //--------条件---------- diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index 9aeca4df9..0765c0d2b 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -27,6 +27,7 @@ + diff --git a/src/com/engine/salary/mapper/yb/YbSalaryCalculateMapper.java b/src/com/engine/salary/mapper/yb/YbSalaryCalculateMapper.java new file mode 100644 index 000000000..d3679b9c5 --- /dev/null +++ b/src/com/engine/salary/mapper/yb/YbSalaryCalculateMapper.java @@ -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); + +} diff --git a/src/com/engine/salary/mapper/yb/YbSalaryCalculateMapper.xml b/src/com/engine/salary/mapper/yb/YbSalaryCalculateMapper.xml new file mode 100644 index 000000000..ac76ee382 --- /dev/null +++ b/src/com/engine/salary/mapper/yb/YbSalaryCalculateMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update hrsa_salary_acct_emp set calculate_status = #{calculateStatus} where id = #{id} + + + diff --git a/src/com/engine/salary/service/YbSalaryCalculateService.java b/src/com/engine/salary/service/YbSalaryCalculateService.java new file mode 100644 index 000000000..30593710c --- /dev/null +++ b/src/com/engine/salary/service/YbSalaryCalculateService.java @@ -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 updateCalculateStatus(Map params); + +} diff --git a/src/com/engine/salary/service/impl/YbSalaryCalculateServiceImpl.java b/src/com/engine/salary/service/impl/YbSalaryCalculateServiceImpl.java new file mode 100644 index 000000000..3aad34bcc --- /dev/null +++ b/src/com/engine/salary/service/impl/YbSalaryCalculateServiceImpl.java @@ -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 updateCalculateStatus(Map params) { + String id = Util.null2String(params.get("id")); + String calculateStatus = Util.null2String(params.get("calculateStatus")); + // 更新 + getYbSalaryCalculateMapper().updateCalculateStatus(id, calculateStatus); + return null; + } + + +} diff --git a/src/com/engine/salary/web/YbSalaryCalculateController.java b/src/com/engine/salary/web/YbSalaryCalculateController.java new file mode 100644 index 000000000..1f3a64b05 --- /dev/null +++ b/src/com/engine/salary/web/YbSalaryCalculateController.java @@ -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 map = ParamUtil.request2Map(request); + return new ResponseResult, Map>(user).run(getYbSalaryCalculateWrapper(user)::updateCalculateStatus, map); + } +} diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index 097092b2e..84f29bb8a 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -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 datas = new HashMap<>(); datas.put("pageInfo", page); datas.put("columns", columns); + // + List> 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; } // 初始化进度 diff --git a/src/com/engine/salary/wrapper/SalaryApprovalWrapper.java b/src/com/engine/salary/wrapper/SalaryApprovalWrapper.java index 81c6b10ce..7982fa585 100644 --- a/src/com/engine/salary/wrapper/SalaryApprovalWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryApprovalWrapper.java @@ -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> 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; } diff --git a/src/com/engine/salary/wrapper/YbSalaryCalculateWrapper.java b/src/com/engine/salary/wrapper/YbSalaryCalculateWrapper.java new file mode 100644 index 000000000..4488522c6 --- /dev/null +++ b/src/com/engine/salary/wrapper/YbSalaryCalculateWrapper.java @@ -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 updateCalculateStatus(Map params) { + return getYbSalaryCalculateService(user).updateCalculateStatus(params); + } + + +}