From 9dc6c61ed26335767b9f7f2ef15d18db64917044 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 14 Nov 2022 21:03:24 +0800 Subject: [PATCH 01/18] =?UTF-8?q?=E7=BC=96=E8=BE=91=E8=B0=83=E8=96=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/biz/SalaryArchiveItemBiz.java | 13 +++ .../param/SalaryArchiveItemSaveParam.java | 9 +- .../service/SalaryArchiveItemService.java | 17 ++- .../impl/SalaryArchiveItemServiceImpl.java | 106 ++++++++++++++++++ .../salary/web/SalaryArchiveController.java | 16 +++ .../wrapper/SalaryArchiveItemWrapper.java | 63 +++++++++++ .../proxy/SalaryArchiveItemWrapperProxy.java | 7 ++ 7 files changed, 227 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/biz/SalaryArchiveItemBiz.java b/src/com/engine/salary/biz/SalaryArchiveItemBiz.java index e8c096755..e36c02296 100644 --- a/src/com/engine/salary/biz/SalaryArchiveItemBiz.java +++ b/src/com/engine/salary/biz/SalaryArchiveItemBiz.java @@ -123,6 +123,19 @@ public class SalaryArchiveItemBiz { } + public void updateIgnoreNull(SalaryArchiveItemPO salaryArchiveItem) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalaryArchiveItemMapper mapper = sqlSession.getMapper(SalaryArchiveItemMapper.class); + SalaryArchiveItemPOEncrypt.encryptSalaryArchiveItemPO(salaryArchiveItem); + mapper.updateIgnoreNull(salaryArchiveItem); + sqlSession.commit(); + } finally { + sqlSession.close(); + } + } + + public List salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam queryParam, List salaryItemIds) { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { diff --git a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemSaveParam.java b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemSaveParam.java index 66725711c..a096f12ae 100644 --- a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemSaveParam.java +++ b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemSaveParam.java @@ -30,6 +30,9 @@ import java.util.Set; //薪资项目调整保存参数") public class SalaryArchiveItemSaveParam { + // 主键id + private Long salaryArchiveItemId; + //薪资档案id private Long salaryArchiveId; @@ -56,9 +59,9 @@ public class SalaryArchiveItemSaveParam { if (saveParam.getAdjustReason() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100306, "请选择调整原因")); } - if (SalaryArchiveItemAdjustReasonEnum.parseByValue(saveParam.getAdjustReason()) == null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100306, "调整原因不在范围内")); - } +// if (SalaryArchiveItemAdjustReasonEnum.parseByValue(saveParam.getAdjustReason()) == null) { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100306, "调整原因不在范围内")); +// } if (saveParam.getEffectiveTime() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100307, "请选择生效日期")); } diff --git a/src/com/engine/salary/service/SalaryArchiveItemService.java b/src/com/engine/salary/service/SalaryArchiveItemService.java index 51a534d68..70f53e9d9 100644 --- a/src/com/engine/salary/service/SalaryArchiveItemService.java +++ b/src/com/engine/salary/service/SalaryArchiveItemService.java @@ -43,6 +43,15 @@ public interface SalaryArchiveItemService { */ String getSalaryItemAdjustBeforeValue(SalaryItemAdjustBeforeParam adjustBeforeParam); + + /** + * @description 根据薪资档案id和薪资项id获取薪资项目(生效+不生效) + * @return List + * @author Harryxzy + * @date 2022/11/14 17:07 + */ + List getSalaryItemsBySalaryArchiveIdAndItemIds(Long salaryArchiveId, List salaryItemPageIds); + /** * 获取当前已生效 * @@ -140,5 +149,11 @@ public interface SalaryArchiveItemService { Map> getIneffectiveItemListMap(Collection salaryArchiveIds, boolean isNoNeedSalaryItem, Collection salaryItemIds); - + /** + * @description 单个档案的薪资项目调整的编辑 + * @return String + * @author Harryxzy + * @date 2022/11/14 13:38 + */ + String editSingleSalaryItem(SalaryArchiveItemSaveParam salaryArchiveItemSaveParam); } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index 52b422a7e..d02a7a728 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -4,6 +4,7 @@ import com.engine.core.impl.Service; import com.engine.salary.biz.SalaryArchiveBiz; import com.engine.salary.biz.SalaryArchiveItemBiz; import com.engine.salary.biz.SalaryItemBiz; +import com.engine.salary.constant.SalaryArchiveConstant; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO; import com.engine.salary.entity.salaryarchive.param.*; @@ -12,6 +13,7 @@ import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum; +import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.SalaryArchiveItemService; import com.engine.salary.util.SalaryEntityUtil; @@ -26,6 +28,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.text.SimpleDateFormat; import java.util.*; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -57,8 +60,11 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi private List getIneffectiveSalaryItems(Long salaryArchiveId, List salaryItemIds) { // 没有薪资项目时,给个不存在的,否则加载所有不合理 salaryItemIds = CollectionUtils.isEmpty(salaryItemIds) ? Collections.singletonList(0L) : salaryItemIds; + ArrayList salaryArchiveIds = new ArrayList<>(); + salaryArchiveIds.add(salaryArchiveId); return salaryArchiveItemMapper.getIneffectiveSalaryItems(SalaryArchiveItemQueryParam.builder() .salaryArchiveId(salaryArchiveId) + .salaryArchivesIds(salaryArchiveIds) .salaryItemIds(salaryItemIds) .effectiveTime(new Date()).build()); } @@ -74,6 +80,17 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi .effectiveTime(new Date()).build()); } + + @Override + public List getSalaryItemsBySalaryArchiveIdAndItemIds(Long salaryArchiveId, List salaryItemIds) { + // 没有薪资项目时,给个不存在的,否则加载所有不合理 + salaryItemIds = CollectionUtils.isEmpty(salaryItemIds) ? Collections.singletonList(0L) : salaryItemIds; + return salaryArchiveItemMapper.getEffectiveSalaryItems(SalaryArchiveItemQueryParam.builder() + .salaryArchiveId(salaryArchiveId) + .salaryItemIds(salaryItemIds) + .build()); + } + /** * 获取当前已生效 gt * @@ -169,6 +186,95 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi return SalaryEntityUtil.group2Map(salaryArchiveItems, k -> k.getSalaryArchiveId() + "-" + k.getSalaryItemId()); } + @Override + public String editSingleSalaryItem(SalaryArchiveItemSaveParam salaryArchiveItemSaveParam) { + // 检查参数 + SalaryArchiveItemSaveParam.checkParam(salaryArchiveItemSaveParam); + + Long salaryArchiveId = salaryArchiveItemSaveParam.getSalaryArchiveId(); + // 获取所有可被引用的薪资项目 + List salaryItems = getCanAdjustSalaryItems(); + Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getId); + // 待处理薪资项目 + List salaryArchiveItems = salaryArchiveItemSaveParam.getSalaryArchiveItems().stream() + .filter(e -> salaryItemMap.containsKey(e.getSalaryItemId())) + .collect(Collectors.toList()); + List salaryItemIds = salaryArchiveItems.stream().map(SalaryArchiveItemDetailSaveParam::getSalaryItemId).collect(Collectors.toList()); + // 薪资档案 + SalaryArchivePO salaryArchive = salaryArchiveMapper.getById(salaryArchiveId); + if (salaryArchive != null) { + // 停薪列表禁止操作 + boolean isDisabled = salaryArchive.getRunStatus().equals(SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue()) || + salaryArchive.getRunStatus().equals(SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue()); + if (isDisabled) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(115437, "停薪列表禁止操作")); + } + SalaryArchiveItemPO salaryArchiveItem = null; + if (salaryArchiveItemSaveParam.getSalaryArchiveItemId() != null ) { + salaryArchiveItem = salaryArchiveItemMapper.getById(salaryArchiveItemSaveParam.getSalaryArchiveItemId()); + if (salaryArchiveItem == null || !salaryArchiveItem.getSalaryArchiveId().equals(salaryArchiveId)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100428, "该薪资档案的薪资项目的调整记录不存在")); + } + if (salaryArchiveItemSaveParam.getSalaryArchiveItems().size() > 1) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(149535, "单个调整不能处理多个薪资项目")); + } else if (!salaryArchiveItems.get(0).getSalaryItemId().equals(salaryArchiveItem.getSalaryItemId())){ + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 149539, "单个调薪的目标项目和调整明细项目id不一致")); + } + } + // 构建更新PO + SalaryArchiveItemPO updateSalaryArchiveItemPO = buildUpdateSalaryArchiveItemPO(salaryArchiveItemSaveParam,salaryArchiveItems,salaryItemIds,salaryArchiveItem); + salaryArchiveItemMapper.updateIgnoreNull(updateSalaryArchiveItemPO); + } + return StringUtils.EMPTY; + } + + /** + * @description 构建薪资档案中调薪的更新PO + * @return null + * @author Harryxzy + * @date 2022/11/14 14:24 + */ + private SalaryArchiveItemPO buildUpdateSalaryArchiveItemPO(SalaryArchiveItemSaveParam salaryArchiveItemSaveParam,List salaryArchiveItems,List salaryItemIds,SalaryArchiveItemPO salaryArchiveItem) { + // 获取生效+未生效的数据 + List salaryItemsBySalaryArchiveIdAndItemIds = getSalaryItemsBySalaryArchiveIdAndItemIds(salaryArchiveItemSaveParam.getSalaryArchiveId(), salaryItemIds); + // 获取当前已生效数据 + List effectiveSalaryItems = getEffectiveSalaryItems(salaryArchiveItemSaveParam.getSalaryArchiveId(), salaryItemIds); + // 待保存生效时间 + Date saveEffectiveTime = salaryArchiveItemSaveParam.getEffectiveTime(); + salaryArchiveItems.forEach(e -> { + // 已生效 + List effectiveList = effectiveSalaryItems.stream().filter(i -> i.getSalaryItemId().equals(e.getSalaryItemId())).collect(Collectors.toList()); + // 当前已生效 + SalaryArchiveItemPO effectiveSalaryItem = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 0 ? effectiveList.get(0) : null; + List list = salaryItemsBySalaryArchiveIdAndItemIds.stream().filter(i -> i.getSalaryItemId().equals(e.getSalaryItemId())).collect(Collectors.toList()); + boolean isNotNumber = StringUtils.isNotEmpty(e.getAdjustValue()) && !Pattern.matches(SalaryArchiveConstant.NUMBER_REGEX, e.getAdjustValue()); + if (isNotNumber) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100581, "请输入数字")); + } + + // 修改了生效日期 + if(!salaryArchiveItemSaveParam.getEffectiveTime().equals(salaryArchiveItem.getEffectiveTime())){ + boolean isEffectiveTimeRepeat = list.stream().anyMatch(it -> it.getEffectiveTime().equals(saveEffectiveTime)); + if (isEffectiveTimeRepeat) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(153539, "已经存在该生效日期的调整记录,请修改生效日期")); + } + } + + + // 1.检验是否可以调整 + if (effectiveSalaryItem != null) { + // 当前已经生效的时间 + Date effectiveTime = effectiveSalaryItem.getEffectiveTime(); + // 1.1 如果保存的生效日期早于<当前已生效 + if (saveEffectiveTime.before(effectiveTime)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期")); + } + } + }); + return SalaryArchiveItemPO.builder().id(salaryArchiveItemSaveParam.getSalaryArchiveItemId()).effectiveTime(salaryArchiveItemSaveParam.getEffectiveTime()).adjustReason(salaryArchiveItemSaveParam.getAdjustReason()) + .description(salaryArchiveItemSaveParam.getDescription()).itemValue(salaryArchiveItemSaveParam.getSalaryArchiveItems().get(0).getAdjustValue()).build(); + } + @Override public List getCurrentEffectiveItemListIngoreValue(Collection salaryArchivesIds, List salaryItemIds) { diff --git a/src/com/engine/salary/web/SalaryArchiveController.java b/src/com/engine/salary/web/SalaryArchiveController.java index f5fbfcaae..ca33a1014 100644 --- a/src/com/engine/salary/web/SalaryArchiveController.java +++ b/src/com/engine/salary/web/SalaryArchiveController.java @@ -718,6 +718,22 @@ public class SalaryArchiveController { return new ResponseResult>(user).run(getSalaryArchiveItemWrapper(user)::singleSalaryItemAdjustRecordList, queryParam); } + + /** + * @description 单个档案的薪资项目调整的编辑 + * @return String + * @author Harryxzy + * @date 2022/11/11 13:50 + */ + @POST + @Path("/adjustRecord/editSingleSalaryItem") + @Produces(MediaType.APPLICATION_JSON) + public String editSingleSalaryItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryArchiveItemSaveParam updateParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryArchiveItemWrapper(user)::editSingleSalaryItem, updateParam); + } + + /** * 导出薪资项目调整记录列表 */ diff --git a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java index fca2f61bd..7954d7838 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java @@ -280,6 +280,17 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt return listPage; } + /** + * @description 单个档案的薪资项目调整的编辑 + * @return void + * @author Harryxzy + * @date 2022/11/14 11:46 + */ + @Override + public String editSingleSalaryItem(SalaryArchiveItemSaveParam salaryArchiveItemSaveParam) { + return getSalaryArchiveItemService(user).editSingleSalaryItem(salaryArchiveItemSaveParam); + } + /** * 导出薪资项目调整记录列表 * @@ -291,4 +302,56 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt } + /** + * @description 获取单个档案的单个薪资项目调整信息 + * @return void + * @author Harryxzy + * @date 2022/11/11 14:39 + */ + public SingleSalaryItemAdjustRecordListDTO getSingleSalaryItemInfo(SingleSalaryItemAdjustRecordListDTO queryParam) { + SalaryArchiveItemPO byId = getSalaryArchiveItemService(user).getById(queryParam.getId()); + + // 获取所有可被引用的薪资项目 + List salaryItemList = getSalaryArchiveItemService(user).getCanAdjustSalaryItems(); + List salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); + //所有调整记录 + List listAll = getSalaryArchiveItemService(user).salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam.builder().build(), salaryItemIds); + + //根据条件分页查询调整记录 + PageInfo adjustlistByParamPage = getSalaryArchiveItemService(user).salaryItemAdjustRecordListPage(SalaryItemAdjustRecordQueryParam.builder().salaryArchiveId(byId.getSalaryArchiveId()).build(), salaryItemIds); + List adjustPageList = adjustlistByParamPage.getList(); + + List resultList = Lists.newArrayList(); + adjustPageList.forEach(m -> { + if (CollectionUtils.isNotEmpty(listAll)) { + listAll.removeIf(a -> a.getId().equals(m.getId())); + } + Optional optional = listAll.stream().filter(f -> f.getSalaryArchiveId().equals(m.getSalaryArchiveId()) && f.getSalaryItemId().equals(m.getSalaryItemId())).findFirst(); + m.setAdjustBefore(optional.isPresent() ? optional.get().getAdjustAfter() : ""); + + m.setAdjustReason(SalaryArchiveItemAdjustReasonEnum.getDefaultLabelByValue(m.getAdjustReason())); + + SingleSalaryItemAdjustRecordListDTO singleSalaryItemAdjustRecordList = new SingleSalaryItemAdjustRecordListDTO(); + BeanUtils.copyProperties(m, singleSalaryItemAdjustRecordList); + resultList.add(singleSalaryItemAdjustRecordList); + }); + + List salaryItemPageIds = resultList.stream().map(SingleSalaryItemAdjustRecordListDTO::getSalaryItemId).collect(Collectors.toList()); + List effectiveSalaryItems = getSalaryArchiveItemService(user).getEffectiveSalaryItems(queryParam.getSalaryArchiveId(), salaryItemPageIds); + // 行记录按钮权限控制 + for (int i = 0; i < resultList.size(); i++) { + SingleSalaryItemAdjustRecordListDTO singleSalaryItemAdjustRecord = resultList.get(i); + if(singleSalaryItemAdjustRecord.getId().equals(queryParam.getId())){ + Optional optional = effectiveSalaryItems.stream().filter(f -> f.getSalaryItemId().equals(singleSalaryItemAdjustRecord.getSalaryItemId())).findFirst(); + Date effectiveDate = optional.map(SalaryArchiveItemPO::getEffectiveTime).orElse(null); + if (effectiveDate != null && singleSalaryItemAdjustRecord.getEffectiveTime().before(effectiveDate)) { + singleSalaryItemAdjustRecord.setCanOperator(Boolean.FALSE); + } else { + singleSalaryItemAdjustRecord.setCanOperator(Boolean.TRUE); + } + return singleSalaryItemAdjustRecord; + } + } + return null; + } } diff --git a/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java b/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java index 5dd2719b0..e59218f04 100644 --- a/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java +++ b/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java @@ -55,4 +55,11 @@ public interface SalaryArchiveItemWrapperProxy { PageInfo singleSalaryItemAdjustRecordList(SingleSalaryItemAdjustRecordQueryParam queryParam); + /** + * @description 单个档案的薪资项目调整的编辑 + * @return void + * @author Harryxzy + * @date 2022/11/14 11:45 + */ + String editSingleSalaryItem(SalaryArchiveItemSaveParam salaryArchiveItemSaveParam); } From 323c1ec0e0c519c1158dff28a91671c66ca45cf8 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 15 Nov 2022 09:34:58 +0800 Subject: [PATCH 02/18] =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E8=B0=83=E8=96=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/web/SalaryArchiveController.java | 14 ++++++++++++++ .../salary/wrapper/SalaryArchiveItemWrapper.java | 4 +++- .../proxy/SalaryArchiveItemWrapperProxy.java | 2 ++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/web/SalaryArchiveController.java b/src/com/engine/salary/web/SalaryArchiveController.java index ca33a1014..0222fbf4f 100644 --- a/src/com/engine/salary/web/SalaryArchiveController.java +++ b/src/com/engine/salary/web/SalaryArchiveController.java @@ -719,6 +719,20 @@ public class SalaryArchiveController { } + /** + * @description 编辑前获取薪资项目调整信息 + * @return String + * @author Harryxzy + * @date 2022/11/15 9:25 + */ + @POST + @Path("/adjustRecord/getSingleSalaryItemInfo") + @Produces(MediaType.APPLICATION_JSON) + public String getSingleSalaryItemInfo(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SingleSalaryItemAdjustRecordListDTO queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryArchiveItemWrapper(user)::getSingleSalaryItemInfo, queryParam); + } + /** * @description 单个档案的薪资项目调整的编辑 * @return String diff --git a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java index 7954d7838..6853cb482 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java @@ -310,7 +310,9 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt */ public SingleSalaryItemAdjustRecordListDTO getSingleSalaryItemInfo(SingleSalaryItemAdjustRecordListDTO queryParam) { SalaryArchiveItemPO byId = getSalaryArchiveItemService(user).getById(queryParam.getId()); - + if(Objects.isNull(byId)){ + throw new SalaryRunTimeException("该薪资项目调整信息不存在"); + } // 获取所有可被引用的薪资项目 List salaryItemList = getSalaryArchiveItemService(user).getCanAdjustSalaryItems(); List salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); diff --git a/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java b/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java index e59218f04..b160b2bb4 100644 --- a/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java +++ b/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java @@ -55,6 +55,8 @@ public interface SalaryArchiveItemWrapperProxy { PageInfo singleSalaryItemAdjustRecordList(SingleSalaryItemAdjustRecordQueryParam queryParam); + SingleSalaryItemAdjustRecordListDTO getSingleSalaryItemInfo(SingleSalaryItemAdjustRecordListDTO queryParam); + /** * @description 单个档案的薪资项目调整的编辑 * @return void From a3705c67a4469ed71ea634994ac714d5c6b6f71e Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 15 Nov 2022 11:37:55 +0800 Subject: [PATCH 03/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E8=B0=83=E8=96=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/SalaryArchiveItemFormDTO.java | 3 +++ .../salary/web/SalaryArchiveController.java | 2 +- .../wrapper/SalaryArchiveItemWrapper.java | 21 ++++++++++++++++--- .../proxy/SalaryArchiveItemWrapperProxy.java | 2 +- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/entity/salaryarchive/dto/SalaryArchiveItemFormDTO.java b/src/com/engine/salary/entity/salaryarchive/dto/SalaryArchiveItemFormDTO.java index 441973350..086bd054a 100644 --- a/src/com/engine/salary/entity/salaryarchive/dto/SalaryArchiveItemFormDTO.java +++ b/src/com/engine/salary/entity/salaryarchive/dto/SalaryArchiveItemFormDTO.java @@ -30,4 +30,7 @@ public class SalaryArchiveItemFormDTO { //薪资项目调整明细") private Map salaryArchiveItemDetail; + + //是否可以编辑 + private boolean canOperator; } diff --git a/src/com/engine/salary/web/SalaryArchiveController.java b/src/com/engine/salary/web/SalaryArchiveController.java index 0222fbf4f..28e773578 100644 --- a/src/com/engine/salary/web/SalaryArchiveController.java +++ b/src/com/engine/salary/web/SalaryArchiveController.java @@ -730,7 +730,7 @@ public class SalaryArchiveController { @Produces(MediaType.APPLICATION_JSON) public String getSingleSalaryItemInfo(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SingleSalaryItemAdjustRecordListDTO queryParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalaryArchiveItemWrapper(user)::getSingleSalaryItemInfo, queryParam); + return new ResponseResult(user).run(getSalaryArchiveItemWrapper(user)::getSingleSalaryItemInfo, queryParam); } /** diff --git a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java index 6853cb482..a1c86cebb 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java @@ -308,7 +308,7 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt * @author Harryxzy * @date 2022/11/11 14:39 */ - public SingleSalaryItemAdjustRecordListDTO getSingleSalaryItemInfo(SingleSalaryItemAdjustRecordListDTO queryParam) { + public SalaryArchiveItemFormDTO getSingleSalaryItemInfo(SingleSalaryItemAdjustRecordListDTO queryParam) { SalaryArchiveItemPO byId = getSalaryArchiveItemService(user).getById(queryParam.getId()); if(Objects.isNull(byId)){ throw new SalaryRunTimeException("该薪资项目调整信息不存在"); @@ -339,7 +339,7 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt }); List salaryItemPageIds = resultList.stream().map(SingleSalaryItemAdjustRecordListDTO::getSalaryItemId).collect(Collectors.toList()); - List effectiveSalaryItems = getSalaryArchiveItemService(user).getEffectiveSalaryItems(queryParam.getSalaryArchiveId(), salaryItemPageIds); + List effectiveSalaryItems = getSalaryArchiveItemService(user).getEffectiveSalaryItems(byId.getSalaryArchiveId(), salaryItemPageIds); // 行记录按钮权限控制 for (int i = 0; i < resultList.size(); i++) { SingleSalaryItemAdjustRecordListDTO singleSalaryItemAdjustRecord = resultList.get(i); @@ -351,7 +351,22 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt } else { singleSalaryItemAdjustRecord.setCanOperator(Boolean.TRUE); } - return singleSalaryItemAdjustRecord; + Map map = new HashMap<>(3); + map.put("salaryItem", String.valueOf(singleSalaryItemAdjustRecord.getSalaryItemId())); + map.put("salaryBefore", singleSalaryItemAdjustRecord.getAdjustBefore()); + map.put("adjustAfter", singleSalaryItemAdjustRecord.getAdjustAfter()); + + // 调整明细数据 + List> tableData = Lists.newArrayList(); + tableData.add(map); + + return SalaryArchiveItemFormDTO.builder() + .canOperator(singleSalaryItemAdjustRecord.getCanOperator()) + .salaryArchiveId(byId.getSalaryArchiveId()) + .salaryArchiveItemForm(buildSalaryArchiveItemForm(byId.getEffectiveTime(), byId.getAdjustReason(), byId.getDescription())) + .salaryArchiveItemDetail(buildSalaryArchiveItemAdjustDetailTable(tableData)) + .build(); + } } return null; diff --git a/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java b/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java index b160b2bb4..79ffa914a 100644 --- a/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java +++ b/src/com/engine/salary/wrapper/proxy/SalaryArchiveItemWrapperProxy.java @@ -55,7 +55,7 @@ public interface SalaryArchiveItemWrapperProxy { PageInfo singleSalaryItemAdjustRecordList(SingleSalaryItemAdjustRecordQueryParam queryParam); - SingleSalaryItemAdjustRecordListDTO getSingleSalaryItemInfo(SingleSalaryItemAdjustRecordListDTO queryParam); + SalaryArchiveItemFormDTO getSingleSalaryItemInfo(SingleSalaryItemAdjustRecordListDTO queryParam); /** * @description 单个档案的薪资项目调整的编辑 From 1bcb02d2e0ef3042700353da3550f5e56912ec46 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 16 Nov 2022 14:22:25 +0800 Subject: [PATCH 04/18] =?UTF-8?q?fix=E8=96=AA=E8=B5=84=E8=B4=A6=E5=A5=97?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E7=8A=B6=E6=80=81=E4=B8=8B=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E5=88=A0=E9=99=A4bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SalarySobServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index 85f80eeee..dfd10acd9 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -147,7 +147,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { @Override public List listByAdmin() { - List salarySobPOS = salarySobMapper.listSome(SalarySobPO.builder().disable(NumberUtils.INTEGER_ZERO).build()); + List salarySobPOS = salarySobMapper.listSome(SalarySobPO.builder().build()); return filterByAdmin(salarySobPOS); } From 9f17c6e99aa4c773cdb9438cfa35a181e30519dd Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 16 Nov 2022 17:22:22 +0800 Subject: [PATCH 05/18] fixBUG --- .../salaryarchive/param/SalaryArchiveItemSaveParam.java | 5 +++++ .../salary/service/impl/SalaryArchiveItemServiceImpl.java | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemSaveParam.java b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemSaveParam.java index a096f12ae..01329f8bc 100644 --- a/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemSaveParam.java +++ b/src/com/engine/salary/entity/salaryarchive/param/SalaryArchiveItemSaveParam.java @@ -39,6 +39,9 @@ public class SalaryArchiveItemSaveParam { //生效时间 private Date effectiveTime; + // 是否允许编辑 + private Boolean canOperator; + /** * 调整原因 * @@ -52,6 +55,8 @@ public class SalaryArchiveItemSaveParam { //薪资项目 private List salaryArchiveItems; + + public static void checkParam(SalaryArchiveItemSaveParam saveParam) { if (saveParam.getSalaryArchiveId() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100305, "薪资档案id必传")); diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index d02a7a728..957399161 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -260,14 +260,18 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi } } - // 1.检验是否可以调整 if (effectiveSalaryItem != null) { // 当前已经生效的时间 Date effectiveTime = effectiveSalaryItem.getEffectiveTime(); // 1.1 如果保存的生效日期早于<当前已生效 if (saveEffectiveTime.before(effectiveTime)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期")); + if(salaryArchiveItemSaveParam.getCanOperator() == Boolean.TRUE){ + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期,仅修改备注")); + } + // 仅可编辑说明 + salaryArchiveItemMapper.updateIgnoreNull( SalaryArchiveItemPO.builder().id(salaryArchiveItemSaveParam.getSalaryArchiveItemId()) + .description(salaryArchiveItemSaveParam.getDescription()).build()); } } }); From 271daf29be790be38cf19acc7e403b252f1104e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 17 Nov 2022 09:28:40 +0800 Subject: [PATCH 06/18] =?UTF-8?q?=E6=89=B9=E9=87=8F=E9=94=81=E5=AE=9A?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctCalculateBO.java | 7 + .../bo/SalaryAcctResultListContext.java | 52 +++++++ .../SalaryAcctEmployeeListQueryParam.java | 61 +++++++++ ...SalaryAcctResultUpdateLockStatusParam.java | 28 ++++ .../salaryacct/po/SalaryAcctRecordPO.java | 6 + .../salaryaccounting/LockStatusEnum.java | 37 +++++ .../salary/handle/SalaryListTypeHandler.java | 49 +++++++ .../salaryacct/SalaryAcctRecordMapper.java | 2 + .../salaryacct/SalaryAcctRecordMapper.xml | 22 ++- .../service/SalaryAcctRecordService.java | 2 + .../service/SalaryAcctResultService.java | 11 +- .../impl/SalaryAcctCalculateServiceImpl.java | 18 ++- .../impl/SalaryAcctRecordServiceImpl.java | 5 + .../impl/SalaryAcctResultServiceImpl.java | 128 +++++++++++++++++- .../salary/web/SalaryAcctController.java | 11 +- .../wrapper/SalaryAcctResultWrapper.java | 35 ++--- 16 files changed, 435 insertions(+), 39 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultListContext.java create mode 100644 src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeListQueryParam.java create mode 100644 src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultUpdateLockStatusParam.java create mode 100644 src/com/engine/salary/enums/salaryaccounting/LockStatusEnum.java create mode 100644 src/com/engine/salary/handle/SalaryListTypeHandler.java diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java index 144e6773b..8eba860bb 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java @@ -3,6 +3,7 @@ package com.engine.salary.entity.salaryacct.bo; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; @@ -45,6 +46,12 @@ public class SalaryAcctCalculateBO { */ private SalarySobCycleDTO salarySobCycleDTO; + /** + * 核算锁定值 + */ + private Map salaryAcctLockResultPOS; + + /** * 相同税款所属期内其他薪资核算记录(薪资类型为工资薪金的账套的) */ diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultListContext.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultListContext.java new file mode 100644 index 000000000..a406eee1d --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultListContext.java @@ -0,0 +1,52 @@ +package com.engine.salary.entity.salaryacct.bo; + +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.*; + +/** + * 薪资核算人员 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Accessors(chain = true) +public class SalaryAcctResultListContext { + + private SalaryAcctRecordPO salaryAcctRecord; + + private SalarySobItemAggregateDTO salarySobItemAggregate; + + //存在合并计税的薪资核算人员(employeeId-taxAgentId)") + private Set sameTaxCycleKeySet; + + //薪资核算人员") + private List salaryAcctEmployees; + + private Integer total; + + private Map hrmStatusMap; + + private Map simpleEmployeeMap; + +// private Map extEmployeeMap; + + private Map taxAgentNameMap; + + public SalaryAcctResultListContext() { + this.sameTaxCycleKeySet = new HashSet<>(); + this.salaryAcctEmployees = new ArrayList<>(); + this.hrmStatusMap = new HashMap<>(); + this.simpleEmployeeMap = new HashMap<>(); +// this.extEmployeeMap = new HashMap<>(); + this.taxAgentNameMap = new HashMap<>(); + } +} diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeListQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeListQueryParam.java new file mode 100644 index 000000000..a35dce175 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeListQueryParam.java @@ -0,0 +1,61 @@ +package com.engine.salary.entity.salaryacct.param; + +import com.engine.salary.common.BaseQueryParam; +import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotNull; +import java.util.Collection; + +/** + * 薪资核算人员列表查询条件 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +//薪资核算人员列表查询条件") +public class SalaryAcctEmployeeListQueryParam extends BaseQueryParam { + + /** + * 参数错误,薪资核算记录ID不能为空 + */ + @NotNull(message = "LABEL:99845") + //薪资核算记录id") + private Long salaryAcctRecordId; + + //人员姓名") + private String employeeName; + + //个税扣缴义务人") + private Long taxAgentId; + + //人员") + private Collection employeeIds; + + //部门") + private Collection departmentIds; + + //岗位") + private Collection positionIds; + + //状态") + private String status; + + //工号") + private String jobNum; + + //列表主键id") + private Collection ids; + + //薪资核算人员类型") + private EmployeeTypeEnum employeeType; +} diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultUpdateLockStatusParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultUpdateLockStatusParam.java new file mode 100644 index 000000000..d5ae5718f --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultUpdateLockStatusParam.java @@ -0,0 +1,28 @@ +package com.engine.salary.entity.salaryacct.param; + +import com.engine.salary.enums.salaryaccounting.LockStatusEnum; +import lombok.Data; + +/** + * 更新核算锁定状态 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +public class SalaryAcctResultUpdateLockStatusParam { + + //锁定状态 + private LockStatusEnum lockStatus; + + //薪资项目的Id") + private Long salaryItemId; + + //薪资核算人员的id") +// private Set idStrSet; + + //薪资核算记录的id") + private Long salaryAcctRecordId; +} diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java index 9c239617f..7f1bbf645 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java @@ -10,6 +10,7 @@ import lombok.experimental.Accessors; import java.util.Collection; import java.util.Date; +import java.util.List; /** * 薪资核算表 @@ -88,6 +89,11 @@ public class SalaryAcctRecordPO { */ private Date updateTime; + /** + * 锁定的薪资项目 + */ + private List lockSalaryItemIds; + //查询条件------------------------------- Collection ids; diff --git a/src/com/engine/salary/enums/salaryaccounting/LockStatusEnum.java b/src/com/engine/salary/enums/salaryaccounting/LockStatusEnum.java new file mode 100644 index 000000000..316f9aa91 --- /dev/null +++ b/src/com/engine/salary/enums/salaryaccounting/LockStatusEnum.java @@ -0,0 +1,37 @@ +package com.engine.salary.enums.salaryaccounting; + +import com.engine.salary.enums.BaseEnum; + + +public enum LockStatusEnum implements BaseEnum { + DEFAULT("DEFAULT", "默认", 0), + LOCK("LOCK", "锁定", 0), + UNLOCK("UNLOCK", "未锁定", 0); + + private String value; + + private String defaultLabel; + + private int labelId; + + LockStatusEnum(String value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + @Override + public String getValue() { + return value; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } +} diff --git a/src/com/engine/salary/handle/SalaryListTypeHandler.java b/src/com/engine/salary/handle/SalaryListTypeHandler.java new file mode 100644 index 000000000..06396ed7c --- /dev/null +++ b/src/com/engine/salary/handle/SalaryListTypeHandler.java @@ -0,0 +1,49 @@ +package com.engine.salary.handle; + +import com.alibaba.fastjson.JSONArray; +import com.huawei.shade.com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +/** + * 集合的转换 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Slf4j +public class SalaryListTypeHandler extends BaseTypeHandler { + + @Override + public void setNonNullParameter(PreparedStatement preparedStatement, int i, List list, JdbcType jdbcType) throws SQLException { + preparedStatement.setString(i, JSON.toJSONString(list)); + } + + @Override + public List getNullableResult(ResultSet resultSet, String s) throws SQLException { + JSONArray jsonArray = JSONArray.parseArray(resultSet.getString(s)); + return jsonArray == null ? new ArrayList<>() : jsonArray; + } + + @Override + public List getNullableResult(ResultSet resultSet, int i) throws SQLException { + JSONArray jsonArray = JSONArray.parseArray(resultSet.getString(i)); + return jsonArray == null ? new ArrayList<>() : jsonArray; + } + + @Override + public List getNullableResult(CallableStatement callableStatement, int i) throws SQLException { + JSONArray jsonArray = JSONArray.parseArray(callableStatement.getString(i)); + return jsonArray == null ? new ArrayList<>() : jsonArray; + } +} diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.java index eda9abadb..4dfe0485b 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.java +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.java @@ -74,4 +74,6 @@ public interface SalaryAcctRecordMapper { void deleteByIds(@Param("ids") Collection ids); List listByCreateDate(@Param(value = "createRange") LocalDateRange createRange, @Param(value = "salarySobIds") Set salarySobIds); + + void updateLockSalaryItemIds(SalaryAcctRecordPO salaryAcctRecord); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml index 123da569a..70b128008 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml @@ -14,11 +14,14 @@ + - t.id + t + . + id , t.salary_month , t.tax_cycle , t.salary_sob_id @@ -30,6 +33,7 @@ , t.update_time , t.delete_type , t.tenant_key + ,t.lock_salary_item_ids @@ -222,9 +226,10 @@ - - + select hrsa_salary_acct_record_id.currval from dual INSERT INTO hrsa_salary_acct_record @@ -387,4 +392,15 @@ + + + + UPDATE hrsa_salary_acct_record + + lock_salary_item_ids = + #{lockSalaryItemIds, jdbcType=ARRAY, typeHandler=com.engine.salary.handle.SalaryListTypeHandler}, + + WHERE id = #{id} AND delete_type = 0 + + \ No newline at end of file diff --git a/src/com/engine/salary/service/SalaryAcctRecordService.java b/src/com/engine/salary/service/SalaryAcctRecordService.java index 36ab36590..c1b903a68 100644 --- a/src/com/engine/salary/service/SalaryAcctRecordService.java +++ b/src/com/engine/salary/service/SalaryAcctRecordService.java @@ -180,4 +180,6 @@ public interface SalaryAcctRecordService { * @return */ List listByStatusAndEmployeeId(SalaryAcctRecordStatusEnum status, Long employeeId); + + void updateLockSalaryItemIds(SalaryAcctRecordPO salaryAcctRecord); } diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index 1e9ab320e..6a9a0ea6a 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -7,6 +7,7 @@ import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; import com.engine.salary.entity.salaryacct.param.SalaryAcctCalculateParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctResultSaveParam; +import com.engine.salary.entity.salaryacct.param.SalaryAcctResultUpdateLockStatusParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.util.page.PageInfo; @@ -75,6 +76,7 @@ public interface SalaryAcctResultService { /** * 合计行 + * * @param queryParam * @return */ @@ -107,7 +109,7 @@ public interface SalaryAcctResultService { /** * 保存 * - * @param saveParam 保存参数 + * @param saveParam 保存参数 */ void save(SalaryAcctResultSaveParam saveParam); @@ -156,4 +158,11 @@ public interface SalaryAcctResultService { * @return */ List listBySalaryAcctRecordIdsAndTaxAgentIds(Collection salaryAcctRecordIds, Collection taxAgentIds); + + /** + * 更新锁定状态 + * + * @param updateParam + */ + void updateLockStatusByParam(SalaryAcctResultUpdateLockStatusParam updateParam); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index c793713d9..377b963dc 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -27,6 +27,7 @@ import com.engine.salary.util.SalaryEntityUtil; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; @@ -102,7 +103,6 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc @Override public void calculate(SalaryAcctCalculateBO salaryAcctCalculateBO, DataCollectionEmployee simpleEmployee) { - log.info("开始核算V3{}", salaryAcctCalculateBO); Date now = new Date(); try { // 数据库字段加密用 @@ -132,6 +132,8 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc // 8、查询薪资核算人员的薪资核算结果 Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId); List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); + //核算锁定的值 + Map salaryAcctLockResultPOS = MapUtils.emptyIfNull(salaryAcctCalculateBO.getSalaryAcctLockResultPOS()); // 9、查询相同税款所属期内涉及合并计税的其他薪资核算结果 Set otherSalaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getOtherSalaryAcctRecordPOS(), SalaryAcctRecordPO::getId); List otherSalaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndEmployeeIds(otherSalaryAcctRecordIds, employeeIds); @@ -190,6 +192,12 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc resultValue = handleConsolidatedTax(resultValue, salaryItemPO, salaryAcctCalculateBO, otherSalaryAcctEmployeePOMap.get(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId()), otherSalaryAcctResultPOMap.get(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId())); // 处理小数点 resultValue = SalaryAcctFormulaBO.roundResultValue(resultValue, salaryItemPO); + + //是否锁定 + if (salaryAcctLockResultPOS.containsKey(salaryItemId) && salaryAcctLockResultPOS.get(salaryItemId) != null) { + resultValue = salaryAcctLockResultPOS.get(salaryItemId).getResultValue(); + } + // 将已经计算过的薪资项目的值转换成公式变量的值添加到集合中 String key = SalaryFormulaReferenceEnum.SALARY_ITEM.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + salaryItemPO.getCode(); formulaVarValueMap.put(key, resultValue); @@ -246,10 +254,14 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc try { List formulaVars = ExpressFormulaBO.buildFormulaVar4Accounting(expressFormula, formulaVarValueMap); Object run = getFormulaRunService(user).run(expressFormula, formulaVars, simpleEmployee); - return run == null ? StringUtils.EMPTY : run.toString(); + return run.toString(); } catch (Exception e) { log.error("express execute fail ", e); } + + if ("number".equals(expressFormula.getReturnType())) { + return "0"; + } return StringUtils.EMPTY; } @@ -260,7 +272,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc */ private String handleConsolidatedTax(String resultValue, SalaryItemPO salaryItemPO, SalaryAcctCalculateBO salaryAcctCalculateBO, List otherSalaryAcctEmployeePOS, List otherSalaryAcctResultPOS) { // 如果相同税款所属期内没有其他薪资核算人员,就不存在合并计税 - if (CollectionUtils.isEmpty(otherSalaryAcctEmployeePOS)||CollectionUtils.isEmpty(otherSalaryAcctResultPOS)) { + if (CollectionUtils.isEmpty(otherSalaryAcctEmployeePOS) || CollectionUtils.isEmpty(otherSalaryAcctResultPOS)) { return resultValue; } // 相同税款所属期内其他薪资核算记录 diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 5f9ff6c7d..a7347ea31 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -658,6 +658,11 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe return getSalaryAcctRecordMapper().listSome(SalaryAcctRecordPO.builder().status(status.getValue()).creator(employeeId).build()); } + @Override + public void updateLockSalaryItemIds(SalaryAcctRecordPO salaryAcctRecord) { + getSalaryAcctRecordMapper().updateLockSalaryItemIds(salaryAcctRecord); + } + /** * 开启分权后需要判断是否能查看对应的薪资核算记录 diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index d6b21f47a..600f13d9c 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -17,10 +17,7 @@ import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctProgressDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; -import com.engine.salary.entity.salaryacct.param.SalaryAcctCalculateParam; -import com.engine.salary.entity.salaryacct.param.SalaryAcctEmployeeQueryParam; -import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam; -import com.engine.salary.entity.salaryacct.param.SalaryAcctResultSaveParam; +import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; @@ -30,6 +27,8 @@ import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.*; import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.SalaryValueTypeEnum; +import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; @@ -43,6 +42,7 @@ import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import com.weaver.util.threadPool.ThreadPoolUtil; import com.weaver.util.threadPool.constant.ModulePoolEnum; import com.weaver.util.threadPool.entity.LocalRunnable; @@ -59,6 +59,7 @@ import java.util.*; import java.util.concurrent.BlockingDeque; import java.util.concurrent.CountDownLatch; import java.util.concurrent.LinkedBlockingDeque; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -515,7 +516,6 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public void calculate(SalaryAcctCalculateParam calculateParam, DataCollectionEmployee simpleEmployee) { - log.info("开始核算V2{}", calculateParam); try { // 1、查询薪资核算记录 SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(calculateParam.getSalaryAcctRecordId()); @@ -546,6 +546,19 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe Map welfareColumns = getSIAccountService(user).welfareColumns(); // 7、查询考勤引用的所有字段 List attendQuoteFieldListDTOS = getAttendQuoteFieldService(user).listAll(); + + //核算锁定值 + List lockSalaryItemIds = salaryAcctRecordPO.getLockSalaryItemIds(); + Map acctResults = new HashMap<>(); + if (CollectionUtils.isNotEmpty(lockSalaryItemIds)) { + List acctResultPOS = listBySalaryAcctRecordIds(Collections.singleton(calculateParam.getSalaryAcctRecordId())); + acctResults = Optional.ofNullable(acctResultPOS) + .orElse(new ArrayList<>()) + .stream() + .filter(po -> lockSalaryItemIds.contains(po.getSalaryItemId())) + .collect(Collectors.toMap(SalaryAcctResultPO::getSalaryItemId, Function.identity())); + } + // 8、查询公式详情 Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); formulaIds.addAll(SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getFormulaId)); @@ -577,7 +590,23 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe String calculateKey = UUID.randomUUID().toString(); // 12.4、多线程运算,运算结果存放在临时表中 for (List acctEmployeePOS : partition) { - SalaryAcctCalculateBO salaryAcctCalculateBO = new SalaryAcctCalculateBO().setSalaryAcctRecordPO(salaryAcctRecordPO).setSalarySobPO(salarySobPO).setSalarySobCycleDTO(salarySobCycleDTO).setOtherSalaryAcctRecordPOS(otherSalaryAcctRecordPOS).setSalarySobItemPOS(salarySobItemPOS).setSalaryItemIdWithPriorityList(salarySobItemsWithPriority).setExpressFormulas(expressFormulas).setSalaryItemPOS(salaryItemPOS).setSalarySobAdjustRulePOS(salarySobAdjustRulePOS).setWelfareColumns(MapUtils.emptyIfNull(welfareColumns)).setAttendQuoteFieldListDTOS(attendQuoteFieldListDTOS).setSalaryAcctEmployeePOS(acctEmployeePOS).setChildMonitor(childMonitor).setResults(calculateResults).setCalculateKey(calculateKey); + SalaryAcctCalculateBO salaryAcctCalculateBO = new SalaryAcctCalculateBO() + .setSalaryAcctRecordPO(salaryAcctRecordPO) + .setSalarySobPO(salarySobPO) + .setSalarySobCycleDTO(salarySobCycleDTO) + .setOtherSalaryAcctRecordPOS(otherSalaryAcctRecordPOS) + .setSalaryAcctLockResultPOS(MapUtils.emptyIfNull(acctResults)) + .setSalarySobItemPOS(salarySobItemPOS) + .setSalaryItemIdWithPriorityList(salarySobItemsWithPriority) + .setExpressFormulas(expressFormulas) + .setSalaryItemPOS(salaryItemPOS) + .setSalarySobAdjustRulePOS(salarySobAdjustRulePOS) + .setWelfareColumns(MapUtils.emptyIfNull(welfareColumns)) + .setAttendQuoteFieldListDTOS(attendQuoteFieldListDTOS) + .setSalaryAcctEmployeePOS(acctEmployeePOS) + .setChildMonitor(childMonitor) + .setResults(calculateResults) + .setCalculateKey(calculateKey); LocalRunnable localRunnable = new LocalRunnable() { @Override public void execute() { @@ -667,4 +696,91 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } return SalaryAcctResultPOEncrypt.decryptList(getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctRecordIds(salaryAcctRecordIds).taxAgentIds(taxAgentIds).build())); } + + +// /** +// * 查询薪资核算人员 +// * +// * @param queryParam +// * @param salaryAcctRecord +// * @return +// */ +// private List querySalaryAcctEmployee(SalaryAcctResultListContext salaryAcctResultListContext, SalaryAcctResultQueryParam queryParam, SalaryAcctRecordPO salaryAcctRecord) { +// // 构建薪资核算人员的查询参数 +// SalaryAcctEmployeeQueryParam salaryAcctEmployeeListQueryParam = new SalaryAcctEmployeeQueryParam(); +// BeanUtils.copyProperties(queryParam, salaryAcctEmployeeListQueryParam); +// // 查询薪资核算人员 +// List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listByParam(salaryAcctEmployeeListQueryParam); +// // 查询相同税款所属期内的薪资核算人员 +// List sameTaxCycleSalaryAcctEmployees = salaryAcctEmployeeService +// .listSameTaxCycle(salaryAcctEmployees, SalaryDateUtil.getFormatYearMonth(salaryAcctRecord.getTaxCycle())); +// Set sameTaxCycleKeySet = SalaryEntityUtil.properties(sameTaxCycleSalaryAcctEmployees, o -> o.getEmployeeId() + "-" + o.getTaxAgentId()); +// salaryAcctResultListContext.setSameTaxCycleKeySet(sameTaxCycleKeySet); +// // 过滤合并计税的人员 +// if (StringUtils.isNotEmpty(queryParam.getConsolidatedTaxation())) { +// salaryAcctEmployees = salaryAcctEmployees.stream() +// .filter(salaryAcctEmployeePO -> sameTaxCycleKeySet.contains(salaryAcctEmployeePO.getEmployeeId() + "-" + salaryAcctEmployeePO.getTaxAgentId())) +// .collect(Collectors.toList()); +// } +// // 根据权限过滤 +// return salaryAcctEmployeeService.filterByAuthority(salaryAcctEmployees, employeeId); +// } + + @Override + public void updateLockStatusByParam(SalaryAcctResultUpdateLockStatusParam updateParam) { + // 查询薪资核算记录 + SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(updateParam.getSalaryAcctRecordId()); + if(CollectionUtils.isEmpty(salaryAcctRecord.getLockSalaryItemIds())){ + salaryAcctRecord.setLockSalaryItemIds(new ArrayList<>()); + } + List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(updateParam.getSalaryAcctRecordId()); + if (CollectionUtils.isEmpty(salaryAcctEmployees)) { + return; + } + // 查询薪资核算结果 + Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployees, SalaryAcctEmployeePO::getId); + List salaryAcctResultValues = this.listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); + Map salaryAcctResultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); + // 值可以锁定的薪资项目 + Set salaryItemIds = canLockSalaryItemIds(salaryAcctRecord.getSalarySobId()); +// if (Objects.nonNull(updateParam.getSalaryItemId())) { +// if (!salaryItemIds.contains(updateParam.getSalaryItemId())) { +// return; +// } +// salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); +// } + salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); + if (updateParam.getLockStatus() == LockStatusEnum.LOCK) { + salaryAcctRecord.getLockSalaryItemIds().addAll(salaryItemIds); + } else { + salaryAcctRecord.getLockSalaryItemIds().removeAll(salaryItemIds); + } + getSalaryAcctRecordService(user).updateLockSalaryItemIds(salaryAcctRecord); + + } + + private Set canLockSalaryItemIds(Long salarySobId) { + // 值可以锁定的薪资项目 + Set salaryItemIds = Sets.newHashSet(); + // 查询薪资核算记录所用的薪资账套的薪资项目 + List salarySobItems = Lists.newArrayList(); + SalarySobItemAggregateDTO salarySobItemAggregate = getSalarySobItemService(user).getAggregateBySalarySobId(salarySobId); + for (SalarySobItemIncomeCategoryDTO incomeCategory : salarySobItemAggregate.getIncomeCategories()) { + for (SalarySobItemGroupDTO itemGroup : incomeCategory.getItemGroups()) { + salarySobItems.addAll(itemGroup.getItems()); + } + salarySobItems.addAll(incomeCategory.getItems()); + } + for (SalarySobItemDTO salarySobItem : salarySobItems) { + if (Objects.equals(salarySobItem.getValueType(), SalaryValueTypeEnum.FORMULA.getValue()) && salarySobItem.isCanEdit()) { + salaryItemIds.add(salarySobItem.getSalaryItemId()); + } + } +// for (SalarySobItemDTO backCalcItem : salarySobItemAggregate.getBackCalcItems()) { +// if (Objects.equals(backCalcItem.getValueType(), SalaryValueTypeEnum.FORMULA.getValue()) && backCalcItem.isCanEdit()) { +// salaryItemIds.add(backCalcItem.getSalaryItemId()); +// } +// } + return salaryItemIds; + } } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 4260af162..20eae426e 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -360,7 +360,6 @@ public class SalaryAcctController { } - // **********************************薪资核算人员相关 end*********************************/ // **********************************薪资核算结果 start*********************************/ @@ -411,6 +410,16 @@ public class SalaryAcctController { return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::save, param); } + + //更新薪资核算结果的锁定状态 + @POST + @Path("/acctresult/updateLockStatus") + @Produces(MediaType.APPLICATION_JSON) + public String updateLockStatus(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultUpdateLockStatusParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::updateLockStatusByParam, param); + } + //薪资核算 @POST @Path("/acctresult/accounting") diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index 53bae8140..6cfc09547 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -12,6 +12,7 @@ import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; import com.engine.salary.entity.salaryacct.param.SalaryAcctCalculateParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctResultSaveParam; +import com.engine.salary.entity.salaryacct.param.SalaryAcctResultUpdateLockStatusParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.*; @@ -142,31 +143,6 @@ public class SalaryAcctResultWrapper extends Service { return datas; } - /** - * 获取薪资核算列表的高级搜索 - * - * @return - */ -// public WeaSearchCondition getSearchCondition(String tenantKey) { -// SalaryAcctResultSearchConditionDTO searchConditionDTO = new SalaryAcctResultSearchConditionDTO(); -// WeaSearchCondition searchCondition = SalaryFormatUtil.getInstance() -// .buildCondition(SalaryAcctResultSearchConditionDTO.class, searchConditionDTO, "SalaryAcctResultCondition"); -// // 查询个税扣缴义务人 -// List taxAgentPOS = getTaxAgentService(user).listAll(tenantKey); -// List weaSearchConditionOptions = taxAgentPOS.stream() -// .map(taxAgentPO -> new WeaSearchConditionOption(String.valueOf(taxAgentPO.getId()), taxAgentPO.getName())) -// .collect(Collectors.toList()); -// // 给查询条件中的个税扣缴义务人填充下拉项 -// searchCondition.getItems().forEach((k, v) -> { -// if (StringUtils.equals("taxAgentId", k)) { -// v.setOptions(weaSearchConditionOptions); -// } -// }); -// // 其他条件不要 -// searchCondition.getGroups().remove(1); -// return searchCondition; -// } - /** * 薪资核算结果详情 * @@ -208,6 +184,15 @@ public class SalaryAcctResultWrapper extends Service { getSalaryAcctResultService(user).save(saveParam); } + /** + * 更新薪资核算结果的值的锁定状态 + * + * @param updateParam + */ + public void updateLockStatusByParam(SalaryAcctResultUpdateLockStatusParam updateParam) { + getSalaryAcctResultService(user).updateLockStatusByParam(updateParam); + } + /** * 薪资核算-核算 * From 1eaef7fcd49a4091a4e3a27a11bd495280ac7747 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 17 Nov 2022 09:53:40 +0800 Subject: [PATCH 07/18] =?UTF-8?q?fix=E5=88=86=E9=A1=B5=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java index a1c86cebb..1a946e816 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java @@ -319,9 +319,8 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt //所有调整记录 List listAll = getSalaryArchiveItemService(user).salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam.builder().build(), salaryItemIds); - //根据条件分页查询调整记录 - PageInfo adjustlistByParamPage = getSalaryArchiveItemService(user).salaryItemAdjustRecordListPage(SalaryItemAdjustRecordQueryParam.builder().salaryArchiveId(byId.getSalaryArchiveId()).build(), salaryItemIds); - List adjustPageList = adjustlistByParamPage.getList(); + //根据条件查询调整记录 + List adjustPageList = getSalaryArchiveItemService(user).salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam.builder().salaryArchiveId(byId.getSalaryArchiveId()).build(), salaryItemIds); List resultList = Lists.newArrayList(); adjustPageList.forEach(m -> { From 5743fa2162d654b1aba3004dc37530364ae35e1c Mon Sep 17 00:00:00 2001 From: fcli Date: Wed, 16 Nov 2022 11:08:45 +0800 Subject: [PATCH 08/18] =?UTF-8?q?feat:=20=E5=85=B6=E4=BB=96=E9=99=84?= =?UTF-8?q?=E5=8A=A0=E6=89=A3=E9=99=A4=E6=B2=BF=E7=94=A8=E4=B8=8A=E6=9C=88?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/OtherDeductionExtendLastParam.java | 21 ++++ .../salary/service/OtherDeductionService.java | 7 +- .../impl/OtherDeductionServiceImpl.java | 105 ++++++++++++++---- .../engine/salary/util/SalaryDateUtil.java | 25 +++++ .../salary/web/OtherDeductionController.java | 14 ++- .../salary/wrapper/OtherDeductionWrapper.java | 35 ++++-- 6 files changed, 168 insertions(+), 39 deletions(-) create mode 100644 src/com/engine/salary/entity/datacollection/param/OtherDeductionExtendLastParam.java diff --git a/src/com/engine/salary/entity/datacollection/param/OtherDeductionExtendLastParam.java b/src/com/engine/salary/entity/datacollection/param/OtherDeductionExtendLastParam.java new file mode 100644 index 000000000..6277c0f63 --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/param/OtherDeductionExtendLastParam.java @@ -0,0 +1,21 @@ +package com.engine.salary.entity.datacollection.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class OtherDeductionExtendLastParam { + + private String declareMonth; + + private LocalDateTime yearMonthTime; + + private Integer taxAgentId; +} diff --git a/src/com/engine/salary/service/OtherDeductionService.java b/src/com/engine/salary/service/OtherDeductionService.java index 9e691d559..e77c70995 100644 --- a/src/com/engine/salary/service/OtherDeductionService.java +++ b/src/com/engine/salary/service/OtherDeductionService.java @@ -2,10 +2,7 @@ package com.engine.salary.service; import com.engine.salary.entity.datacollection.dto.OtherDeductionListDTO; import com.engine.salary.entity.datacollection.dto.OtherDeductionRecordDTO; -import com.engine.salary.entity.datacollection.param.AddUpDeductionRecordDeleteParam; -import com.engine.salary.entity.datacollection.param.OtherDeductionImportParam; -import com.engine.salary.entity.datacollection.param.OtherDeductionParam; -import com.engine.salary.entity.datacollection.param.OtherDeductionQueryParam; +import com.engine.salary.entity.datacollection.param.*; import com.engine.salary.entity.datacollection.po.OtherDeductionPO; import com.engine.salary.util.page.PageInfo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -113,4 +110,6 @@ public interface OtherDeductionService { * 获取数据 */ OtherDeductionRecordDTO getOtherDeduction(OtherDeductionParam otherDeductionParam); + + String extendToLastMonth(OtherDeductionExtendLastParam param); } diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index 1529e9966..e5ae380b8 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -1,10 +1,12 @@ package com.engine.salary.service.impl; +import com.alibaba.fastjson.JSONObject; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.EmployBiz; import com.engine.salary.biz.OtherDeductionBiz; +import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.encrypt.datacollection.OtherDeductionListDTOEncrypt; import com.engine.salary.encrypt.datacollection.OtherDeductionRecordDTOEncrypt; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -49,6 +51,7 @@ import weaver.hrm.User; import java.io.InputStream; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; import java.time.YearMonth; import java.util.*; import java.util.stream.Collectors; @@ -563,12 +566,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction // 获取所有个税扣缴义务人 Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); OtherDeductionPO byId = OtherDeductionBiz.getById(otherDeductionParam.getId()); - if(byId == null){ + if (byId == null) { throw new SalaryRunTimeException("该数据不存在!"); } Long taxAgentId = byId.getTaxAgentId(); - boolean canEdit = taxAgentList.stream().anyMatch(t -> Objects.equals(t.getTaxAgentId() , taxAgentId)); - if(!canEdit){ + boolean canEdit = taxAgentList.stream().anyMatch(t -> Objects.equals(t.getTaxAgentId(), taxAgentId)); + if (!canEdit) { //没有编辑权限 throw new SalaryRunTimeException("该个税扣缴义务人无权限编辑此数据!"); } @@ -577,8 +580,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction // 判断是否有核算过 if (CollectionUtils.isNotEmpty(salaryAcctEmployees)) { Optional optionalAcctEmp = salaryAcctEmployees.stream().filter(f -> f.getEmployeeId().equals(otherDeductionParam.getEmployeeId()) && f.getTaxAgentId().equals(otherDeductionParam.getTaxAgentId())).findFirst(); - if (optionalAcctEmp.isPresent()) { - throw new SalaryRunTimeException("该年月这条数据已经核算过,不可进行编辑!"); + if (optionalAcctEmp.isPresent()) { + throw new SalaryRunTimeException("该年月这条数据已经核算过,不可进行编辑!"); } } ArrayList updateList = new ArrayList<>(); @@ -622,8 +625,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction .declareMonth(declareMonth).build(); //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - boolean employeeSameId = employees.stream().anyMatch(e -> Objects.equals(e.getEmployeeId() , otherDeductionParam.getEmployeeId())); - if(!employeeSameId){ + boolean employeeSameId = employees.stream().anyMatch(e -> Objects.equals(e.getEmployeeId(), otherDeductionParam.getEmployeeId())); + if (!employeeSameId) { throw new SalaryRunTimeException("员工信息不存在"); } po.setEmployeeId(otherDeductionParam.getEmployeeId()); @@ -655,7 +658,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction String deductionAllowedDonation = otherDeductionParam.getDeductionAllowedDonation(); po.setDeductionAllowedDonation(deductionAllowedDonation); - //fixme 分权判断 + //fixme 分权判断 // if (openDevolution) { // OtherDeductionPO finalPoE = po; // Optional optionalTaxAgentEmp = taxAgentEmployees.stream().filter(f -> f.getEmployeeId().equals(finalPoE.getEmployeeId())).findFirst(); @@ -694,15 +697,15 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(declareMonthStr); // 判断是否有核算过 List deleteList = new ArrayList<>(); - for(int i=0; i first = taxAgentList.stream().filter(m -> Objects.equals(m.getTaxAgentId() , byId.getTaxAgentId())).findFirst(); - if(!first.isPresent()){ + Optional first = taxAgentList.stream().filter(m -> Objects.equals(m.getTaxAgentId(), byId.getTaxAgentId())).findFirst(); + if (!first.isPresent()) { throw new SalaryRunTimeException("个税扣缴义务人不存在或不在权限范围内"); } // 判断用户是否存在 @@ -726,32 +729,32 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); List taxAgentIds = taxAgentList.stream().map(TaxAgentManageRangeEmployeeDTO::getTaxAgentId).collect(Collectors.toList()); OtherDeductionBiz otherDeductionBiz = new OtherDeductionBiz(); - Date declareMonthDate =null; + Date declareMonthDate = null; try { - declareMonthDate = sdf.parse(declareMonthStr+"-01"); - }catch (Exception e){ + declareMonthDate = sdf.parse(declareMonthStr + "-01"); + } catch (Exception e) { throw new SalaryRunTimeException("日期异常"); } OtherDeductionPO queryParam = null; - if(deleteParam.getTaxAgentId() != null && (!deleteParam.getTaxAgentId().equals(""))){ + if (deleteParam.getTaxAgentId() != null && (!deleteParam.getTaxAgentId().equals(""))) { // 设置了个税扣缴义务人 Long taxAgentId = SalaryEntityUtil.string2Long(deleteParam.getTaxAgentId()); - boolean canDelete = taxAgentIds.stream().anyMatch(t -> Objects.equals(t , taxAgentId)); - if(!canDelete){ + boolean canDelete = taxAgentIds.stream().anyMatch(t -> Objects.equals(t, taxAgentId)); + if (!canDelete) { throw new SalaryRunTimeException("个税扣缴义务人不存在或不在权限范围内!"); } ArrayList tai = new ArrayList<>(); tai.add(taxAgentId); - queryParam = OtherDeductionPO.builder().declareMonth(declareMonthDate).taxAgentIds(tai).build(); - }else { + queryParam = OtherDeductionPO.builder().declareMonth(declareMonthDate).taxAgentIds(tai).build(); + } else { queryParam = OtherDeductionPO.builder().declareMonth(declareMonthDate).taxAgentIds(taxAgentIds).build(); } // 获取所有想要删除的数据 List list = otherDeductionBiz.listSome(queryParam); // 获取已经核算的数据 List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(declareMonthStr); - for(OtherDeductionPO item : list){ + for (OtherDeductionPO item : list) { if (CollectionUtils.isNotEmpty(salaryAcctEmployees)) { Optional optionalAcctEmp = salaryAcctEmployees.stream().filter(f -> f.getEmployeeId().equals(item.getEmployeeId()) && f.getTaxAgentId().equals(item.getTaxAgentId())).findFirst(); if (optionalAcctEmp.isPresent()) { @@ -775,16 +778,72 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction List list = getOtherDeductionMapper().recordList(build); OtherDeductionRecordDTOEncrypt.decryptOtherDeductionRecordDTOList(list); - if(list==null || list.size()==0){ + if (list == null || list.size() == 0) { throw new SalaryRunTimeException("该数据不存在!"); } String taxAgentName = list.get(0).getTaxAgentName(); - if(!taxAgentNames.contains(taxAgentName)){ + if (!taxAgentNames.contains(taxAgentName)) { throw new SalaryRunTimeException("您无权查看该数据!"); } return list.get(0); } + @Override + public String extendToLastMonth(OtherDeductionExtendLastParam param) { + // 查找到所有个税扣缴义务人 + Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); + Collection taxAgentPOS; + if (needAuth) { + taxAgentPOS = getTaxAgentService(user).listAllTaxAgentsAsAdmin((long) user.getUID()); + } else { + taxAgentPOS = getTaxAgentService(user).listAll(); + } + List taxAgentIds = taxAgentPOS.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); + + //查询上月数据 + LocalDateTime lastMonth = param.getYearMonthTime().minusMonths(1); + OtherDeductionQueryParam queryParam = OtherDeductionQueryParam.builder() + .taxAgentIds(taxAgentIds) + .declareMonthDate(Collections.singletonList( + SalaryDateUtil.toDate(lastMonth)) + ).build(); + List lastMonthInfo = getOtherDeductionMapper().list(queryParam); + + // 查询当前月id + queryParam.setDeclareMonthDate(Collections.singletonList( + SalaryDateUtil.toDate(param.getYearMonthTime()) + )); + Map updateIdMap = getOtherDeductionMapper() + .list(queryParam).stream() + .collect(Collectors.toMap(i -> i.getEmployeeId()+"" + i.getTaxAgentId(), OtherDeductionListDTO::getId)); + + List insertInfo = new ArrayList<>(); + List updatetInfo = new ArrayList<>(); + for (OtherDeductionListDTO dto : lastMonthInfo) { + OtherDeductionPO po + = JSONObject.parseObject(JSONObject.toJSONString(dto), OtherDeductionPO.class); + po.setDeclareMonth(SalaryDateUtil.toDate(param.getYearMonthTime())); + po.setUpdateTime(new Date()); + po.setId(null); + po.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + boolean hasOld = updateIdMap.containsKey(po.getEmployeeId() + "" + po.getTaxAgentId()); + if (hasOld) { + po.setId(updateIdMap.get(po.getEmployeeId() + "" + po.getTaxAgentId())); + updatetInfo.add(po); + } else { + po.setCreator((long) user.getUID()); + po.setCreateTime(new Date()); + insertInfo.add(po); + } + } + List> list = Lists.partition(insertInfo, 1000); + list.forEach(l->getOtherDeductionMapper().insertData(l)); + + List> updateList = Lists.partition(updatetInfo, 1000); + list.forEach(l->getOtherDeductionMapper().updateData(l)); + return ""; + } + @Override public XSSFWorkbook downloadTemplate(OtherDeductionQueryParam param) { // 1.工作簿名称 diff --git a/src/com/engine/salary/util/SalaryDateUtil.java b/src/com/engine/salary/util/SalaryDateUtil.java index c34b18dbc..024780761 100644 --- a/src/com/engine/salary/util/SalaryDateUtil.java +++ b/src/com/engine/salary/util/SalaryDateUtil.java @@ -1,5 +1,6 @@ package com.engine.salary.util; +import cn.hutool.core.util.StrUtil; import com.engine.salary.common.LocalDateRange; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -528,6 +529,30 @@ public class SalaryDateUtil { return inDataRange; } + /** + * 转换时间对象 + * @see SalaryDateUtil#toDate(LocalDateTime, String) + * @param dateTime LocalDateTime + * @return Date + */ + public static Date toDate(LocalDateTime dateTime) { + return toDate(dateTime, null); + } + + + /** + * 转换时间对象 + * @param dateTime LocalDateTime + * @param offset 时区,e.g. +8 + * @return Date + */ + public static Date toDate(LocalDateTime dateTime, String offset) { + if (dateTime == null) { + return null; + } + ZoneId zoneOffset = StrUtil.isNotEmpty(offset) ? ZoneOffset.of(offset) : ZoneOffset.systemDefault(); + return Date.from(dateTime.atZone(zoneOffset).toInstant()); + } } diff --git a/src/com/engine/salary/web/OtherDeductionController.java b/src/com/engine/salary/web/OtherDeductionController.java index 91a7401a7..d930daa5a 100644 --- a/src/com/engine/salary/web/OtherDeductionController.java +++ b/src/com/engine/salary/web/OtherDeductionController.java @@ -3,10 +3,7 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.datacollection.dto.OtherDeductionListDTO; import com.engine.salary.entity.datacollection.dto.OtherDeductionRecordDTO; -import com.engine.salary.entity.datacollection.param.AddUpDeductionRecordDeleteParam; -import com.engine.salary.entity.datacollection.param.OtherDeductionImportParam; -import com.engine.salary.entity.datacollection.param.OtherDeductionParam; -import com.engine.salary.entity.datacollection.param.OtherDeductionQueryParam; +import com.engine.salary.entity.datacollection.param.*; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.page.PageInfo; @@ -346,5 +343,12 @@ public class OtherDeductionController { return new ResponseResult>(user).run(getOtherDeductionWrapper(user)::deleteAllData, otherDeductionDeleteParam); } - + @POST + @Path("/extendToLastMonth") + @Produces(MediaType.APPLICATION_JSON) + public String extendToLastMonth(@Context HttpServletRequest request, @Context HttpServletResponse response, + @RequestBody OtherDeductionExtendLastParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getOtherDeductionWrapper(user)::extendToLastMonth, param); + } } diff --git a/src/com/engine/salary/wrapper/OtherDeductionWrapper.java b/src/com/engine/salary/wrapper/OtherDeductionWrapper.java index 1430e7702..0c4cf132e 100644 --- a/src/com/engine/salary/wrapper/OtherDeductionWrapper.java +++ b/src/com/engine/salary/wrapper/OtherDeductionWrapper.java @@ -8,10 +8,7 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.datacollection.dto.OtherDeductionListDTO; import com.engine.salary.entity.datacollection.dto.OtherDeductionRecordDTO; -import com.engine.salary.entity.datacollection.param.AddUpDeductionRecordDeleteParam; -import com.engine.salary.entity.datacollection.param.OtherDeductionImportParam; -import com.engine.salary.entity.datacollection.param.OtherDeductionParam; -import com.engine.salary.entity.datacollection.param.OtherDeductionQueryParam; +import com.engine.salary.entity.datacollection.param.*; import com.engine.salary.entity.datacollection.po.OtherDeductionPO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.OtherDeductionService; @@ -22,9 +19,13 @@ import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; +import lombok.extern.slf4j.Slf4j; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.User; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -35,16 +36,20 @@ import java.util.Map; * @Author: wangxiangzhong * @Date: 2022/3/14 16:09 */ +@Slf4j public class OtherDeductionWrapper extends Service { private OtherDeductionService getOtherDeductionService(User user) { return ServiceUtil.getService(OtherDeductionServiceImpl.class, user); } + private TaxAgentService getTaxAgentV2Service(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } + private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } + /** * 数据采集-其他免税扣除列表的高级搜索 * @@ -178,7 +183,7 @@ public class OtherDeductionWrapper extends Service { Long id = queryParam.getOtherTaxExemptDeductionId(); OtherDeductionPO po = getOtherDeductionService(user).getById(id); if (po == null) { - throw new SalaryRunTimeException(String.format(SalaryI18nUtil.getI18nLabel( 100415, "其他免税扣除不存在") + "[id:%s]", id)); + throw new SalaryRunTimeException(String.format(SalaryI18nUtil.getI18nLabel(100415, "其他免税扣除不存在") + "[id:%s]", id)); } return getOtherDeductionService(user).exportDetail(queryParam); } @@ -196,14 +201,14 @@ public class OtherDeductionWrapper extends Service { /** * 预览 */ - public Map preview(OtherDeductionImportParam importParam){ + public Map preview(OtherDeductionImportParam importParam) { return getOtherDeductionService(user).preview(importParam); } /** * 导入数据 */ - public Map importData(OtherDeductionImportParam importParam){ + public Map importData(OtherDeductionImportParam importParam) { return getOtherDeductionService(user).importData(importParam); } @@ -242,4 +247,20 @@ public class OtherDeductionWrapper extends Service { public OtherDeductionRecordDTO getOtherDeduction(OtherDeductionParam otherDeductionParam) { return getOtherDeductionService(user).getOtherDeduction(otherDeductionParam); } + + public String extendToLastMonth(OtherDeductionExtendLastParam param) { + LocalDateTime localDate = null; + try { + localDate = LocalDate.parse(param.getDeclareMonth() + "-01", + DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay(); + param.setYearMonthTime(localDate); + } catch (Exception e) { + log.error("", e); + } + if (null == param.getDeclareMonth() || null == param.getYearMonthTime()) { + throw new SalaryRunTimeException("当前年月不合法"); + } + param.setYearMonthTime(localDate); + return getOtherDeductionService(user).extendToLastMonth(param); + } } From b3cd118c21a1aa0498f1f0a176e0fba193d09663 Mon Sep 17 00:00:00 2001 From: fcli Date: Wed, 16 Nov 2022 16:06:27 +0800 Subject: [PATCH 09/18] =?UTF-8?q?feat:=20=E8=87=AA=E5=8A=A8=E7=B4=AF?= =?UTF-8?q?=E8=AE=A1=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/AddUpDeductionService.java | 2 +- .../impl/AddUpDeductionServiceImpl.java | 11 ++++---- .../AutoAddAllSpecialAddDeductionJob.java | 25 +++++++++++++++++++ .../salary/wrapper/AddUpDeductionWrapper.java | 2 +- 4 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 src/com/engine/salary/timer/AutoAddAllSpecialAddDeductionJob.java diff --git a/src/com/engine/salary/service/AddUpDeductionService.java b/src/com/engine/salary/service/AddUpDeductionService.java index d65082de7..88f7c3898 100644 --- a/src/com/engine/salary/service/AddUpDeductionService.java +++ b/src/com/engine/salary/service/AddUpDeductionService.java @@ -154,5 +154,5 @@ public interface AddUpDeductionService { * @return void * @author lfc */ - String autoAddAll(Date yearMonth); + String autoAddAll(Date yearMonth, Boolean isAdmin); } diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index 9e70182e7..6bfa10eff 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -639,14 +639,15 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction } @Override - public String autoAddAll(Date yearMonth) { - int uid = user.getUID(); - Boolean isChief = getTaxAgentService(user).isChief((long) uid); + public String autoAddAll(Date yearMonth, Boolean isAdmin) { + //如果是定时任务直接查询所有,isAdmin传true + boolean isChief = Boolean.TRUE.equals(isAdmin) + || getTaxAgentService(user).isChief((long) user.getUID()); Collection taxAgents; if (isChief) { taxAgents = getTaxAgentService(user).listAll(); } else { - taxAgents = getTaxAgentService(user).listAllTaxAgentsAsAdmin((long) uid); + taxAgents = getTaxAgentService(user).listAllTaxAgentsAsAdmin((long) user.getUID()); } LocalDateTime yearMonthTime = DateUtil.toLocalDateTime(yearMonth); //设置时间到下一年1月1号 @@ -701,7 +702,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction addUpDeduction.setEmployeeId(employeeId); addUpDeduction.setTaxAgentId(taxAgent.getId()); addUpDeduction.setDeclareMonth(DateUtil.beginOfMonth(yearMonth)); - addUpDeduction.setCreator((long) user.getUID()); + addUpDeduction.setCreator(user == null ? 0 : (long) user.getUID()); addUpDeduction.setTenantKey(DEFAULT_TENANT_KEY); //确认当期是否有已经累计的记录 diff --git a/src/com/engine/salary/timer/AutoAddAllSpecialAddDeductionJob.java b/src/com/engine/salary/timer/AutoAddAllSpecialAddDeductionJob.java new file mode 100644 index 000000000..4de300e71 --- /dev/null +++ b/src/com/engine/salary/timer/AutoAddAllSpecialAddDeductionJob.java @@ -0,0 +1,25 @@ +package com.engine.salary.timer; + +import cn.hutool.core.date.DateUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.salary.service.AddUpDeductionService; +import com.engine.salary.service.impl.AddUpDeductionServiceImpl; +import lombok.extern.slf4j.Slf4j; +import weaver.hrm.User; +import weaver.interfaces.schedule.BaseCronJob; + +import java.util.Date; + +@Slf4j +public class AutoAddAllSpecialAddDeductionJob extends BaseCronJob { + + private AddUpDeductionService getAddUpDeductionService(User user) { + return ServiceUtil.getService(AddUpDeductionServiceImpl.class, user); + } + + @Override + public void execute() { + Date date = new Date(); + getAddUpDeductionService(null).autoAddAll(DateUtil.beginOfMonth(date), Boolean.TRUE); + } +} diff --git a/src/com/engine/salary/wrapper/AddUpDeductionWrapper.java b/src/com/engine/salary/wrapper/AddUpDeductionWrapper.java index 84c45384e..aa89c3c58 100644 --- a/src/com/engine/salary/wrapper/AddUpDeductionWrapper.java +++ b/src/com/engine/salary/wrapper/AddUpDeductionWrapper.java @@ -177,6 +177,6 @@ public class AddUpDeductionWrapper extends Service { if (yearMonth == null) { throw new SalaryRunTimeException("一键累计传入日期格式错误"); } - return getAddUpDeductionService(user).autoAddAll(yearMonth); + return getAddUpDeductionService(user).autoAddAll(yearMonth, null); } } From 0aa59757c571c10e8be7e7c6bb29d13a88b99485 Mon Sep 17 00:00:00 2001 From: fcli Date: Thu, 17 Nov 2022 14:54:13 +0800 Subject: [PATCH 10/18] =?UTF-8?q?feat:=20=E6=B2=BF=E7=94=A8=E4=B8=8A?= =?UTF-8?q?=E6=9C=88=E5=A2=9E=E5=8A=A0=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/OtherDeductionServiceImpl.java | 20 ++++++++++++++----- .../salary/wrapper/OtherDeductionWrapper.java | 6 +++++- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index e5ae380b8..a2faf3ebe 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -790,6 +790,15 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction @Override public String extendToLastMonth(OtherDeductionExtendLastParam param) { + //查询已经核算的数据 + List salaryAcctEmployees = + getAddUpDeductionService(user) + .getAccountedEmployeeData(param.getDeclareMonth()); + Map acctInfoMap = salaryAcctEmployees.stream().collect(Collectors.toMap( + i -> i.getTaxAgentId() + "" + i.getEmployeeId(), + SalaryAcctEmployeePO::getId + )); + // 查找到所有个税扣缴义务人 Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); Collection taxAgentPOS; @@ -815,7 +824,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction )); Map updateIdMap = getOtherDeductionMapper() .list(queryParam).stream() - .collect(Collectors.toMap(i -> i.getEmployeeId()+"" + i.getTaxAgentId(), OtherDeductionListDTO::getId)); + .collect(Collectors.toMap(i -> i.getEmployeeId() + "" + i.getTaxAgentId(), OtherDeductionListDTO::getId)); List insertInfo = new ArrayList<>(); List updatetInfo = new ArrayList<>(); @@ -827,20 +836,21 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction po.setId(null); po.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); boolean hasOld = updateIdMap.containsKey(po.getEmployeeId() + "" + po.getTaxAgentId()); - if (hasOld) { + if (hasOld && acctInfoMap.containsKey(po.getTaxAgentId() + "" + po.getEmployeeId())) { + //核算过的数据直接跳过不做更改 po.setId(updateIdMap.get(po.getEmployeeId() + "" + po.getTaxAgentId())); updatetInfo.add(po); - } else { + } else if (!hasOld){ po.setCreator((long) user.getUID()); po.setCreateTime(new Date()); insertInfo.add(po); } } List> list = Lists.partition(insertInfo, 1000); - list.forEach(l->getOtherDeductionMapper().insertData(l)); + list.forEach(l -> getOtherDeductionMapper().insertData(l)); List> updateList = Lists.partition(updatetInfo, 1000); - list.forEach(l->getOtherDeductionMapper().updateData(l)); + list.forEach(l -> getOtherDeductionMapper().updateData(l)); return ""; } diff --git a/src/com/engine/salary/wrapper/OtherDeductionWrapper.java b/src/com/engine/salary/wrapper/OtherDeductionWrapper.java index 0c4cf132e..1589ac74b 100644 --- a/src/com/engine/salary/wrapper/OtherDeductionWrapper.java +++ b/src/com/engine/salary/wrapper/OtherDeductionWrapper.java @@ -25,6 +25,7 @@ import weaver.hrm.User; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.Month; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; @@ -257,9 +258,12 @@ public class OtherDeductionWrapper extends Service { } catch (Exception e) { log.error("", e); } - if (null == param.getDeclareMonth() || null == param.getYearMonthTime()) { + if (null == param.getDeclareMonth() || null == localDate || null == param.getYearMonthTime()) { throw new SalaryRunTimeException("当前年月不合法"); } + if (Month.JANUARY.equals(localDate.getMonth())) { + throw new SalaryRunTimeException("失败,当前年度内第一个月无法沿用上月"); + } param.setYearMonthTime(localDate); return getOtherDeductionService(user).extendToLastMonth(param); } From b03e5efbcfdc606b32be7615f29009be3e6ea439 Mon Sep 17 00:00:00 2001 From: fcli Date: Thu, 17 Nov 2022 15:13:24 +0800 Subject: [PATCH 11/18] =?UTF-8?q?feat:=20=E6=B2=BF=E7=94=A8=E4=B8=8A?= =?UTF-8?q?=E6=9C=88=E5=A2=9E=E5=8A=A0=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/OtherDeductionServiceImpl.java | 11 +++++------ .../engine/salary/wrapper/OtherDeductionWrapper.java | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index a2faf3ebe..828d7ee8f 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -793,11 +793,10 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction //查询已经核算的数据 List salaryAcctEmployees = getAddUpDeductionService(user) - .getAccountedEmployeeData(param.getDeclareMonth()); - Map acctInfoMap = salaryAcctEmployees.stream().collect(Collectors.toMap( - i -> i.getTaxAgentId() + "" + i.getEmployeeId(), - SalaryAcctEmployeePO::getId - )); + .getAccountedEmployeeData(param.getDeclareMonth()); + Map> acctInfoMap = salaryAcctEmployees.stream() + .distinct().collect(Collectors.groupingBy( + i -> i.getTaxAgentId() + "" + i.getEmployeeId())); // 查找到所有个税扣缴义务人 Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); @@ -840,7 +839,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction //核算过的数据直接跳过不做更改 po.setId(updateIdMap.get(po.getEmployeeId() + "" + po.getTaxAgentId())); updatetInfo.add(po); - } else if (!hasOld){ + } else if (!hasOld) { po.setCreator((long) user.getUID()); po.setCreateTime(new Date()); insertInfo.add(po); diff --git a/src/com/engine/salary/wrapper/OtherDeductionWrapper.java b/src/com/engine/salary/wrapper/OtherDeductionWrapper.java index 1589ac74b..b3b4e8475 100644 --- a/src/com/engine/salary/wrapper/OtherDeductionWrapper.java +++ b/src/com/engine/salary/wrapper/OtherDeductionWrapper.java @@ -262,7 +262,7 @@ public class OtherDeductionWrapper extends Service { throw new SalaryRunTimeException("当前年月不合法"); } if (Month.JANUARY.equals(localDate.getMonth())) { - throw new SalaryRunTimeException("失败,当前年度内第一个月无法沿用上月"); + throw new SalaryRunTimeException("操作失败,每年度内首月无法沿用上月"); } param.setYearMonthTime(localDate); return getOtherDeductionService(user).extendToLastMonth(param); From 10ffe88810dbc659d00bbce433caa2a0dcf8ecc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 17 Nov 2022 15:17:49 +0800 Subject: [PATCH 12/18] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E9=94=81=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/component/WeaTableColumnGroup.java | 16 ++++++++++++++++ .../salaryacct/bo/SalaryAcctResultBO.java | 17 +++++++++++++---- .../impl/SalaryAcctExcelServiceImpl.java | 3 ++- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/component/WeaTableColumnGroup.java b/src/com/engine/salary/component/WeaTableColumnGroup.java index 7e44507e4..5edef0ba2 100644 --- a/src/com/engine/salary/component/WeaTableColumnGroup.java +++ b/src/com/engine/salary/component/WeaTableColumnGroup.java @@ -8,6 +8,10 @@ import java.util.List; @Data public class WeaTableColumnGroup extends WeaTableColumn { + /** + * 锁定状态 + */ + private String lockStatus; private List children; @@ -18,8 +22,20 @@ public class WeaTableColumnGroup extends WeaTableColumn { super(width, text, column); } + public WeaTableColumnGroup(String width, String text, String column, String lockStatus) { + super(width, text, column); + this.lockStatus = lockStatus; + } + + public WeaTableColumnGroup(String width, String text, String column, List children) { super(width, text, column); this.children = children; } + + public WeaTableColumnGroup(String width, String text, String column, List children, String lockStatus) { + super(width, text, column); + this.children = children; + this.lockStatus = lockStatus; + } } diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 71bf166c8..483d223a4 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -19,6 +19,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -125,28 +126,36 @@ public class SalaryAcctResultBO { * @param salarySobItemAggregateDTO * @return */ - public static List buildTableColumns(SalarySobItemAggregateDTO salarySobItemAggregateDTO) { + public static List buildTableColumns(SalarySobItemAggregateDTO salarySobItemAggregateDTO, List lockSalaryItemIds) { List columns = Lists.newArrayList(); // 员工信息字段 for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) { columns.add(new WeaTableColumnGroup("150", salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId())); } // 薪资项目分组下的薪资项目 - // 薪资项目分组下的薪资项目 for (SalarySobItemGroupDTO salarySobItemGroupDTO : salarySobItemAggregateDTO.getItemGroups()) { if (CollectionUtils.isEmpty(salarySobItemGroupDTO.getItems())) { continue; } List childrenColumns = Lists.newArrayList(); for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) { - childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId())); + if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) { + childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue())); + } else { + childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue())); + } } WeaTableColumnGroup weaTableColumnWapper = new WeaTableColumnGroup("150", salarySobItemGroupDTO.getName(), String.valueOf(salarySobItemGroupDTO.getId()), childrenColumns); columns.add(weaTableColumnWapper); } // 没有分类的薪资项目 for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getItems()) { - columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId())); + if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) { + columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue())); + } else { + columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue())); + } + } return columns; } diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 07b3f3d42..984c067dc 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -48,6 +48,7 @@ import com.wbi.util.Util; import dm.jdbc.util.IdGenerator; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.util.IOUtils; @@ -319,7 +320,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 查询薪资账套下的薪资项目+员工信息字段 SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateWithItemHideBySalarySobId(salaryAcctRecordPO.getSalarySobId()); // 构建薪资核算结果列表表头 - return SalaryAcctResultBO.buildTableColumns(salarySobItemAggregateDTO); + return SalaryAcctResultBO.buildTableColumns(salarySobItemAggregateDTO, ListUtils.emptyIfNull(salaryAcctRecordPO.getLockSalaryItemIds())); } /** From e6eaf96bcdc6ada0700ff8911fc11281b8691b50 Mon Sep 17 00:00:00 2001 From: fcli Date: Thu, 17 Nov 2022 15:39:16 +0800 Subject: [PATCH 13/18] =?UTF-8?q?feat:=20=E6=B2=BF=E7=94=A8=E4=B8=8A?= =?UTF-8?q?=E6=9C=88=E5=A2=9E=E5=8A=A0=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/OtherDeductionServiceImpl.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index 828d7ee8f..dd4a026ca 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -64,6 +64,10 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction return MapperProxyFactory.getProxy(OtherDeductionMapper.class); } + private OtherDeductionBiz getOtherDeductionBiz() { + return new OtherDeductionBiz(); + } + private TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } @@ -835,7 +839,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction po.setId(null); po.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); boolean hasOld = updateIdMap.containsKey(po.getEmployeeId() + "" + po.getTaxAgentId()); - if (hasOld && acctInfoMap.containsKey(po.getTaxAgentId() + "" + po.getEmployeeId())) { + if (hasOld && !acctInfoMap.containsKey(po.getTaxAgentId() + "" + po.getEmployeeId())) { //核算过的数据直接跳过不做更改 po.setId(updateIdMap.get(po.getEmployeeId() + "" + po.getTaxAgentId())); updatetInfo.add(po); @@ -845,11 +849,9 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction insertInfo.add(po); } } - List> list = Lists.partition(insertInfo, 1000); - list.forEach(l -> getOtherDeductionMapper().insertData(l)); - List> updateList = Lists.partition(updatetInfo, 1000); - list.forEach(l -> getOtherDeductionMapper().updateData(l)); + getOtherDeductionBiz().batchSave(insertInfo); + getOtherDeductionBiz().batchUpdate(updatetInfo); return ""; } From f762fd70303ec310397e7ad20d3f7b77bc33dae6 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 17 Nov 2022 16:51:07 +0800 Subject: [PATCH 14/18] =?UTF-8?q?=E8=B0=83=E8=96=AA=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E3=80=81=E5=88=A0=E9=99=A4=20=E6=94=BE=E5=BC=80=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryArchiveItemServiceImpl.java | 36 +++++++++---------- .../wrapper/SalaryArchiveItemWrapper.java | 15 ++++---- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index 957399161..c1de23cf2 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -238,14 +238,14 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi // 获取生效+未生效的数据 List salaryItemsBySalaryArchiveIdAndItemIds = getSalaryItemsBySalaryArchiveIdAndItemIds(salaryArchiveItemSaveParam.getSalaryArchiveId(), salaryItemIds); // 获取当前已生效数据 - List effectiveSalaryItems = getEffectiveSalaryItems(salaryArchiveItemSaveParam.getSalaryArchiveId(), salaryItemIds); +// List effectiveSalaryItems = getEffectiveSalaryItems(salaryArchiveItemSaveParam.getSalaryArchiveId(), salaryItemIds); // 待保存生效时间 Date saveEffectiveTime = salaryArchiveItemSaveParam.getEffectiveTime(); salaryArchiveItems.forEach(e -> { // 已生效 - List effectiveList = effectiveSalaryItems.stream().filter(i -> i.getSalaryItemId().equals(e.getSalaryItemId())).collect(Collectors.toList()); +// List effectiveList = effectiveSalaryItems.stream().filter(i -> i.getSalaryItemId().equals(e.getSalaryItemId())).collect(Collectors.toList()); // 当前已生效 - SalaryArchiveItemPO effectiveSalaryItem = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 0 ? effectiveList.get(0) : null; +// SalaryArchiveItemPO effectiveSalaryItem = CollectionUtils.isNotEmpty(effectiveList) && effectiveList.size() > 0 ? effectiveList.get(0) : null; List list = salaryItemsBySalaryArchiveIdAndItemIds.stream().filter(i -> i.getSalaryItemId().equals(e.getSalaryItemId())).collect(Collectors.toList()); boolean isNotNumber = StringUtils.isNotEmpty(e.getAdjustValue()) && !Pattern.matches(SalaryArchiveConstant.NUMBER_REGEX, e.getAdjustValue()); if (isNotNumber) { @@ -261,19 +261,19 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi } // 1.检验是否可以调整 - if (effectiveSalaryItem != null) { +// if (effectiveSalaryItem != null) { // 当前已经生效的时间 - Date effectiveTime = effectiveSalaryItem.getEffectiveTime(); +// Date effectiveTime = effectiveSalaryItem.getEffectiveTime(); // 1.1 如果保存的生效日期早于<当前已生效 - if (saveEffectiveTime.before(effectiveTime)) { - if(salaryArchiveItemSaveParam.getCanOperator() == Boolean.TRUE){ - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期,仅修改备注")); - } - // 仅可编辑说明 - salaryArchiveItemMapper.updateIgnoreNull( SalaryArchiveItemPO.builder().id(salaryArchiveItemSaveParam.getSalaryArchiveItemId()) - .description(salaryArchiveItemSaveParam.getDescription()).build()); - } - } +// if (saveEffectiveTime.before(effectiveTime)) { +// if(salaryArchiveItemSaveParam.getCanOperator() == Boolean.TRUE){ +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期")); +// } +// // 仅可编辑说明 +// salaryArchiveItemMapper.updateIgnoreNull( SalaryArchiveItemPO.builder().id(salaryArchiveItemSaveParam.getSalaryArchiveItemId()) +// .description(salaryArchiveItemSaveParam.getDescription()).build()); +// } +// } }); return SalaryArchiveItemPO.builder().id(salaryArchiveItemSaveParam.getSalaryArchiveItemId()).effectiveTime(salaryArchiveItemSaveParam.getEffectiveTime()).adjustReason(salaryArchiveItemSaveParam.getAdjustReason()) .description(salaryArchiveItemSaveParam.getDescription()).itemValue(salaryArchiveItemSaveParam.getSalaryArchiveItems().get(0).getAdjustValue()).build(); @@ -530,13 +530,13 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi if (salaryArchiveItem == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98299, "参数错误,薪资项目不存在或已被删除")); } - if (salaryArchiveItem.getEffectiveTime().after(new Date())) { +// if (salaryArchiveItem.getEffectiveTime().after(new Date())) { salaryArchiveItem.setDeleteType(1); // 删除未生效数据 salaryArchiveItemMapper.updateById(salaryArchiveItem); - } else { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98299, "该薪资项目已生效不可删除")); - } +// } else { +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98299, "该薪资项目已生效不可删除")); +// } return StringUtils.EMPTY; } diff --git a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java index 1a946e816..94c1dc2e4 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java @@ -343,13 +343,14 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt for (int i = 0; i < resultList.size(); i++) { SingleSalaryItemAdjustRecordListDTO singleSalaryItemAdjustRecord = resultList.get(i); if(singleSalaryItemAdjustRecord.getId().equals(queryParam.getId())){ - Optional optional = effectiveSalaryItems.stream().filter(f -> f.getSalaryItemId().equals(singleSalaryItemAdjustRecord.getSalaryItemId())).findFirst(); - Date effectiveDate = optional.map(SalaryArchiveItemPO::getEffectiveTime).orElse(null); - if (effectiveDate != null && singleSalaryItemAdjustRecord.getEffectiveTime().before(effectiveDate)) { - singleSalaryItemAdjustRecord.setCanOperator(Boolean.FALSE); - } else { - singleSalaryItemAdjustRecord.setCanOperator(Boolean.TRUE); - } +// Optional optional = effectiveSalaryItems.stream().filter(f -> f.getSalaryItemId().equals(singleSalaryItemAdjustRecord.getSalaryItemId())).findFirst(); +// Date effectiveDate = optional.map(SalaryArchiveItemPO::getEffectiveTime).orElse(null); +// if (effectiveDate != null && singleSalaryItemAdjustRecord.getEffectiveTime().before(effectiveDate)) { +// singleSalaryItemAdjustRecord.setCanOperator(Boolean.FALSE); +// } else { +// singleSalaryItemAdjustRecord.setCanOperator(Boolean.TRUE); +// } + singleSalaryItemAdjustRecord.setCanOperator(Boolean.TRUE); Map map = new HashMap<>(3); map.put("salaryItem", String.valueOf(singleSalaryItemAdjustRecord.getSalaryItemId())); map.put("salaryBefore", singleSalaryItemAdjustRecord.getAdjustBefore()); From 4779cc861edca021fc87698c50cc10d703708b8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 17 Nov 2022 17:04:14 +0800 Subject: [PATCH 15/18] =?UTF-8?q?=E7=9B=B8=E5=90=8Citemid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryAcctResultServiceImpl.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 600f13d9c..375c83781 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -59,7 +59,6 @@ import java.util.*; import java.util.concurrent.BlockingDeque; import java.util.concurrent.CountDownLatch; import java.util.concurrent.LinkedBlockingDeque; -import java.util.function.Function; import java.util.stream.Collectors; /** @@ -556,7 +555,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe .orElse(new ArrayList<>()) .stream() .filter(po -> lockSalaryItemIds.contains(po.getSalaryItemId())) - .collect(Collectors.toMap(SalaryAcctResultPO::getSalaryItemId, Function.identity())); + .collect(Collectors.toMap(SalaryAcctResultPO::getSalaryItemId, a -> a, (a, b) -> a)); } // 8、查询公式详情 @@ -730,7 +729,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe public void updateLockStatusByParam(SalaryAcctResultUpdateLockStatusParam updateParam) { // 查询薪资核算记录 SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(updateParam.getSalaryAcctRecordId()); - if(CollectionUtils.isEmpty(salaryAcctRecord.getLockSalaryItemIds())){ + if (CollectionUtils.isEmpty(salaryAcctRecord.getLockSalaryItemIds())) { salaryAcctRecord.setLockSalaryItemIds(new ArrayList<>()); } List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(updateParam.getSalaryAcctRecordId()); @@ -749,7 +748,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // } // salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); // } - salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); + salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); if (updateParam.getLockStatus() == LockStatusEnum.LOCK) { salaryAcctRecord.getLockSalaryItemIds().addAll(salaryItemIds); } else { From d07ded883f3c74819c72939abd3df538dc2b00d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 17 Nov 2022 18:53:22 +0800 Subject: [PATCH 16/18] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8A=A0=E9=94=81?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryacct/bo/SalaryAcctCalculateBO.java | 3 ++- .../service/impl/SalaryAcctCalculateServiceImpl.java | 10 ++++++---- .../service/impl/SalaryAcctResultServiceImpl.java | 9 +++++---- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java index 8eba860bb..399e4d0fe 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java @@ -49,7 +49,8 @@ public class SalaryAcctCalculateBO { /** * 核算锁定值 */ - private Map salaryAcctLockResultPOS; + private Map salaryAcctLockResultPOS; + private List lockSalaryItemIds; /** diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index 377b963dc..cb64b4c02 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -133,7 +133,8 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId); List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); //核算锁定的值 - Map salaryAcctLockResultPOS = MapUtils.emptyIfNull(salaryAcctCalculateBO.getSalaryAcctLockResultPOS()); + Map salaryAcctLockResultPOS = MapUtils.emptyIfNull(salaryAcctCalculateBO.getSalaryAcctLockResultPOS()); + List lockSalaryItemIds = salaryAcctCalculateBO.getLockSalaryItemIds(); // 9、查询相同税款所属期内涉及合并计税的其他薪资核算结果 Set otherSalaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getOtherSalaryAcctRecordPOS(), SalaryAcctRecordPO::getId); List otherSalaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndEmployeeIds(otherSalaryAcctRecordIds, employeeIds); @@ -156,6 +157,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc List salaryAcctResultTempPOS = Lists.newArrayList(); // 开始核算 for (SalaryAcctEmployeePO salaryAcctEmployeePO : salaryAcctCalculateBO.getSalaryAcctEmployeePOS()) { + Long salaryAcctEmployeePOId = salaryAcctEmployeePO.getId(); //1 获取当前薪资核算人员的公式中的变量的值 List formulaVarValues = formulaVarMap.get(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId()); //2人员信息 @@ -194,8 +196,8 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc resultValue = SalaryAcctFormulaBO.roundResultValue(resultValue, salaryItemPO); //是否锁定 - if (salaryAcctLockResultPOS.containsKey(salaryItemId) && salaryAcctLockResultPOS.get(salaryItemId) != null) { - resultValue = salaryAcctLockResultPOS.get(salaryItemId).getResultValue(); + if (lockSalaryItemIds.contains(salaryItemId) && salaryAcctLockResultPOS.get(salaryItemId + "_" + salaryAcctEmployeePOId) != null) { + resultValue = salaryAcctLockResultPOS.get(salaryItemId + "_" + salaryAcctEmployeePOId).getResultValue(); } // 将已经计算过的薪资项目的值转换成公式变量的值添加到集合中 @@ -207,7 +209,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc // 转换成薪资核算结果po SalaryAcctResultTempPO salaryAcctResultTempPO = new SalaryAcctResultTempPO() .setSalaryAcctRecordId(salaryAcctEmployeePO.getSalaryAcctRecordId()) - .setSalaryAcctEmpId(salaryAcctEmployeePO.getId()) + .setSalaryAcctEmpId(salaryAcctEmployeePOId) .setEmployeeId(salaryAcctEmployeePO.getEmployeeId()) .setTaxAgentId(salaryAcctEmployeePO.getTaxAgentId()) .setSalarySobId(salaryAcctEmployeePO.getSalarySobId()) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 375c83781..2f5e7e428 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -548,14 +548,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe //核算锁定值 List lockSalaryItemIds = salaryAcctRecordPO.getLockSalaryItemIds(); - Map acctResults = new HashMap<>(); + Map acctResults = new HashMap<>(); if (CollectionUtils.isNotEmpty(lockSalaryItemIds)) { List acctResultPOS = listBySalaryAcctRecordIds(Collections.singleton(calculateParam.getSalaryAcctRecordId())); acctResults = Optional.ofNullable(acctResultPOS) .orElse(new ArrayList<>()) .stream() .filter(po -> lockSalaryItemIds.contains(po.getSalaryItemId())) - .collect(Collectors.toMap(SalaryAcctResultPO::getSalaryItemId, a -> a, (a, b) -> a)); + .collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a)); } // 8、查询公式详情 @@ -595,6 +595,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe .setSalarySobCycleDTO(salarySobCycleDTO) .setOtherSalaryAcctRecordPOS(otherSalaryAcctRecordPOS) .setSalaryAcctLockResultPOS(MapUtils.emptyIfNull(acctResults)) + .setLockSalaryItemIds(lockSalaryItemIds) .setSalarySobItemPOS(salarySobItemPOS) .setSalaryItemIdWithPriorityList(salarySobItemsWithPriority) .setExpressFormulas(expressFormulas) @@ -741,14 +742,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List salaryAcctResultValues = this.listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); Map salaryAcctResultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); // 值可以锁定的薪资项目 - Set salaryItemIds = canLockSalaryItemIds(salaryAcctRecord.getSalarySobId()); +// Set salaryItemIds = canLockSalaryItemIds(salaryAcctRecord.getSalarySobId()); // if (Objects.nonNull(updateParam.getSalaryItemId())) { // if (!salaryItemIds.contains(updateParam.getSalaryItemId())) { // return; // } // salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); // } - salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); + Set salaryItemIds = Collections.singleton(updateParam.getSalaryItemId()); if (updateParam.getLockStatus() == LockStatusEnum.LOCK) { salaryAcctRecord.getLockSalaryItemIds().addAll(salaryItemIds); } else { From f19e4c2569ed2831777015e874aa79f6a8ec895a Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 17 Nov 2022 19:03:59 +0800 Subject: [PATCH 17/18] =?UTF-8?q?fix=E5=8F=91=E8=96=AA=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E4=B8=BA=E4=B8=80=E4=B8=AA=E6=9C=88=E6=9C=80=E5=90=8E=E4=B8=80?= =?UTF-8?q?=E5=A4=A9=E6=97=B6=EF=BC=8C=E8=96=AA=E8=B5=84=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=E4=B8=8D=E6=98=BE=E7=A4=BANEW?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryarchive/bo/SalaryArchiveBO.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java index f79aee973..b07afe044 100644 --- a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java +++ b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java @@ -210,12 +210,16 @@ public class SalaryArchiveBO { Date endTempItem = endItem; List salaryItemValues = new ArrayList<>(); for (Long salaryArchiveItemId : salaryArchiveItemIds) { + boolean flag = false; for (SalaryArchiveItemPO salaryArchiveItem : salaryArchiveItems) { if (!salaryArchiveItemId.equals(salaryArchiveItem.getSalaryItemId()) || !salaryArchiveItem.getSalaryArchiveId().equals(salaryArchive.getId())) { continue; } Date fromDateItem = salaryArchiveItem.getEffectiveTime(); - if (fromDateItem.after(endTempItem) || !endTempItem.after(startItem)) { + if (fromDateItem.after(endTempItem) || endTempItem.before(startItem)) { + continue; + } + if ( endTempItem.equals(startItem) && flag == true) { continue; } SalaryArchiveItemDataDTO salaryArchiveItemData = new SalaryArchiveItemDataDTO(); @@ -223,6 +227,7 @@ public class SalaryArchiveBO { salaryArchiveItemData.setSalaryItemId(salaryArchiveItem.getSalaryItemId()); salaryArchiveItemData.setValue(salaryArchiveItem.getItemValue()); salaryItemValues.add(salaryArchiveItemData); + flag = true; endTempItem = fromDateItem; } endTempItem = endItem; From cc711bc411976f7e7b91996e8da5297d94c9a9f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 17 Nov 2022 19:04:42 +0800 Subject: [PATCH 18/18] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8A=A0=E9=94=81?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryAcctCalculateServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index cb64b4c02..0ecdb3830 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -27,6 +27,7 @@ import com.engine.salary.util.SalaryEntityUtil; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; @@ -134,7 +135,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); //核算锁定的值 Map salaryAcctLockResultPOS = MapUtils.emptyIfNull(salaryAcctCalculateBO.getSalaryAcctLockResultPOS()); - List lockSalaryItemIds = salaryAcctCalculateBO.getLockSalaryItemIds(); + List lockSalaryItemIds = ListUtils.emptyIfNull(salaryAcctCalculateBO.getLockSalaryItemIds()); // 9、查询相同税款所属期内涉及合并计税的其他薪资核算结果 Set otherSalaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getOtherSalaryAcctRecordPOS(), SalaryAcctRecordPO::getId); List otherSalaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndEmployeeIds(otherSalaryAcctRecordIds, employeeIds);