Quellcode durchsuchen

律师端代码修改评价评论部分

ldz vor 3 Wochen
Ursprung
Commit
00f43c5a2c

+ 3 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/OrderReviewVo.java

@@ -78,5 +78,8 @@ public class OrderReviewVo {
     @ApiModelProperty(value = "创建时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createdTime;
+
+    @ApiModelProperty(value = "逻辑删除")
+    private Integer deleteFlag;
 }
 

+ 1 - 0
alien-entity/src/main/resources/mapper/OrderReviewMapper.xml

@@ -52,6 +52,7 @@
             orv.is_anonymous,
             orv.like_count,
             orv.comment_count,
+            orv.review_images,
             orv.created_time
         FROM order_review orv
         LEFT JOIN life_user lu ON lu.id = orv.user_id AND lu.delete_flag = 0

+ 3 - 3
alien-lawyer/src/main/java/shop/alien/lawyer/controller/OrderReviewController.java

@@ -65,8 +65,8 @@ public class OrderReviewController {
     @ApiOperation("获取评价详情(包含评论和回复)")
     @ApiOperationSupport(order = 3)
     @ApiImplicitParam(name = "reviewId", value = "评价ID", dataType = "int", paramType = "query", required = true)
-    @GetMapping("/detail/{reviewId}")
-    public R<OrderReviewDetailVo> getReviewDetail(@PathVariable Integer reviewId) {
+    @GetMapping("/detail/reviewId")
+    public R<OrderReviewDetailVo> getReviewDetail(@RequestParam Integer reviewId) {
         log.info("OrderReviewController.getReviewDetail?reviewId={}", reviewId);
         return orderReviewService.getReviewDetail(reviewId);
     }
@@ -77,7 +77,7 @@ public class OrderReviewController {
     @ApiImplicitParam(name = "reviewId", value = "评价ID", dataType = "int", paramType = "query", required = true),
     @ApiImplicitParam(name = "userId", value = "用户ID", dataType = "int", paramType = "query", required = true)
              })
-    @DeleteMapping("/delete/reviewId")
+    @PostMapping("/delete/reviewId")
     public R<Boolean> deleteReview( @RequestParam Integer reviewId,
                                     @RequestParam Integer userId) {
         log.info("OrderReviewController.deleteReview?reviewId={}, userId={}", reviewId, userId);

+ 17 - 0
alien-lawyer/src/main/java/shop/alien/lawyer/service/StoreAliPayErrorLogService.java

@@ -0,0 +1,17 @@
+package shop.alien.lawyer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import shop.alien.entity.store.StoreAliPayErrorLog;
+
+/**
+ * <p>
+ * 支付宝转账错误记录表 服务类
+ * </p>
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+public interface StoreAliPayErrorLogService extends IService<StoreAliPayErrorLog> {
+
+}
+

+ 32 - 9
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/OrderReviewServiceImpl.java

@@ -2,6 +2,7 @@ package shop.alien.lawyer.service.impl;
 
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -21,8 +22,11 @@ import shop.alien.lawyer.service.OrderReviewService;
 import shop.alien.lawyer.service.ReviewCommentService;
 import shop.alien.mapper.*;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 订单评价 服务实现类
@@ -206,12 +210,18 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
         List<ReviewComment> comments = reviewCommentService.list(commentWrapper);
 
         // 删除评价(逻辑删除)
-        review.setDeleteFlag(1);
-        review.setUpdatedUserId(userId);
-        review.setUpdatedTime(new Date());
-        boolean success = this.updateById(review);
+//        review.setDeleteFlag(1);
+//        review.setUpdatedUserId(userId);
+//        review.setUpdatedTime(new Date());
+//        boolean success = this.updateById(review);
 
-        if (success) {
+
+        LambdaUpdateWrapper<OrderReview> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(OrderReview::getId, reviewId);
+        updateWrapper.set(OrderReview::getDeleteFlag, 1);
+         int num = orderReviewMapper.update(null, updateWrapper);
+
+        if (num>0) {
             // 级联删除该评价下的所有评论和回复
             for (ReviewComment comment : comments) {
                 // 删除评论下的所有回复
@@ -288,12 +298,25 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
         Page<OrderReviewVo> page = new Page<>(pageNum, pageSize);
         IPage<OrderReviewVo> result = orderReviewMapper.getReviewListWithUser(page, null, null, userId);
 
-        // 处理评价图片JSON字符串转换为列表
+        // 处理评价图片:将逗号分割的字符串转换为List<String>
+        // 格式:http://example.com/lawyer1/certificate.jpg,http://example.com/lawyer2/certificate.jpg
         if (result.getRecords() != null) {
             for (OrderReviewVo vo : result.getRecords()) {
-                if (vo.getReviewImages() != null && !vo.getReviewImages().isEmpty()) {
-                    // 如果已经是列表,则不需要转换
-                    // 这里假设VO中的reviewImages已经是List<String>类型
+                // 从数据库查询原始的reviewImages字符串
+                if (vo.getId() != null) {
+                    OrderReview review = this.getById(vo.getId());
+                    if (review != null && review.getReviewImages() != null && !review.getReviewImages().trim().isEmpty()) {
+                        // 按逗号分割字符串,转换为List,并去除每个元素的前后空格
+                        String imagesStr = review.getReviewImages().trim();
+                        List<String> imagesList = Arrays.stream(imagesStr.split(","))
+                                .map(String::trim)
+                                .filter(img -> !img.isEmpty())
+                                .collect(Collectors.toList());
+                        vo.setReviewImages(imagesList);
+                    } else {
+                        // 如果没有图片,设置为空列表
+                        vo.setReviewImages(new ArrayList<>());
+                    }
                 }
             }
         }

+ 21 - 0
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/StoreAliPayErrorLogServiceImpl.java

@@ -0,0 +1,21 @@
+package shop.alien.lawyer.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import shop.alien.entity.store.StoreAliPayErrorLog;
+import shop.alien.lawyer.service.StoreAliPayErrorLogService;
+import shop.alien.mapper.StoreAliPayErrorLogMapper;
+
+/**
+ * <p>
+ * 支付宝转账错误记录表 服务实现类
+ * </p>
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Service
+public class StoreAliPayErrorLogServiceImpl extends ServiceImpl<StoreAliPayErrorLogMapper, StoreAliPayErrorLog> implements StoreAliPayErrorLogService {
+
+}
+

+ 67 - 4
alien-lawyer/src/main/java/shop/alien/lawyer/util/ali/AliApi.java

@@ -17,6 +17,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import shop.alien.entity.store.*;
 import shop.alien.lawyer.service.StoreAliPayRefundLogService;
+import shop.alien.lawyer.service.StoreAliPayErrorLogService;
 import shop.alien.util.common.UniqueRandomNumGenerator;
 import shop.alien.util.common.UrlEncode;
 import shop.alien.util.system.OSUtil;
@@ -39,6 +40,7 @@ public class AliApi {
 
 
 private final StoreAliPayRefundLogService storeAliPayRefundLogService;
+private final StoreAliPayErrorLogService storeAliPayErrorLogService;
 
     /**
      * 商家端appId
@@ -235,14 +237,75 @@ private final StoreAliPayRefundLogService storeAliPayRefundLogService;
 
             } else {
                 log.warn("AliPayConfig.processRefund ERROR Msg={}", response.getBody());
-                JSONObject jsonObject = JSONObject.parseObject(response.getBody()).getJSONObject("alipay_trade_refund_response");
-                refundReslut =  jsonObject.getString("sub_msg");
+                // 退款失败,保存错误信息到错误日志表
+                JSONObject refundResponse = null;
+                try {
+                    JSONObject responseBody = JSONObject.parseObject(response.getBody());
+                    refundResponse = responseBody.getJSONObject("alipay_trade_refund_response");
+                    
+                    StoreAliPayErrorLog errorLog = new StoreAliPayErrorLog();
+                    // 订单金额
+                    errorLog.setTransAmount(refundAmount);
+                    // 阿里返回错误信息
+                    errorLog.setSubMsg(refundResponse.getString("sub_msg"));
+                    // 阿里返回状态码
+                    errorLog.setSubCode(refundResponse.getString("sub_code"));
+                    // 阿里返回参数具体内容(保存完整的响应体)
+                    errorLog.setBizContent(response.getBody());
+                    // 错误信息(优先使用sub_msg,如果没有则使用msg)
+                    String errorMsg = refundResponse.getString("sub_msg");
+                    if (StringUtils.isBlank(errorMsg)) {
+                        errorMsg = refundResponse.getString("msg");
+                    }
+                    if (StringUtils.isBlank(errorMsg)) {
+                        errorMsg = "支付宝退款失败";
+                    }
+                    errorLog.setInformation(errorMsg);
+                    // 标准字段
+                    errorLog.setDeleteFlag(0);
+                    errorLog.setCreatedTime(new Date());
+                    
+                    storeAliPayErrorLogService.save(errorLog);
+                    log.info("退款失败错误信息已保存到错误日志表,订单号: {}, 错误信息: {}", outTradeNo, errorMsg);
+                } catch (Exception e) {
+                    log.error("保存退款失败错误信息到错误日志表时发生异常,订单号: {}", outTradeNo, e);
+                }
+                
+                // 设置返回的错误信息
+                if (refundResponse != null) {
+                    refundReslut = refundResponse.getString("sub_msg");
+                    if (StringUtils.isBlank(refundReslut)) {
+                        refundReslut = refundResponse.getString("msg");
+                    }
+                }
+                if (StringUtils.isBlank(refundReslut)) {
+                    refundReslut = "退款失败";
+                }
             }
             return refundReslut;
         } catch (AlipayApiException e) {
-            throw new RuntimeException(e);
+            // 异常情况,也保存错误信息到错误日志表
+            try {
+                StoreAliPayErrorLog errorLog = new StoreAliPayErrorLog();
+                // 订单金额
+                errorLog.setTransAmount(refundAmount);
+                // 错误信息
+                String errorMsg = "支付宝退款接口调用异常: " + e.getMessage();
+                errorLog.setInformation(errorMsg);
+                // 异常信息保存到bizContent
+                errorLog.setBizContent("异常类型: " + e.getClass().getName() + ", 异常信息: " + e.getMessage());
+                // 标准字段
+                errorLog.setDeleteFlag(0);
+                errorLog.setCreatedTime(new Date());
+                
+                storeAliPayErrorLogService.save(errorLog);
+                log.info("退款异常错误信息已保存到错误日志表,订单号: {}, 异常信息: {}", outTradeNo, errorMsg);
+            } catch (Exception ex) {
+                log.error("保存退款异常错误信息到错误日志表时发生异常,订单号: {}", outTradeNo, ex);
+            }
+            log.error("AliPayConfig.processRefund 调用支付宝退款接口异常,订单号: {}", outTradeNo, e);
+            throw new RuntimeException("支付宝退款接口调用失败: " + e.getMessage(), e);
         }
-
     }