Browse Source

导出打印

Liugl 3 năm trước cách đây
mục cha
commit
84bf31a669

+ 90 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/TicketBoxMgrController.java

@@ -1,5 +1,6 @@
 package com.qs.mp.web.controller.api.admin;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -36,6 +37,7 @@ import io.swagger.annotations.ApiOperation;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Comparator;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import ma.glasnost.orika.MapperFacade;
@@ -256,6 +258,94 @@ public class TicketBoxMgrController extends BaseApiController {
 			return AjaxResult.error("导入失败,请联系管理员");
 		}
 	}
+	
+	
+	@Log(title = "导出印刷", businessType = BusinessType.EXPORT)
+	@PostMapping("/exportDraw")
+	public AjaxResult exportDraw(@RequestBody BathIdParam ids) {
+		if (null == ids || null == ids.getIds() || ids.getIds().size() == 0) {
+			return AjaxResult.error("请选择需要导出的盲票组");
+		}
+		TicketBox ticketBox = ticketBoxService.getById(ids.getIds().get(0));
+		if (null == ticketBox || StringUtils.isBlank(ticketBox.getBoxId())) {
+			return AjaxResult.error("选择的盲票组数据异常, 请联系管理员或重试");
+		}
+		List<TicketExcel> excelList = new ArrayList<TicketExcel>();
+		List<Ticket> listAll = new ArrayList<Ticket>();
+		// 首先查询要导出的数据总数
+		LambdaQueryWrapper<Ticket> queryWrapper = new LambdaQueryWrapper<Ticket>();
+		queryWrapper.eq(Ticket::getBoxId, ids.getIds().get(0));
+		int totalSize = ticketService.count(queryWrapper);
+		if (totalSize == 0) {
+			return AjaxResult.error("选择的盲票组中没有可导出的数据");
+		}
+
+		if(totalSize > pageSize) {
+			int totalPage = totalSize%pageSize == 0 ? totalSize/pageSize : totalSize/pageSize+1;
+			for (int i = 0; i < totalPage; i++) {
+				LambdaQueryWrapper<Ticket> pageQueryWrapper = new LambdaQueryWrapper<Ticket>();
+				pageQueryWrapper.select(Ticket::getSerialNo, Ticket::getDrawNum, Ticket::getCipherLuckyNum);
+				pageQueryWrapper.eq(Ticket::getBoxId, ids.getIds().get(0));
+				pageQueryWrapper.last("limit "+ (i*pageSize) +", " + pageSize);
+				List<Ticket> list = ticketService.list(pageQueryWrapper);
+				if(null != list && list.size() > 0 ) {
+					listAll.addAll(list);
+				}
+			}
+		}else {
+			listAll = ticketService.list(queryWrapper);
+		}
+
+		if(null != listAll && listAll.size() > 0 ) {
+			listAll.sort(Comparator.comparing(Ticket::getSerialNo));
+			for (Ticket ticket : listAll) {
+				if (null != ticket && StringUtils.isNotBlank(ticket.getSerialNo())
+						&& StringUtils.isNotBlank(ticket.getDrawNum())
+						&& StringUtils.isNotBlank(ticket.getCipherLuckyNum())) {
+					TicketExcel ticketExcel = new TicketExcel();
+					ticketExcel.setSerialNo(ticket.getSerialNo());
+					ticketExcel.setUrl(exportUrl + ticket.getSerialNo());
+					ticketExcel.setDrawNum(formatDraw(ticket.getDrawNum()));
+					ticketExcel.setCipherLuckyNum(RSAUtil.decrypt(ticket.getCipherLuckyNum()));
+					excelList.add(ticketExcel);
+				}
+			}
+		}
+
+		ExcelUtil<TicketExcel> util = new ExcelUtil<TicketExcel>(TicketExcel.class);
+		return util.exportExcel(excelList, ticketBox.getTitle(), false);
+	}
+	
+	
+	/**
+	 * 导出印刷格式化
+	 * @param drawNum
+	 * @return
+	 */
+	private String formatDraw(String drawNum) {
+		if(StringUtils.isNotBlank(drawNum)) {
+			try {
+				List<String> drawList = new ArrayList<String>();
+				JSONArray jsonArray = JSONArray.parseArray(drawNum);
+				if(null != jsonArray && jsonArray.size() > 0) {
+					for (int i = 0; i < jsonArray.size(); i++) {
+						JSONObject jo = jsonArray.getJSONObject(i);
+						if(null != jo && jo.containsKey("name")
+								&& jo.containsKey("num")) {
+							drawList.add(jo.getString("name")+jo.getString("num"));
+						}
+					}
+				}
+				if(null != drawList && drawList.size() >0) {
+					return StringUtils.join(drawList.toArray(), " ");
+				}
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+		return "";
+		
+	}
 
 
 }