diff --git a/resource/sqlupgrade/SQLServer/sql202501100103FDDXFSEKYY.sql b/resource/sqlupgrade/SQLServer/sql202501100103FDDXFSEKYY.sql new file mode 100644 index 000000000..69c7d3830 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202501100103FDDXFSEKYY.sql @@ -0,0 +1,8 @@ +alter table hrsa_acct_result_temp add ek_feedback varchar(1000) +GO + +alter table hrsa_salary_acct_result add ek_feedback varchar(1000) +GO + +INSERT INTO hrsa_salary_sys_conf (id, conf_key, conf_value, title, module, order_weight, description, delete_type, create_time, update_time) VALUES (20241101100000, 'SHOW_SALARY_ACCT_APPROVAL', '1', 'нť', 'app', 0, NULL, 0, '2024-11-01 10:00:00', '2024-11-01 10:00:00') +GO \ No newline at end of file diff --git a/resource/wiki/二开/复旦大学附属儿科医院.docx b/resource/wiki/二开/复旦大学附属儿科医院.docx new file mode 100644 index 000000000..3dbc2e7d4 --- /dev/null +++ b/resource/wiki/二开/复旦大学附属儿科医院.docx @@ -0,0 +1,36 @@ + 薪酬开发配置文档 + + 在设置-规则配置中找到薪资审批按钮打开。 + + 账套中设置审批流程地址及需要审批的薪资项目 + + 审批流程要求: + 需要预留一个字段用于渲染审批列表,类型为文本长度10即可。 + 需要预留一个字段用于保存核算记录id,类型为文本长度20即可,由代码赋值因此在模板中可以隐藏,但是不能设置为只读,可以设置为不允许手工编辑。 + 需要预留一个字段用于展示跳转到核算列表的超链接,类型为文本长度10即可,该字段仅在创建模板中配置。 + + Ecode中修改config参数,2个文件中需修改参数 + + + + 配置流程action修改审批状态 + 创建节点,节点后附加操作增加action,接口动作类文件:com.engine.salary.action.updateSalaryApprovalStatusAction + + 创建节点节点前附加操作增加action,并且需要勾选退回时触发。 + + 审批节点节点后附加操作增加action + + + 工资单缩放显示配置 +需增加一个建模,表单名为:uf_gzdxspz,仅2个字段,一个单选,一个多选均为薪资项目浏览框若没有这个浏览框创建方法见7。数据库字段名需与图片完全一致。在这张建模中就可以配置哪些大项可以显示更多小项。 + + 薪资项目浏览框创建方法(若有则不用创建) +查询sql语句为:select id as a,name from hrsa_salary_item where delete_type = 0 + + + 修改配置文件中参数 +配置文件地址:\ecology\WEB-INF\prop\fddxfsekyy.properties,共计需要修改四个值,其中前三个为查询薪资项目id,需使用sql根据薪资项目名称查询,sql:select id from hrsa_salary_item where delete_type=0 and name='薪资项目名称' + +最后一个为劳务费发放记录表单中报销类型的字段id,查看方法如下图 + + diff --git a/src/com/engine/salary/action/updateSalaryApprovalStatusAction.java b/src/com/engine/salary/action/updateSalaryApprovalStatusAction.java index 14e613881..84efa0039 100644 --- a/src/com/engine/salary/action/updateSalaryApprovalStatusAction.java +++ b/src/com/engine/salary/action/updateSalaryApprovalStatusAction.java @@ -43,6 +43,8 @@ public class updateSalaryApprovalStatusAction implements Action { // 修改为对应的状态 private String status; + private String isCreate; + @Override public String execute(RequestInfo requestInfo) { try { @@ -67,6 +69,10 @@ public class updateSalaryApprovalStatusAction implements Action { return FAILURE_AND_CONTINUE; } salaryAcctRecordPO.setApprovalStatus(status); + // 儿科二开,如果该核算记录已有状态,且是发起节点 则状态修改为:财务已修改 + if (StringUtils.isNotBlank(salaryAcctRecordPO.getApprovalStatus()) && StringUtils.isNotBlank(isCreate) && "true".equals(isCreate)) { + salaryAcctRecordPO.setApprovalStatus("财务已修改"); + } getSalaryAcctRecordMapper().updateIgnoreNull(salaryAcctRecordPO); } catch (Exception e) { log.error("审批状态更新失败", e); diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemListDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemListDTO.java index 858db75a1..ea7fb2e2b 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemListDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryTemplateSalaryItemListDTO.java @@ -37,4 +37,6 @@ public class SalaryTemplateSalaryItemListDTO { // 顺序") private Integer sortedIndex; + + private boolean canShowDetail; } diff --git a/src/com/engine/salary/entity/salaryBill/param/EkSalaryBillDetailQueryParam.java b/src/com/engine/salary/entity/salaryBill/param/EkSalaryBillDetailQueryParam.java new file mode 100644 index 000000000..29ca2fe50 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/param/EkSalaryBillDetailQueryParam.java @@ -0,0 +1,23 @@ +package com.engine.salary.entity.salaryBill.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description: 儿科 工资单查看小项 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EkSalaryBillDetailQueryParam { + + // 工资单id + private Long id; + + // 薪资项目id + private Long salaryItemId; + +} diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index c80d67dfe..778204ad1 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -277,13 +277,25 @@ public class SalaryAcctResultBO { Map> acctResultMap = SalaryEntityUtil.group2Map(salaryAccountingResults, SalaryAcctResultPO::getEmployeeId); Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getId, TaxAgentPO::getName); return salaryAcctEmployees.stream().map(e -> { - Map resultValueMap = SalaryEntityUtil.convert2Map(acctResultMap.getOrDefault(e.getEmployeeId(), Collections.emptyList()), + List acctResult = acctResultMap.getOrDefault(e.getEmployeeId(), Collections.emptyList()); + Map resultValueMap = SalaryEntityUtil.convert2Map(acctResult, SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue); + Map resultFeedbackValueMap = SalaryEntityUtil.convert2Map(acctResult.stream().filter(result -> StringUtils.isNotBlank(result.getEkFeedback())).collect(Collectors.toList()), + SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getEkFeedback); // 薪资项目的值 Map map = SalaryEntityUtil.convert2Map(salaryItems, o -> "" + o.getId(), o -> resultValueMap.getOrDefault(o.getId(), StringUtils.EMPTY)); // 薪资项目的字段类型(前端依据这个判断是否需要展示千分位) Map dataTypeMap = SalaryEntityUtil.convert2Map(salaryItems, salaryItemPO -> salaryItemPO.getId() + DATA_TYPE_SUFFIX, SalaryItemPO::getDataType); + // 薪资项目反馈信息的值 + Map feedbackMap = new HashMap<>(); + salaryItems.stream().forEach(item -> { + String feedback = resultFeedbackValueMap.get(item.getId()); + if (StringUtils.isNotBlank(feedback)) { + feedbackMap.put(item.getId() + "_feedback", feedback); + } + }); map.putAll(dataTypeMap); + map.putAll(feedbackMap); // 人员信息字段的值 Map fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(e.getEmployeeId()), e, true); for (SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields) { diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultFeedBackParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultFeedBackParam.java new file mode 100644 index 000000000..7fdcea4c4 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultFeedBackParam.java @@ -0,0 +1,30 @@ +package com.engine.salary.entity.salaryacct.param; + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @ClassName SalaryAcctResultFeedBackParam + * @author Harryxzy + * @date 2025/1/8 11:11 + * @description 儿科 反馈参数 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SalaryAcctResultFeedBackParam { + // 反馈内容 + private String feedback; + + //薪资核算人员Id + @DataCheck(require = true,message = "薪资核算人员不能为空") + private Long acctEmpId; + + //薪资项目的Id + @DataCheck(require = true,message = "薪资项目不能为空") + private Long salaryItemId; +} diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultPO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultPO.java index 4df634452..56a0cc013 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultPO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultPO.java @@ -111,6 +111,8 @@ public class SalaryAcctResultPO { @ElogTransform( name="更新时间" ) private Date updateTime; + private String ekFeedback; + //条件 private Collection ids; private Collection salaryAcctRecordIds; diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultTempPO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultTempPO.java index 3e985265e..fae4d7ca5 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultTempPO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultTempPO.java @@ -99,6 +99,8 @@ public class SalaryAcctResultTempPO { */ private Date updateTime; + private String ekFeedback; + //条件 Collection ids; diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.java index 545b5a81b..e8412ca10 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.java +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.java @@ -134,4 +134,8 @@ public interface SalaryAcctResultMapper { void batchUpdateOriginResultValue(@Param("collection") List subSalaryAcctResultValues); List getAcctEmpIsExist(@Param("empIds")List empIds); + + void clearFeedback(@Param("id")Long id); + + void saveFeedback(@Param("id")Long id, @Param("feedback")String feedback); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.xml index 8e5696f95..9d243d296 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.xml @@ -35,6 +35,7 @@ , t.update_time , t.delete_type , t.tenant_key + , t.ek_feedback @@ -450,7 +451,7 @@ INSERT INTO hrsa_salary_acct_result( salary_sob_id, salary_acct_emp_id, salary_acct_record_id, employee_id, - tax_agent_id, salary_item_id, result_value, origin_result_value, creator, create_time, update_time, delete_type, tenant_key) + tax_agent_id, salary_item_id, result_value, origin_result_value, creator, create_time, update_time, delete_type, ek_feedback, tenant_key) VALUES ( @@ -466,13 +467,14 @@ #{item.createTime}, #{item.updateTime}, #{item.deleteType}, + #{item.ekFeedback}, #{item.tenantKey} ) INSERT INTO hrsa_salary_acct_result( salary_sob_id, salary_acct_emp_id, salary_acct_record_id, employee_id, - tax_agent_id, salary_item_id, result_value, origin_result_value, creator, create_time, update_time, delete_type, tenant_key) + tax_agent_id, salary_item_id, result_value, origin_result_value, creator, create_time, update_time, delete_type, ek_feedback, tenant_key) select @@ -488,6 +490,7 @@ #{item.createTime,jdbcType=DATE}, #{item.updateTime,jdbcType=DATE}, #{item.deleteType,jdbcType=INTEGER}, + #{item.ekFeedback,jdbcType=VARCHAR}, #{item.tenantKey,jdbcType=VARCHAR} from dual @@ -495,7 +498,7 @@ INSERT INTO hrsa_salary_acct_result(salary_sob_id, salary_acct_emp_id, salary_acct_record_id, employee_id, - tax_agent_id, salary_item_id, result_value, origin_result_value, creator, create_time, update_time, delete_type, tenant_key) + tax_agent_id, salary_item_id, result_value, origin_result_value, creator, create_time, update_time, delete_type, ek_feedback, tenant_key) VALUES ( #{item.salarySobId}, @@ -510,6 +513,7 @@ #{item.createTime}, #{item.updateTime}, #{item.deleteType}, + #{item.ekFeedback}, #{item.tenantKey} ) @@ -618,4 +622,12 @@ + + update hrsa_salary_acct_result set ek_feedback ='' where id=#{id} + + + + update hrsa_salary_acct_result set ek_feedback =#{feedback} where id=#{id} + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultTempMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultTempMapper.xml index 5397380ec..08706e204 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultTempMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultTempMapper.xml @@ -4,7 +4,7 @@ INSERT INTO hrsa_acct_result_temp(salary_sob_id, salary_acct_emp_id, salary_acct_record_id, employee_id, - tax_agent_id, salary_item_id, result_value, origin_result_value, calculate_key, creator, create_time, update_time, delete_type, + tax_agent_id, salary_item_id, result_value, origin_result_value, calculate_key, creator, create_time, update_time, delete_type,ek_feedback, tenant_key) VALUES @@ -22,13 +22,14 @@ #{item.createTime}, #{item.updateTime}, #{item.deleteType}, + #{item.ekFeedback}, #{item.tenantKey} ) INSERT INTO hrsa_acct_result_temp(salary_sob_id, salary_acct_emp_id, salary_acct_record_id, employee_id, - tax_agent_id, salary_item_id, result_value, origin_result_value,calculate_key, creator, create_time, update_time, delete_type, + tax_agent_id, salary_item_id, result_value, origin_result_value,calculate_key, creator, create_time, update_time, delete_type,ek_feedback, tenant_key) @@ -46,6 +47,7 @@ #{item.createTime,jdbcType=DATE}, #{item.updateTime,jdbcType=DATE}, #{item.deleteType,jdbcType=INTEGER}, + #{item.ekFeedback,jdbcType=VARCHAR}, #{item.tenantKey,jdbcType=VARCHAR} from dual @@ -53,7 +55,7 @@ INSERT INTO hrsa_acct_result_temp( salary_sob_id, salary_acct_emp_id, salary_acct_record_id, employee_id, - tax_agent_id, salary_item_id, result_value, origin_result_value, calculate_key, creator, create_time, update_time, delete_type, + tax_agent_id, salary_item_id, result_value, origin_result_value, calculate_key, creator, create_time, update_time, delete_type,ek_feedback, tenant_key) VALUES ( @@ -69,7 +71,8 @@ #{item.creator}, #{item.createTime}, #{item.updateTime}, - #{item.deleteType}, + #{item.deleteType}, + #{item.ekFeedback}, #{item.tenantKey} ) @@ -136,6 +139,7 @@ , t.update_time , t.delete_type , t.tenant_key + , t.ek_feedback diff --git a/src/com/engine/salary/service/SalaryAcctExcelService.java b/src/com/engine/salary/service/SalaryAcctExcelService.java index e23815ba3..0dce82a67 100644 --- a/src/com/engine/salary/service/SalaryAcctExcelService.java +++ b/src/com/engine/salary/service/SalaryAcctExcelService.java @@ -145,6 +145,8 @@ public interface SalaryAcctExcelService { */ Map exportTemplateList(SalaryAcctResultTemplateSaveParam param); + XSSFWorkbook exportSalaryApprovalAcctResult(SalaryAcctResultQueryParam param); + // // /** // * 薪资核算结果校验异常导出 diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index ea6c2fe30..d4e375662 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -217,4 +217,16 @@ public interface SalaryAcctResultService { * @param param */ void batchUpdate(SalaryAcctResultBatchUpdateParam param); + + /** + * 儿科医院 删除反馈 + * @param param + */ + void deleteFeedback(SalaryAcctResultFeedBackParam param); + + /** + * 保存反馈信息 + * @param param + */ + void saveFeedback(SalaryAcctResultFeedBackParam param); } diff --git a/src/com/engine/salary/service/SalaryApprovalRuleService.java b/src/com/engine/salary/service/SalaryApprovalRuleService.java index 957971422..4a541d8e0 100644 --- a/src/com/engine/salary/service/SalaryApprovalRuleService.java +++ b/src/com/engine/salary/service/SalaryApprovalRuleService.java @@ -8,6 +8,7 @@ import com.engine.salary.entity.salarysob.dto.SalaryApprovalDTO; import com.engine.salary.entity.salarysob.param.ApprovalRequestSaveParam; import com.engine.salary.entity.salarysob.param.SalaryApprovalQueryParam; import com.engine.salary.entity.salarysob.po.SalaryApprovalRulePO; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.util.Collection; import java.util.List; @@ -119,5 +120,4 @@ public interface SalaryApprovalRuleService { Map sumRow(SalaryAcctResultQueryParam queryParam); - } diff --git a/src/com/engine/salary/service/SalaryBillService.java b/src/com/engine/salary/service/SalaryBillService.java index 4878df87b..bbf071d9a 100644 --- a/src/com/engine/salary/service/SalaryBillService.java +++ b/src/com/engine/salary/service/SalaryBillService.java @@ -1,6 +1,7 @@ package com.engine.salary.service; import com.engine.salary.entity.salaryBill.dto.SalaryBillSendDTO; +import com.engine.salary.entity.salaryBill.param.EkSalaryBillDetailQueryParam; import com.engine.salary.entity.salaryBill.param.SalaryExportPdfParam; import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; import com.engine.salary.entity.salaryBill.po.SalarySendPO; @@ -64,6 +65,12 @@ public interface SalaryBillService { */ SalaryBillSendDTO buildSendParams(SalarySendPO salarySend, String taxAgentName, SalaryTemplatePO salaryTemplate); + List> listDetailSalaryBill(EkSalaryBillDetailQueryParam param); + + Map listDelistSalaryBillJjfptailSalaryBill(EkSalaryBillDetailQueryParam param); + + Map listSalaryBillLwf(EkSalaryBillDetailQueryParam param); + /** * 工资单撤回 * diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index d4563d8d2..81919dc16 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -162,6 +162,9 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId, Collectors.toList()); List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); Map empItemValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOS, p -> p.getSalaryAcctEmpId() + "_" + p.getSalaryItemId(), SalaryAcctResultPO::getResultValue); + List salaryAcctResultFeedbackList = salaryAcctResultPOS.stream().filter(result -> StringUtils.isNotBlank(result.getEkFeedback())).collect(Collectors.toList()); + Map empFeedbackValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultFeedbackList, p -> p.getSalaryAcctEmpId() + "_" + p.getSalaryItemId(), SalaryAcctResultPO::getEkFeedback); + sw.stop(); // 查询浮动薪资 sw.start("查询浮动薪资"); @@ -276,6 +279,8 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc if (lockItems != null && lockItems.contains(salaryItemId)) { resultValue = empItemValueMap.getOrDefault(salaryAcctEmployeePOId + "_" + salaryItemId, StringUtils.EMPTY); } + // 反馈信息 + String feedback = empFeedbackValueMap.getOrDefault(salaryAcctEmployeePOId + "_" + salaryItemId, StringUtils.EMPTY); // 将已经计算过的薪资项目的值转换成公式变量的值添加到集合中 String key = SalaryFormulaReferenceEnum.SALARY_ITEM.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + salaryItemPO.getCode(); formulaVarValueMap.put(key, resultValue); @@ -297,6 +302,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc .setCreateTime(now) .setUpdateTime(now) .setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .setEkFeedback(feedback) .setDeleteType(0); salaryAcctResultTempPOS.add(salaryAcctResultTempPO); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 67aff3ecd..95acf6854 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -25,6 +25,7 @@ import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salaryacct.po.*; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO; +import com.engine.salary.entity.salarysob.dto.SalaryApprovalDTO; import com.engine.salary.entity.salarysob.dto.SalarySobEmpFieldDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO; @@ -1596,6 +1597,91 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc return resultMap; } + + @Override + public XSSFWorkbook exportSalaryApprovalAcctResult(SalaryAcctResultQueryParam queryParam) { + + ValidUtil.doValidator(queryParam); + // 审批信息 + SalaryApprovalDTO approvalInfoByRecordId = getSalaryApprovalRuleService(user).getApprovalInfoByRecordId(queryParam.getSalaryAcctRecordId()); + + // 查询薪资核算记录 + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId()); + if (Objects.isNull(salaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); + } + + // 查询薪资核算结果 + List> resultMapList = getSalaryAcctResultService(user).listByParam(queryParam); + + // 构建薪资核算结果审批列表的表头 + List columns = Lists.newArrayList(); + // 查询薪资账套的员工信息字段 + List salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salarySobEmpFieldDTOS = new SalarySobItemAggregateBO().buildEmpField(salarySobEmpFieldPOS); + // 获取薪资项目信息 + List salaryItemPOS = getSalaryItemService(user).listAll(); + Map salaryItemWidthMap = SalaryEntityUtil.convert2Map(salaryItemPOS, SalaryItemPO::getId, SalaryItemPO::getWidth); + // 员工信息字段 + for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobEmpFieldDTOS) { + columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobEmpFieldDTO.getFieldName(), 0), salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId())); + } + // 薪资项目分组下的薪资项目 + for (SalaryApprovalDTO.approvalItemGroup groupDTO : approvalInfoByRecordId.getApprovalItemGroup()) { + if (CollectionUtils.isEmpty(groupDTO.getApprovalItems())) { + continue; + } + List childrenColumns = Lists.newArrayList(); + for (SalaryApprovalDTO.approvalItem approvalItemDTO : groupDTO.getApprovalItems()) { + childrenColumns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(approvalItemDTO.getSalaryItemName(), salaryItemWidthMap.getOrDefault(approvalItemDTO.getSalaryItemId(), 0) == null ? 0 : salaryItemWidthMap.getOrDefault(approvalItemDTO.getSalaryItemId(), 0)), approvalItemDTO.getSalaryItemName(), "" + approvalItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue().toString())); + } + WeaTableColumnGroup weaTableColumnWapper = new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(groupDTO.getGroupName(), 0), groupDTO.getGroupName(), groupDTO.getGroupName(), childrenColumns); + columns.add(weaTableColumnWapper); + } + // excel导出的表头 + List headerColumnGroup = Lists.newArrayList(); + parseHeader(headerColumnGroup, columns); + + //合计 + boolean total = false; + SalarySysConfPO openSum = getSalarySysConfService(user).getOneByCode(OPEN_ACCT_RESULT_SUM); + if (openSum != null && StringUtils.isNotBlank(openSum.getConfValue()) && OpenEnum.parseByValue(openSum.getConfValue()) == OpenEnum.OPEN) { + total = true; + Map sumRow = getSalaryAcctResultService(user).sumRow(queryParam); + sumRow.forEach((k, v) -> { + if (NumberUtils.isCreatable(v.toString())) { + sumRow.put(k, new BigDecimal(v.toString())); + } + }); + if (sumRow != null) { + sumRow.put("taxAgentName", "总计"); + resultMapList.add(sumRow); + } + } + + // excel导出的数据 + String DATA_TYPE_SUFFIX = "_type"; + List> rows = new ArrayList<>(); + // excel导出的表头 + List headerList = new ArrayList<>(headerColumnGroup); + rows.add(headerList); + for (Map map : resultMapList) { + List row = Lists.newArrayListWithExpectedSize(headerColumnGroup.size()); + for (WeaTableColumnGroup weaTableColumn : headerColumnGroup) { + String fieldType = (String) map.getOrDefault(weaTableColumn.getColumn().toString() + DATA_TYPE_SUFFIX, StringUtils.EMPTY); + if (StringUtils.equals("number", fieldType) && map.get(weaTableColumn.getColumn()) != null && NumberUtil.isNumber(map.get(weaTableColumn.getColumn()).toString())) { + row.add(new BigDecimal(StringUtils.isBlank(map.get(weaTableColumn.getColumn()).toString()) ? "0" : map.get(weaTableColumn.getColumn()).toString())); + } else { + row.add(map.getOrDefault(weaTableColumn.getColumn(), StringUtils.EMPTY)); + } + + } + rows.add(row); + } + + String sheetName = "薪资核算结果"; + return ExcelUtilPlus.genWorkbookWithChildTitleColumnWithExcelFormat(rows, sheetName, total); + } // @Override // public Map exportCheckResult( // SalaryCheckResultExportParam exportParam, diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 67e873658..8dd766a31 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -1245,4 +1245,31 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } } + + @Override + public void deleteFeedback(SalaryAcctResultFeedBackParam param) { + if (param.getAcctEmpId() == null || param.getSalaryItemId() == null) { + throw new SalaryRunTimeException("参数错误"); + } + List acctResultPOList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(Collections.singletonList(param.getAcctEmpId()), Collections.singletonList(param.getSalaryItemId())); + if (CollectionUtils.isEmpty(acctResultPOList)) { + throw new SalaryRunTimeException("核算结果不存在或已被删除"); + } + getSalaryAcctResultMapper().clearFeedback(acctResultPOList.get(0).getId()); + } + + @Override + public void saveFeedback(SalaryAcctResultFeedBackParam param) { + if (param.getAcctEmpId() == null || param.getSalaryItemId() == null) { + throw new SalaryRunTimeException("参数错误"); + } + List acctResultPOList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(Collections.singletonList(param.getAcctEmpId()), Collections.singletonList(param.getSalaryItemId())); + if (CollectionUtils.isEmpty(acctResultPOList)) { + throw new SalaryRunTimeException("核算结果不存在或已被删除"); + } + if (StringUtils.isBlank(param.getFeedback())) { + throw new SalaryRunTimeException("反馈内容不能为空"); + } + getSalaryAcctResultMapper().saveFeedback(acctResultPOList.get(0).getId(), param.getFeedback()); + } } \ No newline at end of file diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index 4df8aa8f2..1e99f2beb 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -4,19 +4,22 @@ import cn.hutool.core.io.FileUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.api.formmode.mybatis.util.SqlProxyHandle; +import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.biz.SalarySendBiz; import com.engine.salary.biz.SalarySendInfoBiz; import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.HrmSalaryPayrollConf; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.hrm.DeptInfo; import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.salaryBill.bo.SalaryBillBO; import com.engine.salary.entity.salaryBill.bo.SalaryTemplateBO; import com.engine.salary.entity.salaryBill.dto.*; +import com.engine.salary.entity.salaryBill.param.EkSalaryBillDetailQueryParam; import com.engine.salary.entity.salaryBill.param.SalaryExportPdfParam; import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; import com.engine.salary.entity.salaryBill.param.SalarySendInfoQueryParam; @@ -25,6 +28,7 @@ import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.OperateTypeEnum; @@ -46,9 +50,11 @@ import com.weaver.util.threadPool.entity.LocalRunnable; import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.collections.CollectionUtils; - import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; import weaver.hrm.User; import java.io.File; @@ -122,6 +128,10 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService return ServiceUtil.getService(SalaryBillBaseSetServiceImpl.class, user); } + private SalaryItemService getSalaryItemService(User user) { + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + private SalarySendInfoBiz salarySendInfoMapper = new SalarySendInfoBiz(); private SalarySendBiz mapper = new SalarySendBiz(); @@ -436,6 +446,207 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService .build(); } + @Override + public List> listDetailSalaryBill(EkSalaryBillDetailQueryParam param) { + SalarySendInfoPO sendInfoPO = getSalarySendInfoMapper().getById(param.getId()); + if (sendInfoPO == null) { + throw new SalaryRunTimeException("工资单不存在或已被删除"); + } + List> resultList = new ArrayList<>(); + RecordSet rs = new RecordSet(); + rs.execute("select xzdx,xzxx from uf_gzdxspz where xzdx='"+param.getSalaryItemId()+"'"); + String xzxxStr = ""; + while (rs.next()) { + xzxxStr = rs.getString("xzxx"); + } + List xzxxItemIds = Arrays.asList(xzxxStr.split(",")).stream().filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); + // 获取薪资核算结果 + List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIdAndEmployeeIds(sendInfoPO.getSalaryAcctRecordId(), Collections.singletonList(sendInfoPO.getEmployeeId())); + if (CollectionUtils.isNotEmpty(salaryAcctEmployeeList)) { + // 获取薪资核算结果 + List acctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(Collections.singletonList(salaryAcctEmployeeList.get(0).getId()), xzxxItemIds); + Map resultMap = SalaryEntityUtil.convert2Map(acctResultList, SalaryAcctResultPO::getSalaryItemId, result -> Util.null2String(result.getResultValue())); + // 获取薪资项目 + List salaryItemList = getSalaryItemService(user).listByIds(xzxxItemIds); + Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItemList, SalaryItemPO::getId); + for (Long salaryItemId : xzxxItemIds) { + SalaryItemPO salaryItemPO = salaryItemMap.get(salaryItemId); + if (salaryItemPO != null) { + Map itemValueMap = new HashMap<>(); + itemValueMap.put("id",salaryItemId); + itemValueMap.put("salaryItemId",salaryItemId); + itemValueMap.put("salaryItemValue",resultMap.get(salaryItemId)); + itemValueMap.put("name", salaryItemPO.getName()); + itemValueMap.put("originName", null); + itemValueMap.put("salaryItemShowName", null); + itemValueMap.put("sortedIndex", 0); + resultList.add(itemValueMap); + } + } + } + return resultList; + } + + @Override + public Map listDelistSalaryBillJjfptailSalaryBill(EkSalaryBillDetailQueryParam param) { + Map resultMap = new HashMap<>(); + SalarySendInfoPO sendInfoPO = getSalarySendInfoMapper().getById(param.getId()); + if (sendInfoPO == null) { + throw new SalaryRunTimeException("工资单不存在或已被删除"); + } + BaseBean baseBean = new BaseBean(); + RecordSet rs = new RecordSet(); + DataCollectionEmployee employee = getSalaryEmployeeService(user).getEmployeeById(sendInfoPO.getEmployeeId()); + if(employee == null) { + throw new SalaryRunTimeException("人员信息不存在"); + } + // 根据姓名获取该员工在视图中对应的id + List yyxxIds = new ArrayList<>(); + rs.execute("select id from yyxx where name = '" + employee.getUsername() + "'"); + while (rs.next()) { + yyxxIds.add(rs.getString("id")); + } + + // 表头 + List columns = new ArrayList<>(); + columns.add( new WeaTableColumn("10%", "奖金发放月份", "jjffyf")); + columns.add( new WeaTableColumn("10%", "姓名", "name")); + columns.add( new WeaTableColumn("10%", "所属科室", "ks")); + columns.add( new WeaTableColumn("10%", "合计", "hj")); + columns.add( new WeaTableColumn("10%", "奖金", "jj")); + columns.add( new WeaTableColumn("10%", "论文及课题类", "lwjktl")); + columns.add( new WeaTableColumn("10%", "岗位津贴", "gwjt")); + columns.add( new WeaTableColumn("10%", "劳务", "lw")); + columns.add( new WeaTableColumn("10%", "专家门诊", "zjmz")); + columns.add( new WeaTableColumn("10%", "教学", "jx")); + columns.add( new WeaTableColumn("10%", "协作劳务", "xzlw")); + columns.add( new WeaTableColumn("10%", "住房补贴", "zfbt")); + columns.add( new WeaTableColumn("10%", "会诊费", "hzf")); + columns.add( new WeaTableColumn("10%", "其他", "qt")); + resultMap.put("columns", columns); + + // 获取核算中工资号薪资项目id + Long gzhSalaryItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("fddxfsekyy", "gzh_salary_item_id")); + // 获取薪资核算结果 + List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIdAndEmployeeIds(sendInfoPO.getSalaryAcctRecordId(), Collections.singletonList(sendInfoPO.getEmployeeId())); + List> resultList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(salaryAcctEmployeeList)) { + // 获取薪资核算结果 + List acctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(Collections.singletonList(salaryAcctEmployeeList.get(0).getId()), Collections.singletonList(gzhSalaryItemId)); + if (CollectionUtils.isEmpty(acctResultList) || CollectionUtils.isEmpty(yyxxIds)) { + return resultMap; + } + String gzhValue = acctResultList.get(0).getResultValue(); + // 查询台账数据 + rs.execute("select a.jjffyf,d.name,b.ks,b.hj,b.jj,b.lwjktl,b.gwjt,b.lw,b.zjmz,b.jx,b.xzlw,b.zfbt,b.hzf,b.qt from uf_jjedfp a " + + "left join uf_jjedfp_dt1 b on a.id = b.mainid " + + "left join uf_jjedfp_dt2 c on a.id = c.mainid " + + "left join yyxx d on b.xm = d.id " + + "where a.jjffyf = '"+SalaryDateUtil.getFormatYearMonth(sendInfoPO.getSalaryMonth())+"' and b.gzh = '"+gzhValue + + "' and b.xm in ('"+StringUtils.join(yyxxIds, "','")+"')"); + while (rs.next()) { + String ks = rs.getString("ks"); + String ksName = ""; + if (NumberUtils.isCreatable(ks)) { + DeptInfo deptInfo = getSalaryEmployeeService(user).getDeptInfoById(Long.valueOf(ks)); + ksName = (deptInfo == null ? "" : deptInfo.getName()); + } + HashMap resultValue = new HashMap<>(); + resultValue.put("jjffyf", rs.getString("jjffyf")); + resultValue.put("name", rs.getString("name")); + resultValue.put("ks", ksName); + resultValue.put("hj", rs.getString("hj")); + resultValue.put("jj", rs.getString("jj")); + resultValue.put("lwjktl", rs.getString("lwjktl")); + resultValue.put("gwjt", rs.getString("gwjt")); + resultValue.put("lw", rs.getString("lw")); + resultValue.put("zjmz", rs.getString("zjmz")); + resultValue.put("jx", rs.getString("jx")); + resultValue.put("xzlw", rs.getString("xzlw")); + resultValue.put("zfbt", rs.getString("zfbt")); + resultValue.put("hzf", rs.getString("hzf")); + resultValue.put("qt", rs.getString("qt")); + resultList.add(resultValue); + } + resultMap.put("data", resultList); + } + return resultMap; + + } + + @Override + public Map listSalaryBillLwf(EkSalaryBillDetailQueryParam param) { + Map resultMap = new HashMap<>(); + SalarySendInfoPO sendInfoPO = getSalarySendInfoMapper().getById(param.getId()); + if (sendInfoPO == null) { + throw new SalaryRunTimeException("工资单不存在或已被删除"); + } + BaseBean baseBean = new BaseBean(); + RecordSet rs = new RecordSet(); + DataCollectionEmployee employee = getSalaryEmployeeService(user).getEmployeeById(sendInfoPO.getEmployeeId()); + if(employee == null) { + throw new SalaryRunTimeException("人员信息不存在"); + } + + // 表头 + List columns = new ArrayList<>(); + columns.add( new WeaTableColumn("10%", "归口部门", "gkbm")); + columns.add( new WeaTableColumn("10%", "姓名", "xm")); + columns.add( new WeaTableColumn("10%", "工资号", "gzh")); + columns.add( new WeaTableColumn("10%", "工号", "gh")); + columns.add( new WeaTableColumn("10%", "劳务所属期起", "lwssqq")); + columns.add( new WeaTableColumn("10%", "劳务所属期止", "lwssqz")); + columns.add( new WeaTableColumn("10%", "手机号", "sjh")); + columns.add( new WeaTableColumn("10%", "科室", "ks")); + columns.add( new WeaTableColumn("10%", "金额(元)税前", "je")); + columns.add( new WeaTableColumn("10%", "项目名称", "xmmc")); + columns.add( new WeaTableColumn("10%", "薪资发放所属账期", "xzffssq")); + columns.add( new WeaTableColumn("10%", "报销类型", "bxlx")); + resultMap.put("columns", columns); + + // 获取核算中工资号薪资项目id + Long gzhSalaryItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("fddxfsekyy", "gzh_salary_item_id")); + // 获取报销类型的fieldid + Long bxlxFieldId = SalaryEntityUtil.string2Long(baseBean.getPropValue("fddxfsekyy", "bxlx_field_id")); + + // 获取薪资核算结果 + List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIdAndEmployeeIds(sendInfoPO.getSalaryAcctRecordId(), Collections.singletonList(sendInfoPO.getEmployeeId())); + List> resultList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(salaryAcctEmployeeList)) { + // 获取薪资核算结果 + List acctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(Collections.singletonList(salaryAcctEmployeeList.get(0).getId()), Collections.singletonList(gzhSalaryItemId)); + if (CollectionUtils.isEmpty(acctResultList)) { + return resultMap; + } + String gzhValue = acctResultList.get(0).getResultValue(); + // 查询台账数据 + rs.execute("SELECT a.gkbm,a.xm,a.gzh,a.gh,a.lwszqq,a.lwszqz,a.sjh,a.ks,a.jeysq,c.xmmc,a.xzffszzq,b.selectname as bxlx " + + "FROM uf_lwf a left join workflow_selectitem b on b.fieldid="+bxlxFieldId+" and a.bxlx=b.SELECTVALUE " + + "left join uf_xmxxtz c on a.xmmc = c.id " + + "where gzh='"+gzhValue+"' and xm ="+employee.getEmployeeId()+" and xzffszzq='"+SalaryDateUtil.getFormatYearMonth(sendInfoPO.getSalaryMonth())+"'"); + while (rs.next()) { + HashMap resultValue = new HashMap<>(); + DeptInfo gkbm = getSalaryEmployeeService(user).getDeptInfoById(Long.valueOf(rs.getInt("gkbm"))); + resultValue.put("gkbm", gkbm == null ? "" : gkbm.getName()); + resultValue.put("xm", employee.getUsername()); + resultValue.put("gzh", rs.getString("gzh")); + resultValue.put("gh", rs.getString("gh")); + resultValue.put("lwssqq", rs.getString("lwszqq")); + resultValue.put("lwssqz", rs.getString("lwszqz")); + resultValue.put("sjh", rs.getString("sjh")); + DeptInfo ks = getSalaryEmployeeService(user).getDeptInfoById(Long.valueOf(rs.getInt("ks"))); + resultValue.put("ks", ks == null ? "" : ks.getName()); + resultValue.put("je", rs.getString("jeysq")); + resultValue.put("xmmc", rs.getString("xmmc")); + resultValue.put("xzffssq", rs.getString("xzffszzq")); + resultValue.put("bxlx", rs.getString("bxlx")); + resultList.add(resultValue); + } + resultMap.put("data", resultList); + } + return resultMap; + } + /** * 获取可发送数据 * diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 30662220c..aeafd279d 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -79,6 +79,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import weaver.common.MessageUtil; +import weaver.conn.RecordSet; import weaver.general.Util; import weaver.hrm.User; import weaver.hrm.company.SubCompanyComInfo; @@ -97,6 +98,7 @@ import java.util.stream.Collectors; import static com.engine.salary.cache.SalaryCacheKey.SALARY_CACHE_SMS_CODE; import static com.engine.salary.constant.HrmSalaryPayrollConf.GEN_PDF; +import static com.engine.salary.constant.HrmSalaryPayrollConf.baseBean; /** * @Description: 工资单发放 @@ -588,6 +590,22 @@ public class SalarySendServiceImpl extends Service implements SalarySendService throw new SalaryRunTimeException("薪资核算记录不存在!"); } List> salaryAcctResultS = null; + + // 获取奖金、劳务2个项目的薪资项目id + Long jjSalaryItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("fddxfsekyy", "jj_salary_item_id")); + Long lwSalaryItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("fddxfsekyy", "lw_salary_item_id")); + // 获取哪些薪资项目能够展开详情 + List canShowDeatilSalaryItemIds = new ArrayList<>(); + canShowDeatilSalaryItemIds.add(jjSalaryItemId.toString()); + canShowDeatilSalaryItemIds.add(lwSalaryItemId.toString()); + RecordSet rs = new RecordSet(); + rs.execute("select xzdx from uf_gzdxspz"); + while (rs.next()) { + String xzdx = rs.getString("xzdx"); + if (NumberUtils.isCreatable(xzdx)) { + canShowDeatilSalaryItemIds.add(xzdx); + } + } if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE) && !isReplenish) { // 该记录回算过,并且获取的不是回算后的工资单 salaryAcctResultS = salaryAcctResultPOS.stream().map(m -> { @@ -626,6 +644,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService .get("resultValue"); e.setSalaryItemValue(o == null ? "" : (String) o); } + e.setCanShowDetail(canShowDeatilSalaryItemIds.contains(e.getSalaryItemId())); }); }); @@ -698,6 +717,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService map.put("showFeedback", "0"); } + // 获取奖金、劳务2个项目的薪资项目id + map.put("jjSalaryItemId", jjSalaryItemId); + map.put("lwSalaryItemId", lwSalaryItemId); // 记录查看日志 String targetName = taxAgentPO.getName() + "-" + SalaryDateUtil.getFormatYearMonth(salarySendInfo.getSalaryMonth()); diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index a196d53ef..78e6237b6 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -928,4 +928,34 @@ public class SalaryAcctController { } /**********************************线下对比 end*********************************/ + + /** + * 儿科医院 保存反馈 + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/acctresult/saveFeedback") + @Produces(MediaType.APPLICATION_JSON) + public String saveFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultFeedBackParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::saveFeedback, param); + } + + /** + * 儿科医院 删除反馈 + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/acctresult/deleteFeedback") + @Produces(MediaType.APPLICATION_JSON) + public String deleteFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultFeedBackParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::deleteFeedback, param); + } } diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 64437a579..b7e8e2a43 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -679,6 +679,52 @@ public class SalaryBillController { return new ResponseResult>(user).run(getSalarySendWrapper(user)::mySalaryBill, salaryInfoId); } + + /** + * 二开 工资单展开详情 + * + * @param param + * @return + */ + @POST + @Path("/listDetailSalaryBill") + @Produces(MediaType.APPLICATION_JSON) + public String listDetailSalaryBill(@Context HttpServletRequest request, @Context HttpServletResponse response, EkSalaryBillDetailQueryParam param) { + User user = null; + user = HrmUserVarify.getUser(request, response); + return new ResponseResult>>(user).run(getSalarySendWrapper(user)::listDetailSalaryBill, param); + } + + /** + * 二开 奖金数据穿透 + * + * @param param + * @return + */ + @POST + @Path("/listJjfp") + @Produces(MediaType.APPLICATION_JSON) + public String listSalaryBillJjfp(@Context HttpServletRequest request, @Context HttpServletResponse response, EkSalaryBillDetailQueryParam param) { + User user = null; + user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalarySendWrapper(user)::listSalaryBillJjfp, param); + } + + /** + * 二开 劳务数据穿透 + * + * @param param + * @return + */ + @POST + @Path("/listLwf") + @Produces(MediaType.APPLICATION_JSON) + public String listSalaryBillLwf(@Context HttpServletRequest request, @Context HttpServletResponse response, EkSalaryBillDetailQueryParam param) { + User user = null; + user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalarySendWrapper(user)::listSalaryBillLwf, param); + } + /** * 确认工资单 * diff --git a/src/com/engine/salary/web/SalarySobController.java b/src/com/engine/salary/web/SalarySobController.java index 3bf694a7b..4ad813365 100644 --- a/src/com/engine/salary/web/SalarySobController.java +++ b/src/com/engine/salary/web/SalarySobController.java @@ -652,6 +652,34 @@ public class SalarySobController { return new ResponseResult>(user).run(getSalaryApprovalWrapper(user)::listSalaryApprovalAcctResult, param); } + @POST + @Path("/salaryApproval/acctresult/export") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportSalaryApprovalAcctResult(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultQueryParam param) { + User user = HrmUserVarify.getUser(request, response); + try { + XSSFWorkbook workbook = getSalaryApprovalWrapper(user).exportSalaryApprovalAcctResult(param); + String time = LocalDate.now().toString(); + String fileName = "薪资核算" + time ; + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output). + header("Content-disposition", "attachment;filename=" + fileName). + header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + log.error("薪资核算导出失败",e); + throw e; + } + } + /** * 获取审批时薪资核算结果合计行 * @param request diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index 5bd00b417..49ed14ef3 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -278,6 +278,18 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult getSalaryAcctResultService(user).batchUpdate(param); } + /** + * 儿科医院 删除反馈 + * @param param + */ + public void deleteFeedback(SalaryAcctResultFeedBackParam param) { + getSalaryAcctResultService(user).deleteFeedback(param); + } + + public void saveFeedback(SalaryAcctResultFeedBackParam param) { + getSalaryAcctResultService(user).saveFeedback(param); + } + /** * 薪资核算-校验 * diff --git a/src/com/engine/salary/wrapper/SalaryApprovalWrapper.java b/src/com/engine/salary/wrapper/SalaryApprovalWrapper.java index 426c1d184..25943722c 100644 --- a/src/com/engine/salary/wrapper/SalaryApprovalWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryApprovalWrapper.java @@ -28,6 +28,7 @@ import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.math.NumberUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.User; import java.util.HashMap; @@ -66,6 +67,9 @@ public class SalaryApprovalWrapper extends Service { private SalaryItemService getSalaryItemService(User user) { return ServiceUtil.getService(SalaryItemServiceImpl.class, user); } + private SalaryAcctExcelService getSalaryAcctExcelService(User user) { + return (SalaryAcctExcelService) ServiceUtil.getService(SalaryAcctExcelServiceImpl.class, user); + } private SalarySysConfMapper getSalarySysConfMapper() { return SqlProxyHandle.getProxy(SalarySysConfMapper.class); @@ -174,4 +178,8 @@ public class SalaryApprovalWrapper extends Service { datas.put("sumRow", sumRow); return datas; } + + public XSSFWorkbook exportSalaryApprovalAcctResult(SalaryAcctResultQueryParam param) { + return getSalaryAcctExcelService(user).exportSalaryApprovalAcctResult(param); + } } diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 8bbba561c..6c1eb0de8 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -751,4 +751,16 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy public String genPdfBeforeExport(SalaryExportPdfParam salaryExportPdfParam) { return getSalaryBillService(user).genPdfBeforeExport(salaryExportPdfParam); } + + public List> listDetailSalaryBill(EkSalaryBillDetailQueryParam param) { + return getSalaryBillService(user).listDetailSalaryBill(param); + } + + public Map listSalaryBillJjfp(EkSalaryBillDetailQueryParam param) { + return getSalaryBillService(user).listDelistSalaryBillJjfptailSalaryBill(param); + } + + public Map listSalaryBillLwf(EkSalaryBillDetailQueryParam param) { + return getSalaryBillService(user).listSalaryBillLwf(param); + } }