工资单预览
This commit is contained in:
parent
db391f01c4
commit
64e34d6d08
|
|
@ -0,0 +1,32 @@
|
||||||
|
package com.engine.salary.entity.salaryBill.param;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工资单预览参数
|
||||||
|
* <p>Copyright: Copyright (c) 2024</p>
|
||||||
|
* <p>Company: 泛微软件</p>
|
||||||
|
*
|
||||||
|
* @author qiantao
|
||||||
|
* @version 1.0
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class SalaryPreviewParam {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工资单id
|
||||||
|
*/
|
||||||
|
private Long salaryInfoId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 员工id
|
||||||
|
*/
|
||||||
|
private Long recipient;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,10 @@
|
||||||
package com.engine.salary.service;
|
package com.engine.salary.service;
|
||||||
|
|
||||||
|
import com.engine.salary.entity.salaryBill.dto.SalaryBillSendDTO;
|
||||||
import com.engine.salary.entity.salaryBill.param.SalaryExportPdfParam;
|
import com.engine.salary.entity.salaryBill.param.SalaryExportPdfParam;
|
||||||
import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam;
|
import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam;
|
||||||
|
import com.engine.salary.entity.salaryBill.po.SalarySendPO;
|
||||||
|
import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
@ -52,6 +55,15 @@ public interface SalaryBillService {
|
||||||
|
|
||||||
String genPdfBeforeExport(SalaryExportPdfParam salaryExportPdfParam);
|
String genPdfBeforeExport(SalaryExportPdfParam salaryExportPdfParam);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建发放参数
|
||||||
|
* @param salarySend
|
||||||
|
* @param taxAgentName
|
||||||
|
* @param salaryTemplate
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
SalaryBillSendDTO buildSendParams(SalarySendPO salarySend, String taxAgentName, SalaryTemplatePO salaryTemplate);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工资单撤回
|
* 工资单撤回
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -218,4 +218,11 @@ public interface SalarySendService {
|
||||||
List<SalarySendPO> getByIds(List<Long> salarySendId);
|
List<SalarySendPO> getByIds(List<Long> salarySendId);
|
||||||
|
|
||||||
List<SalarySendPO> listSome(SalarySendPO param);
|
List<SalarySendPO> listSome(SalarySendPO param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工资单预览
|
||||||
|
* @param param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Map<String, Object> preview(SalaryPreviewParam param);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -337,7 +337,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService
|
||||||
* @param salaryTemplate
|
* @param salaryTemplate
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private SalaryBillSendDTO buildSendParams(SalarySendPO salarySend, String taxAgentName, SalaryTemplatePO salaryTemplate) {
|
public SalaryBillSendDTO buildSendParams(SalarySendPO salarySend, String taxAgentName, SalaryTemplatePO salaryTemplate) {
|
||||||
// 发送通道
|
// 发送通道
|
||||||
Set<MessageChannelEnum> sendChannels = SalaryBillBO.buildSendChannels(salaryTemplate);
|
Set<MessageChannelEnum> sendChannels = SalaryBillBO.buildSendChannels(salaryTemplate);
|
||||||
if (CollectionUtils.isEmpty(sendChannels)) {
|
if (CollectionUtils.isEmpty(sendChannels)) {
|
||||||
|
|
|
||||||
|
|
@ -1834,4 +1834,190 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
|
||||||
public List<SalarySendPO> listSome(SalarySendPO param) {
|
public List<SalarySendPO> listSome(SalarySendPO param) {
|
||||||
return getSalarySendMapper().listSome(param);
|
return getSalarySendMapper().listSome(param);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> preview(SalaryPreviewParam param) {
|
||||||
|
Long salaryInfoId = param.getSalaryInfoId();
|
||||||
|
Long recipient = param.getRecipient();
|
||||||
|
|
||||||
|
if (salaryInfoId == null) {
|
||||||
|
throw new SalaryRunTimeException("工资单记录不存在!");
|
||||||
|
}
|
||||||
|
SalarySendInfoPO po = new SalarySendInfoPO();
|
||||||
|
po.setDeleteType(0);
|
||||||
|
po.setId(salaryInfoId);
|
||||||
|
|
||||||
|
List<SalarySendInfoPO> salarySendInfos = salarySendInfoMapper.listSome(po);
|
||||||
|
if (CollectionUtils.isEmpty(salarySendInfos)) {
|
||||||
|
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "工资单信息不存在"));
|
||||||
|
}
|
||||||
|
|
||||||
|
SalarySendInfoPO salarySendInfo = salarySendInfos.get(0);
|
||||||
|
|
||||||
|
// 获取默认模板信息
|
||||||
|
SalarySendPO salarySendPO = getSalarySendMapper().getById(salarySendInfo.getSalarySendId());
|
||||||
|
if (salarySendPO == null) {
|
||||||
|
throw new SalaryRunTimeException("工资单不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SalarySendPO sendPo = new SalarySendPO();
|
||||||
|
sendPo.setDeleteType(0);
|
||||||
|
sendPo.setId(salarySendInfo.getSalarySendId());
|
||||||
|
List<SalarySendPO> salarySends = mapper.listSome(sendPo);
|
||||||
|
if (CollectionUtils.isEmpty(salarySends)) {
|
||||||
|
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100512, "工资单发放不存在"));
|
||||||
|
}
|
||||||
|
SalarySendPO salarySend = salarySends.get(0);
|
||||||
|
Date salaryMonth = salarySend.getSalaryMonth();
|
||||||
|
|
||||||
|
|
||||||
|
// 获取模板
|
||||||
|
SalarySobPO salarySob = getSalarySobService(user).getById(salarySend.getSalarySobId());
|
||||||
|
TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(salarySendInfo.getTaxAgentId());
|
||||||
|
List<SalaryTemplatePO> salaryTemplates = getSalaryTemplateService(user).getDefaultTemplates(Arrays.asList(salarySend.getSalarySobId(), salarySob.getId()));
|
||||||
|
if (CollectionUtils.isEmpty(salaryTemplates)) {
|
||||||
|
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100518, "没有默认模板,无法发送"));
|
||||||
|
}
|
||||||
|
SalaryBillSendDTO salaryBillSendDTO = getSalaryBillService(user).buildSendParams(sendPo, taxAgentPO.getName(), salaryTemplates.get(0));
|
||||||
|
|
||||||
|
SalaryTemplatePO salaryTemplate = salaryBillSendDTO.getSalaryTemplate();
|
||||||
|
if (salaryTemplate==null) {
|
||||||
|
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100513, "没有默认模板,无法查看"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断是否是补发
|
||||||
|
boolean isReplenish = NumberUtils.INTEGER_ONE.equals(salarySendInfo.getSalaryAcctType());
|
||||||
|
|
||||||
|
SalaryAcctResultPO acctPo = new SalaryAcctResultPO();
|
||||||
|
acctPo.setDeleteType(0);
|
||||||
|
acctPo.setSalaryAcctRecordId(salarySendInfo.getSalaryAcctRecordId());
|
||||||
|
acctPo.setEmployeeId(recipient);
|
||||||
|
List<SalaryAcctResultPO> salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(acctPo);
|
||||||
|
encryptUtil.decryptList(salaryAcctResultPOS, SalaryAcctResultPO.class);
|
||||||
|
|
||||||
|
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salarySendInfo.getSalaryAcctRecordId());
|
||||||
|
if (salaryAcctRecordPO == null) {
|
||||||
|
throw new SalaryRunTimeException("薪资核算记录不存在!");
|
||||||
|
}
|
||||||
|
List<Map<String, Object>> salaryAcctResultS = null;
|
||||||
|
if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE) && !isReplenish) {
|
||||||
|
// 该记录回算过,并且获取的不是回算后的工资单
|
||||||
|
salaryAcctResultS = salaryAcctResultPOS.stream().map(m -> {
|
||||||
|
Map<String, Object> map = new LinkedHashMap<>();
|
||||||
|
map.put("salaryItemId", m.getSalaryItemId());
|
||||||
|
map.put("resultValue", m.getOriginResultValue());
|
||||||
|
return map;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
} else {
|
||||||
|
salaryAcctResultS = salaryAcctResultPOS.stream().map(m -> {
|
||||||
|
Map<String, Object> map = new LinkedHashMap<>();
|
||||||
|
map.put("salaryItemId", m.getSalaryItemId());
|
||||||
|
map.put("resultValue", m.getResultValue());
|
||||||
|
return map;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, Object> map = new LinkedHashMap<>();
|
||||||
|
map.put("tenantName", "");
|
||||||
|
map.put("sendTime", SalaryDateUtil.getFormatLocalDateTime(salarySendInfo.getSendTime()));
|
||||||
|
List<SalaryTemplateSalaryItemSetListDTO> listDTOS = JSONArray.parseArray(isReplenish ? salaryTemplate.getReplenishSalaryItemSetting() : salaryTemplate.getSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class);
|
||||||
|
Optional<SalaryTemplateSalaryItemSetListDTO> optionalEmployeeInformation = listDTOS.stream().filter(e -> SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID.equals(e.getGroupId())).findFirst();
|
||||||
|
SalaryTemplateSalaryItemSetListDTO employeeInformation = optionalEmployeeInformation.orElse(null);
|
||||||
|
List<SalaryTemplateSalaryItemSetListDTO> itemSetListDTOS = listDTOS.stream().filter(e -> !SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID.equals(e.getGroupId())).collect(Collectors.toList());
|
||||||
|
List<Map<String, Object>> finalSalaryAcctResultS = salaryAcctResultS;
|
||||||
|
itemSetListDTOS.stream().forEach(item -> {
|
||||||
|
item.getItems()
|
||||||
|
.forEach(e -> {
|
||||||
|
if (CollectionUtils.isEmpty(finalSalaryAcctResultS)) {
|
||||||
|
e.setSalaryItemValue("");
|
||||||
|
} else {
|
||||||
|
Object o = finalSalaryAcctResultS.stream()
|
||||||
|
.filter(f -> f.get("salaryItemId") != null && String.valueOf(f.get("salaryItemId")).equals(e.getSalaryItemId())).findFirst()
|
||||||
|
.orElse(new HashMap<>())
|
||||||
|
.get("resultValue");
|
||||||
|
e.setSalaryItemValue(o == null ? "" : (String) o);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 过滤空
|
||||||
|
*/
|
||||||
|
if (Objects.equals(1, salaryTemplate.getSalaryItemNullStatus())) {
|
||||||
|
for (SalaryTemplateSalaryItemSetListDTO itemSetListDTO : itemSetListDTOS) {
|
||||||
|
List<SalaryTemplateSalaryItemListDTO> items = itemSetListDTO.getItems();
|
||||||
|
List<SalaryTemplateSalaryItemListDTO> collect = items.stream().filter(item -> StringUtils.isNotBlank(item.getSalaryItemValue())).collect(Collectors.toList());
|
||||||
|
itemSetListDTO.setItems(collect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 过滤0
|
||||||
|
*/
|
||||||
|
if (Objects.equals(1, salaryTemplate.getSalaryItemZeroStatus())) {
|
||||||
|
for (SalaryTemplateSalaryItemSetListDTO itemSetListDTO : itemSetListDTOS) {
|
||||||
|
List<SalaryTemplateSalaryItemListDTO> items = itemSetListDTO.getItems();
|
||||||
|
List<SalaryTemplateSalaryItemListDTO> collect = items.stream()
|
||||||
|
.filter(item -> SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue()) == null
|
||||||
|
|| BigDecimal.ZERO.compareTo(SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue())) != 0)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
itemSetListDTO.setItems(collect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DataCollectionEmployee simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(salarySendInfo.getEmployeeId());
|
||||||
|
buildEmployeeInfo(employeeInformation, simpleEmployee, taxAgentPO.getName(), SalaryAcctResultBO.buildEmployeeFieldName());
|
||||||
|
map.put("employeeInformation", employeeInformation);
|
||||||
|
map.put("salaryGroups", itemSetListDTOS);
|
||||||
|
|
||||||
|
salaryTemplate.setTheme(getBillTitle(salaryTemplate.getTheme(), salaryMonth, recipient));
|
||||||
|
// 工资单水印文本型动态变量 == 处理
|
||||||
|
handleSalaryWatermark(salaryTemplate, salarySendInfo, recipient);
|
||||||
|
map.put("salaryTemplate", salaryTemplate);
|
||||||
|
map.put("salaryAcctResult", salaryAcctResultS);
|
||||||
|
|
||||||
|
// 工资单确认按钮
|
||||||
|
if (NumberUtils.compare(salaryTemplate.getAckFeedbackStatus(), 1) == 0) {
|
||||||
|
// 开启了工资单确认
|
||||||
|
Integer ackStatus = salarySendInfo.getBillConfirmStatus();
|
||||||
|
if (ackStatus == null || ackStatus != BillConfimStatusEnum.CONFIRMED.getValue()) {
|
||||||
|
map.put("showAck", "1");
|
||||||
|
} else {
|
||||||
|
map.put("showAck", "0");
|
||||||
|
}
|
||||||
|
map.put("sendEmployeeId", salarySendInfo.getSendEmployeeId());
|
||||||
|
} else {
|
||||||
|
map.put("showAck", "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 工资单反馈
|
||||||
|
if (NumberUtils.compare(salaryTemplate.getFeedbackStatus(), 1) == 0) {
|
||||||
|
// 开启了工资单反馈按钮
|
||||||
|
Integer confirmStatus = salarySendInfo.getBillConfirmStatus();
|
||||||
|
map.put("showFeedback", "1");
|
||||||
|
// 除非确认状态为已确认否则可以一直反馈
|
||||||
|
if (NumberUtils.compare(salaryTemplate.getAckFeedbackStatus(), 1) == 0 && confirmStatus != null && confirmStatus == BillConfimStatusEnum.CONFIRMED.getValue()) {
|
||||||
|
map.put("showFeedback", "0");
|
||||||
|
}
|
||||||
|
map.put("sendEmployeeId", salarySendInfo.getSendEmployeeId());
|
||||||
|
} else {
|
||||||
|
map.put("showFeedback", "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 记录查看日志
|
||||||
|
String targetName = taxAgentPO.getName() + "-" + SalaryDateUtil.getFormatYearMonth(salarySendInfo.getSalaryMonth());
|
||||||
|
LoggerContext<SalaryItemPO> loggerContext = new LoggerContext<>();
|
||||||
|
loggerContext.setUser(user);
|
||||||
|
loggerContext.setTargetId(String.valueOf(salarySendInfo.getId()));
|
||||||
|
loggerContext.setTargetName(targetName);
|
||||||
|
loggerContext.setOperateType(OperateTypeEnum.READ.getValue());
|
||||||
|
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "预览工资单") + ": " + targetName + " " + salaryInfoId);
|
||||||
|
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "预览工资单") + ": " + targetName);
|
||||||
|
SalaryElogConfig.mySalaryBillLoggerTemplate.write(loggerContext);
|
||||||
|
return map;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -323,6 +323,20 @@ public class SalaryBillController {
|
||||||
return new ResponseResult<Long, SalarySendBaseInfoDTO>(user).run(getSalarySendWrapper(user)::getBaseInfo, id);
|
return new ResponseResult<Long, SalarySendBaseInfoDTO>(user).run(getSalarySendWrapper(user)::getBaseInfo, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 预览工资单
|
||||||
|
*
|
||||||
|
* @param param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@POST
|
||||||
|
@Path("/preview")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
public String preview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryPreviewParam param) {
|
||||||
|
User user = HrmUserVarify.getUser(request, response);
|
||||||
|
return new ResponseResult<SalaryPreviewParam, Map<String, Object>>(user).run(getSalarySendWrapper(user)::preview, param);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工资单发放信息列表的高级搜索
|
* 工资单发放信息列表的高级搜索
|
||||||
*
|
*
|
||||||
|
|
@ -563,6 +577,7 @@ public class SalaryBillController {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 下载pdf前先进行校验 生成
|
* 下载pdf前先进行校验 生成
|
||||||
|
*
|
||||||
* @param request
|
* @param request
|
||||||
* @param response
|
* @param response
|
||||||
* @return
|
* @return
|
||||||
|
|
|
||||||
|
|
@ -219,6 +219,10 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy
|
||||||
return getSalarySendService(user).getBaseInfo(id);
|
return getSalarySendService(user).getBaseInfo(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> preview(SalaryPreviewParam param) {
|
||||||
|
return getSalarySendService(user).preview(param);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工资单发放信息列表的高级搜索
|
* 工资单发放信息列表的高级搜索
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue