package com.engine.salary.report.service.impl; import cn.hutool.core.util.ObjectUtil; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.common.BaseQueryParam; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.report.SalaryStatisticsPushMapper; import com.engine.salary.report.entity.dto.SalaryStatisticsPushDetail; import com.engine.salary.report.entity.dto.SalaryStatisticsPushDetailFormDTO; import com.engine.salary.report.entity.dto.SalaryStatisticsPushDetailTableDTO; import com.engine.salary.report.entity.dto.SalaryStatisticsPushTableDTO; import com.engine.salary.report.entity.param.SalaryStatisticsPushDetailParam; import com.engine.salary.report.entity.param.SalaryStatisticsPushParam; import com.engine.salary.report.entity.po.SalaryStatisticsPushDetailPO; import com.engine.salary.report.entity.po.SalaryStatisticsPushPO; import com.engine.salary.report.entity.po.SalaryStatisticsReportPO; import com.engine.salary.report.service.SalaryStatisticsPushDetailService; import com.engine.salary.report.service.SalaryStatisticsPushService; import com.engine.salary.report.service.SalaryStatisticsReportService; import com.engine.salary.report.util.ReportTimeUtil; import com.engine.salary.service.SalaryEmployeeService; import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import weaver.hrm.User; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; /** * @author Harryxzy * @ClassName SalaryStatisticsPushServiceImpl * @date 2023/09/11 10:15 * @description 薪酬统计报表消息推送 */ public class SalaryStatisticsPushServiceImpl extends Service implements SalaryStatisticsPushService { private SalaryStatisticsPushMapper getSalaryStatisticsPushMapper() { return MapperProxyFactory.getProxy(SalaryStatisticsPushMapper.class); } private SalaryStatisticsPushDetailService getSalaryStatisticsPushDetailService(User user) { return ServiceUtil.getService(SalaryStatisticsPushDetailServiceImpl.class, user); } private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } private SalaryStatisticsReportService getSalaryStatisticsReportService(User user) { return ServiceUtil.getService(SalaryStatisticsReportServiceImpl.class, user); } private TaxAgentService getTaxAgentService(User user) { return (TaxAgentService) ServiceUtil.getService(TaxAgentServiceImpl.class, user); } @Override public Map getPushForm() { Map resultMap = new HashMap<>(); // items // 分享报表item List> reportOptions = buildReportIdsOptions(Long.valueOf(user.getUID())); resultMap.put("reportOptions", reportOptions); // data resultMap.putAll(formData(Long.valueOf(user.getUID()))); return resultMap; } private Map formData(Long employeeId) { Map data = new HashMap<>(); SalaryStatisticsPushPO pushPO = getListByEmployeeId(employeeId); data.put("pushTitle", pushPO.getPushTitle()); data.put("mark", pushPO.getMark()); if (pushPO.getRemind() == null) { data.put("remind", "1"); } else { data.put("remind", pushPO.getRemind().toString()); } return data; } private SalaryStatisticsPushPO getListByEmployeeId(Long uid) { List list = getSalaryStatisticsPushMapper().listLatestRecordByCreator(uid); if (CollectionUtils.isEmpty(list)) { return SalaryStatisticsPushPO.builder().build(); } return list.get(0); } private List> buildReportIdsOptions(Long employeeId) { List> reportIdsOptions = new ArrayList<>(); List reportPOS = getSalaryStatisticsReportService(user).listAll(); Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); if (needAuth) { // 只能够分享创建人是本人的报表 reportPOS = reportPOS.stream().filter(po -> po.getCreator().compareTo(employeeId) == 0).collect(Collectors.toList()); } reportPOS.forEach( po -> { Map option = new HashMap<>(); option.put("id", po.getId().toString()); option.put("reportName", po.getReportName()); reportIdsOptions.add(option); }); return reportIdsOptions; } @Override public SalaryStatisticsPushDetail getPushDetail(SalaryStatisticsPushDetailParam param) { SalaryStatisticsPushPO salaryStatisticsPushPO = getSalaryStatisticsPushMapper().getById(param.getId()); if (Objects.isNull(salaryStatisticsPushPO)) { throw new SalaryRunTimeException("该分享记录不存在"); } Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); if (needAuth && salaryStatisticsPushPO.getCreator().compareTo(Long.valueOf(user.getUID())) != 0) { throw new SalaryRunTimeException("无权查看该分享记录"); } SalaryStatisticsPushDetail result = new SalaryStatisticsPushDetail(); result.setDetailForm(buildDetailForm(salaryStatisticsPushPO)); result.setDetailTable(buildDetailTable(param)); return result; } @Override public void push(SalaryStatisticsPushParam param) { // 生成分享链接中的id参数 param.setId(createAndGetBatchId(param)); sendMsg(param); } // public void configSave(SalaryStatisticsPushParam param, String tenantkey, Long employeeId) { // if (StringUtils.isNotEmpty(param.getConfig())) { // CreateRuleEntity createRule = new CreateRuleEntity() // .setName(SalaryI18nUtil.getI18nLabel(tenantkey, employeeId, 220428, "分享报表")) // .setUser(new UserEntity(employeeId, tenantkey)) // .setModule(MessageModule.HRSA) // .setEvent(MessageEvent.REPORT_SHARING) // .setBusinessId(param.getBusinessId().toString()) // .setConfig(param.getConfig()); // log.info("RuleRest.createRuleV2 -> config ====== {}", param.getConfig()); // WeaResult weaResult = ruleRest.createRuleV2(createRule); // SalaryAssert.isTrue(weaResult.isStatus(), SalaryI18nUtil.getI18nLabel(184008, "RPC接口创建规则失败")); // } // } @Override public void addSharedPush(SalaryStatisticsPushParam param) { SalaryStatisticsPushPO pushPO = getSalaryStatisticsPushMapper().getById(param.getId()); Collection sharedBy = sharedByValid(param.getSharedBy(), param.getId()); if (CollectionUtils.isEmpty(sharedBy)) { return; } SalaryStatisticsPushParam pushParam = new SalaryStatisticsPushParam(); pushParam.setReportIds(Arrays.asList(pushPO.getReportIds().split(","))); pushParam.setPushTitle(pushPO.getPushTitle()); // pushParam.setEmailAccountId(pushPO.getEmailAccountId()); // pushParam.setEmailAdress(pushParam.getEmailAdress()); pushParam.setSharedBy((List) sharedBy); pushParam.setStartTime(pushPO.getStartTime()); pushParam.setEndTime(pushPO.getEndTime()); // pushParam.setPushChannel(Arrays.stream(pushPO.getPushChannel().split(",")).map(Integer::valueOf).collect(Collectors.toList())); pushParam.setMark(pushPO.getMark()); pushParam.setId(pushPO.getId()); sendMsg(pushParam); } public Collection sharedByValid(List sharedBy, Long batchId) { List list = getSalaryStatisticsPushDetailService(user).queryPushDetailPOByBatchIdAndEmpIds(batchId, sharedBy); List finalList = list; // 获取需要分享或重新分享的人 sharedBy = sharedBy.stream().filter(shareId -> { List collect = finalList.stream().filter(po -> Objects.equals(po.getEmployeeId(), shareId)).collect(Collectors.toList()); if (CollectionUtils.isEmpty(collect)) { return true; } boolean enabledSend = collect.stream().anyMatch(po -> Objects.equals(po.getPushStatus(), "true") && !Objects.equals(po.getRebackStatus(), "true")); return !enabledSend; }).collect(Collectors.toList()); return sharedBy; } public void sendMsg(SalaryStatisticsPushParam param) { // 获取被分享人 List receivers = getSalaryEmployeeService(user).getEmployeeByIds(param.getSharedBy()); // 发送消息 receivers.forEach(receiver -> { // 发送消息... // 发送成功 doSuccess(receiver, param); }); } // @Override // public void rePush(Long id, Long employeeId, String tenantKey) { // SalaryStatisticsPushDetailPO detailPO = salaryStatisticsPushDetailMapper.selectById(id); // SalaryStatisticsPushPO pushPO = salaryStatisticsPushMapper.selectById(detailPO.getBatchId()); // SalaryStatisticsPushParam param = new SalaryStatisticsPushParam(); // param.setReportIds(Arrays.asList(pushPO.getReportIds().split(","))); // param.setPushTitle(pushPO.getPushTitle()); // param.setEmailAdress(pushPO.getEmailAccount()); // param.setEmailAccountId(pushPO.getEmailAccountId()); // param.setSharedBy(Collections.singletonList(detailPO.getEmployeeId())); // param.setStartTime(pushPO.getStartTime()); // param.setEndTime(pushPO.getEndTime()); // param.setPushChannel(Arrays.stream(pushPO.getPushChannel().split(",")).map(Integer::valueOf).collect(Collectors.toList())); // param.setMark(pushPO.getMark()); // param.setId(pushPO.getId()); // sendMsg(param, employeeId, tenantKey); // } @Override public void cancel(Long id) { SalaryStatisticsPushDetailPO detailPO = getSalaryStatisticsPushDetailService(user).getById(id); if (ObjectUtil.isEmpty(detailPO)) { throw new SalaryRunTimeException("该明细不存在"); } cancelSingle(detailPO); } public void cancelSingle(SalaryStatisticsPushDetailPO detailPO) { // 撤回消息... // 撤回分享记录 doCancelResult(detailPO); } @Override public void cancelAll(Long id) { // 根据分享批次id,获取所有的分享明细 List salaryStatisticsPushDetailPOS = getSalaryStatisticsPushDetailService(user).queryPushDetailPOByBatchIds(Collections.singletonList(id)); salaryStatisticsPushDetailPOS.forEach(po -> cancelSingle(po)); } // public List getSalatyPushDetailPOSBybatchId(Long batchId, String tenantKey) { // return new LambdaQueryChainWrapper<>(salaryStatisticsPushDetailMapper) // .eq(SalaryStatisticsPushDetailPO::getTenantKey, tenantKey) // .eq(SalaryStatisticsPushDetailPO::getBatchId, batchId) // .eq(SalaryStatisticsPushDetailPO::getDeleteType, DeleteTypeEnum.NOT_DELETED.getValue()) // .isNull(SalaryStatisticsPushDetailPO::getRebackStatus) // .list(); // } // // @Override // public SalaryStatisticsPushPO getById(Long id, String tenantKey) { // return salaryStatisticsPushMapper.selectById(id); // } // // @Override // public List getPushDetailsById(Long batchId, String tenantKey) { // return new LambdaQueryChainWrapper<>(salaryStatisticsPushDetailMapper) // .eq(SalaryStatisticsPushDetailPO::getTenantKey, tenantKey) // .eq(SalaryStatisticsPushDetailPO::getDeleteType, DeleteTypeEnum.NOT_DELETED.getValue()) // .eq(SalaryStatisticsPushDetailPO::getBatchId, batchId) // .list(); // } @Override public void updateReportViewStatus(List batchId, Long uid) { List salaryStatisticsPushDetailPOS = getSalaryStatisticsPushDetailService(user).queryPushDetailPOByBatchIds(batchId); salaryStatisticsPushDetailPOS.stream().filter(po -> Objects.equals(po.getPushStatus(), "true") && !(Objects.equals(po.getRebackStatus(), "true")) && Objects.equals(uid, po.getEmployeeId())) .collect(Collectors.toList()).forEach(e -> { e.setViewStatus("true"); e.setUpdateTime(new Date()); getSalaryStatisticsPushDetailService(user).updateIgnoreNull(e); }); } // @Override // public void sendViewedMsg(Long batchId, Long reportId, Long employeeId, String tenantKey) { // SalaryStatisticsPushPO pushPO = salaryStatisticsPushMapper.selectById(batchId); // if (!Objects.equals(1, pushPO.getRemind())) { // return; // } // List salaryStatisticsPushDetailPOS = queryPushDetailPOByBatchId(batchId, tenantKey); // List detailPOList = salaryStatisticsPushDetailPOS.stream().filter(po -> Objects.equals(po.getPushStatus(), "true") && po.getRebackStatus() == null && Objects.equals(employeeId, po.getEmployeeId())).collect(Collectors.toList()); // if (CollectionUtils.isEmpty(detailPOList)) { // return; // } // SalaryStatisticsPushParam param = new SalaryStatisticsPushParam(); // param.setPushTitle(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 227925, "报表已查看提醒")); // param.setSharedBy(Collections.singletonList(pushPO.getCreator())); // param.setPushChannel(Collections.singletonList(MessageChannelEnum.IM.getType())); // param.setMark(buildViewMark(pushPO, detailPOList, employeeId, tenantKey)); // SendMessageEntity entity = buildSendMessage(param, employeeId, tenantKey); // entity.getEntity().setPcUrl(""); // entity.getEntity().setH5Url(""); // entity.getEntity().setPcLinkeType(0); // entity.getEntity().setH5LinkeType(0); // List receivers = buildReceivers(param, tenantKey); // // 发送消息 // receivers.forEach(receiver -> { // entity.setReceivers(Collections.singletonList(receiver)); // try { // asyncSystemMessageRest.sendMsg(entity); // } catch (Exception e) { // log.error("查看消息发送失败", e); // } // }); // } // // public String buildViewMark(SalaryStatisticsPushPO pushPO, List detailPOList, Long employeeId, String tenantkey) { // SimpleEmployee employee = hrmCommonEmployeeService.getById(employeeId); // if (employee == null) { // return SalaryI18nUtil.getI18nLabel(tenantkey, employeeId, 227926, "消息创建人已不存在"); // } // return employee.getUsername() + // SalaryI18nUtil.getI18nLabel(tenantkey, employeeId, 227927, "已查看您分享的报表。") + // SalaryI18nUtil.getI18nLabel(tenantkey, employeeId, 227928, "分享主题:") + // pushPO.getPushTitle() + "," + // SalaryI18nUtil.getI18nLabel(tenantkey, employeeId, 233590, "分享时间:") + // detailPOList.get(0).getPushTime() + // "。"; // } // public void doCancelResult(SalaryStatisticsPushDetailPO detailPO) { // 判断撤回消息是否成功... // 消息撤回成功的话撤回分享记录 detailPO.setRebackStatus("true"); detailPO.setRebackTime(ReportTimeUtil.getFormatLocalDateTime(LocalDateTime.now())); getSalaryStatisticsPushDetailService(user).updateIgnoreNull(detailPO); } // public CancleMessageEntity buildCancelMessageEntity(SalaryStatisticsPushDetailPO po, Long employeeId, String tenantKey) { // SalaryStatisticsPushPO pushPO = salaryStatisticsPushMapper.selectById(po.getBatchId()); // CancleMessageEntity cancleMessageEntity = new CancleMessageEntity(); // cancleMessageEntity.setMsgId(po.getMsgId()); // cancleMessageEntity.setModule(MessageModule.HRSA); // cancleMessageEntity.setEvent(MessageEvent.REPORT_SHARING); // cancleMessageEntity.setText(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 221630, "此消息已收回,如有问题,请联系管理员")); // Entity entity = new Entity(); // entity.setId(String.valueOf(IdGenerator.generate())); // entity.setModule(EntityType.hrmsalary.name()); // entity.setName(pushPO.getPushTitle()); // cancleMessageEntity.setEntity(entity); // UserEntity user = new UserEntity(employeeId, tenantKey); // SimpleEmployee employeeById = hrmCommonEmployeeService.getEmployeeById(employeeId, tenantKey); // user.setName(employeeById.getUsername()); // cancleMessageEntity.setOperator(user); // return cancleMessageEntity; // } public void doSuccess(DataCollectionEmployee receiver, SalaryStatisticsPushParam param) { List pushDetailByBatchIdAndEmpId = getSalaryStatisticsPushDetailService(user).listSome(SalaryStatisticsPushDetailPO.builder() .batchId(param.getId()) .employeeId(receiver.getEmployeeId()) .build()); Date now = new Date(); if (CollectionUtils.isEmpty(pushDetailByBatchIdAndEmpId)) { SalaryStatisticsPushDetailPO detailPO = SalaryStatisticsPushDetailPO.builder() .id(IdGenerator.generate()) .batchId(param.getId()) // .msgId(result.getData()) .pushStatus("true") .pushTime(ReportTimeUtil.getFormatLocalDateTime(LocalDateTime.now())) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .employeeId(receiver.getEmployeeId()) .updateTime(now) .creator(Long.valueOf(user.getUID())) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build(); getSalaryStatisticsPushDetailService(user).insertIgnoreNull(detailPO); } else { SalaryStatisticsPushDetailPO PO = pushDetailByBatchIdAndEmpId.get(0); PO.setPushStatus("true"); PO.setRebackStatus(""); PO.setRebackTime(""); PO.setViewStatus("false"); // PO.setMsgId(result.getData()); PO.setPushTime(ReportTimeUtil.getFormatLocalDateTime(LocalDateTime.now())); PO.setUpdateTime(now); PO.setCreator(Long.valueOf(user.getUID())); getSalaryStatisticsPushDetailService(user).updateIgnoreNull(PO); } } // public void delBatchId(Long id) { // SalaryStatisticsPushPO pushPO = salaryStatisticsPushMapper.selectById(id); // pushPO.setDeleteType(DeleteTypeEnum.PHYSICAL_DELETED.getValue()); // salaryStatisticsPushMapper.updateById(pushPO); // } // // public void paramValid(SalaryStatisticsPushParam param, Long employeeId, String tenantKey) { // channelCheck(param, employeeId, tenantKey); // emileCheck(param, employeeId, tenantKey); // bridgeCheck(param, employeeId, tenantKey); // } public Long createAndGetBatchId(SalaryStatisticsPushParam param) { Date now = new Date(); SalaryStatisticsPushPO pushPO = SalaryStatisticsPushPO.builder() .id(IdGenerator.generate()) .creator(Long.valueOf(user.getUID())) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .createTime(now) .updateTime(now) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) // .pushChannel(buildChannelString(param)) .startTime(param.getStartTime()) .endTime(param.getEndTime()) .remind(param.getRemind()) // .emailAccount(param.getEmailAdress()) // .emailAccountId(param.getEmailAccountId()) .mark(param.getMark()) // .pushTitle(param.getPushTitle()) .reportIds(String.join(",", param.getReportIds())) .build(); getSalaryStatisticsPushMapper().insertIgnoreNull(pushPO); return pushPO.getId(); } // public String buildChannelString(SalaryStatisticsPushParam param) { // Set channelEnums = buildChannel(param); // List channelType = channelEnums.stream().map(e -> String.valueOf(e.getType())).collect(Collectors.toList()); // return String.join(",", channelType); // } // // // public void channelCheck(SalaryStatisticsPushParam param, Long employeeId, String tenantKey) { // if (CollectionUtils.isEmpty(param.getPushChannel())) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 221582, "至少有一个发送通道")); // } // } // // public void emileCheck(SalaryStatisticsPushParam param, Long employeeId, String tenantKey) { // if (param.getPushChannel().contains(MessageChannelEnum.EMAIL.getType())) { // if (!isEnableEmail(tenantKey)) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 221580, "邮件模块未采购,不可使用邮件通道!")); // } // // 接收者邮箱校验 // List employeeByIds = hrmCommonEmployeeService.getEmployeeByIds(param.getSharedBy(), tenantKey); // List usernameList = new ArrayList<>(); // employeeByIds.forEach(employee -> { // if (StringUtils.isEmpty(employee.getEmail())) { // usernameList.add(employee.getUsername()); // } // }); // if (CollectionUtils.isNotEmpty(usernameList)) { // throw new SalaryRunTimeException(String.join(",", usernameList) + SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 221578, "没有可用邮箱,请先配置再发送!")); // } // if (StringUtils.isEmpty(param.getEmailAdress())) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 224278, "发送邮箱不可为空")); // } // } // } // // public void bridgeCheck(SalaryStatisticsPushParam param, Long employeeId, String tenantKey) { // if (param.getPushChannel().contains(MessageChannelEnum.CLOUD_BRIDGE.getType()) && !isEnableEbridge(tenantKey)) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 221581, "云桥模块未采购,不可使用云桥通道!")); // } // } // // public SendMessageEntity buildSendMessage(SalaryStatisticsPushParam param, Long employeeId, String tenantKey) { // // 域名 // param.setDomain(weaverConfigUtils.getValueFromDataMap("primary.domain")); // SendMessageEntity entity = new SendMessageEntity(); // // 模块 // entity.setModule(MessageModule.HRSA); // // 消息事件 // entity.setEvent(MessageEvent.REPORT_SHARING); // // 消息通道 // entity.setChannels(buildChannel(param)); // // 主题 // entity.setText(param.getPushTitle()); // // 发送者信息 // entity.setSender(buildSendEntity(employeeId, tenantKey)); // // 接收者 // entity.setReceivers(buildReceivers(param, tenantKey)); // // emile消息体 // entity.setEmailInfo(buildEmailEntity(param, employeeId, tenantKey)); // // im消息体 // entity.setEntity(buildImEntity(param)); // // 消息内容 im和bridge公用 // entity.setText(param.getMark()); // // 云桥 // entity.setTitle(param.getPushTitle()); // return entity; // } // // public UserEntity buildSendEntity(Long employeeId, String tenantKey) { // SimpleEmployee employeeById = hrmCommonEmployeeService.getEmployeeById(employeeId, tenantKey); // UserEntity userEntity = new UserEntity(); // userEntity.setEmployeeId(employeeId); // userEntity.setTenantKey(tenantKey); // userEntity.setName(employeeById.getUsername()); // return userEntity; // } // // // public List buildReceivers(SalaryStatisticsPushParam param, String tenantKey) { // List simpleEmployeeList = hrmCommonEmployeeService.getEmployeeByIds(param.getSharedBy(), tenantKey); // return simpleEmployeeList.stream().map(employee -> { // UserEntity userEntity = new UserEntity(); // userEntity.setEmployeeId(employee.getEmployeeId()); // userEntity.setTenantKey(tenantKey); // userEntity.setEmail(employee.getEmail()); // return userEntity; // }).collect(Collectors.toList()); // } // // public Entity buildImEntity(SalaryStatisticsPushParam param) { // Entity imEntity = new Entity(); // imEntity.setId(IDGenerator.generateId()); // imEntity.setName(param.getPushTitle()); // imEntity.setModule("hrmsalary"); // imEntity.setPcLinkeType(2); // imEntity.setH5LinkeType(2); // imEntity.setPcUrl(buildPcUrl(param)); // imEntity.setH5Url(buildPcUrl(param)); // return imEntity; // } // // public String buildPcUrl(SalaryStatisticsPushParam param) { // return param.getDomain() + String.format("/sp/ebdpage/view/828107636586323968?id=%s&share=true", param.getId()); // } // // public EmailEntity buildEmailEntity(SalaryStatisticsPushParam param, Long employeeId, String tenantKey) { // EmailEntity emailEntity = new EmailEntity(); // if (param.getEmailAccountId() == null) { // return emailEntity; // } // emailEntity.setEmailSubject(param.getPushTitle()); // emailEntity.setEmailContent(buildEmailContent(param)); // emailEntity.setMailUserAccountId(param.getEmailAccountId()); // return emailEntity; // } // // public String buildEmailContent(SalaryStatisticsPushParam param) { // String emailContent = "
" + // "
" + // param.getMark() + // "
" + // "" + buildPcUrl(param) + "" + // "
"; // return emailContent; // } // // public Set buildChannel(SalaryStatisticsPushParam param) { // Set channelEnums = new HashSet<>(); // if (param.getPushChannel().contains(MessageChannelEnum.EMAIL.getType())) { // channelEnums.add(MessageChannelEnum.EMAIL); // } // if (param.getPushChannel().contains(MessageChannelEnum.CLOUD_BRIDGE.getType())) { // channelEnums.add(MessageChannelEnum.CLOUD_BRIDGE); // } // if (param.getPushChannel().contains(MessageChannelEnum.IM.getType())) { // channelEnums.add(MessageChannelEnum.IM); // } // return channelEnums; // } // // public Boolean isEnableEmail(String tenantKey) { //// boolean isPayModule = remoteTenantService.isPayModule(tenantKey, EntityType.email.name()); //// boolean checkDisplayModule = CollectionUtils.emptyIfNull(baseEnvInfoService.listDisplayModules(tenantKey)).stream().anyMatch(m -> m.equals(EntityType.email.name())); //// return isPayModule && checkDisplayModule; // return CollectionUtils.emptyIfNull(baseEnvInfoService.listDisplayModules(tenantKey)).stream().anyMatch(m -> m.equals(EntityType.email.name())); // } // // public Boolean isEnableEbridge(String tenantKey) { // return CollectionUtils.emptyIfNull(baseEnvInfoService.listDisplayModules(tenantKey)).stream().anyMatch(m -> m.equals("wechatEnterprise")); // } public SalaryStatisticsPushDetailFormDTO buildDetailForm(SalaryStatisticsPushPO salaryStatisticsPushPO) { List reportIds = Arrays.stream(salaryStatisticsPushPO.getReportIds().split(",")).map(Long::valueOf).collect(Collectors.toList()); List reportNames = getSalaryStatisticsReportService(user).getByIds(reportIds).stream().map(SalaryStatisticsReportPO::getReportName).collect(Collectors.toList()); SalaryStatisticsPushDetailFormDTO formDTO = SalaryStatisticsPushDetailFormDTO.builder() .remark(salaryStatisticsPushPO.getMark()) .effectiveTime(salaryStatisticsPushPO.getStartTime() + "-" + salaryStatisticsPushPO.getEndTime()) .reportName(String.join("、", reportNames)) .build(); return formDTO; } public PageInfo buildDetailTable(SalaryStatisticsPushDetailParam param) { List salaryStatisticsPushDetailPOS = getSalaryStatisticsPushDetailService(user).queryPushDetailPOByBatchIds(Arrays.asList(param.getId())); PageInfo dtoPage = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), SalaryStatisticsPushDetailTableDTO.class); List records = salaryStatisticsPushDetailPOS.stream().map(po -> { return SalaryStatisticsPushDetailTableDTO.builder() .id(po.getId()) .pushStatus(buildStatus(po.getPushStatus())) .pushTime(po.getPushTime()) .rebackStatus(buildStatus(po.getRebackStatus())) .viewStatus(buildViewStatus(po.getViewStatus())) .rebackTime(po.getRebackTime()) .userName(buildUserName(po.getEmployeeId())) .employeeId(po.getEmployeeId()) .build(); }).collect(Collectors.toList()); if (StringUtils.isNotEmpty(param.getUserNameSearch())) { records = records.stream().filter(record -> record.getUserName().contains(param.getUserNameSearch())).collect(Collectors.toList()); } dtoPage.setList(records); dtoPage.setTotal(records.size()); return dtoPage; } public String buildUserName(Long employeeId) { DataCollectionEmployee employeeById = getSalaryEmployeeService(user).getEmployeeById(employeeId); if (employeeById != null) { return employeeById.getUsername(); } return ""; } public String buildViewStatus(String status) { if (Objects.equals(status, "true")) { return SalaryI18nUtil.getI18nLabel(0, "已查看"); } else { return SalaryI18nUtil.getI18nLabel(0, "未查看"); } } public String buildStatus(String status) { if (StringUtils.isEmpty(status)) { return ""; } if (Objects.equals("true", status)) { return SalaryI18nUtil.getI18nLabel(0, "成功"); } if (Objects.equals("false", status)) { return SalaryI18nUtil.getI18nLabel(0, "失败"); } return ""; } @Override public PageInfo getPushTable(BaseQueryParam param) { Boolean needAuth = getTaxAgentService(user).isNeedAuth((long) user.getUID()); List salaryStatisticsPushPOS; if (needAuth) { salaryStatisticsPushPOS = getSalaryStatisticsPushMapper().listSome(SalaryStatisticsPushPO.builder().creator(Long.valueOf(user.getUID())).build()); } else { salaryStatisticsPushPOS = getSalaryStatisticsPushMapper().listSome(SalaryStatisticsPushPO.builder().build()); } salaryStatisticsPushPOS = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), salaryStatisticsPushPOS); PageInfo dtoPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), SalaryStatisticsPushTableDTO.class); if (CollectionUtils.isNotEmpty(salaryStatisticsPushPOS)) { // 获取报表名称 key:报表id; value:报表名称 List reportIds = salaryStatisticsPushPOS.stream().map(po -> Arrays.asList(StringUtils.split(po.getReportIds(), ","))) .flatMap(Collection::stream).distinct().map(Long::valueOf).collect(Collectors.toList()); Map statisticsNameMap = SalaryEntityUtil.convert2Map(getSalaryStatisticsReportService(user).getByIds(reportIds), SalaryStatisticsReportPO::getId, SalaryStatisticsReportPO::getReportName); // 获取报表分享明细 key:批次id; value:分享明细列表 List batchIds = salaryStatisticsPushPOS.stream().map(po -> Long.valueOf(po.getId())).collect(Collectors.toList()); Map> groupByBatchId; if (CollectionUtils.isNotEmpty(batchIds)) { groupByBatchId = SalaryEntityUtil.group2Map( getSalaryStatisticsPushDetailService(user).queryPushDetailPOByBatchIds(batchIds), SalaryStatisticsPushDetailPO::getBatchId); } else { groupByBatchId = Collections.emptyMap(); } List dtoList = salaryStatisticsPushPOS.stream().map(po -> { return SalaryStatisticsPushTableDTO.builder() .reportName(buildReportName(po.getReportIds(), statisticsNameMap)) .effectiveTime(StringUtils.isEmpty(po.getStartTime()) ? "" : po.getStartTime() + "——" + (StringUtils.isEmpty(po.getEndTime()) ? "" : po.getEndTime())) .id(po.getId()) .successPush(buildSuccessPush(groupByBatchId.get(po.getId()))) .sharedView(buildSharedView(groupByBatchId.get(po.getId()))) .build(); }).collect(Collectors.toList()); dtoPageInfo.setList(dtoList); dtoPageInfo.setTotal(dtoList.size()); } return dtoPageInfo; } public String buildSharedView(List list) { List successEmpIds = list.stream().filter(po -> Objects.equals(po.getPushStatus(), "true") && !(Objects.equals(po.getRebackStatus(), "true"))).map(SalaryStatisticsPushDetailPO::getEmployeeId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(successEmpIds)) { return "0/0"; } List viewEmpIds = list.stream().filter(po -> Objects.equals(po.getViewStatus(), "true")).map(SalaryStatisticsPushDetailPO::getEmployeeId).collect(Collectors.toList()); return viewEmpIds.size() + "/" + successEmpIds.size(); } public String buildSuccessPush(List list) { List employeeByIds = getSalaryEmployeeService(user).getEmployeeByIds(list.stream().filter(po -> Objects.equals(po.getPushStatus(), "true") && !(Objects.equals(po.getRebackStatus(), "true"))).map(SalaryStatisticsPushDetailPO::getEmployeeId).collect(Collectors.toList())); Set employeeName = employeeByIds.stream().map(DataCollectionEmployee::getUsername).collect(Collectors.toSet()); return String.join("、", employeeName); } public String buildReportName(String reportIds, Map statisticsNameMap) { List ids = Arrays.asList(reportIds.split(",")); List reportName = Lists.newArrayList(); ids.forEach(id -> { String name = statisticsNameMap.get(Long.valueOf(id)); if (name != null) { reportName.add(name); } }); return String.join("、", reportName); } @Override public List getSuccessPushListByReceiver(Long uid) { List batchIds = getSalaryStatisticsPushDetailService(user).getSuccessPushDetailListByReceiver(uid) .stream().map(SalaryStatisticsPushDetailPO::getBatchId).collect(Collectors.toList()); // 根据batchId获取分享记录 if (CollectionUtils.isEmpty(batchIds)) { return Collections.emptyList(); } List pushList = new ArrayList<>(); List> partition = Lists.partition((List)batchIds, 1000); partition.forEach(ids -> { pushList.addAll(getSalaryStatisticsPushMapper().listSome(SalaryStatisticsPushPO.builder().ids(ids).build())); }); return filterReportByTime(pushList); } @Override public List getPushListByReportIdAndIds(Long reportId, List ids) { List pushList = getSalaryStatisticsPushMapper().listByReportIdAndIds(reportId.toString(), ids); pushList = pushList.stream().filter( push -> { return Arrays.asList(push.getReportIds().split(",")).contains(reportId.toString()); }).collect(Collectors.toList()); return pushList; } List filterReportByTime(List pushList){ // 报表分享时间校验 String formatLocalDateTime = SalaryDateUtil.getFormatLocalDate(LocalDateTime.now()); List result = pushList.stream().filter(pushPO -> { if ((StringUtils.isNotBlank(pushPO.getStartTime()) && pushPO.getStartTime().compareTo(formatLocalDateTime) > 0) || (StringUtils.isNotEmpty(pushPO.getEndTime()) && pushPO.getEndTime().compareTo(formatLocalDateTime) < 0)) { return false; } return true; }).collect(Collectors.toList()); return result; } @Override public List shareReportValid(Long reportId, Long uid) { // 获取该员工所有被分享成功的明细 List successPushDetailList = getSalaryStatisticsPushDetailService(user).getSuccessPushDetailListByReceiver(uid); // 根据报表id,分享批次id查询分享批次信息 List batchIds = successPushDetailList.stream().map(SalaryStatisticsPushDetailPO::getBatchId).collect(Collectors.toList()); List pushList= getPushListByReportIdAndIds(reportId,batchIds); if (CollectionUtils.isEmpty(pushList)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"暂无权限查看该报表")); } // 校验是否在分享的有效时间内 pushList = filterReportByTime(pushList); if (CollectionUtils.isEmpty(pushList)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"该报表的分享不在有效期内,无法查看")); } return pushList; } }