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') <= 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