From b6fdf185c7e8fb1f06da0e609e39aecaef6b66f5 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期日, 30 六月 2024 01:42:31 +0800
Subject: [PATCH] 微信强授权/后台管理

---
 src/main/java/com/taoke/autopay/controller/client/OrderController.java |  253 +++++++++++++++++++++++++++++++++++---------------
 1 files changed, 178 insertions(+), 75 deletions(-)

diff --git a/src/main/java/com/taoke/autopay/controller/client/OrderController.java b/src/main/java/com/taoke/autopay/controller/client/OrderController.java
index c30d8c8..2d430a6 100644
--- a/src/main/java/com/taoke/autopay/controller/client/OrderController.java
+++ b/src/main/java/com/taoke/autopay/controller/client/OrderController.java
@@ -8,16 +8,19 @@
 import com.google.gson.stream.JsonWriter;
 import com.taoke.autopay.dao.KeyOrderMapper;
 import com.taoke.autopay.dto.DYOrderDto;
-import com.taoke.autopay.entity.ClientInfo;
-import com.taoke.autopay.entity.KeyOrder;
+import com.taoke.autopay.entity.*;
 
 import com.taoke.autopay.exception.KeyOrderException;
+import com.taoke.autopay.exception.WxOrderCountException;
 import com.taoke.autopay.factory.OrderFactory;
 import com.taoke.autopay.service.ClientInfoService;
 import com.taoke.autopay.service.KeyOrderService;
+import com.taoke.autopay.service.WxUserOrderCountService;
+import com.taoke.autopay.service.WxUserSettingService;
 import com.taoke.autopay.utils.JsonUtil;
 import com.taoke.autopay.utils.StringUtil;
 import com.taoke.autopay.utils.TimeUtil;
+import com.taoke.autopay.utils.order.DYOrderApi;
 import com.taoke.autopay.vo.AcceptData;
 import com.taoke.autopay.vo.KeyOrderVO;
 import com.taoke.autopay.vo.OrderFilter;
