From 5d5a187689e51a8a74f16b91d23d32a74b39e803 Mon Sep 17 00:00:00 2001
From: wzp <2040239371@qq.com>
Date: 星期二, 06 五月 2025 18:48:51 +0800
Subject: [PATCH] feat: 新增回调手动重推

---
 ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderStatusCallBackVo.java          |    3 
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java                           |   33 ++++++++
 ruoyi-ui/src/api/system/callbacklog.js                                                 |    8 ++
 ruoyi-ui/src/views/system/callbacklog/index.vue                                        |   63 +++++++++++----
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbOrdersController.java      |   17 +++-
 ruoyi-system/src/main/java/com/ruoyi/system/service/ITbCallbackLogService.java         |    8 ++
 ruoyi-system/src/main/resources/mapper/system/TbCallbackLogMapper.xml                  |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbCallbackLogController.java |   11 ++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbCallbackLogServiceImpl.java |   52 +++++++++++++
 9 files changed, 173 insertions(+), 24 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbCallbackLogController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbCallbackLogController.java
index 77886ba..bde35f7 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbCallbackLogController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbCallbackLogController.java
@@ -101,4 +101,15 @@
     {
         return toAjax(tbCallbackLogService.deleteTbCallbackLogByIds(ids));
     }
+
+    /**
+     * 閲嶈瘯鍥炶皟
+     */
+    @PreAuthorize("@ss.hasPermi('system:callbacklog:retry')")
+    @Log(title = "鍥炶皟璁板綍", businessType = BusinessType.UPDATE)
+    @PostMapping("/retry/{ids}")
+    public AjaxResult retry(@PathVariable Long[] ids)
+    {
+        return toAjax(tbCallbackLogService.retryTbCallbackLogByIds(ids));
+    }
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbOrdersController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbOrdersController.java
index 50ab317..2ed5f28 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbOrdersController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TbOrdersController.java
@@ -4,6 +4,7 @@
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 import javax.servlet.http.HttpServletResponse;
 
 import com.ruoyi.common.annotation.Anonymous;
@@ -83,8 +84,8 @@
      * @param tbOrders
      * @return
      */
-//    @Anonymous(needSign = true)
-    @Anonymous
+    @Anonymous(needSign = true)
+//    @Anonymous
 //    @Log(title = "orders", businessType = BusinessType.INSERT)
     @ApiOperation("鏂板璁㈠崟")
     @ApiImplicitParams({
@@ -103,17 +104,25 @@
         @ApiImplicitParam(name = "bookingPrice", value = "鎶ヤ环", dataType = "BigDecimal")
     })
     @PostMapping("/add")
