报表列表接口

This commit is contained in:
shuo.wang
2025-05-14 17:33:32 +08:00
parent f09b89b5fe
commit 177ff32f58
13 changed files with 253 additions and 28 deletions

View File

@@ -20,6 +20,7 @@ public enum FileTypeEnum {
EXPORT_PROGRESS("exportProgress","进度确认"),
IMPORT_OA_OLD_SHOP_DATA_ERROR("OaOldShopDataError", "导入OA旧数据错误列表"),
IMPORT_OA_OLD_SHOP_DATA("importOaOldShopData", "导入OA旧数据"),
ZXJP_OPEN_SHOP_REPORT("zxjpOpenShopReport","正新鸡排开店"),
;
private String fileType;

View File

@@ -1,5 +1,9 @@
package com.cool.store.response;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.cool.store.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -15,47 +19,75 @@ import java.math.BigDecimal;
public class FranchiseReportResponse {
@ApiModelProperty(value = "加盟集团")
@ExcelProperty(value = "加盟集团",order = 1)
@ColumnWidth(25)
private String joinGroupName;
@ApiModelProperty(value = "加盟分部/片区")
@ExcelProperty(value = "加盟分部/片区",order = 2)
@ColumnWidth(20)
private String regionName;
@ApiModelProperty(value = "门店数")
@ExcelProperty(value = "门店数",order = 3)
@ColumnWidth(15)
private Integer storeNum = 0;
@ApiModelProperty(value = "鸡排普通店")
@ExcelProperty(value = "鸡排普通店",order = 4)
@ColumnWidth(20)
private Integer normalStoreNum = 0;
@ApiModelProperty(value = "鸡排餐厅店")
@ExcelProperty(value = "鸡排餐厅店",order = 5)
@ColumnWidth(20)
private Integer restaurantStoreNum = 0;
@ApiModelProperty(value = "鸡排无展示门店")
@ExcelProperty(value = "鸡排无展示门店",order = 6)
@ColumnWidth(25)
private Integer noShowStoreNum = 0;
@ApiModelProperty(value = "加盟费")
@ExcelProperty(value = "加盟费",order = 7)
@ColumnWidth(20)
private BigDecimal franchiseFeeTotal = BigDecimal.ZERO;
@ApiModelProperty(value = "品牌费")
@ExcelProperty(value = "品牌费",order = 8)
@ColumnWidth(20)
private BigDecimal firstYearBrandingFeeTotal = BigDecimal.ZERO;
@ApiModelProperty(value = "管理费")
@ExcelProperty(value = "管理费",order = 9)
@ColumnWidth(20)
private BigDecimal firstYearManagementFeeTotal = BigDecimal.ZERO;
@ApiModelProperty(value = "设计费")
@ExcelProperty(value = "设计费",order = 10)
@ColumnWidth(20)
private BigDecimal performanceBondTotal = BigDecimal.ZERO;
@ApiModelProperty(value = "管理/品牌/设计费")
@ExcelProperty(value = "管理/品牌/设计费",order = 11)
@ColumnWidth(25)
private BigDecimal managementBrandingDesignFeeTotal = BigDecimal.ZERO;
@ApiModelProperty(value = "保证金")
@ExcelProperty(value = "保证金",order = 12)
@ColumnWidth(20)
private BigDecimal loanMarginTotal = BigDecimal.ZERO;
@ApiModelProperty(value = "昨日日期")
@ExcelProperty(value = "昨日日期",order = 13)
@ColumnWidth(15)
private String yesterdayDate;
@ApiModelProperty(value = "昨天门店数")
@ExcelProperty(value = "昨天门店数",order = 14)
@ColumnWidth(15)
private Integer yesterdayStoreNum = 0;
@ExcelIgnore
private Long regionId;

View File

@@ -0,0 +1,40 @@
package com.cool.store.handler;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.*;
import java.util.List;
public class CenterAlignHandler implements CellWriteHandler {
@Override
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {
}
@Override
public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell,
Head head, Integer relativeRowIndex, Boolean isHead) {
// 行号从0开始所以第3行及以后的行号>=2
if (cell.getRowIndex() >= 3) {
Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cell.setCellStyle(cellStyle);
}
}
@Override
public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) {
}
@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
}
}