@@ -42,18 +45,19 @@
 @RequestMapping("api/order")
 public class OrderController {
 
-    private Logger loggerPay= LoggerFactory.getLogger("payLogger");
+    private Logger loggerPay = LoggerFactory.getLogger("payLogger");
 
-    private Gson gson=new GsonBuilder().registerTypeAdapter(Date.class, new TypeAdapter<Date>() {
+    private Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new TypeAdapter<Date>() {
         @Override
         public void write(JsonWriter out, Date value) throws IOException {
             String desc = "";
             if (value != null) {
                 // 鍒ゆ柇鏄惁鏄悓涓�澶�
-                desc = TimeUtil.getGernalTime(value.getTime(),"yyyy-MM-dd HH:mm:ss");
+                desc = TimeUtil.getGernalTime(value.getTime(), "yyyy-MM-dd HH:mm:ss");
                 out.value(desc);
-            } else
+            } else {
                 out.value("");
+            }
         }
 
         @Override
@@ -68,30 +72,37 @@
     @Resource
     private ClientInfoService clientInfoService;
 
+    @Resource
+    private WxUserOrderCountService wxUserOrderCountService;
+
+    @Resource
+    private WxUserSettingService wxUserSettingService;
+
+
     @ResponseBody
     @RequestMapping("listOrder")
-    public String listOrder(AcceptData acceptData, OrderFilter filter){
-        KeyOrderMapper.DaoQuery query=new KeyOrderMapper.DaoQuery();
+    public String listOrder(AcceptData acceptData, OrderFilter filter) {
+        KeyOrderMapper.DaoQuery query = new KeyOrderMapper.DaoQuery();
         Long uid = filter.getUid();
         ClientInfo info = clientInfoService.selectByPrimaryKey(uid);
         query.distributeClientUid = filter.getUid();
-       if(info==null){
+        if (info == null) {
             return JsonUtil.loadFalseResult("瀹㈡埛绔疘D涓嶅瓨鍦�");
-       }
-       if(info.getRule()==1){
-           // 瓒呯骇绠$悊鍛�
-           query.distributeClientUid = null;
-       }
-        clientInfoService.setActiveTime(filter.getUid(),new Date());
-        query.start = (filter.getPage()-1)*filter.getPageSize();
+        }
+        if (info.getRule() == 1) {
+            // 瓒呯骇绠$悊鍛�
+            query.distributeClientUid = null;
+        }
+        clientInfoService.setActiveTime(filter.getUid(), new Date());
+        query.start = (filter.getPage() - 1) * filter.getPageSize();
         query.count = filter.getPageSize();
-        if(filter.getState()!=null) {
+        if (filter.getState() != null) {
             switch (filter.getState()) {
                 case OrderFilter.STATE_NOT_PROCESS:
                     query.stateList = Arrays.asList(new Integer[]{KeyOrder.STATE_NOT_PROCESS});
                     break;
                 case OrderFilter.STATE_PROCESSED:
-                    query.stateList = Arrays.asList(new Integer[]{KeyOrder.STATE_PAY});
+                    query.stateList = Arrays.asList(new Integer[]{KeyOrder.STATE_PAY, KeyOrder.STATE_REJECT_PAY});
                     break;
                 case OrderFilter.STATE_PROCESS_ERROR:
                     query.stateList = Arrays.asList(new Integer[]{KeyOrder.STATE_NOT_PAY});
@@ -99,65 +110,75 @@
             }
         }
 
-        if(filter.getTimeType()!=null){
+        if (filter.getTimeType() != null) {
             long now = System.currentTimeMillis();
-            String nowDay = TimeUtil.getGernalTime(now,"yyyy-MM-dd");
-            switch(filter.getTimeType()){
+            String nowDay = TimeUtil.getGernalTime(now, "yyyy-MM-dd");
+            switch (filter.getTimeType()) {
                 case OrderFilter.TIME_TYPE_TODAY:
-                    query.minCreateTime = new Date(TimeUtil.convertToTimeTemp(nowDay,"yyyy-MM-dd"));
+                    query.minCreateTime = new Date(TimeUtil.convertToTimeTemp(nowDay, "yyyy-MM-dd"));
                     break;
                 case OrderFilter.TIME_TYPE_YESTERDAY:
-                    query.maxCreateTime = new Date(TimeUtil.convertToTimeTemp(nowDay,"yyyy-MM-dd"));
-                    query.minCreateTime = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(now - 24*60*60*1000L,"yyyy-MM-dd"),"yyyy-MM-dd"));
+                    query.maxCreateTime = new Date(TimeUtil.convertToTimeTemp(nowDay, "yyyy-MM-dd"));
+                    query.minCreateTime = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(now - 24 * 60 * 60 * 1000L, "yyyy-MM-dd"), "yyyy-MM-dd"));
                     break;
                 case OrderFilter.TIME_TYPE_WEEK:
                     Calendar calendar = Calendar.getInstance();
                     calendar.setTime(new Date(now));
                     int day = calendar.get(Calendar.DAY_OF_WEEK);
-                    day-=1;
-                    if(day==0){
+                    day -= 1;
+                    if (day == 0) {
                         // 鏄熸湡澶�
-                        day=7;
+                        day = 7;
                     }
-                    query.minCreateTime = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(now - 24*60*60*1000L*(day-1),"yyyy-MM-dd"),"yyyy-MM-dd"));
+                    query.minCreateTime = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(now - 24 * 60 * 60 * 1000L * (day - 1), "yyyy-MM-dd"), "yyyy-MM-dd"));
                     break;
                 case OrderFilter.TIME_TYPE_MONTH:
-                    query.minCreateTime = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(now,"yyyy-MM"),"yyyy-MM"));
+                    query.minCreateTime = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(now, "yyyy-MM"), "yyyy-MM"));
                     break;
             }
 
         }
 
