复旦大学二开医院薪酬二开

This commit is contained in:
Harryxzy 2025-01-14 10:03:24 +08:00
parent e1b0725625
commit 0c3b541e3d
27 changed files with 625 additions and 11 deletions

View File

@ -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

View File

@ -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查看方法如下图

View File

@ -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);

View File

@ -37,4 +37,6 @@ public class SalaryTemplateSalaryItemListDTO {
// 顺序")
private Integer sortedIndex;
private boolean canShowDetail;
}

View File

@ -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;
}

View File

@ -277,13 +277,25 @@ public class SalaryAcctResultBO {
Map<Long, List<SalaryAcctResultPO>> acctResultMap = SalaryEntityUtil.group2Map(salaryAccountingResults, SalaryAcctResultPO::getEmployeeId);
Map<Long, String> taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getId, TaxAgentPO::getName);
return salaryAcctEmployees.stream().map(e -> {
Map<Long, Object> resultValueMap = SalaryEntityUtil.convert2Map(acctResultMap.getOrDefault(e.getEmployeeId(), Collections.emptyList()),
List<SalaryAcctResultPO> acctResult = acctResultMap.getOrDefault(e.getEmployeeId(), Collections.emptyList());
Map<Long, Object> resultValueMap = SalaryEntityUtil.convert2Map(acctResult,
SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue);
Map<Long, String> resultFeedbackValueMap = SalaryEntityUtil.convert2Map(acctResult.stream().filter(result -> StringUtils.isNotBlank(result.getEkFeedback())).collect(Collectors.toList()),
SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getEkFeedback);
// 薪资项目的值
Map<String, Object> map = SalaryEntityUtil.convert2Map(salaryItems, o -> "" + o.getId(), o -> resultValueMap.getOrDefault(o.getId(), StringUtils.EMPTY));
// 薪资项目的字段类型前端依据这个判断是否需要展示千分位
Map<String, String> dataTypeMap = SalaryEntityUtil.convert2Map(salaryItems, salaryItemPO -> salaryItemPO.getId() + DATA_TYPE_SUFFIX, SalaryItemPO::getDataType);
// 薪资项目反馈信息的值
Map<String, Object> 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<String, String> fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(e.getEmployeeId()), e, true);
for (SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields) {

View File

@ -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;
}

View File

@ -111,6 +111,8 @@ public class SalaryAcctResultPO {
@ElogTransform( name="更新时间" )
private Date updateTime;
private String ekFeedback;
//条件
private Collection<Long> ids;
private Collection<Long> salaryAcctRecordIds;

View File

@ -99,6 +99,8 @@ public class SalaryAcctResultTempPO {
*/
private Date updateTime;
private String ekFeedback;
//条件
Collection<Long> ids;

View File

@ -134,4 +134,8 @@ public interface SalaryAcctResultMapper {
void batchUpdateOriginResultValue(@Param("collection") List<SalaryAcctResultPO> subSalaryAcctResultValues);
List<Long> getAcctEmpIsExist(@Param("empIds")List<Long> empIds);
void clearFeedback(@Param("id")Long id);
void saveFeedback(@Param("id")Long id, @Param("feedback")String feedback);
}

View File

@ -35,6 +35,7 @@
, t.update_time
, t.delete_type
, t.tenant_key
, t.ek_feedback
</sql>
<!-- 查询全部 -->
@ -450,7 +451,7 @@
<insert id="batchInsert">
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
<foreach collection="collection" item="item" separator=",">
(
@ -466,13 +467,14 @@
#{item.createTime},
#{item.updateTime},
#{item.deleteType},
#{item.ekFeedback},
#{item.tenantKey}
)
</foreach>
</insert>
<insert id="batchInsert" databaseId="oracle">
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)
<foreach collection="collection" item="item" separator="union all">
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
</foreach>
@ -495,7 +498,7 @@
<insert id="batchInsert" databaseId="sqlserver">
<foreach collection="collection" item="item" separator=";">
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}
)
</foreach>
@ -618,4 +622,12 @@
</foreach>
</update>
<update id="clearFeedback">
update hrsa_salary_acct_result set ek_feedback ='' where id=#{id}
</update>
<update id="saveFeedback">
update hrsa_salary_acct_result set ek_feedback =#{feedback} where id=#{id}
</update>
</mapper>

View File

@ -4,7 +4,7 @@
<insert id="batchInsert">
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
<foreach collection="collection" item="item" separator=",">
@ -22,13 +22,14 @@
#{item.createTime},
#{item.updateTime},
#{item.deleteType},
#{item.ekFeedback},
#{item.tenantKey}
)
</foreach>
</insert>
<insert id="batchInsert" databaseId="oracle">
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)
<foreach collection="collection" item="item" separator="union all">
@ -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
</foreach>
@ -53,7 +55,7 @@
<insert id="batchInsert" databaseId="sqlserver">
<foreach collection="collection" item="item" separator=";">
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}
)
</foreach>
@ -136,6 +139,7 @@
, t.update_time
, t.delete_type
, t.tenant_key
, t.ek_feedback
</sql>
<!-- 条件查询 -->