-    public AjaxResult add(@RequestBody TbOrders tbOrders) {
+    public AjaxResult add(@RequestBody TbOrders tbOrders,String appId) {
         try {
             if (tbOrders == null || tbOrders.getOrderID() == null) {
                 return AjaxResult.error("浼犺緭鏁版嵁涓虹┖锛�");
             }
 
+            if(appId ==null|| Objects.equals(appId, ""))    
+            {
+                return AjaxResult.error("appid涓嶈兘涓虹┖锛�");
+            }
+
+            tbOrders.setAppId(appId);
             tbOrders.setCreateTime(new Date());
 
             tbOrdersService.insertTbOrders(tbOrders);
 
-            SysClientApp scApp = clientAppService.selectSysClientAppByAppId(1L);
+
+            SysClientApp scApp = clientAppService.selectSysClientAppByAppKey(tbOrders.getAppId());
+
 
 
             ServiceOrderAppVo model = new ServiceOrderAppVo();
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
index d4cfcca..2f76290 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -25,6 +25,29 @@
 public class RyTask
 {
     private static final Logger log = LoggerFactory.getLogger(RyTask.class);
+    
+    // 娣诲姞鐘舵�佹槧灏勫瓧鍏�
+    private static final Map<String, String> ORDER_STATUS_MAP = new HashMap<String, String>() {{
+        put("-1", "鏃犳晥鍙栨秷");
+        put("1", "鏈姤浠�");
+        put("2", "宸叉姤浠�");
+        put("3", "1 - 瀹屽叏鏈‘璁�");
+        put("4", "2 - 閮ㄥ垎宸茬‘璁�");
+        put("5", "鏈嚭杞�");
+        put("6", "3 - 宸插嚭杞︼紙鍘绘帴鎮h�呴�斾腑锛�");
+        put("7", "宸插嚭杞︼紙绛夊緟鎮h�咃級");
+        put("8", "4 - 宸插嚭杞︼紙鏈嶅姟涓級");
+        put("9", "5 - 宸查�佽揪锛堝洖绋嬩腑锛�");
+        put("10", "宸茶繑鍥�");
+        put("11", "璺戠┖鍗曪紝宸茶繑鍥�");
+        put("12", "鍙栨秷");
+        put("13", "0 - 鏂拌皟搴﹀崟锛堟湭涓嬪彂锛�");
+        put("14", "宸叉彁浜わ紝绛夊緟瀹℃牳");
+        put("15", "瀹℃牳瀹屾垚");
+        put("16", "瀹℃牳涓嶉�氳繃");
+        put("17", "宸茬珯鐐�");
+    }};
+
     @Autowired
     private IAOrderStatusService orderStatusService;
 
@@ -54,6 +77,9 @@
     {
         System.out.println("鎵ц鏃犲弬鏂规硶");
     }
+
+
+    
 
     /**
      * 鍥炶皟鎺ㄩ�佺姸鎬�
@@ -125,7 +151,12 @@
                         Map<String, String> map = new HashMap<>();
                         map.put("orderID", tbOrders.getOrderID().toString());
                         map.put("thirdOrderNo", orderStatus.getServiceOrdID());
-                        map.put("orderStatus","1");
+                        map.put("orderStatus", ORDER_STATUS_MAP.entrySet()
+                            .stream()
+                            .filter(entry -> entry.getValue().equals(orderStatus.getMsg()))
+                            .map(Map.Entry::getKey)
+                            .findFirst()
+                            .orElse("0"));
                         map.put("orderRemark", orderStatus.getMsg());
                         map.put("plateNo",carLicense);
                         map.put("driverMobile",driverMobiles.toString());
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderStatusCallBackVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderStatusCallBackVo.java
index dc74813..26a8635 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderStatusCallBackVo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/OrderStatusCallBackVo.java
@@ -1,8 +1,11 @@
 package com.ruoyi.system.domain;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 
+
+@JsonIgnoreProperties(ignoreUnknown = true)
 @Data
 public class OrderStatusCallBackVo {
     /**
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ITbCallbackLogService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ITbCallbackLogService.java
index 465bc20..77056b6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ITbCallbackLogService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ITbCallbackLogService.java
@@ -56,4 +56,12 @@
      * @return 缁撴灉
      */
     public int deleteTbCallbackLogById(Long id);
+
+    /**
+     * 閲嶈瘯鍥炶皟
+     * 
+     * @param ids 闇�瑕侀噸璇曠殑鍥炶皟璁板綍涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int retryTbCallbackLogByIds(Long[] ids);
 } 
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbCallbackLogServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbCallbackLogServiceImpl.java
index 82e079a..0dbb53b 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbCallbackLogServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbCallbackLogServiceImpl.java
@@ -1,11 +1,19 @@
 package com.ruoyi.system.service.impl;
 
 import java.util.List;
+import java.util.Map;
+import java.util.Date;
+import java.util.HashMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.system.mapper.TbCallbackLogMapper;
 import com.ruoyi.system.domain.TbCallbackLog;
 import com.ruoyi.system.service.ITbCallbackLogService;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.TypeReference;
+import com.ruoyi.common.utils.HttpUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * 鍥炶皟璁板綍Service涓氬姟灞傚鐞�
@@ -14,6 +22,8 @@
 @Service
 public class TbCallbackLogServiceImpl implements ITbCallbackLogService 
 {
+    private static final Logger log = LoggerFactory.getLogger(TbCallbackLogServiceImpl.class);
+
     @Autowired
     private TbCallbackLogMapper tbCallbackLogMapper;
 
@@ -88,4 +98,46 @@
     {
         return tbCallbackLogMapper.deleteTbCallbackLogById(id);
     }
+
+    /**
+     * 閲嶈瘯鍥炶皟
+     */
+    @Override
+    public int retryTbCallbackLogByIds(Long[] ids) {
+        int successCount = 0;
+        for (Long id : ids) {
+            TbCallbackLog callbackLog = tbCallbackLogMapper.selectTbCallbackLogById(id);
+            if (callbackLog != null) {
+                try {
+                    // 瑙f瀽鍘熷璇锋眰鍙傛暟
+                    Map<String, String> params = JSON.parseObject(callbackLog.getRequestParams(), 
+                        new TypeReference<Map<String, String>>() {});
+
+                    // 杞崲key鐨勯瀛楁瘝涓哄ぇ鍐�
+                    Map<String, String> capitalizedParams = new HashMap<>();
+                    params.forEach((key, value) -> {
+                        String capitalizedKey = key.substring(0, 1).toUpperCase() + key.substring(1);
+                        capitalizedParams.put(capitalizedKey, value);
+                    });
+                    
+                    // 閲嶆柊鍙戦�佸洖璋�
+                    String response = HttpUtil.post(callbackLog.getCallbackUrl(), capitalizedParams);
+                    if (response != null) {
+                        callbackLog.setRetryCount(callbackLog.getRetryCount()+1);
+                        callbackLog.setResponseResult(response);
+                        callbackLog.setStatus("1"); // 鏇存柊鐘舵�佷负鎴愬姛
+                        successCount++;
+                        tbCallbackLogMapper.updateTbCallbackLog(callbackLog);
+                    }
+                } catch (Exception e) {
+                    log.error("閲嶈瘯鍥炶皟澶辫触锛孖D: " + id + ", 閿欒: " + e.getMessage());
+                    callbackLog.setErrorMsg(e.getMessage());
+                    callbackLog.setStatus("0"); // 鏇存柊鐘舵�佷负澶辫触
+                    tbCallbackLogMapper.updateTbCallbackLog(callbackLog);
+                }
+            }
+        }
+        return successCount;
+    }
+
 } 
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/TbCallbackLogMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TbCallbackLogMapper.xml
index 24be3d7..158d758 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TbCallbackLogMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TbCallbackLogMapper.xml
@@ -37,7 +37,7 @@
                 AND date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
             </if>
         </where>
-        order by create_time,id desc
+        order by id desc
     </select>
     
     <select id="selectTbCallbackLogById" parameterType="Long" resultMap="TbCallbackLogResult">
diff --git a/ruoyi-ui/src/api/system/callbacklog.js b/ruoyi-ui/src/api/system/callbacklog.js
index 97e4921..11c1758 100644
--- a/ruoyi-ui/src/api/system/callbacklog.js
+++ b/ruoyi-ui/src/api/system/callbacklog.js
@@ -42,3 +42,11 @@
     method: 'delete'
   })
 }
+
+// 閲嶈瘯鍥炶皟
+export function retryCallbacklog(ids) {
+  return request({
+    url: '/system/callbacklog/retry/' + ids,
+    method: 'post'
+  })
+}
diff --git a/ruoyi-ui/src/views/system/callbacklog/index.vue b/ruoyi-ui/src/views/system/callbacklog/index.vue
index 2e45a89..1a0b084 100644
--- a/ruoyi-ui/src/views/system/callbacklog/index.vue
+++ b/ruoyi-ui/src/views/system/callbacklog/index.vue
@@ -48,8 +48,8 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <!-- <el-col :span="1.5">
-        <el-button
+      <el-col :span="1.5">
+        <!-- <el-button
           type="primary"
           plain
           icon="el-icon-plus"
@@ -78,8 +78,9 @@
           :disabled="multiple"
           @click="handleDelete"
           v-hasPermi="['system:callbacklog:remove']"
-        >鍒犻櫎</el-button>
-      </el-col> -->
+        >鍒犻櫎</el-button> -->
+        
+      </el-col>
       <el-col :span="1.5">
         <el-button
           type="warning"
@@ -89,6 +90,16 @@
           @click="handleExport"
           v-hasPermi="['system:callbacklog:export']"
         >瀵煎嚭</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-s-promotion"
+          size="mini"
+          :disabled="multiple"
+          @click="handleBatchRetry"
+        >鎵归噺閲嶈瘯</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
@@ -116,24 +127,17 @@
           <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
         </template>
       </el-table-column>
-      <!-- <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
             size="mini"
             type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['system:callbacklog:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['system:callbacklog:remove']"
-          >鍒犻櫎</el-button>
+            icon="el-icon-s-promotion"
+            @click="handleRetry(scope.row)"
+            v-hasPermi="['system:callbacklog:retry']"
+          >閲嶈瘯鍥炶皟</el-button>
         </template>
-      </el-table-column> -->
+      </el-table-column>
     </el-table>
     
     <pagination
@@ -181,7 +185,7 @@
 </template>
 
 <script>
-import { listCallbacklog, getCallbacklog, delCallbacklog, addCallbacklog, updateCallbacklog } from "@/api/system/callbacklog";
+import { listCallbacklog, getCallbacklog, delCallbacklog, addCallbacklog, updateCallbacklog, retryCallbacklog } from "@/api/system/callbacklog";
 
 export default {
   name: "Callbacklog",
@@ -328,6 +332,29 @@
       this.download('system/callbacklog/export', {
         ...this.queryParams
       }, `callbacklog_${new Date().getTime()}.xlsx`)
+    },
+    /** 瑙﹀彂鍗曚釜鍥炶皟閲嶈瘯 */
+    handleRetry(row) {
+      const id = row.id;
+      this.$modal.confirm('鏄惁纭閲嶈瘯璇ュ洖璋冭褰曪紵').then(function() {
+        return retryCallbacklog(id);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("瑙﹀彂閲嶈瘯鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 鎵归噺瑙﹀彂鍥炶皟閲嶈瘯 */
+    handleBatchRetry() {
+      if (this.ids.length === 0) {
+        this.$modal.msgError("璇烽�夋嫨闇�瑕侀噸璇曠殑璁板綍");
+        return;
+      }
+      this.$modal.confirm('鏄惁纭閲嶈瘯閫変腑鐨�' + this.ids.length + '鏉″洖璋冭褰曪紵').then(() => {
+        return retryCallbacklog(this.ids.join(','));
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鎵归噺閲嶈瘯鎴愬姛");
+      }).catch(() => {});
     }
   }
 };

--
Gitblit v1.9.1