-        if(filter.getSort()==0) {
+        if (filter.getSort() == 0) {
             query.sortList = Arrays.asList(new String[]{"create_time asc"});
-        }else{
+        } else {
             query.sortList = Arrays.asList(new String[]{"create_time desc"});
         }
         List<KeyOrder> list = keyOrderService.list(query);
-        List<KeyOrderVO> voList=new ArrayList<>();
-        for(KeyOrder order:list){
+        List<KeyOrderVO> voList = new ArrayList<>();
+        for (KeyOrder order : list) {
             voList.add(OrderFactory.create(order));
         }
         long count = keyOrderService.count(query);
-        JSONObject data=new JSONObject();
-        data.put("count",count);
-        data.put("list",gson.toJson(voList));
+        JSONObject data = new JSONObject();
+        data.put("count", count);
+        data.put("list", gson.toJson(voList));
         return JsonUtil.loadTrueResult(data);
     }
 
+    /**
+     * @return java.lang.String 杩斿洖鏄惁鍙互鍘绘敮浠�
+     * @author hxh
+     * @description 璁剧疆璁㈠崟鍙�
+     * @date 23:08 2024/6/24
+     * @param: acceptData
+     * @param: id 璁㈠崟ID
+     * @param: orderNo 璁㈠崟鍙�
+     * @param: orderStatus 璁㈠崟鐘舵�侊細璁㈠崟宸插彇娑�/宸叉敮浠�
+     **/
     @ResponseBody
     @RequestMapping("setOrderNo")
-    public String setOrderNo(AcceptData acceptData, String id,String orderNo){
-        loggerPay.info("setOrderNo: {}-{}",id,orderNo);
-        if(StringUtil.isNullOrEmpty(id)){
+    public String setOrderNo(AcceptData acceptData, String id, String orderNo, String orderStatus) {
+        loggerPay.info("setOrderNo: {}-{}-{}", id, orderNo, orderStatus);
+        if (StringUtil.isNullOrEmpty(id)) {
             return JsonUtil.loadFalseResult("璇蜂笂浼爄d");
         }
-        if(StringUtil.isNullOrEmpty(orderNo)){
+        if (StringUtil.isNullOrEmpty(orderNo)) {
             return JsonUtil.loadFalseResult("orderNo");
         }
 
         KeyOrder order = keyOrderService.selectById(id);
-        if(order==null){
+        if (order == null) {
             return JsonUtil.loadFalseResult("鍙d护涓嶅瓨鍦�");
         }
 
@@ -165,39 +186,73 @@
             if (order.getOrderNo() != null && !order.getOrderNo().equalsIgnoreCase(orderNo)) {
                 throw new KeyOrderException("宸茬粡澶勭悊杩囷紝涓庝箣鍓嶅鐞嗙殑璁㈠崟鍙蜂笉涓�鑷�");
             }
-        }catch(KeyOrderException e){
+        } catch (KeyOrderException e) {
             return JsonUtil.loadFalseResult(e.getMessage());
         }
 
         try {
-            DYOrderDto dto = new DYOrderDto(); // DYOrderApi.getOrderDetail(orderNo);
-            dto.setOrder_status(1);
-            if(dto.getOrder_status() !=DYOrderDto.ORDER_STATUS_NOT_PAY){
-                KeyOrder orderUpdate=new KeyOrder();
+            if (!StringUtil.isNullOrEmpty(orderStatus)) {
+                throw new KeyOrderException(orderStatus);
+            }
+            DYOrderDto dto = DYOrderApi.getOrderDetail(orderNo);
+//            dto.setOrder_status(1);
+            if (dto.getOrder_status() != DYOrderDto.ORDER_STATUS_NOT_PAY) {
+                // 璁㈠崟涓嶅浜庡皻鏈粯娆剧姸鎬�
+                KeyOrder orderUpdate = new KeyOrder();
                 orderUpdate.setId(id);
                 orderUpdate.setOrderState(dto.getOrder_status());
                 orderUpdate.setOrderType(1);
                 orderUpdate.setOrderNo(orderNo);
-                if(order.getState() == KeyOrder.STATE_NOT_PROCESS){
-                    orderUpdate.setState(KeyOrder.STATE_NOT_PAY);
-                    orderUpdate.setStateDesc("璁㈠崟涓嶅浜庡緟浠樻鐘舵��");
+                if (order.getState() == KeyOrder.STATE_NOT_PROCESS) {
+                    if (dto.getOrder_status() == DYOrderDto.ORDER_STATUS_CANCELED) {
+                        orderUpdate.setState(KeyOrder.STATE_PAY);
+                        orderUpdate.setStateDesc(dto.getOrder_status_desc());
+                    } else {
+                        orderUpdate.setState(KeyOrder.STATE_PAY);
+                        orderUpdate.setStateDesc(dto.getOrder_status_desc());
+                    }
                 }
                 keyOrderService.update(orderUpdate);
-                if(dto.getOrder_status() ==DYOrderDto.ORDER_STATUS_CANCELED){
+                if (dto.getOrder_status() == DYOrderDto.ORDER_STATUS_CANCELED) {
                     throw new Exception("璁㈠崟宸插彇娑�");
-                }else {
+                } else {
                     throw new Exception("璁㈠崟宸叉敮浠�");
                 }
             }
+
+            if (order.getUid() != null) {
+                WxUserOrderCount countInfo = wxUserOrderCountService.get(order.getUid(), OrderCountTypeEnum.DY_ORDER_PAY, TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMdd"));
+                if (countInfo != null) {
+                    WxUserSettings settings = wxUserSettingService.selectByUid(order.getUid());
+                    if (settings.getDyOrderCountPerDay() <= countInfo.getOrderCount()) {
+                        throw new Exception("浠婃棩宸茶揪鏀粯娆℃暟涓婇檺锛�" + settings.getDyOrderCountPerDay());
+                    }
+                }
+            }
+
             // 璁剧疆杩涘叆
-            KeyOrder orderUpdate=new KeyOrder();
+            KeyOrder orderUpdate = new KeyOrder();
             orderUpdate.setId(id);
             orderUpdate.setOrderType(1);
             orderUpdate.setOrderState(dto.getOrder_status());
             orderUpdate.setOrderNo(orderNo);
+            orderUpdate.setExcutePayTime(new Date());
             keyOrderService.update(orderUpdate);
             order = keyOrderService.selectById(id);
             return JsonUtil.loadTrueResult(gson.toJson(OrderFactory.create(order)));
+        } catch (KeyOrderException e) {
+            KeyOrder orderUpdate = new KeyOrder();
+            orderUpdate.setId(id);
+            orderUpdate.setOrderType(1);
+            orderUpdate.setOrderState(0);
+            orderUpdate.setOrderNo(orderNo);
+            orderUpdate.setState(KeyOrder.STATE_REJECT_PAY);
+            if (order.getExcutePayTime() == null) {
+                orderUpdate.setExcutePayTime(new Date());
+            }
+            orderUpdate.setStateDesc(e.getMessage());
+            keyOrderService.update(orderUpdate);
+            return JsonUtil.loadFalseResult(e.getMessage());
         } catch (Exception e) {
             e.printStackTrace();
             return JsonUtil.loadFalseResult(e.getMessage());
@@ -206,53 +261,101 @@
 
     @ResponseBody
     @RequestMapping("setPayResult")
-    public String setPayResult(AcceptData acceptData, String id,boolean paySuccess,String msg){
-        loggerPay.info("setPayResult: {}-{}",id,paySuccess);
-        if(StringUtil.isNullOrEmpty(id)){
+    public String setPayResult(AcceptData acceptData, String id, boolean paySuccess, String msg) {
+        loggerPay.info("setPayResult: {}-{}", id, paySuccess);
+        if (StringUtil.isNullOrEmpty(id)) {
             return JsonUtil.loadFalseResult("璇蜂笂浼爄d");
         }
         KeyOrder order = keyOrderService.selectById(id);
-        if(order==null){
+        if (order == null) {
             return JsonUtil.loadFalseResult("鍙d护涓嶅瓨鍦�");
         }
-        if(StringUtil.isNullOrEmpty(order.getOrderNo())){
+        if (StringUtil.isNullOrEmpty(order.getOrderNo())) {
             return JsonUtil.loadFalseResult("娌℃湁鍖归厤鍒拌鍗曞彿");
         }
 
-        if(!paySuccess){
-          // 鏀粯澶辫触
-            KeyOrder orderUpdate=new KeyOrder();
-            orderUpdate.setId(id);
-            orderUpdate.setState(KeyOrder.STATE_NOT_PAY);
-            orderUpdate.setStateDesc("鏀粯澶辫触");
-            keyOrderService.update(orderUpdate);
-        } else {
-            KeyOrder orderUpdate=new KeyOrder();
-            orderUpdate.setId(id);
-            orderUpdate.setState(KeyOrder.STATE_PAY);
-            orderUpdate.setStateDesc("鏀粯鎴愬姛");
-            keyOrderService.update(orderUpdate);
+        if (order.getState() == KeyOrder.STATE_NOT_PROCESS) {
+            if (!paySuccess) {
+                // 鏀粯澶辫触
+                KeyOrder orderUpdate = new KeyOrder();
+                orderUpdate.setId(id);
+                orderUpdate.setState(KeyOrder.STATE_NOT_PAY);
+                orderUpdate.setStateDesc("鏀粯澶辫触");
+                keyOrderService.update(orderUpdate);
+            } else {
+                KeyOrder orderUpdate = new KeyOrder();
+                orderUpdate.setId(id);
+                orderUpdate.setState(KeyOrder.STATE_PAY);
+                if (order.getPayTime() == null) {
+                    orderUpdate.setPayTime(new Date());
+                }
+                orderUpdate.setStateDesc("鏀粯鎴愬姛");
+                try {
+                    keyOrderService.paySuccess(id, "鏀粯鎴愬姛", TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMdd"));
+                } catch (WxOrderCountException e) {
+                    e.printStackTrace();
+                    return JsonUtil.loadFalseResult(e.getMessage());
+                }
+            }
         }
         return JsonUtil.loadTrueResult("");
     }
 
 
+    @ResponseBody
+    @RequestMapping("rejectPay")
+    public String rejectPay(AcceptData acceptData, Long uid, String id) {
+        loggerPay.info("rejectPay: {}-{}", uid, id);
+        if (StringUtil.isNullOrEmpty(id)) {
+            return JsonUtil.loadFalseResult("璇蜂笂浼爄d");
+        }
+        KeyOrder order = keyOrderService.selectById(id);
+        if (order == null) {
+            return JsonUtil.loadFalseResult("鍙d护涓嶅瓨鍦�");
+        }
+
+        if (order.getState() != KeyOrder.STATE_NOT_PROCESS) {
+            return JsonUtil.loadFalseResult("鍙兘椹冲洖鏈墽琛岀姸鎬佺殑鍙d护");
+        }
+
+        KeyOrder orderUpdate = new KeyOrder();
+        orderUpdate.setId(id);
+        orderUpdate.setState(KeyOrder.STATE_REJECT_PAY);
+        orderUpdate.setStateDesc("浜哄伐椹冲洖");
+        keyOrderService.update(orderUpdate);
+
+        return JsonUtil.loadTrueResult("");
+    }
+
 
     @ResponseBody
     @RequestMapping("deleteAll")
-    public String deleteAll(AcceptData acceptData){
+    public String deleteAll(AcceptData acceptData, Long uid) {
+
+        ClientInfo user = clientInfoService.selectByPrimaryKey(uid);
+        if (user == null) {
+            return JsonUtil.loadFalseResult("鐢ㄦ埛涓嶅瓨鍦�");
+        }
+
+        if (user.getRule() != ClientInfo.RULE_ADMIN) {
+            return JsonUtil.loadFalseResult("鍙湁绠$悊鍛樻墠鑳藉垹闄�");
+        }
+
+        // 鍒犻櫎24灏忔椂涔嬪墠鐨勬暟鎹�
+//        keyOrderService.deleteAll(new Date(System.currentTimeMillis() - 24*60*60*1000L));
+        keyOrderService.deleteAll(new Date(System.currentTimeMillis()));
         // 鍒櫎鎵�鏈夋暩鎿�
         return JsonUtil.loadTrueResult("");
     }
 
 
-    public static void main(String[] args){
+    public static void main(String[] args) {
 
         Calendar calendar = Calendar.getInstance();
-        for(int i=0;i<7;i++) {
-            calendar.setTime(new Date(System.currentTimeMillis() - 24*60*60*1000L*i));
+        for (int i = 0; i < 7; i++) {
+            calendar.setTime(new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000L * i));
             int day = calendar.get(Calendar.DAY_OF_WEEK);
-            System.out.println(day-1);
+            System.out.println(day - 1);
         }
     }
 }

--
Gitblit v1.8.0