Browse Source

两票生成月报列表与下载

zhongwei
段飞宇 1 year ago
parent
commit
2f676597ae
  1. 28
      hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/controller/TicketCountController.java
  2. 42
      hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/entity/TicketCount.java
  3. 153
      hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/handler/TicketCountSheetWriteHandler.java
  4. 20
      hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/TicketCountService.java
  5. 240
      hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java
  6. 157
      hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/vo/ticket/TicketCountResponseVo.java
  7. 16
      hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/vo/ticket/TicketCountVo.java
  8. 7
      hzims-service/ticket/src/main/resources/db/2.0.0.sql

28
hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/controller/TicketCountController.java

@ -1,14 +1,15 @@
package com.hnac.hzims.ticket.twoTicket.controller; package com.hnac.hzims.ticket.twoTicket.controller;
import cn.hutool.http.server.HttpServerResponse;
import com.hnac.hzims.ticket.twoTicket.service.TicketCountService; import com.hnac.hzims.ticket.twoTicket.service.TicketCountService;
import com.hnac.hzims.ticket.twoTicket.vo.ticket.TicketCountResponseVo;
import com.hnac.hzims.ticket.twoTicket.vo.ticket.TicketCountVo;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.YearMonth; import javax.servlet.http.HttpServletResponse;
import java.util.List;
/** /**
* 两票统计分析模块 * 两票统计分析模块
@ -28,6 +29,7 @@ public class TicketCountController {
/** /**
* 两票生成月报统计 * 两票生成月报统计
*
* @param dateTime 月份 * @param dateTime 月份
* @return * @return
*/ */
@ -38,8 +40,24 @@ public class TicketCountController {
} }
/**
* 两票统计分析列表
*/
@GetMapping("/list")
public R list(TicketCountVo ticketCountVo) {
List<TicketCountResponseVo> result = ticketCountService.selectTicketCountLlist(ticketCountVo);
return R.data(result);
}
/**
* 两票统计分析导出
*/
@GetMapping("/export")
public R export(HttpServletResponse response) {
ticketCountService.exportTicketCount(response);
return R.success("导出成功");
}
} }

42
hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/entity/TicketCount.java

@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -21,13 +23,7 @@ import java.time.YearMonth;
@Accessors(chain = true) @Accessors(chain = true)
@EqualsAndHashCode @EqualsAndHashCode
@TableName("hzims_ticket_count") @TableName("hzims_ticket_count")
public class TicketCount implements Serializable { public class TicketCount extends TenantEntity implements Serializable {
/**
* 编号
*/
private Long id;
/** /**
@ -77,36 +73,4 @@ public class TicketCount implements Serializable {
*/ */
private Integer ticketProportionNum; private Integer ticketProportionNum;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 逻辑删除
*/
@TableField(value = "is_deleted")
@TableLogic(value = "0", delval = "1")
private Boolean deleted;
/**
* 创建部门
*/
private String createDept;
/**
* 租户Id
*/
private String tenantId;
} }

153
hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/handler/TicketCountSheetWriteHandler.java

