package com.saye.hospitalgd.controller.FinancialReconciliation; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.saye.hospitalgd.commons.date.DateDUtil; import com.saye.hospitalgd.commons.log.ExceptionDUtil; import com.saye.hospitalgd.commons.log.LogUtil; import com.saye.hospitalgd.commons.string.StringDUtil; import com.saye.hospitalgd.model.StatusDefine; import com.saye.hospitalgd.service.ReconciliationResultService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.awt.*; import java.io.File; import java.io.FileOutputStream; import java.util.List; import java.util.*; /** * @author thuang * @version 1.0 * @description: 对账结果 * @date 2021/8/31 10:17 */ @Api(tags = "对账结果相关接口") @Controller @RequestMapping("/reconciliationResult") public class ReconciliationResultController { @Autowired private ReconciliationResultService reconciliationResultService; @RequestMapping("/toReconciliationResult") public String toReconciliationResult(ModelMap modelMap) { Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.DATE, -1); Date startDate = calendar.getTime(); String startTime = DateDUtil.DateToStr(DateDUtil.yyyy_MM_dd, startDate); String endTime = DateDUtil.getCurrentDate(DateDUtil.yyyy_MM_dd); modelMap.addAttribute("startTime", startTime); modelMap.addAttribute("endTime", endTime); return "financialReconciliation/reconciliationResult"; } /** * @description: 查询对账的结果记录 * @author thuang * @date 2021/8/30 14:30 * @version 1.0 */ @RequestMapping("/findReconciliationResultPageList") @ResponseBody @ApiOperation(value = "查询对账的结果记录") public HashMap findReconciliationResultPageList(@ApiParam(name = "开始时间") String startTime, @ApiParam(name = "结束时间") String endTime, @ApiParam(name = "页码") int page, @ApiParam(name = "每页限制个数") int limit) { HashMap responseMap = new HashMap(); try { HashMap map = new HashMap(); map.put("startTime", startTime); map.put("endTime", endTime); PageHelper.startPage(page, limit); PageInfo> pageInfo = new PageInfo>(reconciliationResultService.findReconciliationResultPageList(map)); responseMap.put("code", 0); responseMap.put("msg", "OK"); responseMap.put("count", pageInfo.getTotal()); responseMap.put("data", pageInfo.getList()); } catch (Exception e) { e.printStackTrace(); String msg = e.getMessage(); responseMap.put("code", 1); responseMap.put("msg", "查询失败,原因:" + msg); } return responseMap; } /** * @description: 导出对账结果excel * @author thuang * @date 2021/10/22 10:43 * @version 1.0 */ @PostMapping("/exportReconciliationResult") @ResponseBody @ApiOperation(value = "导出对账结果excel") public HashMap exportReconciliationResult(@RequestBody HashMap map) { HashMap responseMap = new HashMap(); String errCode = "0"; String errMsg = ""; String dlName = ""; String fileName = ""; String dowloadName = StringDUtil.changeNullToEmpty(map.get("dowloadName")); try { String startTime = StringDUtil.changeNullToEmpty(map.get("startTime")); String endTime = StringDUtil.changeNullToEmpty(map.get("endTime")); List> list = reconciliationResultService.findReconciliationResultPageList(map); if (list != null && list.size() > 0) { //创建工作薄对象 XSSFWorkbook xwb = new XSSFWorkbook();//这里也可以设置sheet的Name //创建工作表对象 XSSFSheet sheet = xwb.createSheet("sheet0"); //设置主标题样式 XSSFFont mainTitleFont = xwb.createFont(); mainTitleFont.setFontName("宋体"); mainTitleFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);//字体加粗 mainTitleFont.setFontHeightInPoints((short) 14);// 字体大小 XSSFCellStyle mainTitleStyle = xwb.createCellStyle(); mainTitleStyle.setFont(mainTitleFont); mainTitleStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);// 左右居中 mainTitleStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 上下居中 mainTitleStyle.setLocked(true); //标题样式 XSSFFont titleFont = xwb.createFont(); titleFont.setFontName("宋体"); titleFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);//字体加粗 titleFont.setFontHeightInPoints((short) 10);// 字体大小 XSSFCellStyle titleStyle = xwb.createCellStyle(); titleStyle.setFont(titleFont); titleStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);// 左右居中 titleStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 上下居中 titleStyle.setFillForegroundColor(new XSSFColor(new Color(225, 225, 225))); titleStyle.setFillBackgroundColor(new XSSFColor(new Color(225, 225, 225))); titleStyle.setFillPattern(XSSFCellStyle.SPARSE_DOTS); titleStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); // 下边框 titleStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);// 左边框 titleStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);// 上边框 titleStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);// 右边框 titleStyle.setLocked(true); //内容样式 XSSFFont contentFont = xwb.createFont(); contentFont.setFontName("宋体"); contentFont.setFontHeightInPoints((short) 10);// 字体大小 XSSFCellStyle contentStyle = xwb.createCellStyle(); contentStyle.setFont(contentFont); contentStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);// 左右居中 contentStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 上下居中 contentStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); // 下边框 contentStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);// 左边框 contentStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);// 上边框 contentStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);// 右边框 contentStyle.setWrapText(true); contentStyle.setLocked(true); //标题 LinkedHashMap titleMap = new LinkedHashMap<>(); // titleMap.put("院区", "1,2");//一列两行 titleMap.put("日期", "1,2"); titleMap.put("结算金额", "4,1"); titleMap.put("单边账", "2,1"); titleMap.put("对账情况", "1,1"); //第二行标题 List titleList2 = new ArrayList<>(); titleList2.add("第三方支付结算"); titleList2.add("HIS结算金额"); titleList2.add("三方单边账"); titleList2.add("HIS单边账"); titleList2.add("处理历史单边账金额"); titleList2.add("当日结算单边账条数"); titleList2.add("是否通过"); //内容key List contentKey = new ArrayList<>(); // contentKey.add("AREA"); contentKey.add("TRADE_DATE"); contentKey.add("THIRD_MONEY"); contentKey.add("HIS_MONEY"); contentKey.add("THIRD_UNILATERAL"); contentKey.add("HIS_UNILATERAL"); contentKey.add("MANAGER_HISTORY_UNILATERAL"); contentKey.add("UNILATERAL_NUM"); contentKey.add("STATUS_STR"); //定义列宽 sheet.setColumnWidth(0, 5000); sheet.setColumnWidth(1, 5000); sheet.setColumnWidth(2, 5000); sheet.setColumnWidth(3, 5000); sheet.setColumnWidth(4, 5000); sheet.setColumnWidth(5, 5000); sheet.setColumnWidth(6, 5000); sheet.setColumnWidth(7, 5000); // sheet.setColumnWidth(8, 5000); //刚开始先创建大标题 //设置行单元格合并 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 7)); //创建工作表的行 XSSFRow mainRow = sheet.createRow(0);//设置第一行,从零开始 mainRow.setHeight((short) 375); XSSFCell mainCell = mainRow.createCell(0); mainCell.setCellStyle(mainTitleStyle); mainCell.setCellValue(startTime + "~" + endTime + "对账结果表(金额单位:元)"); //创建标题行 XSSFRow titleRow1 = sheet.createRow(1); XSSFRow titleRow2 = sheet.createRow(2); int thisColNum = 0; for (String title : titleMap.keySet()) { String value = titleMap.get(title); String[] split = value.split(","); int colNum = Integer.parseInt(split[0]); int rowNum = Integer.parseInt(split[1]); XSSFCell cell = titleRow1.createCell(thisColNum); cell.setCellStyle(titleStyle); cell.setCellValue(title); if (rowNum != 1) { XSSFCell cell2 = titleRow2.createCell(thisColNum); cell2.setCellStyle(titleStyle); sheet.addMergedRegion(new CellRangeAddress(1, rowNum, thisColNum, thisColNum)); } if (colNum != 1) { for (int i = 1; i < colNum; i++) { XSSFCell cell2 = titleRow1.createCell(thisColNum + i); cell2.setCellStyle(titleStyle); } sheet.addMergedRegion(new CellRangeAddress(1, 1, thisColNum, thisColNum + colNum - 1)); } //将大小加上 之后计算起始要用到 thisColNum = thisColNum + colNum; } //第二行标题 int title2StartCol = 1; //第二行标题开始列是第三列 for (int i = 0; i < titleList2.size(); i++) { String title2 = titleList2.get(i); XSSFCell cell2 = titleRow2.createCell(title2StartCol + i); cell2.setCellStyle(titleStyle); cell2.setCellValue(title2); } //循环内容 int startRow = 3; //标题加上抬头名称 共用了三行 for (int i = 0; i < list.size(); i++) { int thisRow = startRow + i; XSSFRow contentRow = sheet.createRow(thisRow); HashMap hashMap = list.get(i); for (int j = 0; j < contentKey.size(); j++) { String s = contentKey.get(j); String content = StringDUtil.changeNullToEmpty(hashMap.get(s)); XSSFCell otherCell = contentRow.createCell(j); otherCell.setCellStyle(contentStyle); otherCell.setCellValue(content); } } String randomStr = StringDUtil.generateRandomCodeForLength(4); dlName = DateDUtil.DateToStr(DateDUtil.yyyyMMddHHmmss, new Date()) + randomStr; fileName = dlName + ".xlsx"; String uploadPath = StatusDefine.filePath + "/ReconciliaionResult/"; File uploadPathFile = new File(uploadPath); if (!uploadPathFile.exists()) uploadPathFile.mkdirs(); String savePath = uploadPath + fileName; // 设置输入流 FileOutputStream fOut = new FileOutputStream(savePath); // 将模板的内容写到输出文件上 xwb.write(fOut); fOut.flush(); // 操作结束,关闭文件 fOut.close(); } } catch (Exception e) { errCode = "999"; errMsg = "未知异常:" + ExceptionDUtil.getDetailExceptionMsg(e); LogUtil.error(this.getClass(), "@@@系统出错!【" + errMsg + "】"); } responseMap.put("errCode", errCode); responseMap.put("errMsg", errMsg); responseMap.put("dlName", "ReconciliaionResult/" + fileName); return responseMap; } }