View File

@@ -0,0 +1,54 @@
package com.cool.store.handler;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
/**
* 第一行 拦截器
*/
public class ImplProgressReportSheetWriteHandler implements SheetWriteHandler {
private final String title;
public ImplProgressReportSheetWriteHandler(String title) {
this.title = title;
}
@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
}
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
Workbook workbook = writeWorkbookHolder.getWorkbook();
Sheet sheet = workbook.getSheetAt(0);
// 设置第一行标题
Row row1 = sheet.createRow(0);
row1.setHeight((short) 300);
Cell row1Cell1 = row1.createCell(0);
row1Cell1.setCellValue(title);
CellStyle row1CellStyle = workbook.createCellStyle();
row1CellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
row1CellStyle.setAlignment(HorizontalAlignment.LEFT);
Font row1Font = workbook.createFont();
row1Font.setBold(true);
row1Font.setFontName("方正小标宋_GBK");
row1Font.setFontHeightInPoints((short) 10);
row1CellStyle.setFont(row1Font);
row1Cell1.setCellStyle(row1CellStyle);
//合并单元格,起始行,结束行,起始列,结束列
sheet.addMergedRegionUnsafe(new CellRangeAddress(0, 1, 0, 17));
}
}

View File

@@ -4,7 +4,9 @@ import com.cool.store.dto.Preparation.PreparationDTO;
import com.cool.store.entity.ImportTaskDO;
import com.cool.store.entity.LineInfoDO;
import com.cool.store.entity.PointInfoDO;
import com.cool.store.request.FranchiseReportRequest;
import com.cool.store.response.BranchShopResponse;
import com.cool.store.response.FranchiseReportResponse;
import java.util.List;
@@ -24,4 +26,6 @@ public interface ExportRealizeService {
void exportJoinShop(List<BranchShopResponse> list,ImportTaskDO importTaskDO);
void exportProgress(List<BranchShopResponse> list,ImportTaskDO importTaskDO);
void exportZxjpOpenShopReport(List<FranchiseReportResponse> list, ImportTaskDO importTaskDO, FranchiseReportRequest request);
}

View File

@@ -18,5 +18,8 @@ public interface ExportService {
//财务导出 //加盟开店申请 //进度确认
Long exportProgressBase(BranchShopRequest request, LoginUserInfo user, FileTypeEnum fileTypeEnum);
//正新加盟报表导出
Long exportZxjpOpenShopReport(FranchiseReportRequest request, LoginUserInfo user);
}

View File

@@ -14,5 +14,5 @@ import java.util.List;
*/
public interface FranchiseReportService {
List<FranchiseReportResponse> getFranchiseReport(FranchiseReportRequest request);
List<FranchiseReportResponse> zxjpOpenShopReport(FranchiseReportRequest request);
}

View File

