Jelajahi Sumber

优化微信订单批量导出。

lighter 4 tahun lalu
induk
melakukan
a1dccd605d

+ 1 - 2
pom.xml

@@ -10,7 +10,7 @@
     </parent>
     <groupId>thyyxxk</groupId>
     <artifactId>web-server</artifactId>
-    <version>2.9</version>
+    <version>3.2</version>
     <name>web-server</name>
     <description>server for yibao-web</description>
 
@@ -115,7 +115,6 @@
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpcore</artifactId>
         </dependency>
-        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
         <dependency>
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpclient</artifactId>

+ 30 - 4
src/main/java/thyyxxk/webserver/dao_his/wxapi/WxApiDao.java

@@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 import thyyxxk.webserver.pojo.wxapi.RefundParam;
+import thyyxxk.webserver.pojo.wxapi.WxOrderForExportExcel;
 import thyyxxk.webserver.pojo.wxapi.WxPayOrder;
 
 import java.util.List;
@@ -12,16 +13,41 @@ import java.util.List;
 @Mapper
 public interface WxApiDao {
 
-    @Select("select * from t_wechat_pay_order where create_datetime>=#{start} and " +
-            "create_datetime<=#{end} and patient_id like #{patientId} and patient_name " +
-            "like #{patientName} and order_type like #{orderType} and pay_status like #{payStatus}")
+    @Select("<script>" +
+            "select * from t_wechat_pay_order where create_datetime&gt;=#{start} and " +
+            "create_datetime&lt;=#{end} and patient_id like #{patientId} and patient_name " +
+            "like #{patientName} and order_type like #{orderType} and pay_status in " +
+            "<foreach collection='statuses' item='status' separator=',' open='(' close=')'>" +
+            "#{status}" +
+            "</foreach>" +
+            "</script>")
     List<WxPayOrder> selectOrdersByConditions(@Param("patientId") String patientId,
                                               @Param("patientName") String patientName,
                                               @Param("orderType") String orderType,
-                                              @Param("payStatus") String payStatus,
+                                              @Param("statuses") String[] statuses,
                                               @Param("start") String start,
                                               @Param("end") String end);
 
+
+    @Select("<script>" +
+            "select id,body,order_type,total_fee,patient_id,patient_name,serial_no,trade_no, " +
+            "create_datetime,pay_datetime,pay_status,refund_reason,refund_op_code=(" +
+            "select rtrim(name) from a_employee_mi where code=refund_op_code),refund_op_datetime, " +
+            "inpatient_no,admiss_times from t_wechat_pay_order where create_datetime&gt;=#{start} and " +
+            "create_datetime&lt;=#{end} and patient_id like #{patientId} and patient_name " +
+            "like #{patientName} and order_type like #{orderType} and trade_no like #{tradeNo} and pay_status in " +
+            "<foreach collection='statuses' item='status' separator=',' open='(' close=')'>" +
+            "#{status}" +
+            "</foreach>" +
+            "</script>")
+    List<WxOrderForExportExcel> selectOrdersByConditionsForMeSelf(@Param("patientId") String patientId,
+                                                                  @Param("patientName") String patientName,
+                                                                  @Param("orderType") String orderType,
+                                                                  @Param("tradeNo") String tradeNo,
+                                                                  @Param("statuses") String[] statuses,
+                                                                  @Param("start") String start,
+                                                                  @Param("end") String end);
+
     @Update("update t_wechat_pay_order set refund_id=#{refundId}, refund_op_code=#{refundOpCode}, " +
             "refund_op_datetime=#{refundOpDatetime}, refund_reason=#{refundReason}, pay_status=4 where id=#{id}")
     void updateRefundId(RefundParam param);

+ 10 - 5
src/main/java/thyyxxk/webserver/pojo/wxapi/QueryWxOrderParam.java

@@ -1,12 +1,9 @@
 package thyyxxk.webserver.pojo.wxapi;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
-import java.util.Date;
 
 @Data
 public class QueryWxOrderParam {
@@ -18,8 +15,8 @@ public class QueryWxOrderParam {
     @NotNull(message = "订单类型不能为空。")
     private Integer orderType;
     // 订单支付状态,0:待支付,1:支付成功,2:支付取消,3:支付失败,4:已退款,-1:全部
-    @NotNull(message = "订单状态不能为空。")
-    private Integer payStatus;
+    @NotBlank(message = "订单状态不能为空。")
+    private String payStatus;
     // 查询开始时间
     @NotBlank(message = "开始时间不能为空。")
     private String start;
@@ -30,6 +27,10 @@ public class QueryWxOrderParam {
     private Integer currentPage;
     @NotNull(message = "单页数据量不能为空。")
     private Integer pageSize;
+    // 订单号
+    private String tradeNo;
+    // 这个字段是为了区分是不是从web-pack发来的请求,from=1是我自己页面的请求,其他的是胡如刚的请求
+    private Integer from;
 
     public String getPatientId() {
         return null == patientId ? "" : (patientId).trim();
@@ -38,4 +39,8 @@ public class QueryWxOrderParam {
     public String getPatientName() {
         return null == patientName ? "" : (patientName).trim();
     }
+
+    public String getTradeNo() {
+        return null == tradeNo ? "" : (tradeNo).trim();
+    }
 }

+ 67 - 0
src/main/java/thyyxxk/webserver/pojo/wxapi/WxOrderForExportExcel.java

@@ -0,0 +1,67 @@
+package thyyxxk.webserver.pojo.wxapi;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class WxOrderForExportExcel {
+    private Integer id;
+    private String body;
+    // 订单类型,1:挂号费 2:门诊缴费 3:住院预交金
+    private String orderType;
+    private BigDecimal totalFee;
+    private String patientId;
+    private String patientName;
+    private String serialNo;
+    private String tradeNo;
+    private Date createDatetime;
+    private Date payDatetime;
+    // 订单支付状态,99:初值,0:未支付,1:支付成功,2:已关闭,3:支付失败,4:已退款,5:已接收,等待扣款,6:用户支付中,7:退款失败
+    private String payStatus;
+    private String refundReason;
+    private String refundOpCode;
+    private Date refundOpDatetime;
+    private String inpatientNo;
+    private Integer admissTimes;
+
+    public String getOrderType() {
+        switch (orderType) {
+            case "1":
+                return "挂号费";
+            case "2":
+                return "门诊缴费";
+            case "3":
+                return "住院预交金";
+            default:
+                return "-";
+        }
+    }
+
+    public String getPayStatus() {
+        // 订单支付状态,99:初值,0:未支付,1:支付成功,2:已关闭,3:支付失败,4:已退款,5:已接收,等待扣款,6:用户支付中,7:退款失败
+        switch (payStatus) {
+            case "99":
+                return "初值";
+            case "0":
+                return "未支付";
+            case "1":
+                return "支付成功";
+            case "2":
+                return "已关闭";
+            case "3":
+                return "支付失败";
+            case "4":
+                return "已退款";
+            case "5":
+                return "已接收,等待扣款";
+            case "6":
+                return "用户支付中";
+            case "7":
+                return "退款失败";
+            default:
+                return "-";
+        }
+    }
+}

+ 22 - 7
src/main/java/thyyxxk/webserver/service/wxapi/WxApiService.java

@@ -28,6 +28,7 @@ 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.*;
 
@@ -36,10 +37,7 @@ import javax.net.ssl.SSLContext;
 import java.io.InputStream;
 import java.security.KeyStore;
 import java.security.SecureRandom;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
+import java.util.*;
 
 @Slf4j
 @Service
@@ -56,14 +54,31 @@ public class WxApiService {
         String patientId = "%" + param.getPatientId() + "%";
         String patientName = "%" + param.getPatientName() + "%";
         String orderType = param.getOrderType() == -1 ? "%%" : "%" + param.getOrderType() + "%";
-        String payStatus = param.getPayStatus() == -1 ? "%%" : "%" + param.getPayStatus() + "%";
+
+        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";
-        List<WxPayOrder> list = dao.selectOrdersByConditions(patientId, patientName, orderType, payStatus, start, end);
+
+        Map<String, Object> map = new HashMap<>();
+
+        if (null != param.getFrom() && param.getFrom() == 1) {
+            String tradeNo = "%" + param.getTradeNo() + "%";
+            List<WxOrderForExportExcel> list = dao.selectOrdersByConditionsForMeSelf(patientId, patientName, orderType,
+                    tradeNo, 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()) {
             return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
         }
-        Map<String, Object> map = new HashMap<>();
 
         int startSize = (param.getCurrentPage() - 1) * param.getPageSize();
         if (startSize > list.size()) {