职工福利功能优化-1.2
This commit is contained in:
+8
-1
@@ -24,9 +24,16 @@ public interface WelfareSelectionSituationService extends BaseService<WelfareLis
|
||||
* 按选择情况页面的查询条件导出人员选择明细。
|
||||
*
|
||||
* @param pageForm 页面查询条件,包含项目、福利选项、姓名、工号、组织范围、人员类型和选择状态
|
||||
* @param response HTTP响应,返回包含快递单号和签字图片的XLSX文件流
|
||||
* @param response HTTP响应,返回包含收货备注、快递单号和签字图片的XLSX文件流
|
||||
*/
|
||||
void exportXlsx(WelfareSelectionSituationPageForm pageForm, HttpServletResponse response);
|
||||
|
||||
/**
|
||||
* 导出福利领取表。
|
||||
*
|
||||
* @param pageForm 页面查询条件,projectId指定福利项目
|
||||
* @param response HTTP响应,返回包含福利选项、收货备注和签字图片的XLSX文件流
|
||||
*/
|
||||
void receiveXlsx(WelfareSelectionSituationPageForm pageForm, HttpServletResponse response);
|
||||
|
||||
/**
|
||||
|
||||
+24
-5
@@ -49,6 +49,7 @@ import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.util.*;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@IocBean(args = {"refer:dao"})
|
||||
@@ -77,6 +78,7 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
GROUP_CONCAT(DISTINCT t3.optionName ,'(',t2.selectNum,'份)') AS selectedOptions,
|
||||
GROUP_CONCAT(DISTINCT t2.mobile) AS mobile,
|
||||
GROUP_CONCAT(DISTINCT t2.receiveAddress) AS receiveAddress,
|
||||
MAX(t2.remark) AS remark,
|
||||
t4.username AS userName,
|
||||
t4.loginname AS loginName,
|
||||
t4.sex,
|
||||
@@ -147,11 +149,7 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
String detailUrl = StrUtil.removeSuffix(Globals.AppDomain, "/")
|
||||
+ "/platform/welfare/notice/index?id=" + project.getId();
|
||||
String detailLine = "查看详情:" + detailUrl;
|
||||
// 移除前端预置的详情行后统一追加到正文末尾,既避免重复链接,也保证最终消息排版一致。
|
||||
String messageBody = Arrays.stream(plainContent.split("\\R"))
|
||||
.filter(line -> !line.trim().startsWith("查看详情:"))
|
||||
.collect(Collectors.joining("\n"))
|
||||
.trim();
|
||||
String messageBody = removeExistingNoticeDetailLinks(plainContent, detailUrl);
|
||||
String sendContent = StrUtil.isBlank(messageBody) ? detailLine : messageBody + "\n" + detailLine;
|
||||
// 详情地址已经包含在消息正文中,跳转参数保持为空,避免消息中心再次追加 PC、移动端详情链接。
|
||||
boolean success = smsService.sendMsg("6", loginNames, null, title, sendContent, null, null);
|
||||
@@ -161,6 +159,23 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
return loginNames.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除正文中已存在的当前福利详情链接,避免管理员在默认链接前继续输入文字后重复追加。
|
||||
*
|
||||
* @param content 管理员在发送弹窗中编辑的纯文本正文,可在任意位置包含“查看详情:URL”
|
||||
* @param detailUrl 当前福利项目的标准详情地址
|
||||
* @return 已移除全部当前项目详情链接并清理空白行的消息正文;没有其他正文时返回空字符串
|
||||
*/
|
||||
private String removeExistingNoticeDetailLinks(String content, String detailUrl) {
|
||||
String detailPattern = "查看详情\\s*[::]\\s*" + Pattern.quote(detailUrl);
|
||||
String contentWithoutDetail = content.replaceAll(detailPattern, "");
|
||||
return Arrays.stream(contentWithoutDetail.split("\\R"))
|
||||
.map(String::trim)
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.collect(Collectors.joining("\n"))
|
||||
.trim();
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建选择情况列表与消息接收人共用的筛选条件。
|
||||
* 除页面条件外会主动叠加当前登录人的分工会数据范围。
|
||||
@@ -210,6 +225,7 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
GROUP_CONCAT(DISTINCT t2.receiveAddress) AS receiveAddress,
|
||||
GROUP_CONCAT(DISTINCT t2.courierNumber) AS legacyCourierNumber,
|
||||
MAX(t2.userSign) AS userSign,
|
||||
MAX(t2.remark) AS remark,
|
||||
t4.username AS userName,
|
||||
t4.loginname AS loginName,
|
||||
t4.sex
|
||||
@@ -279,6 +295,7 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
if(project.getProvideMode() == 3){
|
||||
entities.add(new ExcelExportEntity("收货地址", "receiveAddress", 40));
|
||||
}
|
||||
entities.add(new ExcelExportEntity("备注", "remark", 30));
|
||||
ExcelExportEntity courierNumberEntity = new ExcelExportEntity("快递单号", "courierNumber", 30);
|
||||
courierNumberEntity.setWrap(true);
|
||||
entities.add(courierNumberEntity);
|
||||
@@ -372,6 +389,7 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
SELECT
|
||||
t1.*,
|
||||
t2.userSign,
|
||||
MAX(t2.remark) AS remark,
|
||||
t3.username userName,
|
||||
t3.loginname loginName,
|
||||
GROUP_CONCAT(DISTINCT t2.selectOptionId) AS selectOptionIds
|
||||
@@ -433,6 +451,7 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
||||
optionList.forEach(option -> {
|
||||
entities.add(new ExcelExportEntity(option.getOptionName(), option.getOptionName(), 20));
|
||||
});
|
||||
entities.add(new ExcelExportEntity("备注", "remark", 30));
|
||||
ExcelExportEntity userSignEntity = new ExcelExportEntity("签字", "userSign", 20);
|
||||
userSignEntity.setType(2);
|
||||
userSignEntity.setExportImageType(2);
|
||||
|
||||
@@ -153,6 +153,7 @@ layout("/layouts/platform.html"){
|
||||
></el-table-column>
|
||||
|
||||
<el-table-column label="收货地址" prop="receiveAddress" v-if="provideMode===3"></el-table-column>
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip></el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="100px">
|
||||
<template slot-scope="{row}">
|
||||
|
||||
Reference in New Issue
Block a user