复旦大学二开医院薪酬二开
This commit is contained in:
parent
e1b0725625
commit
0c3b541e3d
|
|
@ -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
|
||||
|
|
@ -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,查看方法如下图
|
||||
|
||||
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -37,4 +37,6 @@ public class SalaryTemplateSalaryItemListDTO {
|
|||
|
||||
// 顺序")
|
||||
private Integer sortedIndex;
|
||||
|
||||
private boolean canShowDetail;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -111,6 +111,8 @@ public class SalaryAcctResultPO {
|
|||
@ElogTransform( name="更新时间" )
|
||||
private Date updateTime;
|
||||
|
||||
private String ekFeedback;
|
||||
|
||||
//条件
|
||||
private Collection<Long> ids;
|
||||
private Collection<Long> salaryAcctRecordIds;
|
||||
|
|
|
|||
|
|
@ -99,6 +99,8 @@ public class SalaryAcctResultTempPO {
|
|||
*/
|
||||
private Date updateTime;
|
||||
|
||||
private String ekFeedback;
|
||||
|
||||
|
||||
//条件
|
||||
Collection<Long> ids;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
||||
<!-- 条件查询 -->
|
||||
|
|
|
|||
|
|
@ -145,6 +145,8 @@ public interface SalaryAcctExcelService {
|
|||
*/
|
||||
Map<String, Object> exportTemplateList(SalaryAcctResultTemplateSaveParam param);
|
||||
|
||||
XSSFWorkbook exportSalaryApprovalAcctResult(SalaryAcctResultQueryParam param);
|
||||
|
||||
//
|
||||
// /**
|
||||
// * 薪资核算结果校验异常导出
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
/**
|
||||
* 工资单撤回
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取可发送数据
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 确认工资单
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 薪资核算-校验
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue