From 595b7935a30e84fba1bc3561d05f9d19d3e32e1f Mon Sep 17 00:00:00 2001
From: Administrator <1101184511@qq.com>
Date: 星期三, 23 四月 2025 00:45:48 +0800
Subject: [PATCH] 后台管理页面完成

---
 src/main/java/com/taoke/autopay/service/impl/KeyOrderServiceImpl.java |  141 +++++++++++++++++++++++++++++++++++++----------
 1 files changed, 111 insertions(+), 30 deletions(-)

diff --git a/src/main/java/com/taoke/autopay/service/impl/KeyOrderServiceImpl.java b/src/main/java/com/taoke/autopay/service/impl/KeyOrderServiceImpl.java
index 31dae68..c9c6dc0 100644
--- a/src/main/java/com/taoke/autopay/service/impl/KeyOrderServiceImpl.java
+++ b/src/main/java/com/taoke/autopay/service/impl/KeyOrderServiceImpl.java
@@ -1,5 +1,6 @@
 package com.taoke.autopay.service.impl;
 
+import com.google.gson.Gson;
 import com.taoke.autopay.dao.KeyOrderMapper;
 import com.taoke.autopay.dao.WxUserSettingsMapper;
 import com.taoke.autopay.dto.ChannelOrderStatistic;
@@ -9,8 +10,10 @@
 import com.taoke.autopay.entity.agent.ChannelAgentSettings;
 import com.taoke.autopay.exception.KeyOrderException;
 import com.taoke.autopay.exception.KeyVerifyException;
+import com.taoke.autopay.exception.UserCreditException;
 import com.taoke.autopay.exception.WxOrderCountException;
 import com.taoke.autopay.factory.OrderFactory;
+import com.taoke.autopay.manager.UserCreditManager;
 import com.taoke.autopay.service.*;
 import com.taoke.autopay.service.agent.ChannelAgentService;
 import com.taoke.autopay.service.agent.ChannelAgentSettingService;
@@ -19,7 +22,10 @@
 import com.taoke.autopay.utils.order.DYOrderApi;
 import com.taoke.autopay.utils.order.OrderChannelUtil;
 import com.taoke.autopay.vo.SubmitKeyInfo;
+import com.taoke.autopay.vo.admin.IgnoreAgentOrderSettingVO;
 import net.sf.json.JSONArray;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -38,6 +44,8 @@
  */
 @Service
 public class KeyOrderServiceImpl implements KeyOrderService {
+
+    private Logger loggerDebug= LoggerFactory.getLogger("debugLogger");
 
     @Resource
     private KeyOrderMapper keyOrderMapper;
@@ -66,10 +74,22 @@
     @Resource
     private PayMoneySettingService payMoneySettingService;
 
+    @Resource
+    private WxUserService wxUserService;
+
+    @Resource
+    private UserCreditManager userCreditManager;
+
 
     @Override
     public KeyOrder selectById(String id) {
         return keyOrderMapper.selectById(id);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public KeyOrder selectByIdForUpdate(String id) {
+        return keyOrderMapper.selectByPrimaryKeyForUpdate(id);
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -79,7 +99,8 @@
         if (uid != null) {
             WxUserSettings settings = wxUserSettingService.getUserSettings(uid);
             OrderCountTypeEnum countType = OrderCountTypeEnum.SUBMIT_TOKEN_COUNT;
-            wxUserOrderCountService.addOrderCount(uid, countType,null, day, 1, settings.getTotalOrderCountPerDay());
+            wxUserOrderCountService.addOrderCount(uid, countType, null, day, 1, settings.getTotalOrderCountPerDay());
+            wxUserService.setLatestInfoInfo(uid, keyInfo.getIp(), keyInfo.getIpInfo());
         }
         String id = OrderFactory.createId(keyInfo.getKey());
         KeyOrder order = keyOrderMapper.selectById(id);
@@ -102,15 +123,32 @@
                 }
                 // 楠岃瘉娓犻亾鏃堕棿
                 ChannelAgentSettings settings = channelAgentSettingService.selectByAgentId(agent.getId());
-                if(settings!=null&&!StringUtil.isNullOrEmpty(settings.getStartSubmitTime())&&!StringUtil.isNullOrEmpty(settings.getEndSubmitTime())){
+                if (settings != null && !StringUtil.isNullOrEmpty(settings.getStartSubmitTime()) && !StringUtil.isNullOrEmpty(settings.getEndSubmitTime())) {
                     String now = TimeUtil.getGernalTime(System.currentTimeMillis(), "HHmmss");
-                    String startTime = settings.getStartSubmitTime().replace(":","");
-                    String endTime = settings.getEndSubmitTime().replace(":","");
+                    String startTime = settings.getStartSubmitTime().replace(":", "");
+                    String endTime = settings.getEndSubmitTime().replace(":", "");
                     if (Integer.parseInt(now) < Integer.parseInt(startTime) || Integer.parseInt(now) > Integer.parseInt(endTime)) {
-                        throw new KeyOrderException(String.format("鍙d护鎻愪氦鏃堕棿娈典负锛�%s-%s",settings.getStartSubmitTime(), settings.getEndSubmitTime()));
+                        throw new KeyOrderException(String.format("鍙d护鎻愪氦鏃堕棿娈典负锛�%s-%s", settings.getStartSubmitTime(), settings.getEndSubmitTime()));
                     }
                 }
 
+                // 鑾峰彇娓犻亾蹇界暐璁㈠崟鐨勯厤缃�
+                String config = systemConfigService.getValueCache(SystemConfigKeyEnum.IGNORE_AGENT_ORDER_SETTING);
+                if (!StringUtil.isNullOrEmpty(config)) {
+                    IgnoreAgentOrderSettingVO ignore = JsonUtil.getSimpleGson().fromJson(config, IgnoreAgentOrderSettingVO.class);
+                    if (ignore.getPercent() > 0) {
+                        // 鑾峰彇褰撳墠浠g悊浠婃棩鐨勮鍗曟暟閲�
+                        KeyOrderMapper.DaoQuery daoQuery = new KeyOrderMapper.DaoQuery();
+                        daoQuery.agentId = agent.getId();
+                        daoQuery.minCreateTime = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMdd"), "yyyyMMdd"));
+                        long keyCount = count(daoQuery);
+                        if (keyCount > ignore.getBeginCount()) {
+                            if ((keyCount - ignore.getBeginCount()) % (100 / ignore.getPercent()) == 0) {
+                                order.setIgnore(true);
+                            }
+                        }
+                    }
+                }
                 order.setAgentId(agent.getId());
             }
         }
@@ -125,16 +163,18 @@
         order.setState(KeyOrder.STATE_NOT_PROCESS);
         order.setStateDesc("灏氭湭澶勭悊");
         order.setCreateTime(new Date());
-        if(orderType!=Constant.ORDER_TYPE_UNKNOWN){
+        if (orderType != Constant.ORDER_TYPE_UNKNOWN) {
             order.setOrderType(orderType);
         }
         if (orderDto != null) {
             order.setOrderNo(orderDto.getOrder_id());
         }
 
+        order.setIp(keyInfo.getIp());
+        if (keyInfo.getIpInfo() != null) {
+            order.setIpInfo(new Gson().toJson(keyInfo.getIpInfo()));
+        }
         keyOrderMapper.insertSelective(order);
-
-
         return order;
     }
 
@@ -156,7 +196,7 @@
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void paySuccess(String id, String stateDesc, String day,String payMerchant) throws WxOrderCountException {
+    public void paySuccess(String id, String stateDesc, String day, String payMerchant) throws WxOrderCountException {
         KeyOrder old = keyOrderMapper.selectByPrimaryKeyForUpdate(id);
         if (old == null) {
             return;
@@ -166,7 +206,7 @@
         }
         if (old.getUid() != null) {
             Integer orderType = old.getOrderType();
-            wxUserOrderCountService.addOrderCount(old.getUid(), (orderType==null||orderType==Constant.ORDER_TYPE_DY)? OrderCountTypeEnum.DY_ORDER_PAY:OrderCountTypeEnum.KS_ORDER_PAY, OrderChannelUtil.getChannelByKey( old.getOrderChannel()), day, 1, null);
+            wxUserOrderCountService.addOrderCount(old.getUid(), (orderType == null || orderType == Constant.ORDER_TYPE_DY) ? OrderCountTypeEnum.DY_ORDER_PAY : OrderCountTypeEnum.KS_ORDER_PAY, OrderChannelUtil.getChannelByKey(old.getOrderChannel()), day, 1, null);
         }
         KeyOrder orderUpdate = new KeyOrder();
         orderUpdate.setId(id);
@@ -177,6 +217,28 @@
             orderUpdate.setPayTime(new Date());
         }
         update(orderUpdate);
+        // 澧炲姞绉垎
+        try {
+            boolean creditEnable = true;
+            // 鍒ゆ柇浠g悊鏄惁鍏佽澧炲姞绉垎
+            Long agengId = old.getAgentId();
+            if(agengId!=null) {
+                ChannelAgentSettings agentSettings =   channelAgentSettingService.selectByAgentId(agengId);
+                if(agentSettings!=null&&agentSettings.getCreditEnable()!=null) {
+                    creditEnable =agentSettings.getCreditEnable();
+                }
+            }
+            if(creditEnable) {
+                if (old.getOrderType() == Constant.ORDER_TYPE_DY) {
+                    userCreditManager.addDYOrderPayRecord(old.getUid(), id);
+                } else if (old.getOrderType() == Constant.ORDER_TYPE_KS) {
+                    userCreditManager.addKSOrderPayRecord(old.getUid(), id);
+                }
+            }
+
+        } catch (UserCreditException e) {
+            loggerDebug.error("澧炲姞绉垎鍑洪敊锛�"+id, e);
+        }
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -254,44 +316,44 @@
         daoQuery.state = KeyOrder.STATE_PAY;
         daoQuery.hasPayTime = true;
         // 灏嗘暟鎹媺鍑烘潵
-        long count =   keyOrderMapper.count(daoQuery);
-        daoQuery.count = (int)count;
-        List<KeyOrder> orderList =  keyOrderMapper.list(daoQuery);
-        Map<String,Set<Long>> uidsMap = new HashMap<>();
-        Map<String,Integer> countMap = new HashMap<>();
-        Map<String,BigDecimal> moneyMap = new HashMap<>();
+        long count = keyOrderMapper.count(daoQuery);
+        daoQuery.count = (int) count;
+        List<KeyOrder> orderList = keyOrderMapper.list(daoQuery);
+        Map<String, Set<Long>> uidsMap = new HashMap<>();
+        Map<String, Integer> countMap = new HashMap<>();
+        Map<String, BigDecimal> moneyMap = new HashMap<>();
 
-        Set<String> orderIds=new HashSet<>();
-        for(KeyOrder order:orderList){
-            String orderId=order.getOrderType()+"#"+ order.getOrderNo();
-            if(!StringUtil.isNullOrEmpty(order.getOrderNo())){
-                if(orderIds.contains(orderId)){
+        Set<String> orderIds = new HashSet<>();
+        for (KeyOrder order : orderList) {
+            String orderId = order.getOrderType() + "#" + order.getOrderNo();
+            if (!StringUtil.isNullOrEmpty(order.getOrderNo())) {
+                if (orderIds.contains(orderId)) {
                     continue;
                 }
                 orderIds.add(orderId);
             }
             String orderChannel = order.getOrderChannel();
 
-            if(!uidsMap.containsKey(orderChannel)){
+            if (!uidsMap.containsKey(orderChannel)) {
                 uidsMap.put(orderChannel, new HashSet<>());
             }
             uidsMap.get(orderChannel).add(order.getUid());
 
-            if(!countMap.containsKey(orderChannel)){
-                countMap.put(orderChannel,0);
+            if (!countMap.containsKey(orderChannel)) {
+                countMap.put(orderChannel, 0);
             }
-            countMap.put(orderChannel,  countMap.get(orderChannel)+1);
+            countMap.put(orderChannel, countMap.get(orderChannel) + 1);
 
 
-            if(!moneyMap.containsKey(orderChannel)){
+            if (!moneyMap.containsKey(orderChannel)) {
                 moneyMap.put(orderChannel, new BigDecimal(0));
             }
             moneyMap.put(orderChannel, moneyMap.get(orderChannel).add(order.getOrderMoney()));
         }
 
-        List<ChannelOrderStatistic> results=new ArrayList<>();
-        for(String orderChannel: moneyMap.keySet()){
-            ChannelOrderStatistic statistic=new ChannelOrderStatistic();
+        List<ChannelOrderStatistic> results = new ArrayList<>();
+        for (String orderChannel : moneyMap.keySet()) {
+            ChannelOrderStatistic statistic = new ChannelOrderStatistic();
             statistic.setCount(countMap.get(orderChannel));
             statistic.setMoney(moneyMap.get(orderChannel));
             statistic.setUserCount(uidsMap.get(orderChannel).size());
@@ -406,7 +468,7 @@
         } catch (KeyOrderException e) {
             // 鎶栭煶璁㈠崟鏈獙璇侀�氳繃锛屽尮閰嶉噾棰�
             // 楠岃瘉鎻愪氦鐨勯噾棰濇槸鍚︽纭�
-            Set<String> moneySet =payMoneySettingService.listAllMoneyAsStr();
+            Set<String> moneySet = payMoneySettingService.listAllMoneyAsStr();
             // 鍖归厤閲戦
             if (!moneySet.contains(money)) {
                 throw new KeyVerifyException(KeyVerifyException.CODE_KEY_MONEY_NOT_MATCH, String.format("閲戦鏈湪绯荤粺璁剧疆涓細%s", money));
@@ -430,4 +492,23 @@
     public long countAgentId(KeyOrderMapper.DaoQuery query) {
         return keyOrderMapper.countAgentId(query);
     }
+
+    @Override
+    public long countUserNotDoOrder(Long uid, Date minCreateTime) {
+        KeyOrderMapper.DaoQuery daoQuery = new KeyOrderMapper.DaoQuery();
+        daoQuery.uid = uid;
+        daoQuery.stateList = Arrays.asList(new Integer[]{KeyOrder.STATE_NOT_PROCESS, KeyOrder.STATE_NOT_PAY});
+        daoQuery.minCreateTime = minCreateTime;
+        return keyOrderMapper.count(daoQuery);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void rejectPay(String id, String rejectMsg) {
+        KeyOrder keyOrder = new KeyOrder();
+        keyOrder.setId(id);
+        keyOrder.setState(KeyOrder.STATE_REJECT_PAY);
+        keyOrder.setStateDesc(rejectMsg);
+        update(keyOrder);
+    }
 }

--
Gitblit v1.8.0