瀏覽代碼

律师端开发+退款部分+AI咨询推荐律师

ldz 3 周之前
父節點
當前提交
c64f1d369b

+ 117 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreAliPayRefundLog.java

@@ -0,0 +1,117 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 支付宝退款记录表
+ * </p>
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@JsonInclude
+@ApiModel(value = "StoreAliPayRefundLog对象", description = "支付宝退款记录表")
+@TableName("store_ali_pay_refund_log")
+public class StoreAliPayRefundLog extends Model<StoreAliPayRefundLog> {
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "响应状态码:10000表示接口调用成功")
+    @TableField("response_code")
+    private String responseCode;
+
+    @ApiModelProperty(value = "响应状态描述")
+    @TableField("response_msg")
+    private String responseMsg;
+
+    @ApiModelProperty(value = "买家支付宝账号(邮箱形式,中间字符脱敏处理)")
+    @TableField("buyer_logon_id")
+    private String buyerLogonId;
+
+    @ApiModelProperty(value = "资金变动标识:Y表示用户账户发生实际资金变动,N表示用户账户未发生实际资金变动")
+    @TableField("fund_change")
+    private String fundChange;
+
+    @ApiModelProperty(value = "退款受理时间:支付宝系统处理该退款请求的时间")
+    @TableField("gmt_refund_pay")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date gmtRefundPay;
+
+    @ApiModelProperty(value = "商户订单号:商户系统生成的原交易订单唯一标识")
+    @TableField("out_trade_no")
+    private String outTradeNo;
+
+    @ApiModelProperty(value = "退款渠道明细列表:记录本次退款涉及的资金渠道及对应金额(JSON格式)")
+    @TableField("refund_detail_item_list")
+    private String refundDetailItemList;
+
+    @ApiModelProperty(value = "申请退款金额:商户发起的退款请求金额(单位:元)")
+    @TableField("refund_fee")
+    private String refundFee;
+
+    @ApiModelProperty(value = "实际退回金额:最终成功退回给买家的金额(单位:元)")
+    @TableField("send_back_fee")
+    private String sendBackFee;
+
+    @ApiModelProperty(value = "支付宝交易号:支付宝系统生成的原交易唯一标识")
+    @TableField("trade_no")
+    private String tradeNo;
+
+    @ApiModelProperty(value = "买家开放ID:支付宝为买家分配的唯一标识")
+    @TableField("buyer_open_id")
+    private String buyerOpenId;
+
+    @ApiModelProperty(value = "支付宝证书序列号:用于验证响应数据来源的真实性")
+    @TableField("alipay_cert_sn")
+    private String alipayCertSn;
+
+    @ApiModelProperty(value = "响应签名:支付宝对响应数据的加密签名")
+    @TableField("sign")
+    private String sign;
+
+    @ApiModelProperty(value = "退款原因:商户发起的退款原因")
+    @TableField("refund_reason")
+    private String refundReason;
+
+    @ApiModelProperty(value = "部分退款编号:标识一次退款请求,部分退款时必传")
+    @TableField("out_request_no")
+    private String outRequestNo;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField("created_user_id")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField("updated_user_id")
+    private Integer updatedUserId;
+}
+

+ 17 - 0
alien-entity/src/main/java/shop/alien/mapper/StoreAliPayRefundLogMapper.java

