From 938d93722b6ebaf8953e1e17307ef7739affc3d0 Mon Sep 17 00:00:00 2001 From: wzp <2040239371@qq.com> Date: 星期日, 04 五月 2025 16:21:11 +0800 Subject: [PATCH] feat: 回调地址可配置、回调接口文档和知情同意 --- ruoyi-system/src/main/java/com/ruoyi/system/service/IDispatchOrdService.java | 8 ++ ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java | 78 +++++++++++++------ ruoyi-system/src/main/java/com/ruoyi/system/domain/SysClientApp.java | 13 +++ ruoyi-system/src/main/resources/mapper/system/DispatchOrdMapper.xml | 10 ++ ruoyi-system/src/main/resources/mapper/system/SysClientAppMapper.xml | 6 + ruoyi-ui/src/views/system/clientApp/index.vue | 14 ++ ruoyi-ui/src/views/system/order/detail.vue | 31 ++++++- doc/订单状态回调接口文档.docx | 0 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ServiceOrderController.java | 14 ++- ruoyi-system/src/main/java/com/ruoyi/system/mapper/DispatchOrdMapper.java | 8 ++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DispatchOrdServiceImpl.java | 13 +++ 11 files changed, 159 insertions(+), 36 deletions(-) diff --git "a/doc/\350\256\242\345\215\225\347\212\266\346\200\201\345\233\236\350\260\203\346\216\245\345\217\243\346\226\207\346\241\243.docx" "b/doc/\350\256\242\345\215\225\347\212\266\346\200\201\345\233\236\350\260\203\346\216\245\345\217\243\346\226\207\346\241\243.docx" new file mode 100644 index 0000000..6e3f130 --- /dev/null +++ "b/doc/\350\256\242\345\215\225\347\212\266\346\200\201\345\233\236\350\260\203\346\216\245\345\217\243\346\226\207\346\241\243.docx" Binary files differ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ServiceOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ServiceOrderController.java index 2e805b7..cddada2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ServiceOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ServiceOrderController.java @@ -46,7 +46,6 @@ */ @RestController @RequestMapping("/system/order") -//@DataSource(DataSourceType.SQLSERVER) public class ServiceOrderController extends BaseController { @Autowired private IServiceOrderService serviceOrderService; @@ -262,13 +261,20 @@ //鏀粯淇℃伅 -// List<PayInfo> payInfoList = payInfoService.selectPayInfoByServiceOrdIDDt(orderDetail.getServiceOrdID()); //1016302788 - List<PayInfo> payInfoList = payInfoService.selectPayInfoByServiceOrdIDDt("1016302788"); +// List<PayInfo> payInfoList = payInfoService.selectPayInfoByServiceOrdIDDt(orderDetail.getServiceOrdID()); //姝e紡浣跨敤 + List<PayInfo> payInfoList = payInfoService.selectPayInfoByServiceOrdIDDt("1016302788");//娴嬭瘯浣跨敤 //鍏朵粬淇℃伅 Map<String, Object> otherInfo = new HashMap<>(); //璇勪环 - otherInfo.put("serviceOrdVisit", Objects.toString(mingServiceOrder.getServiceOrdVisit(), "鏃�")); + otherInfo.put("serviceOrdVisit", Objects.toString(mingServiceOrder.getServiceOrdVisit(), "-")); + + //鐭ユ儏鍚屾剰涔� + // List<String> imageUrls = dispatchOrdService.selectImageUrlsByDOrdIDDt(orderDetail.getServiceOrdID()); //姝e紡浣跨敤 + List<String> imageUrls = new ArrayList<>();//娴嬭瘯浣跨敤 + imageUrls.add("https://sys.966120.com.cn/upload/202505/3016127678_3VhEv_VVql2K6eM9tS9uXgKv8fm7vaKtrSFCiP0SraTgz2qe1isgvIuUrqSNv-XgEvdC5kFUxeyrn_wz8Mfc2Sg.jpg"); + imageUrls.add("https://sys.966120.com.cn/upload/202505/3016127678_3cDOPpqc_fzEJ-dHz8lq5aIx3tsnmEtossC6F5VCi2vj6sBwkuzOx4g1RcsWnQ3XNua7COADksYI1rHnbizccOw.jpg"); + otherInfo.put("imageUrls", imageUrls); //鍙戠エ鑾峰彇 Map<String, Object> invoiceInfo = payInfoService.selectLatestInvoiceInfo("1016302788"); 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 6fdb634..10363e2 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 @@ -1,12 +1,10 @@ package com.ruoyi.quartz.task; import com.ruoyi.common.utils.HttpUtil; -import com.ruoyi.system.domain.AOrderStatus; -import com.ruoyi.system.domain.DispatchOrd; -import com.ruoyi.system.domain.OrderStatusCallBackVo; -import com.ruoyi.system.domain.TbOrders; +import com.ruoyi.system.domain.*; import com.ruoyi.system.service.IAOrderStatusService; import com.ruoyi.system.service.IDispatchOrdService; +import com.ruoyi.system.service.ISysClientAppService; import com.ruoyi.system.service.ITbOrdersService; import com.ruoyi.system.service.impl.SysUserServiceImpl; import org.slf4j.Logger; @@ -37,6 +35,9 @@ @Autowired private IDispatchOrdService dispatchOrdService; + @Autowired + private ISysClientAppService sysClientAppService; + public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) { System.out.println(StringUtils.format("鎵ц澶氬弬鏂规硶锛� 瀛楃涓茬被鍨媨}锛屽竷灏旂被鍨媨}锛岄暱鏁村瀷{}锛屾诞鐐瑰瀷{}锛屾暣褰}", s, b, l, d, i)); @@ -52,6 +53,9 @@ System.out.println("鎵ц鏃犲弬鏂规硶"); } + /** + * 鍥炶皟鎺ㄩ�佺姸鎬� + */ public void ryOrderStatus() { try { List<AOrderStatus> orderStatusList = orderStatusService.selectAOrderStatusList(); @@ -62,7 +66,6 @@ for (AOrderStatus orderStatus : orderStatusList) { int count = tbOrdersService.checkServiceOrdIDExists(orderStatus.getServiceOrdID()); if (count > 0) { - // orderStatusService.updateAOrderStatusFlag(orderStatus.getId()); System.out.println("鏈嶅姟璁㈠崟ID瀛樺湪锛�" + orderStatus.getServiceOrdID()); TbOrders tbOrders = tbOrdersService.selectTbOrdersByServiceOrdID(orderStatus.getServiceOrdID()); @@ -108,10 +111,13 @@ log.error("鑾峰彇璋冨害鍗曞紓甯革細"+e.getMessage()); } + SysClientApp clientApp = sysClientAppService.selectSysClientAppByAppId(1L); + if(clientApp==null){ + log.error("鍥炶皟鍦板潃涓嶅瓨鍦�"); + return; + } - - // 浣跨敤鑾峰彇鍒扮殑鎵�鏈夊徃鏈哄鍚� - String callbackUrl = "http://localhost:8080/system/apitest/orderCallback"; + String callbackUrl = clientApp.getCallbackUrl(); try { // 鏋勫缓璇锋眰鍙傛暟 Map<String, String> map = new HashMap<>(); @@ -123,25 +129,29 @@ map.put("driverMobile",driverMobiles.toString()); map.put("driverName", driverNames.toString()); - // 鎵撳嵃璇锋眰鍙傛暟 - log.info("鍙戦�佸洖璋冭姹傦紝URL: " + callbackUrl); - log.info("璇锋眰鍙傛暟: " + map); - - // 鍙戦�佽姹傚苟鑾峰彇鍝嶅簲 - String response = HttpUtil.post(callbackUrl, map); - - // 鎵撳嵃鍝嶅簲缁撴灉 - log.info("鍥炶皟鍝嶅簲缁撴灉: " + response); - - // 鏇存柊鐘舵�� - // orderStatusService.updateAOrderStatusFlag(orderStatus.getId()); + // 绗竴娆″皾璇� + String response = sendCallback(callbackUrl, map); + + if (response == null) { + // 濡傛灉绗竴娆″け璐ワ紝绛夊緟3绉掑悗閲嶈瘯 + Thread.sleep(3000); + log.info("绗竴娆″洖璋冨け璐ワ紝鍑嗗閲嶈瘯"); + response = sendCallback(callbackUrl, map); + } + + if (response != null) { + // 鏇存柊鐘舵�� + log.info("鍥炶皟鎺ㄩ�佹垚鍔燂紝鍙傛暟濡備笅锛�"); + map.forEach((key, value) -> log.info(" {} : {}", key, value)); + orderStatusService.updateAOrderStatusFlag(orderStatus.getId()); + } else { + log.error("鍥炶皟璇锋眰閲嶈瘯鍚庝粛鐒跺け璐�"); + orderStatusService.updateAOrderStatusFlag(orderStatus.getId()); + } } catch (Exception e) { log.error("鍥炶皟璇锋眰澶辫触: " + e.getMessage()); - // 鍙互鑰冭檻閲嶈瘯鏈哄埗鎴栬�呰褰曞け璐ユ棩蹇� + orderStatusService.updateAOrderStatusFlag(orderStatus.getId()); } - - - } else { log.info("鏈嶅姟璁㈠崟ID涓嶅瓨鍦細" + orderStatus.getServiceOrdID()); @@ -153,4 +163,24 @@ e.printStackTrace(); } } + + // 鏂板鍙戦�佸洖璋冪殑鏂规硶 + private String sendCallback(String callbackUrl, Map<String, String> params) { + try { + // 鎵撳嵃璇锋眰鍙傛暟 + log.info("鍙戦�佸洖璋冭姹傦紝URL: " + callbackUrl); + log.info("璇锋眰鍙傛暟: " + params); + + // 鍙戦�佽姹傚苟鑾峰彇鍝嶅簲 + String response = HttpUtil.post(callbackUrl, params); + + // 鎵撳嵃鍝嶅簲缁撴灉 + log.info("鍥炶皟鍝嶅簲缁撴灉: " + response); + + return response; + } catch (Exception e) { + log.error("鍥炶皟璇锋眰寮傚父: " + e.getMessage()); + return null; + } + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysClientApp.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysClientApp.java index 0230ec5..78c4a8e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysClientApp.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysClientApp.java @@ -52,6 +52,11 @@ private String minAppId; + /** 鍥炶皟鍦板潃 */ + @Excel(name = "鍥炶皟鍦板潃") + private String callbackUrl; + + public Long getAppId() { return appId; @@ -125,6 +130,14 @@ this.minAppId = minAppId; } + public String getCallbackUrl() { + return callbackUrl; + } + + public void setCallbackUrl(String callbackUrl) { + this.callbackUrl = callbackUrl; + } + @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DispatchOrdMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DispatchOrdMapper.java index a83219b..4b76078 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DispatchOrdMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DispatchOrdMapper.java @@ -51,4 +51,12 @@ * @return 鍙告満鎵嬫満鍙� */ public String selectDriverMobileByName(String driverName); + + /** + * 鏍规嵁娲惧伐鍗曞彿鏌ヨ鍥剧墖URL鍒楄〃 + * + * @param dOrdIDDt 娲惧伐鍗曞彿 + * @return 鍥剧墖URL鍒楄〃 + */ + public List<String> selectImageUrlsByDOrdIDDt(String dOrdIDDt); } \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDispatchOrdService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDispatchOrdService.java index 320adf0..c3ad290 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDispatchOrdService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDispatchOrdService.java @@ -50,4 +50,12 @@ * @return 鍙告満鎵嬫満鍙� */ public String selectDriverMobileByName(String driverName); + + /** + * 鏍规嵁娲惧伐鍗曞彿鏌ヨ鍥剧墖URL鍒楄〃 + * + * @param dOrdIDDt 娲惧伐鍗曞彿 + * @return 鍥剧墖URL鍒楄〃 + */ + public List<String> selectImageUrlsByDOrdIDDt(String dOrdIDDt); } \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DispatchOrdServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DispatchOrdServiceImpl.java index ce6ba50..d6eaf52 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DispatchOrdServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DispatchOrdServiceImpl.java @@ -76,4 +76,17 @@ public String selectDriverMobileByName(String driverName) { return dispatchOrdMapper.selectDriverMobileByName(driverName); } + + /** + * 鏍规嵁娲惧伐鍗曞彿鏌ヨ鍥剧墖URL鍒楄〃 + * + * @param dOrdIDDt 娲惧伐鍗曞彿 + * @return 鍥剧墖URL鍒楄〃 + */ + @Override + public List<String> selectImageUrlsByDOrdIDDt(String dOrdIDDt) { + return dispatchOrdMapper.selectImageUrlsByDOrdIDDt(dOrdIDDt); + } + + } \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/DispatchOrdMapper.xml b/ruoyi-system/src/main/resources/mapper/system/DispatchOrdMapper.xml index b9f198d..46e5853 100644 --- a/ruoyi-system/src/main/resources/mapper/system/DispatchOrdMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/DispatchOrdMapper.xml @@ -73,4 +73,14 @@ AND OA_Name = #{driverName} </select> + <!-- 鏍规嵁娲惧伐鍗曞彿鏌ヨ鍥剧墖URL鍒楄〃 --> + <select id="selectImageUrlsByDOrdIDDt" parameterType="String" resultType="String"> + select ImageUrl + from ImageData + where DOrdIDDt = #{dOrdIDDt} + and ImageDel = 0 + and ImageType in (1,2) + order by UpImageTime desc + </select> + </mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysClientAppMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysClientAppMapper.xml index 9f761e0..647484c 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysClientAppMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysClientAppMapper.xml @@ -19,10 +19,11 @@ <result property="updateTime" column="update_time" /> <result property="remark" column="remark" /> <result property="minAppId" column="min_app_id" /> + <result property="callbackUrl" column="callback_url" /> </resultMap> <sql id="selectSysClientAppVo"> - select app_id, client_name, app_key, security_key, valid_start_time, valid_end_time, status, del_flag, create_by, create_time, update_by, update_time, remark, min_app_id from sys_client_app + select app_id, client_name, app_key, security_key, valid_start_time, valid_end_time, status, del_flag, create_by, create_time, update_by, update_time, remark, min_app_id, callback_url from sys_client_app </sql> <select id="selectSysClientAppList" parameterType="SysClientApp" resultMap="SysClientAppResult"> @@ -62,6 +63,7 @@ <if test="updateTime != null">update_time,</if> <if test="remark != null">remark,</if> <if test="minAppId != null">min_app_id,</if> + <if test="callbackUrl != null">callback_url,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="clientName != null">#{clientName},</if> @@ -77,6 +79,7 @@ <if test="updateTime != null">#{updateTime},</if> <if test="remark != null">#{remark},</if> <if test="minAppId != null">#{minAppId},</if> + <if test="callbackUrl != null">#{callbackUrl},</if> </trim> </insert> @@ -91,6 +94,7 @@ <if test="status != null and status != ''">status = #{status},</if> <if test="remark != null">remark = #{remark},</if> <if test="minAppId != null">min_app_id = #{minAppId},</if> + <if test="callbackUrl != null">callback_url = #{callbackUrl},</if> <if test="updateBy != null">update_by = #{updateBy},</if> update_time = sysdate() </set> diff --git a/ruoyi-ui/src/views/system/clientApp/index.vue b/ruoyi-ui/src/views/system/clientApp/index.vue index fbb651e..ee47357 100644 --- a/ruoyi-ui/src/views/system/clientApp/index.vue +++ b/ruoyi-ui/src/views/system/clientApp/index.vue @@ -102,6 +102,8 @@ <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> </template> </el-table-column> + <el-table-column label="姘戣埅鍒嗗叕鍙窱d" align="center" prop="minAppId" /> + <el-table-column label="鍥炶皟鍦板潃" align="center" prop="callbackUrl" /> <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width"> <template slot-scope="scope"> <el-button @@ -121,7 +123,7 @@ </template> </el-table-column> </el-table> - + <pagination v-show="total>0" :total="total" @@ -161,6 +163,12 @@ :label="dict.value" >{{dict.label}}</el-radio> </el-radio-group> + </el-form-item> + <el-form-item label="姘戣埅鍒嗗叕鍙窱d" prop="minAppId"> + <el-input v-model="form.minAppId" placeholder="璇疯緭鍏ユ皯鑸垎鍏徃Id" /> + </el-form-item> + <el-form-item label="鍥炶皟鍦板潃" prop="callbackUrl"> + <el-input v-model="form.callbackUrl" placeholder="璇疯緭鍏ュ洖璋冨湴鍧�" /> </el-form-item> <el-form-item label="澶囨敞" prop="remark"> <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" /> @@ -316,7 +324,7 @@ if (this.form.validEndTime) { this.form.validEndTime = this.parseTime(this.form.validEndTime, '{y}-{m}-{d} {h}:{i}:{s}'); } - + if (this.form.appId != null) { updateClientApp(this.form).then(response => { this.$modal.msgSuccess("淇敼鎴愬姛"); @@ -361,4 +369,4 @@ } } }; -</script> \ No newline at end of file +</script> diff --git a/ruoyi-ui/src/views/system/order/detail.vue b/ruoyi-ui/src/views/system/order/detail.vue index 12c64c6..faf6639 100644 --- a/ruoyi-ui/src/views/system/order/detail.vue +++ b/ruoyi-ui/src/views/system/order/detail.vue @@ -98,9 +98,9 @@ :size="isMobile ? 'mini' : 'medium'" class="responsive-table"> <el-table-column prop="id" label="鏀舵娴佹按" min-width="120" /> - <el-table-column - prop="paidMoneyTime" - label="鏀舵鏃堕棿" + <el-table-column + prop="paidMoneyTime" + label="鏀舵鏃堕棿" min-width="140" :formatter="(row, column, cellValue) => formatDateTime(cellValue)" /> @@ -112,7 +112,7 @@ </el-col> </el-row> - + <!-- 璁㈠崟鎯呭喌 --> <el-row :gutter="20"> <!-- 璋冨害淇℃伅 --> @@ -122,6 +122,18 @@ <el-descriptions :column="isMobile ? 1 : 2" border> <el-descriptions-item label="鏈嶅姟璇勪环">{{ otherInfo.serviceOrdVisit }}</el-descriptions-item> <el-descriptions-item label="鍙戠エ鐘舵��">{{ otherInfo.invoiceStatus }}</el-descriptions-item> + <el-descriptions-item label="鐭ユ儏鍚屾剰涔�"> + <div v-if="otherInfo.imageUrls && otherInfo.imageUrls.length > 0" class="image-container"> + <el-image + v-for="image in otherInfo.imageUrls" + :key="image" + :src="image" + :preview-src-list="otherInfo.imageUrls" + class="preview-image" + /> + </div> + <span v-else>鏆傛棤鍥剧墖</span> + </el-descriptions-item> </el-descriptions> </el-card> </el-col> @@ -225,4 +237,15 @@ .el-descriptions-item { padding: 8px !important; } .el-descriptions-item__label { width: 100px !important; } } +.image-container { + display: flex; + flex-wrap: wrap; + gap: 10px; +} +.preview-image { + width: 100px; + height: 100px; + object-fit: cover; + cursor: pointer; +} </style> -- Gitblit v1.9.1