@ -0,0 +1,153 @@
package com.hnac.hzims.ticket.twoTicket.handler;
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.aspectj.bridge.MessageWriter;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/7/6 11:08
*/
public class TicketCountSheetWriteHandler implements SheetWriteHandler {
/**
* Called before create the sheet
*
* @param writeWorkbookHolder
* @param writeSheetHolder
*/
@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
}
/**
* Called after the sheet is created
*
* @param writeWorkbookHolder
* @param writeSheetHolder
*/
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
Workbook workbook = writeWorkbookHolder.getWorkbook();
CellStyle headerStyle = createHeadCellStyle(workbook);
Sheet sheet = workbook.getSheetAt(0);
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 1, 4));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 5, 8));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 9, 12));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 13, 15));
sheet.setHorizontallyCenter(true);
sheet.setVerticallyCenter(true);
sheet.setDefaultRowHeight((short) 20);
//设置填表日期,填报人,联系方式
Row row1 = sheet.createRow(0);
row1.setHeightInPoints((short) 35);
Cell row1Cell = row1.createCell(0);
row1Cell.setCellValue("站点");
row1Cell.setCellStyle(headerStyle);
// row1.setHeight((short) 500);
Cell cell = row1.createCell(1);
cell.setCellValue("第一种工作票");
cell.setCellStyle(headerStyle);
Cell cell1 = row1.createCell(5);
cell1.setCellValue("第二种工作票");
cell1.setCellStyle(headerStyle);
Cell cell2 = row1.createCell(9);
cell2.setCellValue("机械工作票");
cell2.setCellStyle(headerStyle);
Cell cell3 = row1.createCell(13);
cell3.setCellValue("倒闸操作票");
cell3.setCellStyle(headerStyle);
}
/**
* 创建表头样式
* @param wb
* @return
*/
private static CellStyle createHeadCellStyle(Workbook wb) {
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setWrapText(true);// 设置自动换行
cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景颜色
cellStyle.setAlignment(HorizontalAlignment.CENTER); //水平居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); //垂直对齐
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cellStyle.setBottomBorderColor(IndexedColors.BLACK.index);
cellStyle.setBorderBottom(BorderStyle.THIN); //下边框
cellStyle.setBorderLeft(BorderStyle.THIN); //左边框
cellStyle.setBorderRight(BorderStyle.THIN); //右边框
cellStyle.setBorderTop(BorderStyle.THIN); //上边框
Font headerFont = wb.createFont(); // 创建字体样式
headerFont.setBold(true); //字体加粗
headerFont.setFontName("黑体"); // 设置字体类型
headerFont.setFontHeightInPoints((short) 12); // 设置字体大小
cellStyle.setFont(headerFont); // 为标题样式设置字体样式
return cellStyle;
}
/**
* 创建内容样式
* @param wb
* @return
*/
private static CellStyle createContentCellStyle(Workbook wb) {
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);// 水平居中
cellStyle.setWrapText(true);// 设置自动换行
cellStyle.setBorderBottom(BorderStyle.THIN); //下边框
cellStyle.setBorderLeft(BorderStyle.THIN); //左边框
cellStyle.setBorderRight(BorderStyle.THIN); //右边框
cellStyle.setBorderTop(BorderStyle.THIN); //上边框
// 生成12号字体
Font font = wb.createFont();
font.setColor((short)8);
font.setFontHeightInPoints((short) 12);
cellStyle.setFont(font);
return cellStyle;
}
/**
* 创建标题样式
* @param wb
* @return
*/
private static CellStyle createTitleCellStyle(Workbook wb) {
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直对齐
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cellStyle.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex());//背景颜色
Font headerFont1 = wb.createFont(); // 创建字体样式
headerFont1.setBold(true); //字体加粗
headerFont1.setFontName("黑体"); // 设置字体类型
headerFont1.setFontHeightInPoints((short) 15); // 设置字体大小
cellStyle.setFont(headerFont1); // 为标题样式设置字体样式
return cellStyle;
}
}

20
hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/TicketCountService.java

@ -1,9 +1,14 @@
package com.hnac.hzims.ticket.twoTicket.service; package com.hnac.hzims.ticket.twoTicket.service;
import cn.hutool.http.server.HttpServerResponse;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.hnac.hzims.ticket.twoTicket.entity.TicketCount; import com.hnac.hzims.ticket.twoTicket.entity.TicketCount;
import com.hnac.hzims.ticket.twoTicket.entity.TicketInfoDanger; import com.hnac.hzims.ticket.twoTicket.entity.TicketInfoDanger;
import com.hnac.hzims.ticket.twoTicket.vo.ticket.TicketCountResponseVo;
import com.hnac.hzims.ticket.twoTicket.vo.ticket.TicketCountVo;
import org.springblade.core.mp.base.BaseService;
import javax.servlet.http.HttpServletResponse;
import java.time.YearMonth; import java.time.YearMonth;
import java.util.List; import java.util.List;
@ -13,11 +18,24 @@ import java.util.List;
* @Serial 1.0 * @Serial 1.0
* @Date 2023/7/3 13:37 * @Date 2023/7/3 13:37
*/ */
public interface TicketCountService extends IService<TicketCount> { public interface TicketCountService extends BaseService<TicketCount> {
/** /**
* 两票生成月报统计 * 两票生成月报统计
*/ */
void loadMonthReport(String dateTime); void loadMonthReport(String dateTime);
/**
* 两票统计分析列表
* @param ticketCountVo
* @return
*/
List<TicketCountResponseVo> selectTicketCountLlist(TicketCountVo ticketCountVo);
/**
* 两票统计分析导出
* @param response
*/
void exportTicketCount(HttpServletResponse response);
} }

240
hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketCountServiceImpl.java

