feat: 优化福利2
This commit is contained in:
+62
-42
@@ -5,7 +5,6 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
|||||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||||
import cn.afterturn.easypoi.excel.export.ExcelExportService;
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.budwk.app.base.constant.RoleConstant;
|
import com.budwk.app.base.constant.RoleConstant;
|
||||||
import com.budwk.app.base.page.Pagination;
|
import com.budwk.app.base.page.Pagination;
|
||||||
@@ -24,6 +23,13 @@ import com.budwk.app.zhgh.welfare.param.WelfareSelectionSituationPageForm;
|
|||||||
import com.budwk.app.zhgh.welfare.service.WelfareSelectionSituationService;
|
import com.budwk.app.zhgh.welfare.service.WelfareSelectionSituationService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
|
import org.apache.poi.ss.usermodel.CellStyle;
|
||||||
|
import org.apache.poi.ss.usermodel.ClientAnchor;
|
||||||
|
import org.apache.poi.ss.usermodel.Drawing;
|
||||||
|
import org.apache.poi.ss.usermodel.Font;
|
||||||
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
import org.apache.poi.ss.usermodel.Workbook;
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
import org.nutz.dao.Cnd;
|
import org.nutz.dao.Cnd;
|
||||||
import org.nutz.dao.Dao;
|
import org.nutz.dao.Dao;
|
||||||
@@ -232,55 +238,69 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl<Welfar
|
|||||||
List<WelfareProjectSubjectOption> optionList = dao().query(WelfareProjectSubjectOption.class, Cnd.where(WelfareProjectSubjectOption::getWelfareId, "=", pageForm.getProjectId()).asc("optionSort"));
|
List<WelfareProjectSubjectOption> optionList = dao().query(WelfareProjectSubjectOption.class, Cnd.where(WelfareProjectSubjectOption::getWelfareId, "=", pageForm.getProjectId()).asc("optionSort"));
|
||||||
|
|
||||||
for (NutMap map : list) {
|
for (NutMap map : list) {
|
||||||
if (map.get("selectOptionIds") != null){
|
if (map.get("userSign") != null) {
|
||||||
String[] selectOptionIds = map.getString("selectOptionIds").split(",");
|
|
||||||
for (WelfareProjectSubjectOption option : optionList) {
|
|
||||||
if(Arrays.asList(selectOptionIds).contains(option.getId())){
|
|
||||||
map.put(option.getOptionName(), "√");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (map.get("userSign") != null){
|
|
||||||
try {
|
try {
|
||||||
Sys_file file = dao().fetch(Sys_file.class, Cnd.where(Sys_file::getDownloadPath, "=", map.getString("userSign")));
|
Sys_file file = dao().fetch(Sys_file.class, Cnd.where(Sys_file::getDownloadPath, "=", map.getString("userSign")));
|
||||||
byte[] userSignBytes = SysFileMinIoUtil.getFileBytes(file.getBucket(), file.getStoragePath());
|
byte[] userSignBytes = SysFileMinIoUtil.getFileBytes(file.getBucket(), file.getStoragePath());
|
||||||
map.put("userSign", userSignBytes);
|
BufferedImage image = ImageIO.read(new ByteArrayInputStream(userSignBytes));
|
||||||
}catch (Exception e){
|
if (image != null) {
|
||||||
e.printStackTrace();
|
ByteArrayOutputStream png = new ByteArrayOutputStream();
|
||||||
log.error("下载图片失败", e);
|
ImageIO.write(image, "png", png);
|
||||||
|
map.put("userSign", png.toByteArray());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("下载签字图片失败", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Map<String, Object>> safeList = list.stream().map(nutMap -> {
|
Map<String, List<NutMap>> rowsByUnion = list.stream()
|
||||||
Map<String, Object> map = new HashMap<>(nutMap);
|
.collect(Collectors.groupingBy(n -> n.getString("welfareUnionName")));
|
||||||
return map;
|
|
||||||
}).toList();
|
|
||||||
|
|
||||||
// 分组
|
|
||||||
Map<String, List<Map<String, Object>>> listMap = safeList.stream()
|
|
||||||
.collect(Collectors.groupingBy(n -> (String) n.get("welfareUnionName")));
|
|
||||||
|
|
||||||
// 构建 Excel 列
|
|
||||||
List<ExcelExportEntity> entities = new ArrayList<>();
|
|
||||||
entities.add(new ExcelExportEntity("工号", "loginName", 20));
|
|
||||||
entities.add(new ExcelExportEntity("姓名", "userName", 20));
|
|
||||||
optionList.forEach(option -> {
|
|
||||||
entities.add(new ExcelExportEntity(option.getOptionName(), option.getOptionName(), 20));
|
|
||||||
});
|
|
||||||
ExcelExportEntity userSignEntity = new ExcelExportEntity("签字", "userSign", 20);
|
|
||||||
userSignEntity.setType(2);
|
|
||||||
userSignEntity.setExportImageType(2);
|
|
||||||
entities.add(userSignEntity);
|
|
||||||
|
|
||||||
// 导出
|
|
||||||
Workbook workbook = new HSSFWorkbook();
|
Workbook workbook = new HSSFWorkbook();
|
||||||
listMap.forEach((k, v) -> {
|
if (rowsByUnion.isEmpty()) {
|
||||||
ExcelExportService service = new ExcelExportService();
|
rowsByUnion.put("领取表", Collections.emptyList());
|
||||||
ExportParams exportParams = new ExportParams();
|
}
|
||||||
exportParams.setSheetName(k);
|
|
||||||
exportParams.setType(ExcelType.HSSF);
|
CellStyle headerStyle = workbook.createCellStyle();
|
||||||
service.createSheetForMap(workbook, exportParams, entities, v);
|
Font headerFont = workbook.createFont();
|
||||||
|
headerFont.setBold(true);
|
||||||
|
headerStyle.setFont(headerFont);
|
||||||
|
|
||||||
|
List<String> headers = new ArrayList<>(List.of("工号", "姓名"));
|
||||||
|
optionList.forEach(option -> headers.add(option.getOptionName()));
|
||||||
|
headers.add("签字");
|
||||||
|
int signColumn = headers.size() - 1;
|
||||||
|
|
||||||
|
rowsByUnion.forEach((unionName, records) -> {
|
||||||
|
Sheet sheet = workbook.createSheet(unionName);
|
||||||
|
Row header = sheet.createRow(0);
|
||||||
|
for (int column = 0; column < headers.size(); column++) {
|
||||||
|
sheet.setColumnWidth(column, 20 * 256);
|
||||||
|
Cell cell = header.createCell(column);
|
||||||
|
cell.setCellValue(headers.get(column));
|
||||||
|
cell.setCellStyle(headerStyle);
|
||||||
|
}
|
||||||
|
|
||||||
|
Drawing<?> drawing = sheet.createDrawingPatriarch();
|
||||||
|
for (NutMap record : records) {
|
||||||
|
Row row = sheet.createRow(sheet.getLastRowNum() + 1);
|
||||||
|
row.createCell(0).setCellValue(Objects.toString(record.get("loginName"), ""));
|
||||||
|
row.createCell(1).setCellValue(Objects.toString(record.get("userName"), ""));
|
||||||
|
Set<String> selectedIds = new HashSet<>(Arrays.asList(
|
||||||
|
Objects.toString(record.get("selectOptionIds"), "").split(",")));
|
||||||
|
for (int i = 0; i < optionList.size(); i++) {
|
||||||
|
row.createCell(i + 2).setCellValue(selectedIds.contains(optionList.get(i).getId()) ? "√" : "");
|
||||||
|
}
|
||||||
|
if (record.get("userSign") instanceof byte[] signature) {
|
||||||
|
row.setHeightInPoints(40);
|
||||||
|
ClientAnchor anchor = workbook.getCreationHelper().createClientAnchor();
|
||||||
|
anchor.setCol1(signColumn);
|
||||||
|
anchor.setCol2(signColumn + 1);
|
||||||
|
anchor.setRow1(row.getRowNum());
|
||||||
|
anchor.setRow2(row.getRowNum() + 1);
|
||||||
|
drawing.createPicture(anchor, workbook.addPicture(signature, Workbook.PICTURE_TYPE_PNG));
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
CommonDownloadUtil.download("领取表.xls", workbook, response);
|
CommonDownloadUtil.download("领取表.xls", workbook, response);
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ layout("/layouts/platform_h5.html"){
|
|||||||
display: flex;
|
display: flex;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
padding-top: 2px;
|
padding-top: 10px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
border-top: 1px solid #edf1f6;
|
border-top: 1px solid #edf1f6;
|
||||||
}
|
}
|
||||||
@@ -194,18 +194,22 @@ layout("/layouts/platform_h5.html"){
|
|||||||
}
|
}
|
||||||
|
|
||||||
.welfare-list-card__choices .welfare-inline-selection {
|
.welfare-list-card__choices .welfare-inline-selection {
|
||||||
width: 82px;
|
flex: 0 0 clamp(82px, 31%, 112px);
|
||||||
min-width: 82px;
|
min-width: 0;
|
||||||
min-height: 112px;
|
padding: 0;
|
||||||
padding: 8px 0;
|
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: stretch;
|
align-items: stretch;
|
||||||
border-bottom: 0;
|
overflow: hidden;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 8px;
|
||||||
|
background: #edf4fc;
|
||||||
}
|
}
|
||||||
|
|
||||||
.welfare-list-card__choices .welfare-inline-selection__image {
|
.welfare-list-card__choices .welfare-inline-selection__image {
|
||||||
width: 82px;
|
display: block;
|
||||||
height: 64px;
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
aspect-ratio: 4 / 3;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,19 +227,22 @@ layout("/layouts/platform_h5.html"){
|
|||||||
}
|
}
|
||||||
|
|
||||||
.welfare-list-card__choices .welfare-inline-selection__image--name span {
|
.welfare-list-card__choices .welfare-inline-selection__image--name span {
|
||||||
display: -webkit-box;
|
min-width: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
-webkit-box-orient: vertical;
|
white-space: nowrap;
|
||||||
-webkit-line-clamp: 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.welfare-list-card__choices .welfare-inline-selection__content {
|
.welfare-list-card__choices .welfare-inline-selection__content {
|
||||||
margin-top: 6px;
|
width: 100%;
|
||||||
|
padding: 3px 6px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.welfare-list-card__choices .welfare-inline-selection__name {
|
.welfare-list-card__choices .welfare-inline-selection__name {
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
|
line-height: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.welfare-list-card__choices .welfare-inline-selection__meta {
|
.welfare-list-card__choices .welfare-inline-selection__meta {
|
||||||
@@ -486,7 +493,7 @@ layout("/layouts/platform_h5.html"){
|
|||||||
.welfare-inline-selection__name {
|
.welfare-inline-selection__name {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
color: #263548;
|
color: #263548;
|
||||||
font-size: 14px;
|
font-size: 12px;
|
||||||
line-height: 21px;
|
line-height: 21px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
|
|||||||
Reference in New Issue
Block a user