@@ -14,8 +14,10 @@ import com.cool.store.enums.*;
import com.cool.store.enums.point.*;
import com.cool.store.exception.ServiceException;
import com.cool.store.mapper.*;
import com.cool.store.request.FranchiseReportRequest;
import com.cool.store.request.InitiatingRequest;
import com.cool.store.response.BranchShopResponse;
import com.cool.store.response.FranchiseReportResponse;
import com.cool.store.service.*;
import com.cool.store.utils.JSONUtils;
import com.cool.store.utils.RedisUtilPool;
@@ -413,7 +415,7 @@ public class ExportRealizeServiceImpl implements ExportRealizeService {
Map<Long, FranchiseFeeDTO> franchiseFeeDTOMap = franchiseFees.stream().filter(o -> o.getShopId() != null)
.collect(Collectors.toMap(FranchiseFeeDTO::getShopId, Function.identity()));
Set<Long> lineIds = list.stream().map(BranchShopResponse::getLineId).collect(Collectors.toSet());
List<LineInfoDO> lineInfoDOS = lineInfoDAO.getByLineIds( new ArrayList<>(lineIds));
List<LineInfoDO> lineInfoDOS = lineInfoDAO.getByLineIds(new ArrayList<>(lineIds));
Map<Long, LineInfoDO> lineMap = lineInfoDOS.stream().collect(Collectors.toMap(LineInfoDO::getId, Function.identity()));
List<QualificationsInfoDO> qualificationsInfoDOList = qualificationsInfoDAO.getByLineIds(new ArrayList<>(lineIds));
Map<Long, QualificationsInfoDO> qualificationsInfoDOMap = qualificationsInfoDOList.stream().collect(Collectors.toMap(QualificationsInfoDO::getLineId, Function.identity()));
@@ -627,6 +629,24 @@ public class ExportRealizeServiceImpl implements ExportRealizeService {
}
}
@Override
public void exportZxjpOpenShopReport(List<FranchiseReportResponse> list, ImportTaskDO importTaskDO, FranchiseReportRequest request) {
String url = "";
try {
url = easyExcelUtil.exportExcelSpecial(FranchiseReportResponse.class, list, null,
FileTypeEnum.ZXJP_OPEN_SHOP_REPORT.getDesc() + DateUtils.parseDateToStr(SPECIAL_DATE_START_1, new Date()),
FileTypeEnum.ZXJP_OPEN_SHOP_REPORT.getDesc() + DateUtils.parseDateToStr(SPECIAL_DATE_START_1, new Date()),
"建店资料完成日期:",request.getBuildStartTime(),request.getBuildEndTime());
} catch (Throwable e) {
log.error("fileUpload upload err, originFileName={}", FileTypeEnum.ZXJP_OPEN_SHOP_REPORT.getDesc(), e);
throw new ServiceException(ErrorCodeEnum.INTERNAL_SERVER_ERROR);
} finally {
importTaskDO.setStatus(ImportStatusEnum.success.getCode());
importTaskDO.setFileUrl(url);
importTaskMapper.update(eid, importTaskDO);
}
}
private String toString(Object o) {
if (o == null) {
return "";

View File

@@ -19,6 +19,7 @@ import com.cool.store.mapper.ImportTaskMapper;
import com.cool.store.mapper.PointInfoMapper;
import com.cool.store.request.*;
import com.cool.store.response.BranchShopResponse;
import com.cool.store.response.FranchiseReportResponse;
import com.cool.store.service.*;
import com.cool.store.utils.easyExcel.EasyExcelUtil;
import com.cool.store.utils.poi.DateUtils;
@@ -71,6 +72,9 @@ public class ExportServiceImpl implements ExportService {
private ShopInfoDAO shopInfoDAO;
@Autowired
private ShopService shopService;
@Resource
private FranchiseReportService franchiseReportService;
@Override
@@ -109,7 +113,7 @@ public class ExportServiceImpl implements ExportService {
if (total == CommonConstants.ZERO) {
return CommonConstants.ZERO_LONG;
} else if (total > CommonConstants.FIVE_SECONDS) {
throw new ServiceException(ErrorCodeEnum.EXPORT_LIMIT_5000);
throw new ServiceException(ErrorCodeEnum.EXPORT_LIMIT_5000);
}
ImportTaskDO importTaskDO = new ImportTaskDO();
importTaskDO.setStatus(ImportStatusEnum.Ongoing.getCode());
@@ -137,5 +141,25 @@ public class ExportServiceImpl implements ExportService {
return total;
}
@Override
public Long exportZxjpOpenShopReport(FranchiseReportRequest request, LoginUserInfo user) {
List<FranchiseReportResponse> franchiseReport = franchiseReportService.zxjpOpenShopReport(request);
if (CollectionUtils.isEmpty(franchiseReport)){
log.error("导出数据为空");
return 0L;
}
ImportTaskDO importTaskDO = new ImportTaskDO();
importTaskDO.setStatus(ImportStatusEnum.Ongoing.getCode());
importTaskDO.setFileName(FileTypeEnum.ZXJP_OPEN_SHOP_REPORT.getDesc() + DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_START_1, new Date()));
importTaskDO.setIsImport(Boolean.FALSE);
importTaskDO.setFileType(FileTypeEnum.ZXJP_OPEN_SHOP_REPORT.getFileType());
importTaskDO.setCreateUserId(user.getUserId());
importTaskDO.setCreateTime(new Date().getTime());
importTaskDO.setCreateName(user.getName());
importTaskMapper.insert(eid, importTaskDO);
exportRealizeService.exportZxjpOpenShopReport(franchiseReport, importTaskDO,request);
return (long) franchiseReport.size();
}
}

View File

@@ -46,13 +46,16 @@ public class FranchiseReportServiceImpl implements FranchiseReportService {
private FranchiseFeeMapper franchiseFeeMapper;
@Override
public List<FranchiseReportResponse> getFranchiseReport(FranchiseReportRequest request) {
public List<FranchiseReportResponse> zxjpOpenShopReport(FranchiseReportRequest request) {
if (StringUtils.isBlank(request.getBuildStartTime()) || StringUtils.isBlank(request.getBuildEndTime())) {
throw new ServiceException(ErrorCodeEnum.TIME_NULL_FALSE);
}
//集团查大区
List<Long> regionIdByGroupName = bigRegionDAO.getRegionIdByGroupName(request.getJoinGroupName());
if (CollectionUtils.isNotEmpty(regionIdByGroupName)) {
if (CollectionUtils.isEmpty(request.getRegionIds())){
request.setRegionIds(new ArrayList<>());
}
request.getRegionIds().addAll(regionIdByGroupName);
}
List<FranchiseReportDTO> shopFranchiseReportList = shopInfoDAO.getShopFranchiseReportList(request);
@@ -75,7 +78,11 @@ public class FranchiseReportServiceImpl implements FranchiseReportService {
response = new FranchiseReportResponse();
response.setRegionId(shopFranchiseReportDTO.getRegionId());
response.setRegionName(bigRegionDOMap.getOrDefault(shopFranchiseReportDTO.getRegionId(), new BigRegionDO()).getRegionName());
response.setJoinGroupName(bigRegionDOMap.getOrDefault(shopFranchiseReportDTO.getRegionId(), new BigRegionDO()).getGroupName());
String groupName = bigRegionDOMap.getOrDefault(shopFranchiseReportDTO.getRegionId(), new BigRegionDO()).getGroupName();
if (StringUtils.isBlank(groupName)){
continue;
}
response.setJoinGroupName(groupName);
}
if (StoreTypeEnum.NO_SHOW_STORE.getCode().equals(shopFranchiseReportDTO.getStoreType())) {
response.setNoShowStoreNum(response.getNoShowStoreNum() + 1);
@@ -93,7 +100,6 @@ public class FranchiseReportServiceImpl implements FranchiseReportService {
response.setFirstYearBrandingFeeTotal(response.getFirstYearBrandingFeeTotal().add(new BigDecimal(franchiseFeeDO.getFirstYearFee())));
response.setPerformanceBondTotal(response.getPerformanceBondTotal().add(new BigDecimal(franchiseFeeDO.getPerformanceBond())));
response.setManagementBrandingDesignFeeTotal(response.getManagementBrandingDesignFeeTotal()
.add(new BigDecimal(franchiseFeeDO.getYearFranchiseFee()))
.add(new BigDecimal(franchiseFeeDO.getFirstYearManageFee()))
.add(new BigDecimal(franchiseFeeDO.getFirstYearFee()))
.add(new BigDecimal(franchiseFeeDO.getPerformanceBond())));
@@ -129,6 +135,11 @@ public class FranchiseReportServiceImpl implements FranchiseReportService {
}
}
return new ArrayList<>(responseByRegionIdMap.values());
List<FranchiseReportResponse> list = new ArrayList<>(responseByRegionIdMap.values());
if (CollectionUtils.isEmpty(list)){
log.info("数据为空");
return Collections.emptyList();
}
return list.stream().sorted(Comparator.comparing(FranchiseReportResponse::getJoinGroupName)).collect(Collectors.toList());
}
}

View File

@@ -3,6 +3,9 @@ package com.cool.store.utils.easyExcel;
import cn.hutool.core.date.DateUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.row.SimpleRowHeightStyleStrategy;
import com.cool.store.handler.CenterAlignHandler;
import com.cool.store.handler.ImplProgressReportSheetWriteHandler;
import com.cool.store.mapper.ImportTaskMapper;
import com.cool.store.oss.OssClientService;
import com.cool.store.utils.UUIDUtils;
@@ -42,24 +45,51 @@ public class EasyExcelUtil {
* @throws IOException 异常捕获
*/
public String exportExcel( Class head, List list, Set<String> set, String sheetName, String fileName) throws Exception {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
if (set == null) {
EasyExcel.write(outputStream, head)
.autoCloseStream(true)
.registerWriteHandler(new SimpleRowHeightStyleStrategy((short)25,(short)25))
.sheet(sheetName)
.doWrite(list);
} else {
EasyExcel.write(outputStream, head).autoCloseStream(true).includeColumnFiledNames(set).sheet(sheetName)
.doWrite(list);
}
byte[] bytes = outputStream.toByteArray();
long size = bytes.length;
InputStream is = new ByteArrayInputStream(bytes);
if (StringUtils.isNotBlank(fileName) && fileName.contains(".")) {
fileName = fileName.substring(0, fileName.lastIndexOf("."));
}
String file = getUploadPath(eid) + fileName + "_" + UUIDUtils.get32UUID() + EXCEL_SUFFIX;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
if (set == null) {
EasyExcel.write(outputStream, head)
.autoCloseStream(true)
.registerWriteHandler(new SimpleRowHeightStyleStrategy((short)25,(short)25))
.sheet(sheetName)
.doWrite(list);
} else {
EasyExcel.write(outputStream, head).autoCloseStream(true).includeColumnFiledNames(set).sheet(sheetName)
.doWrite(list);
}
byte[] bytes = outputStream.toByteArray();
long size = bytes.length;
InputStream is = new ByteArrayInputStream(bytes);
if (StringUtils.isNotBlank(fileName) && fileName.contains(".")) {
fileName = fileName.substring(0, fileName.lastIndexOf("."));
}
String file = getUploadPath(eid) + fileName + "_" + UUIDUtils.get32UUID() + EXCEL_SUFFIX;
return ossClientService.putObject(file, is, size, CONTENT_TYPE);
}
//表头从第二行开始,第一行显示日期
public String exportExcelSpecial( Class head, List list, Set<String> set, String sheetName, String fileName,String firstTitle,String startTime,String endTime) throws Exception {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
if (set == null) {
EasyExcel.write(outputStream)
.head(head)
.autoCloseStream(true)
.registerWriteHandler( new ImplProgressReportSheetWriteHandler(firstTitle+" "+startTime+""+endTime))
.registerWriteHandler(new CenterAlignHandler())
.sheet(sheetName)
.useDefaultStyle(false).relativeHeadRowIndex(2)
.doWrite(list);
} else {
EasyExcel.write(outputStream, head).autoCloseStream(true).includeColumnFiledNames(set).sheet(sheetName)
.doWrite(list);
}
byte[] bytes = outputStream.toByteArray();
long size = bytes.length;
InputStream is = new ByteArrayInputStream(bytes);
if (StringUtils.isNotBlank(fileName) && fileName.contains(".")) {
fileName = fileName.substring(0, fileName.lastIndexOf("."));
}
String file = getUploadPath(eid) + fileName + "_" + UUIDUtils.get32UUID() + EXCEL_SUFFIX;
return ossClientService.putObject(file, is, size, CONTENT_TYPE);
}

View File

@@ -56,4 +56,10 @@ public class ExportController {
public ResponseResult exportProgress(@RequestBody BranchShopRequest request) {
return ResponseResult.success(exportService.exportProgressBase(request, CurrentUserHolder.getUser(), FileTypeEnum.EXPORT_PROGRESS));
}
@PostMapping("/zxjpOpenShopReport")
@ApiOperation("正新鸡排开店")
public ResponseResult zxjpOpenShopReport(@RequestBody FranchiseReportRequest request) {
return ResponseResult.success(exportService.exportZxjpOpenShopReport(request, CurrentUserHolder.getUser()));
}
}

View File

@@ -26,9 +26,9 @@ public class PCFranchiseReportController {
@Resource
private FranchiseReportService franchiseReportService;
@RequestMapping("/getList")
@RequestMapping("/getZxjpOpenShopReport")
@ApiOperation("正新鸡排开店")
public ResponseResult<List<FranchiseReportResponse>> getList(@RequestBody FranchiseReportRequest request) {
return ResponseResult.success( franchiseReportService.getFranchiseReport(request));
return ResponseResult.success( franchiseReportService.zxjpOpenShopReport(request));
}
}