@ -1,21 +1,38 @@
package com.hnac.hzims.ticket.twoTicket.service.impl; package com.hnac.hzims.ticket.twoTicket.service.impl;
import cn.hutool.http.server.HttpServerResponse;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hnac.hzims.common.logs.utils.StringUtils;
import com.hnac.hzims.ticket.allTicket.entity.TicketInfoEvaluateEntity; import com.hnac.hzims.ticket.allTicket.entity.TicketInfoEvaluateEntity;
import com.hnac.hzims.ticket.allTicket.service.TicketInfoEvaluateService; import com.hnac.hzims.ticket.allTicket.service.TicketInfoEvaluateService;
import com.hnac.hzims.ticket.standardTicket.entity.StandardTicketInfoEntity; import com.hnac.hzims.ticket.standardTicket.entity.StandardTicketInfoEntity;
import com.hnac.hzims.ticket.standardTicket.service.IStandardTicketInfoService; import com.hnac.hzims.ticket.standardTicket.service.IStandardTicketInfoService;
import com.hnac.hzims.ticket.twoTicket.entity.TicketCount; import com.hnac.hzims.ticket.twoTicket.entity.TicketCount;
import com.hnac.hzims.ticket.twoTicket.handler.TicketCountSheetWriteHandler;
import com.hnac.hzims.ticket.twoTicket.mapper.TicketCountMapper; import com.hnac.hzims.ticket.twoTicket.mapper.TicketCountMapper;
import com.hnac.hzims.ticket.twoTicket.service.TicketCountService; import com.hnac.hzims.ticket.twoTicket.service.TicketCountService;
import com.hnac.hzims.ticket.twoTicket.vo.ticket.TicketCountResponseVo;
import com.hnac.hzims.ticket.twoTicket.vo.ticket.TicketCountVo;
import com.hnac.hzims.ticket.workTicket.entity.WorkTicketInfoEntity; import com.hnac.hzims.ticket.workTicket.entity.WorkTicketInfoEntity;
import com.hnac.hzims.ticket.workTicket.service.IWorkTicketInfoService; import com.hnac.hzims.ticket.workTicket.service.IWorkTicketInfoService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
@ -23,10 +40,12 @@ import org.springblade.system.feign.ISysClient;
import org.springblade.system.user.feign.IUserClient; import org.springblade.system.user.feign.IUserClient;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.io.FileOutputStream;
import java.util.Map; import java.io.IOException;
import java.util.Set; import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -40,7 +59,7 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class TicketCountServiceImpl extends ServiceImpl<TicketCountMapper, TicketCount> implements TicketCountService { public class TicketCountServiceImpl extends BaseServiceImpl<TicketCountMapper, TicketCount> implements TicketCountService {
private final ThreadPoolExecutor executor; private final ThreadPoolExecutor executor;
@ -82,7 +101,7 @@ public class TicketCountServiceImpl extends ServiceImpl<TicketCountMapper, Ticke
//第一种工作票 //第一种工作票
CompletableFuture<Void> oneTicketCompletableFuture = ticketCountsCompletableFuture.thenAcceptAsync((items) -> { CompletableFuture<Void> oneTicketCompletableFuture = ticketCountsCompletableFuture.thenAcceptAsync((items) -> {
//查询第一种工作票 //查询第一种工作票
List<TicketCount> ticketCountList = getTicketCountList(createDept, items, "6", dateTime,user); List<TicketCount> ticketCountList = getTicketCountList(createDept, items, "6", dateTime, user);
if (CollectionUtils.isNotEmpty(ticketCountList)) { if (CollectionUtils.isNotEmpty(ticketCountList)) {
this.saveBatch(ticketCountList); this.saveBatch(ticketCountList);
} }
@ -90,7 +109,7 @@ public class TicketCountServiceImpl extends ServiceImpl<TicketCountMapper, Ticke
//第二种工作票 //第二种工作票
CompletableFuture<Void> twoTicketCompletableFuture = ticketCountsCompletableFuture.thenAcceptAsync((items) -> { CompletableFuture<Void> twoTicketCompletableFuture = ticketCountsCompletableFuture.thenAcceptAsync((items) -> {
//查询第一种工作票 //查询第一种工作票
List<TicketCount> ticketCountList = getTicketCountList(createDept, items, "7", dateTime,user); List<TicketCount> ticketCountList = getTicketCountList(createDept, items, "7", dateTime, user);
if (CollectionUtils.isNotEmpty(ticketCountList)) { if (CollectionUtils.isNotEmpty(ticketCountList)) {
this.saveBatch(ticketCountList); this.saveBatch(ticketCountList);
} }
@ -98,7 +117,7 @@ public class TicketCountServiceImpl extends ServiceImpl<TicketCountMapper, Ticke
//水力机械工作票 //水力机械工作票
CompletableFuture<Void> threeTicketCompletableFuture = ticketCountsCompletableFuture.thenAcceptAsync((items) -> { CompletableFuture<Void> threeTicketCompletableFuture = ticketCountsCompletableFuture.thenAcceptAsync((items) -> {
//查询第一种工作票 //查询第一种工作票
List<TicketCount> ticketCountList = getTicketCountList(createDept, items, "8", dateTime,user); List<TicketCount> ticketCountList = getTicketCountList(createDept, items, "8", dateTime, user);
if (CollectionUtils.isNotEmpty(ticketCountList)) { if (CollectionUtils.isNotEmpty(ticketCountList)) {
this.saveBatch(ticketCountList); this.saveBatch(ticketCountList);
} }
@ -106,22 +125,171 @@ public class TicketCountServiceImpl extends ServiceImpl<TicketCountMapper, Ticke
//操作票 //操作票
CompletableFuture<Void> standardCompletableFuture = ticketCountsCompletableFuture.thenAcceptAsync((items) -> { CompletableFuture<Void> standardCompletableFuture = ticketCountsCompletableFuture.thenAcceptAsync((items) -> {
//操作票 //操作票
List<TicketCount> ticketCountList = getStandardTicketCountList(createDept, items, "3", dateTime,user); List<TicketCount> ticketCountList = getStandardTicketCountList(createDept, items, "3", dateTime, user);
if (CollectionUtils.isNotEmpty(ticketCountList)) { if (CollectionUtils.isNotEmpty(ticketCountList)) {
this.saveBatch(ticketCountList); this.saveBatch(ticketCountList);
} }
}, executor); }, executor);
//执行线程操作 //执行线程操作
CompletableFuture.allOf(ticketCountsCompletableFuture, CompletableFuture.allOf(ticketCountsCompletableFuture, oneTicketCompletableFuture, twoTicketCompletableFuture, threeTicketCompletableFuture, standardCompletableFuture).get();
oneTicketCompletableFuture,
twoTicketCompletableFuture,
threeTicketCompletableFuture,
standardCompletableFuture)
.get();
} }
/** /**
* 两票统计分析列表
*
* @param ticketCountVo
* @return
*/
@Override
public List<TicketCountResponseVo> selectTicketCountLlist(TicketCountVo ticketCountVo) {
//获取keyword
String keyword = ticketCountVo.getKeyword();
QueryWrapper<TicketCount> ticketCountQueryWrapper = new QueryWrapper<>();
ticketCountQueryWrapper.like(StringUtils.isNotBlank(keyword), "dept_name", keyword);
List<TicketCount> ticketCounts = baseMapper.selectList(ticketCountQueryWrapper);
List<TicketCountResponseVo> result = getTicketCountResponseList(ticketCounts);
return result;
}
/**
* 两票统计分析导出
*
* @param response
*/
@Override
public void exportTicketCount(HttpServletResponse response) {
String fileName = URLEncoder.encode("两票月报分析统计报表.xlsx");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setCharacterEncoding("utf-8");
List<TicketCount> ticketCounts = baseMapper.selectList(null);
List<TicketCountResponseVo> countResponseList = getTicketCountResponseList(ticketCounts);
//导出
//内容样式策略
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
// //垂直居中,水平居中
contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
// //设置 自动换行
contentWriteCellStyle.setWrapped(true);
// // 字体策略
// WriteFont contentWriteFont = new WriteFont();
// // 字体大小
// contentWriteFont.setFontHeightInPoints((short) 12);
// contentWriteCellStyle.setWriteFont(contentWriteFont);
// //头策略使用默认
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
//excel如需下载到本地,只需要将response.getOutputStream()换成File即可(注释掉以上response代码)
try {
EasyExcel.write(response.getOutputStream(), TicketCountResponseVo.class)
//设置输出excel版本,不设置默认为xlsx
.excelType(ExcelTypeEnum.XLSX).head(TicketCountResponseVo.class)
//设置拦截器或自定义样式
.registerWriteHandler(new TicketCountSheetWriteHandler())
.registerWriteHandler(new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle))
.sheet("两票月报分析统计报表")
//设置默认样式及写入头信息开始的行数
.useDefaultStyle(true).relativeHeadRowIndex(1)
//这里的addsumColomn方法是个添加合计的方法,可删除
.doWrite(countResponseList);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 列表封装
*
* @param ticketCounts
* @return
*/
private List<TicketCountResponseVo> getTicketCountResponseList(List<TicketCount> ticketCounts) {
//先判断在存储
Map<String, TicketCountResponseVo> map = new HashMap<>();
for (TicketCount ticketCount : ticketCounts) {
String deptName = ticketCount.getDeptName();
if (map.containsKey(deptName)) {
TicketCountResponseVo ticketCountResponseVo = map.get(deptName);
isExistsTicket(ticketCount, ticketCountResponseVo);
map.put(deptName, ticketCountResponseVo);
} else {
TicketCountResponseVo ticketCountResponseVo = new TicketCountResponseVo();
isExistsTicket(ticketCount, ticketCountResponseVo);
map.put(deptName, ticketCountResponseVo);
}
}
//map遍历
List<TicketCountResponseVo> result = new ArrayList<>();
if (MapUtils.isNotEmpty(map)) {
Set<Map.Entry<String, TicketCountResponseVo>> entries = map.entrySet();
for (Map.Entry<String, TicketCountResponseVo> entry : entries) {
TicketCountResponseVo value = entry.getValue();
value.setDeptName(entry.getKey());
result.add(value);
}
}
return result;
}
/**
* 验证是否是是这几种牌局类型
*
* @param ticketCount
* @param ticketCountResponseVo
*/
private void isExistsTicket(TicketCount ticketCount, TicketCountResponseVo ticketCountResponseVo) {
String deptName = ticketCount.getDeptName();
ticketCountResponseVo.setDeptName(deptName);
if ("3".equals(ticketCount.getTicketType())) {
ticketCountResponseVo.setFourTicketNumber(this.getCount(ticketCount.getTicketNumber()));
ticketCountResponseVo.setFourTicketProportionNum(this.getCount(ticketCount.getTicketProportionNum()));
ticketCountResponseVo.setFourTicketCompleteNum(this.getCount(ticketCount.getTicketCompleteNum()));
ticketCountResponseVo.setFourTicketDelayNum(this.getCount(ticketCount.getTicketDelayNum()));
}
if ("6".equals(ticketCount.getTicketType())) {
ticketCountResponseVo.setOneTicketNumber(this.getCount(ticketCount.getTicketNumber()));
ticketCountResponseVo.setOneTicketProportionNum(this.getCount(ticketCount.getTicketProportionNum()));
ticketCountResponseVo.setOneTicketCompleteNum(this.getCount(ticketCount.getTicketCompleteNum()));
ticketCountResponseVo.setOneTicketDelayNum(this.getCount(ticketCount.getTicketDelayNum()));
}
if ("7".equals(ticketCount.getTicketType())) {
ticketCountResponseVo.setTwoTicketNumber(this.getCount(ticketCount.getTicketNumber()));
ticketCountResponseVo.setTwoTicketProportionNum(this.getCount(ticketCount.getTicketProportionNum()));
ticketCountResponseVo.setTwoTicketCompleteNum(this.getCount(ticketCount.getTicketCompleteNum()));
ticketCountResponseVo.setTwoTicketDelayNum(this.getCount(ticketCount.getTicketDelayNum()));
}
if ("8".equals(ticketCount.getTicketType())) {
ticketCountResponseVo.setThreeTicketNumber(this.getCount(ticketCount.getTicketNumber()));
ticketCountResponseVo.setThreeTicketProportionNum(this.getCount(ticketCount.getTicketProportionNum()));
ticketCountResponseVo.setThreeTicketCompleteNum(this.getCount(ticketCount.getTicketCompleteNum()));
ticketCountResponseVo.setThreeTicketDelayNum(this.getCount(ticketCount.getTicketDelayNum()));
}
}
/**
* 验证是否为null
*/
private int getCount(Integer count) {
return count == null ? 0 : count;
}
/**
* 统计操作票功能 * 统计操作票功能
* *
* @param createDept 所属机构及下属机构 * @param createDept 所属机构及下属机构
@ -132,17 +300,16 @@ public class TicketCountServiceImpl extends ServiceImpl<TicketCountMapper, Ticke
* @return * @return
*/ */
private List<TicketCount> getStandardTicketCountList(List<Long> createDept, List<TicketCount> items, String ticketType, String dateTime, BladeUser user) { private List<TicketCount> getStandardTicketCountList(List<Long> createDept, List<TicketCount> items, String ticketType, String dateTime, BladeUser user) {
List<StandardTicketInfoEntity> ticketInfoEntities = List<StandardTicketInfoEntity> ticketInfoEntities = standardTicketInfoService.selectStandardTicketByDeptIdWithTicketType(createDept, ticketType);
standardTicketInfoService.selectStandardTicketByDeptIdWithTicketType(createDept, ticketType);
if (CollectionUtils.isEmpty(ticketInfoEntities)) { if (CollectionUtils.isEmpty(ticketInfoEntities)) {
return null; return null;
} }
//根据站点分组 //根据站点分组
Map<Long, List<StandardTicketInfoEntity>> createDeptTickets = Map<Long, List<StandardTicketInfoEntity>> createDeptTickets = ticketInfoEntities.stream().collect(Collectors.groupingBy(StandardTicketInfoEntity::getCreateDept));
ticketInfoEntities.stream().collect(Collectors.groupingBy(StandardTicketInfoEntity::getCreateDept));
//获取 操作票的id,删除 //获取 操作票的id,删除
if (CollectionUtils.isNotEmpty(items)) { if (CollectionUtils.isNotEmpty(items)) {
List<Long> collect = items.stream().filter(item -> ticketType.equals(item.getTicketType())).map(TicketCount::getId).collect(Collectors.toList()); List<Long> collect =
items.stream().filter(item -> ticketType.equals(item.getTicketType()) && user.getUserId().equals(item.getCreateUser())).map(TicketCount::getId).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(collect)) { if (CollectionUtils.isNotEmpty(collect)) {
baseMapper.deleteBatchIds(collect); baseMapper.deleteBatchIds(collect);
} }
@ -154,7 +321,8 @@ public class TicketCountServiceImpl extends ServiceImpl<TicketCountMapper, Ticke
ticketCount.setDateTime(dateTime); ticketCount.setDateTime(dateTime);
ticketCount.setDeptId(entry.getKey()); ticketCount.setDeptId(entry.getKey());
ticketCount.setTenantId(user.getTenantId()); ticketCount.setTenantId(user.getTenantId());
ticketCount.setCreateDept(user.getDeptId()); ticketCount.setCreateDept(Long.valueOf(user.getDeptId()));
ticketCount.setCreateUser(user.getUserId());
//根据id获取部门名称 //根据id获取部门名称
R<String> deptName = systemClient.getDeptName(entry.getKey()); R<String> deptName = systemClient.getDeptName(entry.getKey());
if (deptName.isSuccess()) { if (deptName.isSuccess()) {
@ -163,19 +331,16 @@ public class TicketCountServiceImpl extends ServiceImpl<TicketCountMapper, Ticke
List<StandardTicketInfoEntity> values = entry.getValue(); List<StandardTicketInfoEntity> values = entry.getValue();
ticketCount.setTicketType(CollectionUtils.isNotEmpty(values) ? values.get(0).getTicketType() : ticketType); ticketCount.setTicketType(CollectionUtils.isNotEmpty(values) ? values.get(0).getTicketType() : ticketType);
//1. 开票数量 //1. 开票数量
List<StandardTicketInfoEntity> ticketNumbers = List<StandardTicketInfoEntity> ticketNumbers = values.stream().filter(item -> item.getFlowTaskName() != null).collect(Collectors.toList());
values.stream().filter(item -> item.getFlowTaskName() != null).collect(Collectors.toList());
ticketCount.setTicketNumber(ticketNumbers.size()); ticketCount.setTicketNumber(ticketNumbers.size());
//2. 完成数量 //2. 完成数量
List<StandardTicketInfoEntity> ticketCompleteNums = List<StandardTicketInfoEntity> ticketCompleteNums = values.stream().filter(item -> "结束".equals(item.getFlowTaskName())).collect(Collectors.toList());
values.stream().filter(item -> "结束".equals(item.getFlowTaskName())).collect(Collectors.toList());
ticketCount.setTicketCompleteNum(ticketCompleteNums.size()); ticketCount.setTicketCompleteNum(ticketCompleteNums.size());
//3. 延期数据量 //3. 延期数据量
ticketCount.setTicketDelayNum(0); ticketCount.setTicketDelayNum(0);
//4. 合格数量 //4. 合格数量
List<Long> ticketIdList = values.stream().map(item -> item.getId()).collect(Collectors.toList()); List<Long> ticketIdList = values.stream().map(item -> item.getId()).collect(Collectors.toList());
LambdaQueryWrapper<TicketInfoEvaluateEntity> evaluateEntityLambdaQueryWrapper = LambdaQueryWrapper<TicketInfoEvaluateEntity> evaluateEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
new LambdaQueryWrapper<>();
evaluateEntityLambdaQueryWrapper.in(TicketInfoEvaluateEntity::getTicketId, ticketIdList); evaluateEntityLambdaQueryWrapper.in(TicketInfoEvaluateEntity::getTicketId, ticketIdList);
evaluateEntityLambdaQueryWrapper.eq(BaseEntity::getStatus, 1); evaluateEntityLambdaQueryWrapper.eq(BaseEntity::getStatus, 1);
List<TicketInfoEvaluateEntity> evaluateEntities = ticketInfoEvaluateService.list(evaluateEntityLambdaQueryWrapper); List<TicketInfoEvaluateEntity> evaluateEntities = ticketInfoEvaluateService.list(evaluateEntityLambdaQueryWrapper);
@ -197,8 +362,7 @@ public class TicketCountServiceImpl extends ServiceImpl<TicketCountMapper, Ticke
* @return * @return
*/ */
private List<TicketCount> getTicketCountList(List<Long> createDept, List<TicketCount> items, String ticketType, String dateTime, BladeUser user) { private List<TicketCount> getTicketCountList(List<Long> createDept, List<TicketCount> items, String ticketType, String dateTime, BladeUser user) {
List<WorkTicketInfoEntity> ticketInfoEntities = List<WorkTicketInfoEntity> ticketInfoEntities = workTicketInfoService.selectTicketByDeptIdWithTicketType(createDept, ticketType);
workTicketInfoService.selectTicketByDeptIdWithTicketType(createDept, ticketType);
if (CollectionUtils.isEmpty(ticketInfoEntities)) { if (CollectionUtils.isEmpty(ticketInfoEntities)) {
return null; return null;
} }
@ -206,7 +370,8 @@ public class TicketCountServiceImpl extends ServiceImpl<TicketCountMapper, Ticke
Map<Long, List<WorkTicketInfoEntity>> createDeptTickets = ticketInfoEntities.stream().collect(Collectors.groupingBy(BaseEntity::getCreateDept)); Map<Long, List<WorkTicketInfoEntity>> createDeptTickets = ticketInfoEntities.stream().collect(Collectors.groupingBy(BaseEntity::getCreateDept));
if (CollectionUtils.isNotEmpty(items)) { if (CollectionUtils.isNotEmpty(items)) {
//获取工作票的id,删除 //获取工作票的id,删除
List<Long> collect = items.stream().filter(item -> ticketType.equals(item.getTicketType())).map(TicketCount::getId).collect(Collectors.toList()); List<Long> collect =
items.stream().filter(item -> (ticketType.equals(item.getTicketType()) && user.getUserId().equals(item.getCreateUser()))).map(TicketCount::getId).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(collect)) { if (CollectionUtils.isNotEmpty(collect)) {
baseMapper.deleteBatchIds(collect); baseMapper.deleteBatchIds(collect);
} }
@ -226,23 +391,20 @@ public class TicketCountServiceImpl extends ServiceImpl<TicketCountMapper, Ticke
List<WorkTicketInfoEntity> values = entry.getValue(); List<WorkTicketInfoEntity> values = entry.getValue();
ticketCount.setTicketType(CollectionUtils.isNotEmpty(values) ? values.get(0).getType() : ticketType); ticketCount.setTicketType(CollectionUtils.isNotEmpty(values) ? values.get(0).getType() : ticketType);
//1. 开票数量 //1. 开票数量
List<WorkTicketInfoEntity> ticketNumbers = List<WorkTicketInfoEntity> ticketNumbers = values.stream().filter(item -> item.getFlowTaskName() != null).collect(Collectors.toList());
values.stream().filter(item -> item.getFlowTaskName() != null).collect(Collectors.toList());
ticketCount.setTicketNumber(ticketNumbers.size()); ticketCount.setTicketNumber(ticketNumbers.size());
//2. 完成数量 //2. 完成数量
List<WorkTicketInfoEntity> ticketCompleteNums = List<WorkTicketInfoEntity> ticketCompleteNums = values.stream().filter(item -> "结束".equals(item.getFlowTaskName())).collect(Collectors.toList());
values.stream().filter(item -> "结束".equals(item.getFlowTaskName())).collect(Collectors.toList());
ticketCount.setTicketCompleteNum(ticketCompleteNums.size()); ticketCount.setTicketCompleteNum(ticketCompleteNums.size());
ticketCount.setTenantId(user.getTenantId()); ticketCount.setTenantId(user.getTenantId());
ticketCount.setCreateDept(user.getDeptId()); ticketCount.setCreateDept(Long.valueOf(user.getDeptId()));
ticketCount.setCreateUser(user.getUserId());
//3. 延期数据量 //3. 延期数据量
List<WorkTicketInfoEntity> ticketDelayNums = List<WorkTicketInfoEntity> ticketDelayNums = values.stream().filter(item -> "延期".equals(item.getInput())).collect(Collectors.toList());
values.stream().filter(item -> "延期".equals(item.getInput())).collect(Collectors.toList());
ticketCount.setTicketDelayNum(ticketDelayNums.size()); ticketCount.setTicketDelayNum(ticketDelayNums.size());
//4. 合格数量 //4. 合格数量
List<Long> ticketIdList = values.stream().map(item -> item.getId()).collect(Collectors.toList()); List<Long> ticketIdList = values.stream().map(item -> item.getId()).collect(Collectors.toList());
LambdaQueryWrapper<TicketInfoEvaluateEntity> evaluateEntityLambdaQueryWrapper = LambdaQueryWrapper<TicketInfoEvaluateEntity> evaluateEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
new LambdaQueryWrapper<>();
evaluateEntityLambdaQueryWrapper.in(TicketInfoEvaluateEntity::getTicketId, ticketIdList); evaluateEntityLambdaQueryWrapper.in(TicketInfoEvaluateEntity::getTicketId, ticketIdList);
evaluateEntityLambdaQueryWrapper.eq(BaseEntity::getStatus, 1); evaluateEntityLambdaQueryWrapper.eq(BaseEntity::getStatus, 1);
List<TicketInfoEvaluateEntity> evaluateEntities = ticketInfoEvaluateService.list(evaluateEntityLambdaQueryWrapper); List<TicketInfoEvaluateEntity> evaluateEntities = ticketInfoEvaluateService.list(evaluateEntityLambdaQueryWrapper);

157
hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/vo/ticket/TicketCountResponseVo.java

@ -0,0 +1,157 @@
package com.hnac.hzims.ticket.twoTicket.vo.ticket;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/7/6 8:02
*/
@Data
@ContentRowHeight(30)
@HeadRowHeight(30)
public class TicketCountResponseVo {
/**
* 站点名称
*/
@ColumnWidth(20)
@ExcelProperty(value = "站点",index = 0)
private String deptName;
/**
* 第一种工作票开票数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "开票数量",index = 1)
private Integer oneTicketNumber = 0;
/**
* 第一种工作票完成数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "完成数量",index = 2)
private Integer oneTicketCompleteNum = 0;
/**
* 第一种工作票延期数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "延期数量",index = 3)
private Integer oneTicketDelayNum = 0;
/**
* 第一种工作票合格数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "合格数量",index = 4)
private Integer oneTicketProportionNum = 0;
/**
* 第二种工作票开票数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "开票数量",index = 5)
private Integer twoTicketNumber = 0;
/**
* 第二种工作票完成数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "完成数量",index = 6)
private Integer twoTicketCompleteNum = 0;
/**
* 第二种工作票延期数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "延期数量",index = 7)
private Integer twoTicketDelayNum = 0;
/**
* 第二种工作票合格数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "合格数量",index = 8)
private Integer twoTicketProportionNum = 0;
/**
* 水力机械工作票开票数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "开票数量",index = 9)
private Integer threeTicketNumber = 0;
/**
* 水力机械工作票完成数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "完成数量",index = 10)
private Integer threeTicketCompleteNum = 0;
/**
* 水力机械工作票延期数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "延期数量",index = 11)
private Integer threeTicketDelayNum = 0;
/**
* 水力机械工作票合格数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "合格数量",index = 12)
private Integer threeTicketProportionNum = 0;
/**
* 操作票开票数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "开票数量",index = 13)
private Integer fourTicketNumber = 0;
/**
* 操作票开票完成数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "完成数量",index = 14)
private Integer fourTicketCompleteNum = 0;
/**
* 操作票延期数量
*/
@ExcelIgnore
private Integer fourTicketDelayNum = 0;
/**
* 操作票作票合格数量
*/
@ColumnWidth(14)
@ExcelProperty(value = "合格数量",index = 15)
private Integer fourTicketProportionNum = 0;
}

16
hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/vo/ticket/TicketCountVo.java

@ -0,0 +1,16 @@
package com.hnac.hzims.ticket.twoTicket.vo.ticket;
import lombok.Data;
/**
* @Author WL
* @Version v1.0
* @Serial 1.0
* @Date 2023/7/6 8:04
*/
@Data
public class TicketCountVo {
private String keyword;
}

7
hzims-service/ticket/src/main/resources/db/2.0.0.sql

@ -13,9 +13,12 @@ create table hzims_ticket_count
ticket_proportion_num int null comment '合格数量', ticket_proportion_num int null comment '合格数量',
create_time datetime default CURRENT_TIMESTAMP null comment '创建时间', create_time datetime default CURRENT_TIMESTAMP null comment '创建时间',
update_time datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', update_time datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间',
is_deleted tinyint(1) default 0 null comment '0', is_deleted tinyint(1) default 0 null comment '逻辑删除',
tenant_id varchar(12) null comment '租户ID', tenant_id varchar(12) null comment '租户ID',
create_dept varchar(30) null comment '创建部门' create_dept varchar(30) null comment '创建部门',
status tinyint null,
create_user bigint not null comment '创建人',
update_user bigint null
) )
comment '两票统计分析' row_format = DYNAMIC; comment '两票统计分析' row_format = DYNAMIC;

Loading…
Cancel
Save