@@ -0,0 +1,17 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import shop.alien.entity.store.StoreAliPayRefundLog;
+
+/**
+ * <p>
+ * 支付宝退款记录表 Mapper 接口
+ * </p>
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+public interface StoreAliPayRefundLogMapper extends BaseMapper<StoreAliPayRefundLog> {
+
+}
+

+ 3 - 0
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/LawyerConsultationOrderServiceImpl.java

@@ -1011,16 +1011,19 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
 
             // 构建返回结果
             Map<String, Object> allRevenueMap = new HashMap<>();
+            allRevenueMap.put("name", "全部收益");
             allRevenueMap.put("orderCount", revenueVO.getAllOrderCount());
             allRevenueMap.put("totalRevenue", revenueVO.getAllRevenue());
             resultMap.put("allRevenue", allRevenueMap);
 
             Map<String, Object> inProgressMap = new HashMap<>();
+            inProgressMap.put("name", "进行中");
             inProgressMap.put("orderCount", revenueVO.getInProgressOrderCount());
             inProgressMap.put("totalRevenue", revenueVO.getInProgressRevenue());
             resultMap.put("inProgress", inProgressMap);
 
             Map<String, Object> completedMap = new HashMap<>();
+            completedMap.put("name", "已完成");
             completedMap.put("orderCount", revenueVO.getCompletedOrderCount());
             completedMap.put("totalRevenue", revenueVO.getCompletedRevenue());
             resultMap.put("completed", completedMap);

+ 17 - 0
alien-store/src/main/java/shop/alien/store/service/StoreAliPayRefundLogService.java

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

+ 17 - 1
alien-store/src/main/java/shop/alien/store/service/impl/LawyerUserServiceImpl.java

@@ -9,6 +9,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.LawyerLegalProblemScenario;
@@ -209,7 +210,22 @@ public class LawyerUserServiceImpl extends ServiceImpl<LawyerUserMapper, LawyerU
                 .eq("status", 1)
                 .select("lawyer_user_id");
         List<LawyerServiceArea> serviceAreas = lawyerServiceAreaService.list(areaQuery);
-        return serviceAreas.stream()
+
+        if (!CollectionUtils.isEmpty(serviceAreas)) {
+           return serviceAreas.stream()
+                    .map(LawyerServiceArea::getLawyerUserId)
+                    .filter(Objects::nonNull)
+                    .distinct()
+                    .collect(Collectors.toList());
+        }
+        QueryWrapper<LawyerServiceArea> areaQueryNew = new QueryWrapper<>();
+        areaQueryNew
+                .eq("delete_flag", 0)
+                .eq("status", 1)
+                .select("lawyer_user_id");
+        List<LawyerServiceArea> serviceAreasNew = lawyerServiceAreaService.list(areaQueryNew);
+
+        return serviceAreasNew.stream()
                 .map(LawyerServiceArea::getLawyerUserId)
                 .filter(Objects::nonNull)
                 .distinct()

+ 21 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StoreAliPayRefundLogServiceImpl.java

@@ -0,0 +1,21 @@
+package shop.alien.store.service.impl;
+
+import shop.alien.entity.store.StoreAliPayRefundLog;
+import shop.alien.mapper.StoreAliPayRefundLogMapper;
+import shop.alien.store.service.StoreAliPayRefundLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 支付宝退款记录表 服务实现类
+ * </p>
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Service
+public class StoreAliPayRefundLogServiceImpl extends ServiceImpl<StoreAliPayRefundLogMapper, StoreAliPayRefundLog> implements StoreAliPayRefundLogService {
+
+}
+

+ 56 - 1
alien-store/src/main/java/shop/alien/store/util/ali/AliApi.java

@@ -1,5 +1,7 @@
 package shop.alien.store.util.ali;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayClient;
@@ -19,10 +21,12 @@ import shop.alien.entity.result.R;
 import shop.alien.entity.store.LifeUser;
 import shop.alien.entity.store.StoreAliPayErrorLog;
 import shop.alien.entity.store.StoreAliPayLog;
+import shop.alien.entity.store.StoreAliPayRefundLog;
 import shop.alien.entity.store.StoreUser;
 import shop.alien.store.service.LifeUserService;
 import shop.alien.store.service.StoreAliPayErrorLogService;
 import shop.alien.store.service.StoreAliPayLogService;
+import shop.alien.store.service.StoreAliPayRefundLogService;
 import shop.alien.store.service.StoreUserService;
 import shop.alien.store.util.ali.ocr.OcrStrategy;
 import shop.alien.store.util.ali.ocr.OcrStrategyFactory;
@@ -31,6 +35,7 @@ import shop.alien.util.common.UniqueRandomNumGenerator;
 import shop.alien.util.common.UrlEncode;
 import shop.alien.util.system.OSUtil;
 
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Base64;
 import java.util.Date;
@@ -54,7 +59,8 @@ public class AliApi {
     private final LifeUserService lifeUserService;
 
     private final StoreAliPayErrorLogService storeAliPayErrorLogService;
-    
+
+    private final StoreAliPayRefundLogService storeAliPayRefundLogService;
 
     private final OcrStrategyFactory ocrStrategyFactory;
 
@@ -203,6 +209,54 @@ public class AliApi {
             String refundReslut = "";
             if (response.isSuccess()) {
                 refundReslut = "调用成功";
+                // 保存退款信息进入到退款记录表
+                JSONObject responseBody = JSONObject.parseObject(response.getBody());
+                JSONObject refundResponse = responseBody.getJSONObject("alipay_trade_refund_response");
+
+                StoreAliPayRefundLog refundLog = new StoreAliPayRefundLog();
+                // 响应基本信息
+                refundLog.setResponseCode(refundResponse.getString("code"));
+                refundLog.setResponseMsg(refundResponse.getString("msg"));
+                // 买家信息
+                refundLog.setBuyerLogonId(refundResponse.getString("buyer_logon_id"));
+                refundLog.setBuyerOpenId(refundResponse.getString("buyer_open_id"));
+                // 资金变动信息
+                refundLog.setFundChange(refundResponse.getString("fund_change"));
+                // 订单信息
+                refundLog.setOutTradeNo(refundResponse.getString("out_trade_no"));
+                refundLog.setTradeNo(refundResponse.getString("trade_no"));
+                // 退款金额信息
+                refundLog.setRefundFee(refundResponse.getString("refund_fee"));
+                refundLog.setSendBackFee(refundResponse.getString("send_back_fee"));
+                // 退款渠道明细(转换为JSON字符串)
+                if (refundResponse.containsKey("refund_detail_item_list")) {
+                    JSONArray refundDetailList = refundResponse.getJSONArray("refund_detail_item_list");
+                    if (refundDetailList != null) {
+                        refundLog.setRefundDetailItemList(JSON.toJSONString(refundDetailList));
+                    }
+                }
+                // 退款时间(字符串转Date)
+                String gmtRefundPayStr = refundResponse.getString("gmt_refund_pay");
+                if (StringUtils.isNotBlank(gmtRefundPayStr)) {
+                    try {
+                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                        refundLog.setGmtRefundPay(sdf.parse(gmtRefundPayStr));
+                    } catch (ParseException e) {
+                        log.warn("解析退款时间失败: {}", gmtRefundPayStr, e);
+                    }
+                }
+                // 退款原因和部分退款编号(从请求参数中获取)
+                refundLog.setRefundReason(refundReason);
+                refundLog.setOutRequestNo(partialRefundCode);
+                // 证书和签名信息
+                refundLog.setAlipayCertSn(responseBody.getString("alipay_cert_sn"));
+                refundLog.setSign(responseBody.getString("sign"));
+                // 标准字段
+                refundLog.setDeleteFlag(0);
+                refundLog.setCreatedTime(new Date());
+
+                storeAliPayRefundLogService.save(refundLog);
+
             } else {
                 log.warn("AliPayConfig.processRefund ERROR Msg={}", response.getBody());
                 JSONObject jsonObject = JSONObject.parseObject(response.getBody()).getJSONObject("alipay_trade_refund_response");
@@ -373,6 +427,7 @@ public class AliApi {
             }else{
                 payeeInfo.setIdentity(phone);
             }
+            payeeInfo.setName(name);
             model.setPayeeInfo(payeeInfo);
             // 设置业务备注
             model.setRemark("爱丽恩提现业务");