View File

@ -145,6 +145,8 @@ public interface SalaryAcctExcelService {
*/
Map<String, Object> exportTemplateList(SalaryAcctResultTemplateSaveParam param);
XSSFWorkbook exportSalaryApprovalAcctResult(SalaryAcctResultQueryParam param);
//
// /**
// * 薪资核算结果校验异常导出

View File

@ -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);
}

View File

@ -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<String, Object> sumRow(SalaryAcctResultQueryParam queryParam);
}

View File

@ -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<Map<String, Object>> listDetailSalaryBill(EkSalaryBillDetailQueryParam param);
Map<String, Object> listDelistSalaryBillJjfptailSalaryBill(EkSalaryBillDetailQueryParam param);
Map<String, Object> listSalaryBillLwf(EkSalaryBillDetailQueryParam param);
/**
* 工资单撤回
*

View File

@ -162,6 +162,9 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc
List<Long> salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId, Collectors.toList());
List<SalaryAcctResultPO> salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds);
Map<String, String> empItemValueMap = SalaryEntityUtil.convert2Map(salaryAcctResultPOS, p -> p.getSalaryAcctEmpId() + "_" + p.getSalaryItemId(), SalaryAcctResultPO::getResultValue);
List<SalaryAcctResultPO> salaryAcctResultFeedbackList = salaryAcctResultPOS.stream().filter(result -> StringUtils.isNotBlank(result.getEkFeedback())).collect(Collectors.toList());
Map<String, String> 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);
}

View File

@ -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<Map<String, Object>> resultMapList = getSalaryAcctResultService(user).listByParam(queryParam);
// 构建薪资核算结果审批列表的表头
List<WeaTableColumnGroup> columns = Lists.newArrayList();
// 查询薪资账套的员工信息字段
List<SalarySobEmpFieldPO> salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId());
List<SalarySobEmpFieldDTO> salarySobEmpFieldDTOS = new SalarySobItemAggregateBO().buildEmpField(salarySobEmpFieldPOS);
// 获取薪资项目信息
List<SalaryItemPO> salaryItemPOS = getSalaryItemService(user).listAll();
Map<Long, Integer> 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<WeaTableColumnGroup> 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<WeaTableColumnGroup> 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<String, Object> 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<List<Object>> rows = new ArrayList<>();
// excel导出的表头
List<Object> headerList = new ArrayList<>(headerColumnGroup);
rows.add(headerList);
for (Map<String, Object> map : resultMapList) {
List<Object> 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<String, Object> exportCheckResult(
// SalaryCheckResultExportParam exportParam,

View File

@ -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<SalaryAcctResultPO> 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<SalaryAcctResultPO> 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());
}
}

View File

@ -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<Map<String, Object>> listDetailSalaryBill(EkSalaryBillDetailQueryParam param) {
SalarySendInfoPO sendInfoPO = getSalarySendInfoMapper().getById(param.getId());
if (sendInfoPO == null) {
throw new SalaryRunTimeException("工资单不存在或已被删除");
}
List<Map<String, Object>> 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<Long> xzxxItemIds = Arrays.asList(xzxxStr.split(",")).stream().filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList());
// 获取薪资核算结果
List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIdAndEmployeeIds(sendInfoPO.getSalaryAcctRecordId(), Collections.singletonList(sendInfoPO.getEmployeeId()));
if (CollectionUtils.isNotEmpty(salaryAcctEmployeeList)) {
// 获取薪资核算结果
List<SalaryAcctResultPO> acctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(Collections.singletonList(salaryAcctEmployeeList.get(0).getId()), xzxxItemIds);
Map<Long, String> resultMap = SalaryEntityUtil.convert2Map(acctResultList, SalaryAcctResultPO::getSalaryItemId, result -> Util.null2String(result.getResultValue()));
// 获取薪资项目
List<SalaryItemPO> salaryItemList = getSalaryItemService(user).listByIds(xzxxItemIds);
Map<Long, SalaryItemPO> salaryItemMap = SalaryEntityUtil.convert2Map(salaryItemList, SalaryItemPO::getId);
for (Long salaryItemId : xzxxItemIds) {
SalaryItemPO salaryItemPO = salaryItemMap.get(salaryItemId);
if (salaryItemPO != null) {
Map<String, Object> 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<String, Object> listDelistSalaryBillJjfptailSalaryBill(EkSalaryBillDetailQueryParam param) {
Map<String, Object> 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<String> yyxxIds = new ArrayList<>();
rs.execute("select id from yyxx where name = '" + employee.getUsername() + "'");
while (rs.next()) {
yyxxIds.add(rs.getString("id"));
}
// 表头
List<WeaTableColumn> 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<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIdAndEmployeeIds(sendInfoPO.getSalaryAcctRecordId(), Collections.singletonList(sendInfoPO.getEmployeeId()));
List<Map<String, String>> resultList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(salaryAcctEmployeeList)) {
// 获取薪资核算结果
List<SalaryAcctResultPO> 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<String, String> 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<String, Object> listSalaryBillLwf(EkSalaryBillDetailQueryParam param) {
Map<String, Object> 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<WeaTableColumn> 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<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIdAndEmployeeIds(sendInfoPO.getSalaryAcctRecordId(), Collections.singletonList(sendInfoPO.getEmployeeId()));
List<Map<String, String>> resultList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(salaryAcctEmployeeList)) {
// 获取薪资核算结果
List<SalaryAcctResultPO> 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<String, String> 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;
}
/**
* 获取可发送数据
*

View File

@ -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<Map<String, Object>> 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<String> 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());

View File

@ -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<SalaryAcctResultFeedBackParam, String>(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<SalaryAcctResultFeedBackParam, String>(user).run(getSalaryAcctResultWrapper(user)::deleteFeedback, param);
}
}

View File

@ -679,6 +679,52 @@ public class SalaryBillController {
return new ResponseResult<Long, Map<String, Object>>(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<EkSalaryBillDetailQueryParam, List<Map<String, Object>>>(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<EkSalaryBillDetailQueryParam, Map<String, Object>>(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<EkSalaryBillDetailQueryParam, Map<String, Object>>(user).run(getSalarySendWrapper(user)::listSalaryBillLwf, param);
}
/**
* 确认工资单
*

View File

@ -652,6 +652,34 @@ public class SalarySobController {
return new ResponseResult<SalaryAcctResultQueryParam, Map<String, Object>>(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

View File

@ -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);
}
/**
* 薪资核算-校验
*

View File

@ -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);
}
}

View File

@ -751,4 +751,16 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy
public String genPdfBeforeExport(SalaryExportPdfParam salaryExportPdfParam) {
return getSalaryBillService(user).genPdfBeforeExport(salaryExportPdfParam);
}
public List<Map<String, Object>> listDetailSalaryBill(EkSalaryBillDetailQueryParam param) {
return getSalaryBillService(user).listDetailSalaryBill(param);
}
public Map<String, Object> listSalaryBillJjfp(EkSalaryBillDetailQueryParam param) {
return getSalaryBillService(user).listDelistSalaryBillJjfptailSalaryBill(param);
}
public Map<String, Object> listSalaryBillLwf(EkSalaryBillDetailQueryParam param) {
return getSalaryBillService(user).listSalaryBillLwf(param);
}
}