瀏覽代碼

后台分页以及导出excel

lighter 4 年之前
父節點
當前提交
b45ca19aad

+ 5 - 0
pom.xml

@@ -160,6 +160,11 @@
             <artifactId>jacob</artifactId>
             <version>1.18</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>4.1.2</version>
+        </dependency>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>

+ 8 - 2
src/main/java/thyyxxk/webserver/controller/wxapi/WxRefundController.java → src/main/java/thyyxxk/webserver/controller/wxapi/WxApiController.java

@@ -8,14 +8,15 @@ import thyyxxk.webserver.pojo.wxapi.QueryWxOrderParam;
 import thyyxxk.webserver.pojo.wxapi.RefundParam;
 import thyyxxk.webserver.service.wxapi.WxApiService;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.Map;
 
 @RestController
 @RequestMapping("/wxRefund")
-public class WxRefundController {
+public class WxApiController {
     private final WxApiService service;
 
-    public WxRefundController(WxApiService service) {
+    public WxApiController(WxApiService service) {
         this.service = service;
     }
 
@@ -30,4 +31,9 @@ public class WxRefundController {
     public ResultVo<String> refundOrder(@RequestBody @Validated RefundParam param) throws Exception {
         return service.refundOrder(param).get();
     }
+
+    @PostMapping("/exportExcel")
+    public void exportExcel(HttpServletResponse response, @RequestBody @Validated QueryWxOrderParam param) {
+        service.exportExcel(response, param);
+    }
 }

+ 9 - 6
src/main/java/thyyxxk/webserver/dao/his/wxapi/WxApiDao.java

@@ -1,5 +1,6 @@
 package thyyxxk.webserver.dao.his.wxapi;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -21,12 +22,14 @@ public interface WxApiDao {
             "#{status}" +
             "</foreach>" +
             "</script>")
-    List<WxPayOrder> selectOrdersByConditions(@Param("patientId") String patientId,
-                                              @Param("patientName") String patientName,
-                                              @Param("orderType") String orderType,
-                                              @Param("statuses") String[] statuses,
-                                              @Param("start") String start,
-                                              @Param("end") String end);
+    IPage<WxPayOrder> selectOrdersByConditions(
+            IPage<WxPayOrder> iPage,
+            @Param("patientId") String patientId,
+                                   @Param("patientName") String patientName,
+                                   @Param("orderType") String orderType,
+                                   @Param("statuses") String[] statuses,
+                                   @Param("start") String start,
+                                   @Param("end") String end);
 
     @Select("select * from t_wechat_pay_order where trade_no=#{tradeNo}")
     List<WxOrderForExportExcel> selectOrdersByTradeNo(@Param("tradeNo") String tradeNo);

+ 0 - 2
src/main/java/thyyxxk/webserver/pojo/wxapi/QueryWxOrderParam.java

@@ -27,8 +27,6 @@ public class QueryWxOrderParam {
     private Integer pageSize;
     // 订单号
     private String tradeNo;
-    // 这个字段是为了区分是不是从web-pack发来的请求,from=1是我自己页面的请求,其他的是胡如刚的请求
-    private Integer from;
 
     public String getPatientId() {
         return null == patientId ? "" : (patientId).trim();

+ 56 - 34
src/main/java/thyyxxk/webserver/service/wxapi/WxApiService.java

@@ -1,6 +1,8 @@
 package thyyxxk.webserver.service.wxapi;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
@@ -28,12 +30,12 @@ import thyyxxk.webserver.dao.his.wxapi.WxApiDao;
 import thyyxxk.webserver.pojo.ResultVo;
 import thyyxxk.webserver.pojo.wxapi.QueryWxOrderParam;
 import thyyxxk.webserver.pojo.wxapi.RefundParam;
-import thyyxxk.webserver.pojo.wxapi.WxOrderForExportExcel;
 import thyyxxk.webserver.pojo.wxapi.WxPayOrder;
 import thyyxxk.webserver.utils.*;
 
 import javax.net.ssl.KeyManagerFactory;
 import javax.net.ssl.SSLContext;
+import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
 import java.security.KeyStore;
 import java.security.SecureRandom;
@@ -51,48 +53,22 @@ public class WxApiService {
     }
 
     public ResultVo<Map<String, Object>> selectOrdersByConditions(QueryWxOrderParam param) {
-        log.info("查询微信订单数据:{}", param);
+        log.info("查询微信订单数据:{}", JSON.toJSONString(param));
         Map<String, Object> map = new HashMap<>();
         if (!param.getTradeNo().equals("")) {
-            if (null != param.getFrom() && param.getFrom() == 1) {
-                map.put("list", dao.selectOrdersByTradeNoForMeSelf(param.getTradeNo()));
-            } else {
-                map.put("list", dao.selectOrdersByTradeNo(param.getTradeNo()));
-            }
+            map.put("list", dao.selectOrdersByTradeNo(param.getTradeNo()));
             map.put("totalSize", 1);
             return ResultVoUtil.success(map);
         }
-        String patientId = "%" + param.getPatientId() + "%";
-        String patientName = "%" + param.getPatientName() + "%";
-        String orderType = param.getOrderType() == -1 ? "%%" : "%" + param.getOrderType() + "%";
-        if (param.getPayStatus().equals("-1")) {
-            param.setPayStatus("99,0,1,2,3,4,5,6,7");
-        }
-        String[] statuses = param.getPayStatus().split(",");
-        String start = param.getStart() + " 00:00:00";
-        String end = param.getEnd() + " 23:59:59";
-        if (null != param.getFrom() && param.getFrom() == 1) {
-            List<WxOrderForExportExcel> list = dao.selectOrdersByConditionsForMeSelf(patientId, patientName, orderType, statuses, start, end);
-            map.put("list", list);
-            map.put("totalSize", list.size());
-            return ResultVoUtil.success(map);
-        }
-        List<WxPayOrder> list = dao.selectOrdersByConditions(patientId, patientName, orderType, statuses, start, end);
-        if (null == list || list.isEmpty()) {
+        IPage<WxPayOrder> iPage = getWxPayOrderIPage(param);
+
+        if (iPage.getTotal() == 0) {
             return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
         }
-        int startSize = (param.getCurrentPage() - 1) * param.getPageSize();
-        if (startSize > list.size()) {
-            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "数据起始位大于数据总数量");
-        }
-        int endSize = param.getCurrentPage() * param.getPageSize();
-        if (endSize > list.size()) {
-            endSize = list.size();
-        }
-        map.put("totalSize", list.size());
+        map.put("totalSize", iPage.getTotal());
         map.put("currentPage", param.getCurrentPage());
         map.put("pageSize", param.getPageSize());
-        map.put("list", list.subList(startSize, endSize));
+        map.put("list", iPage.getRecords());
         return ResultVoUtil.success(map);
     }
 
@@ -175,4 +151,50 @@ public class WxApiService {
         HttpEntity httpEntity = httpResponse.getEntity();
         return EntityUtils.toString(httpEntity, "UTF-8");
     }
+
+    public void exportExcel(HttpServletResponse response, QueryWxOrderParam param) {
+        log.info("导出excel: {}", JSON.toJSONString(param));
+        IPage<WxPayOrder> iPage = getWxPayOrderIPage(param);
+        List<WxPayOrder> list = iPage.getRecords();
+        String[] title = {"序号","商品描述","订单类型","订单金额","姓名","门诊号","住院号","住院次数","订单号","流水号"
+                ,"订单创建时间","订单支付时间","订单支付状态","退款原因","退款操作员","退款时间"};
+        String sheetName = "sheet1";
+        String[][] content = new String[list.size()][];
+        for (int i = 0; i < list.size(); i++) {
+            content[i] = new String[title.length];
+            content[i][0] = String.valueOf(i + 1);
+            WxPayOrder order = list.get(i);
+            content[i][1] = order.getBody();
+            content[i][2] = String.valueOf(order.getOrderType());
+            content[i][3] = String.valueOf(order.getTotalFee());
+            content[i][4] = order.getPatientName();
+            content[i][5] = order.getPatientId();
+            content[i][6] = order.getInpatientNo();
+            content[i][7] = String.valueOf(order.getAdmissTimes());
+            content[i][8] = order.getTradeNo();
+            content[i][9] = order.getSerialNo();
+            content[i][10] = DateUtil.formatDatetime(order.getCreateDatetime());
+            content[i][11] = DateUtil.formatDatetime(order.getPayDatetime());
+            content[i][12] = String.valueOf(order.getPayStatus());
+            content[i][13] = order.getRefundReason();
+            content[i][14] = order.getRefundOpCode();
+            content[i][15] = DateUtil.formatDatetime(order.getRefundOpDatetime());
+        }
+        ExcelUtil.exportExcel(response, sheetName, title, content);
+    }
+
+    private IPage<WxPayOrder> getWxPayOrderIPage(QueryWxOrderParam param) {
+        IPage<WxPayOrder> iPage = new Page<>(param.getCurrentPage(), param.getPageSize());
+        String patientId = "%" + param.getPatientId() + "%";
+        String patientName = "%" + param.getPatientName() + "%";
+        String orderType = param.getOrderType() == -1 ? "%%" : "%" + param.getOrderType() + "%";
+        if (param.getPayStatus().equals("-1")) {
+            param.setPayStatus("99,0,1,2,3,4,5,6,7");
+        }
+        String[] statuses = param.getPayStatus().split(",");
+        String start = param.getStart() + " 00:00:00";
+        String end = param.getEnd() + " 23:59:59";
+        return dao.selectOrdersByConditions(iPage, patientId, patientName, orderType, statuses, start, end);
+    }
+
 }

+ 11 - 0
src/main/java/thyyxxk/webserver/utils/DateUtil.java

@@ -13,10 +13,21 @@ public class DateUtil {
     }
 
     public static String formatDatetime(Date date, String pattern) {
+        if (null == date) {
+            return "";
+        }
         SimpleDateFormat sdf = new SimpleDateFormat(pattern);
         return sdf.format(date);
     }
 
+    public static String formatDatetime(Date date) {
+        if (null == date) {
+            return "";
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sdf.format(date);
+    }
+
     public static long getTimestamp(String datetime) throws ParseException {
         DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         return df.parse(datetime).getTime();

+ 74 - 0
src/main/java/thyyxxk/webserver/utils/ExcelUtil.java

@@ -0,0 +1,74 @@
+package thyyxxk.webserver.utils;
+
+import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.OutputStream;
+
+public class ExcelUtil {
+    /*
+     * 导出Excel
+     */
+    private static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] values, HSSFWorkbook wb) {
+        // 第一步,创建一个HSSFWorkbook,对应一个Excel文件
+        if (wb == null) {
+            wb = new HSSFWorkbook();
+        }
+
+        // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
+        HSSFSheet sheet = wb.createSheet(sheetName);
+
+        // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel行数列数有限制
+        HSSFRow row = sheet.createRow(0);
+
+        // 第四步,创建单元格,并设置表头 设置表头居中
+        HSSFCellStyle style = wb.createCellStyle();
+        style.setAlignment(HorizontalAlignment.CENTER);
+
+        // 声明列对象
+        HSSFCell cell;
+
+        // 创建标题
+        for (int i = 0; i < title.length; i++) {
+            cell = row.createCell(i);
+            cell.setCellValue(title[i]);
+            cell.setCellStyle(style);
+        }
+
+        // 创建内容
+        for (int i = 0; i < values.length; i++) {
+            row = sheet.createRow(i + 1);
+            for (int j = 0; j < values[i].length; j++) {
+                // 将内容按顺序赋给对应的列对象
+                row.createCell(j).setCellValue(values[i][j]);
+            }
+        }
+        return wb;
+    }
+
+    public static void exportExcel(HttpServletResponse response,String sheetName,
+                                   String[] title, String[][] values) {
+        HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title, values, null);
+        response.setContentType("application/octet-stream;charset=ISO8859-1");
+        response.setHeader("Cache-Control", "no-cache");
+        OutputStream out = null;
+        try {
+            out = response.getOutputStream();
+            wb.write(out);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (null != out) {
+                    out.flush();
+                    out.close();
+                }
+                wb.close();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+}