From 4ff15ca651b3210f484da2249c571689622b2ecb Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 15 May 2023 10:28:17 +0800 Subject: [PATCH] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E7=BC=96=E8=BE=91=E5=AF=BC=E5=85=A5=20=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultLogBO.java | 40 +++ .../param/SalaryAcctResultLogQueryParam.java | 73 +++++ .../salaryacct/po/SalaryAcctResultLogPO.java | 75 +++++ .../SalaryAcctResultDataSourceEnum.java | 56 ++++ .../salaryacct/SalaryAcctResultLogMapper.java | 81 +++++ .../salaryacct/SalaryAcctResultLogMapper.xml | 306 ++++++++++++++++++ .../service/SalaryAcctResultLogService.java | 72 +++++ .../impl/SalaryAcctExcelServiceImpl.java | 33 +- .../impl/SalaryAcctResultLogServiceImpl.java | 66 ++++ .../impl/SalaryAcctResultServiceImpl.java | 50 ++- 10 files changed, 840 insertions(+), 12 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultLogBO.java create mode 100644 src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultLogQueryParam.java create mode 100644 src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultLogPO.java create mode 100644 src/com/engine/salary/enums/salaryaccounting/SalaryAcctResultDataSourceEnum.java create mode 100644 src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.java create mode 100644 src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.xml create mode 100644 src/com/engine/salary/service/SalaryAcctResultLogService.java create mode 100644 src/com/engine/salary/service/impl/SalaryAcctResultLogServiceImpl.java diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultLogBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultLogBO.java new file mode 100644 index 000000000..985880f3c --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultLogBO.java @@ -0,0 +1,40 @@ +package com.engine.salary.entity.salaryacct.bo; + +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultLogPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.enums.salaryaccounting.SalaryAcctResultDataSourceEnum; +import dm.jdbc.util.IdGenerator; +import org.apache.commons.lang3.math.NumberUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author Harryxzy + * @date 2023/05/12 16:54 + * @description + */ +public class SalaryAcctResultLogBO { + + public static List buildSalaryAcctResultLog(List salaryAcctResultList, Long uid, SalaryAcctResultDataSourceEnum datasource){ + Date now = new Date(); + List needInsertList = new ArrayList<>(); + salaryAcctResultList.stream().forEach(PO -> { + needInsertList.add(SalaryAcctResultLogPO.builder() + .id(IdGenerator.generate()) + .datasource(datasource.getValue()) + .salaryAcctRecordId(PO.getSalaryAcctRecordId()) + .salaryAcctResultId(PO.getId()) + .salaryAcctEmpId(PO.getSalaryAcctEmpId()) + .salaryItemId(PO.getSalaryItemId()) + .employeeId(PO.getEmployeeId()) + .operator(uid) + .operateTime(now) + .deleteType(NumberUtils.INTEGER_ZERO) + .updateTime(now) + .build()); + }); + return needInsertList; + } +} diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultLogQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultLogQueryParam.java new file mode 100644 index 000000000..b38d9d2b8 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultLogQueryParam.java @@ -0,0 +1,73 @@ +package com.engine.salary.entity.salaryacct.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author Harryxzy + * @date 2023/05/12 15:14 + * @description 薪资核算结果来源 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryAcctResultLogQueryParam { + + /** + * 主键id + */ + private Long id; + + /** + * 数据来源:1:手动编辑、2:导入 + */ + private Integer datasource; + + /** + * 薪资核算记录id + */ + private Long salaryAcctRecordId; + + /** + * 薪资核算结果id + */ + private Long salaryAcctResultId; + + /** + * 薪资核算人员id + */ + private Long salaryAcctEmpId; + + + /** + * 薪资项目id + */ + private Long salaryItemId; + + /** + * 人员id + */ + private Long employeeId; + + /** + * 操作人 + */ + private Long operator; + + + /** + * 操作时间 + */ + private Date operateTime; + + /** + * 是否已删除。0:未删除、1:已删除 + */ + private Integer deleteType; +} diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultLogPO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultLogPO.java new file mode 100644 index 000000000..e3d2bed60 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultLogPO.java @@ -0,0 +1,75 @@ +package com.engine.salary.entity.salaryacct.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author Harryxzy + * @date 2023/05/12 15:14 + * @description 薪资核算结果来源 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryAcctResultLogPO { + + /** + * 主键id + */ + private Long id; + + /** + * 数据来源:1:手动编辑、2:导入 + */ + private Integer datasource; + + /** + * 薪资核算记录id + */ + private Long salaryAcctRecordId; + + /** + * 薪资核算结果id + */ + private Long salaryAcctResultId; + + /** + * 薪资核算人员id + */ + private Long salaryAcctEmpId; + + + /** + * 薪资项目id + */ + private Long salaryItemId; + + /** + * 人员id + */ + private Long employeeId; + + /** + * 操作人 + */ + private Long operator; + + + /** + * 操作时间 + */ + private Date operateTime; + + /** + * 是否已删除。0:未删除、1:已删除 + */ + private Integer deleteType; + + private Date updateTime; +} diff --git a/src/com/engine/salary/enums/salaryaccounting/SalaryAcctResultDataSourceEnum.java b/src/com/engine/salary/enums/salaryaccounting/SalaryAcctResultDataSourceEnum.java new file mode 100644 index 000000000..e2d498049 --- /dev/null +++ b/src/com/engine/salary/enums/salaryaccounting/SalaryAcctResultDataSourceEnum.java @@ -0,0 +1,56 @@ +package com.engine.salary.enums.salaryaccounting; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +/** + * 薪资核算结果的数据来源 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum SalaryAcctResultDataSourceEnum implements BaseEnum { + + EDIT(1, "手动编辑", 91870), + IMPORT(2, "导入", 91862) + ; + + private int value; + + private String defaultLabel; + + private int labelId; + + SalaryAcctResultDataSourceEnum(int value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + @Override + public Integer getValue() { + return value; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + + public static SalaryAcctResultDataSourceEnum parseByValue(Integer value) { + for (SalaryAcctResultDataSourceEnum SalaryAcctResultDataSourceEnum : SalaryAcctResultDataSourceEnum.values()) { + if (Objects.equals(SalaryAcctResultDataSourceEnum.getValue(), value)) { + return SalaryAcctResultDataSourceEnum; + } + } + return null; + } +} diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.java new file mode 100644 index 000000000..13229c4f1 --- /dev/null +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.java @@ -0,0 +1,81 @@ +package com.engine.salary.mapper.salaryacct; + +import com.engine.salary.entity.salaryacct.param.SalaryAcctResultLogQueryParam; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultLogPO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.Date; +import java.util.List; + +/** + * @author Harryxzy + * @date 2023/05/12 15:21 + * @description + */ +public interface SalaryAcctResultLogMapper { + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(SalaryAcctResultLogQueryParam queryParam); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryAcctResultLogPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param salaryAcctResultLog 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryAcctResultLogPO salaryAcctResultLog); + + /** + * 修改,修改所有字段 + * + * @param salaryAcctResultLog 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryAcctResultLogPO salaryAcctResultLog); + + /** + * 修改,忽略null字段 + * + * @param salaryAcctResultLog 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryAcctResultLogPO salaryAcctResultLog); + + /** + * 删除记录 + * + * @param salaryAcctResultLog 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalaryAcctResultLogPO salaryAcctResultLog); + + void batchInsert(List SalaryAcctResultLogList); + + /** + * 根据薪资核算人员删除数据,除了已经锁定的值 + * @param salaryAcctEmployeeIds + * @param lockSalaryItemIds + */ + void deleteBySalaryAcctEmpIdExceptItemIds(@Param("salaryAcctEmployeeIds") Collection salaryAcctEmployeeIds, + @Param("exceptItems") Collection lockSalaryItemIds, @Param("updateTime") Date updateTime); +} diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.xml new file mode 100644 index 000000000..66f70fa85 --- /dev/null +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.xml @@ -0,0 +1,306 @@ + + + + + + + + + + + + + + + + + + + t.datasource + , t.delete_type + , t.employee_id + , t.id + , t.operate_time + , t.operator + , t.salary_acct_emp_id + , t.salary_acct_record_id + , t.salary_acct_result_id + , t.salary_item_id + + + + + + + + + + + + + + + INSERT INTO hrsa_salary_acct_result_log + + + + datasource, + + + delete_type, + + + employee_id, + + + id, + + + operate_time, + + + operator, + + + salary_acct_emp_id, + + + salary_acct_record_id, + + + salary_acct_result_id, + + + salary_item_id, + + + + + #{datasource}, + + + #{deleteType}, + + + #{employeeId}, + + + #{id}, + + + #{operateTime}, + + + #{operator}, + + + #{salaryAcctEmpId}, + + + #{salaryAcctRecordId}, + + + #{salaryAcctResultId}, + + + #{salaryItemId}, + + + + + + INSERT INTO hrsa_salary_acct_result_log(id, datasource, salary_acct_record_id, salary_acct_result_id, salary_acct_emp_id, + salary_item_id, employee_id, operator, operate_time, delete_type, update_time) + VALUES + + ( + #{item.id}, + #{item.datasource}, + #{item.salaryAcctRecordId}, + #{item.salaryAcctResultId}, + #{item.salaryAcctEmpId}, + #{item.salaryItemId}, + #{item.employeeId}, + #{item.operator}, + #{item.operateTime}, + #{item.deleteType}, + #{item.updateTime} + ) + + + + INSERT INTO hrsa_salary_acct_result_log(id, datasource, salary_acct_record_id, salary_acct_result_id, salary_acct_emp_id, + salary_item_id, employee_id, operator, operate_time, delete_type, update_time) + + select + #{item.id,jdbcType=DOUBLE}, + #{item.datasource,jdbcType=INTEGER}, + #{item.salaryAcctRecordId,jdbcType=DOUBLE}, + #{item.salaryAcctResultId,jdbcType=DOUBLE}, + #{item.salaryAcctEmpId,jdbcType=DOUBLE}, + #{item.salaryItemId,jdbcType=DOUBLE}, + #{item.employeeId,jdbcType=DOUBLE}, + #{item.operator,jdbcType=,jdbcType=DOUBLE}, + #{item.operateTime,jdbcType=DATE}, + #{item.deleteType,jdbcType=INTEGER}, + #{item.updateTime,jdbcType=DATE} + from dual + + + + + INSERT INTO hrsa_salary_acct_result_log(id, datasource, salary_acct_record_id, salary_acct_result_id, salary_acct_emp_id, + salary_item_id, employee_id, operator, operate_time, delete_type, update_time) + VALUES + ( + #{item.id}, + #{item.datasource}, + #{item.salaryAcctRecordId}, + #{item.salaryAcctResultId}, + #{item.salaryAcctEmpId}, + #{item.salaryItemId}, + #{item.employeeId}, + #{item.operator}, + #{item.operateTime}, + #{item.deleteType}, + #{item.updateTime} + ) + + + + + + UPDATE hrsa_salary_acct_result_log + + datasource=#{datasource}, + delete_type=#{deleteType}, + employee_id=#{employeeId}, + operate_time=#{operateTime}, + operator=#{operator}, + salary_acct_emp_id=#{salaryAcctEmpId}, + salary_acct_record_id=#{salaryAcctRecordId}, + salary_acct_result_id=#{salaryAcctResultId}, + salary_item_id=#{salaryItemId}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_acct_result_log + + + datasource=#{datasource}, + + + delete_type=#{deleteType}, + + + employee_id=#{employeeId}, + + + operate_time=#{operateTime}, + + + operator=#{operator}, + + + salary_acct_emp_id=#{salaryAcctEmpId}, + + + salary_acct_record_id=#{salaryAcctRecordId}, + + + salary_acct_result_id=#{salaryAcctResultId}, + + + salary_item_id=#{salaryItemId}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_salary_acct_result_log + SET delete_type=1 + WHERE id = #{id} AND delete_type = 0 + + + + + UPDATE hrsa_salary_acct_result_log + SET delete_type=1, update_time = #{updateTime} + WHERE delete_type = 0 + + AND salary_acct_emp_id IN + + #{acctEmpId} + + + + + AND salary_item_id NOT IN + + #{itemId} + + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/SalaryAcctResultLogService.java b/src/com/engine/salary/service/SalaryAcctResultLogService.java new file mode 100644 index 000000000..8edcf222d --- /dev/null +++ b/src/com/engine/salary/service/SalaryAcctResultLogService.java @@ -0,0 +1,72 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultLogPO; + +import java.util.Collection; +import java.util.List; + +/** + * @author Harryxzy + * @date 2023/05/12 15:27 + * @description 薪资核算结果数据来源 + */ +public interface SalaryAcctResultLogService { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryAcctResultLogPO getById(Long id); + + + /** + * 新增,忽略null字段 + * + * @param salaryAcctResultLog 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryAcctResultLogPO salaryAcctResultLog); + + /** + * 修改,修改所有字段 + * + * @param salaryAcctResultLog 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryAcctResultLogPO salaryAcctResultLog); + + /** + * 修改,忽略null字段 + * + * @param salaryAcctResultLog 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryAcctResultLogPO salaryAcctResultLog); + + /** + * 删除记录 + * + * @param salaryAcctResultLog 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalaryAcctResultLogPO salaryAcctResultLog); + + void batchInsert(List salaryAcctResultLogList); + + /** + * 根据薪资核算人员删除数据,除了已经锁定的值 + * @param salaryAcctEmployeeIds + * @param lockSalaryItemIds + */ + void deleteBySalaryAcctEmpIdExceptItemIds(Collection salaryAcctEmployeeIds, Collection lockSalaryItemIds); +} diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index cab21170f..56a1cc819 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -11,14 +11,12 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultLogBO; import com.engine.salary.entity.salaryacct.dto.SalaryAccEmployeeListDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctImportFieldDTO; import com.engine.salary.entity.salaryacct.dto.SalaryComparisonResultListDTO; import com.engine.salary.entity.salaryacct.param.*; -import com.engine.salary.entity.salaryacct.po.ExcelAcctResultPO; -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.salaryacct.po.*; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO; @@ -28,6 +26,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.UserStatusEnum; +import com.engine.salary.enums.salaryaccounting.SalaryAcctResultDataSourceEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.sys.SalarySysConfMapper; import com.engine.salary.service.*; @@ -136,6 +135,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } + private SalaryAcctResultLogService getSalaryAcctResultLogService(User user) { + return ServiceUtil.getService(SalaryAcctResultLogServiceImpl.class, user); + } + @Override public XSSFWorkbook exportSalaryAcctEmployee(SalaryAcctEmployeeQueryParam queryParam) { ValidUtil.doValidator(queryParam); @@ -1014,6 +1017,12 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 处理导入薪资项的回算值 handleOriginResultValue(deleteResults, salaryAcctResults); getSalaryAcctResultService(user).batchSave(salaryAcctResults); + // 存储薪资核算结果数据来源日志 + new Thread() { + public void run() { + handleSalaryAcctResultLog(salaryAcctResults); + } + }.start(); //报表 getSalaryAcctReportService(user).batchSave(salaryAcctReports); } @@ -1035,6 +1044,22 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc return apidatas; } + /** + * 存储薪资核算结果数据来源日志 + * @param salaryAcctResults + */ + private void handleSalaryAcctResultLog(List salaryAcctResults) { + Set salaryAcctEmpIds = salaryAcctResults.stream().map(SalaryAcctResultPO::getSalaryAcctEmpId).collect(Collectors.toSet()); + Set salaryItemIds = salaryAcctResults.stream().map(SalaryAcctResultPO::getSalaryItemId).collect(Collectors.toSet()); + // 查询导入的薪资核算结果 + List salaryAcctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds); + Long uid = Long.valueOf(user.getUID()); + List needInsertList = SalaryAcctResultLogBO.buildSalaryAcctResultLog(salaryAcctResultList, uid, SalaryAcctResultDataSourceEnum.IMPORT); + if(CollectionUtils.isNotEmpty(needInsertList)){ + getSalaryAcctResultLogService(user).batchInsert(needInsertList); + } + } + /** * @description * @return void diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultLogServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultLogServiceImpl.java new file mode 100644 index 000000000..72a128c1e --- /dev/null +++ b/src/com/engine/salary/service/impl/SalaryAcctResultLogServiceImpl.java @@ -0,0 +1,66 @@ +package com.engine.salary.service.impl; + +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultLogPO; +import com.engine.salary.mapper.salaryacct.SalaryAcctResultLogMapper; +import com.engine.salary.service.SalaryAcctResultLogService; +import com.engine.salary.util.db.MapperProxyFactory; +import com.google.common.collect.Lists; + +import java.util.Collection; +import java.util.Date; +import java.util.List; + +/** + * @author Harryxzy + * @date 2023/05/12 15:29 + * @description + */ +public class SalaryAcctResultLogServiceImpl extends Service implements SalaryAcctResultLogService { + + private SalaryAcctResultLogMapper getSalaryAcctResultLogMapper() { + return MapperProxyFactory.getProxy(SalaryAcctResultLogMapper.class); + } + + @Override + public List listAll() { + return getSalaryAcctResultLogMapper().listAll(); + } + + @Override + public SalaryAcctResultLogPO getById(Long id) { + return getSalaryAcctResultLogMapper().getById(id); + } + + @Override + public int insertIgnoreNull(SalaryAcctResultLogPO salaryAcctResultLog) { + return getSalaryAcctResultLogMapper().insertIgnoreNull(salaryAcctResultLog); + } + + + @Override + public int update(SalaryAcctResultLogPO salaryAcctResultLog) { + return getSalaryAcctResultLogMapper().update(salaryAcctResultLog); + } + + @Override + public int updateIgnoreNull(SalaryAcctResultLogPO salaryAcctResultLog) { + return getSalaryAcctResultLogMapper().updateIgnoreNull(salaryAcctResultLog); + } + + @Override + public int delete(SalaryAcctResultLogPO salaryAcctResultLog) { + return getSalaryAcctResultLogMapper().delete(salaryAcctResultLog); + } + + @Override + public void batchInsert(List salaryAcctResultLogList) { + List> partition = Lists.partition(salaryAcctResultLogList, 50); + partition.forEach(getSalaryAcctResultLogMapper()::batchInsert); + } + + @Override + public void deleteBySalaryAcctEmpIdExceptItemIds(Collection salaryAcctEmployeeIds, Collection lockSalaryItemIds) { + getSalaryAcctResultLogMapper().deleteBySalaryAcctEmpIdExceptItemIds(salaryAcctEmployeeIds,lockSalaryItemIds, new Date()); + } +} diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 8ea761ec2..43cd4a00d 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -9,19 +9,13 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; import com.engine.salary.entity.report.bo.SalaryAcctResultReportBO; import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; -import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculateBO; -import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculatePriorityBO; -import com.engine.salary.entity.salaryacct.bo.SalaryAcctFormulaBO; -import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; +import com.engine.salary.entity.salaryacct.bo.*; 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.*; -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.salaryacct.po.SalaryAcctResultTempPO; +import com.engine.salary.entity.salaryacct.po.*; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.*; @@ -30,6 +24,7 @@ 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.salaryaccounting.SalaryAcctResultDataSourceEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -156,6 +151,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user); } + private SalaryAcctResultLogService getSalaryAcctResultLogService(User user) { + return ServiceUtil.getService(SalaryAcctResultLogServiceImpl.class, user); + } + private SalaryCheckResultService salaryCheckResultService; @@ -550,6 +549,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); } + // 存储薪资核算结果数据来源日志 + saveSalaryAcctResultLog(salaryAcctResultPOSOld,salaryAcctResultPOS); + // 查询操作日志的targetName // String targetName = getSalaryAcctRecordService(user).getLogTargetNameById(salaryAcctEmployeePO.getSalaryAcctRecordId()); // 查询人员信息 @@ -568,6 +570,25 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // salaryAcctRecordLoggerTemplate.write(loggerContext); } + /** + * 存储薪资核算结果数据来源日志 + * @param salaryAcctResultPOSOld + * @param salaryAcctResultPOS + */ + private void saveSalaryAcctResultLog(List salaryAcctResultPOSOld, List salaryAcctResultPOS) { + // 对比核算结果提取修改了哪些薪资项目 + List editItems = new ArrayList<>(); + Map oldResutMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOSOld, SalaryAcctResultPO::getSalaryItemId); + salaryAcctResultPOS.stream().forEach(PO -> { + String oldValue = oldResutMap.get(PO.getSalaryItemId()).getResultValue(); + if(!StringUtils.equals(oldValue,PO.getResultValue())){ + editItems.add(PO); + } + }); + List needInsertList = SalaryAcctResultLogBO.buildSalaryAcctResultLog(editItems, Long.valueOf(user.getUID()), SalaryAcctResultDataSourceEnum.EDIT); + getSalaryAcctResultLogService(user).batchInsert(needInsertList); + } + @Override public void batchSave(Collection salaryAcctResultPOS) { @@ -730,6 +751,19 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // salaryCheckResultService.check(salaryAcctCheckParam, true, simpleEmployee); // Thread.sleep(10); getSalaryAcctProgressService(user).finish(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), true); + + // 存储薪资核算数据来源日志 + new Thread() { + public void run() { + List exceptItemIds = new ArrayList<>(); + List salaryAcctEmployeeIds = salaryAcctEmployeePOS.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); + exceptItemIds.addAll(lockSalaryItemIds); + exceptItemIds.addAll(salaryItemPOS.stream().filter(PO -> Objects.equals(PO.getValueType(), NumberUtils.INTEGER_ONE) && + Objects.equals(PO.getUseInEmployeeSalary(),0)) + .map(SalaryItemPO::getId).collect(Collectors.toList()) ); + getSalaryAcctResultLogService(user).deleteBySalaryAcctEmpIdExceptItemIds(salaryAcctEmployeeIds, exceptItemIds); + } + }.start(); // 记录日志 // 查询操作日志的targetName // String targetName = getSalaryAcctRecordService(user).getLogTargetNameById(calculateParam.getSalaryAcctRecordId());