Просмотр исходного кода

Merge branch 'online' into test

刘俊驰 4 месяцев назад
Родитель
Сommit
074800b679

+ 5 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java

@@ -15,6 +15,7 @@ import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.utils.easyexcel.ExcelUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -94,6 +95,10 @@ public class UserWithdrawalController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
+        if (StringUtils.isBlank(authOperaReq.getType())) {
+            authOperaReq.setType("ONLINE");
+        }
+
         return userWithdrawalService.batchAuth(authOperaReq, user);
     }
 

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/AuthOperaReq.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.dto.req;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
@@ -12,6 +13,7 @@ import javax.validation.constraints.NotNull;
  * @Author: liweifan
  * @Data: 2022/3/18 15:04
  */
+@Data
 @ApiModel(value = "AuthOperaReq", description = "审核操作对象")
 public class AuthOperaReq {
     @NotNull(message = "id不能为空")
@@ -26,6 +28,10 @@ public class AuthOperaReq {
     @ApiModelProperty(value = "用户id", hidden = true)
     private Long userId;
 
+    @ApiModelProperty(value = "线上 ONLINE,线下:OFFLINE")
+    private String type;
+
+
     public String getId() {
         return id;
     }

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserWithdrawal.java

@@ -12,12 +12,14 @@ import io.swagger.annotations.ApiModelProperty;
 import java.io.Serializable;
 import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 import java.math.BigDecimal;
 
 /**
  * 用户账户结算表
  */
+@Data
 @TableName("user_withdrawal")
 @ApiModel(value = "UserWithdrawal对象", description = "用户账户结算表")
 public class UserWithdrawal implements Serializable {
@@ -94,6 +96,9 @@ public class UserWithdrawal implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date updateTime;
 
+    @ApiModelProperty("结算方式 线上 ONLINE,线下:OFFLINE ")
+    @TableField(value = "type_")
+    private String type;
     public Long getId() {
         return id;
     }

+ 4 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/RoomServiceImpl.java

@@ -146,6 +146,10 @@ public class RoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNetworkRoom
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void display(ImNetworkDisplayDataDto displayData,String serviceProvider) throws Exception {
+        ImNetworkRoom room = baseMapper.findByRoomId(displayData.getRoomId());
+        if(room == null){
+            return;
+        }
         StringBuffer display = new StringBuffer("display://type=").append(displayData.getType().ordinal()).append("?userId=");
         switch (displayData.getType()) {
             case NONE:
@@ -163,7 +167,6 @@ public class RoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNetworkRoom
                 display.append(displayData.getTeacherId()).append("?uri=").append(displayData.getUri());
                 break;
         }
-        ImNetworkRoom room = baseMapper.findByRoomId(displayData.getRoomId());
         room.setDisplay(display.toString());
 
         ImNetworkRoomMember roomMember = imNetworkRoomMemberService.lambdaQuery()

+ 31 - 15
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java

@@ -199,7 +199,7 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
         List<Long> ids = Arrays.asList(StringUtil.toLongArray(StringPool.COMMA, authOperaReq.getId()));
 
         //先判断三方余额是否充足
-        if (authOperaReq.getPass()) {
+        if (authOperaReq.getPass() && "ONLINE".equals(authOperaReq.getType())) {
             List<UserWithdrawal> userWithdrawals = baseMapper.selectList(Wrappers.<UserWithdrawal>lambdaQuery()
                     .in(UserWithdrawal::getId, ids)
                     .eq(UserWithdrawal::getAuthStatus, AuthStatusEnum.DOING));
@@ -225,6 +225,7 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
             param.setReason(authOperaReq.getReason());
             param.setPass(authOperaReq.getPass());
             param.setUserId(sysUser.getId());
+            param.setType(authOperaReq.getType());
             try {
                 HttpResponseResult<UserWithdrawalVo> res = DistributedLock.of(redissonClient)
                         .runIfLockToFunction(CacheNameEnum.LOCK_WITHDRAWAL.getRedisKey(id.toString())
@@ -258,10 +259,16 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
         build.setAuthUserId(authOperaReq.getUserId());
         build.setUpdateTime(new Date());
         build.setAuthTime(new Date());
+        build.setType(authOperaReq.getType());
 
         SysUser withdrawalUser = sysUserService.findUserById(build.getUserId());
         HttpResponseResult res = HttpResponseResult.succeed(build);
         if (authOperaReq.getPass()) {
+            if (authOperaReq.getType().equals("OFFLINE")) {
+                //线下审核通过,不调用三方
+                withdrawalSuccess(null, build);
+                return res;
+            }
             //交易流水号生成
             Long transNo = idGeneratorService.generatorId("withdrawNo");
 
@@ -350,19 +357,9 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
         if (!TradeStatusEnum.pending.equals(detail.getTradeStatus())) {
             return;
         }
+        detail.setCallbackJson(jsonStr);
         if ("1".equals(callback.getStatus())) {
-            //交易成功
-            detail.setTradeStatus(TradeStatusEnum.succeeded);
-            detail.setTradeNo(callback.getOrderNo());
-            BigDecimal actualAmount = new BigDecimal(callback.getActualAmount());
-            detail.setActualAmount(actualAmount.divide(new BigDecimal("100")));
-            detail.setTransferTime(callback.getEndTime());
-
-            //结算成功,账户解冻,入账户明细
-            UserAccountRecordVo recordVo = accountRecordService.detail(null, AccountBizTypeEnum.WITHDRAWAL, detail.getId());
-            userAccountService.accountChange(recordVo, PostStatusEnum.RECORDED);
-            //发生结算成功通知
-            successSend(detail.getUserId(), detail.getPhone());
+            withdrawalSuccess(callback, detail);
         } else if ("2".equals(callback.getStatus())) {
             //交易失败
             detail.setTradeStatus(TradeStatusEnum.failed);
@@ -373,14 +370,33 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
             //结算失败,账户解冻
             UserAccountRecordVo recordVo = accountRecordService.detail(null, AccountBizTypeEnum.WITHDRAWAL, detail.getId());
             userAccountService.accountChange(recordVo, PostStatusEnum.CANCEL);
+            updateById(detail);
 
             //发生结算失败通知
             unpassSend(detail.getUserId(), detail.getPhone(), callback.getErrorMsg());
+        }
+    }
+
+    private void withdrawalSuccess(UserWithdrawalCallback callback, UserWithdrawalVo detail) {
+        //交易成功
+        detail.setTradeStatus(TradeStatusEnum.succeeded);
+        if (callback !=null) {
+            detail.setTradeNo(callback.getOrderNo());
+            BigDecimal actualAmount = new BigDecimal(callback.getActualAmount());
+            detail.setActualAmount(actualAmount.divide(new BigDecimal("100")));
+            detail.setTransferTime(callback.getEndTime());
         } else {
-            return;
+            detail.setTradeNo("");
+            detail.setActualAmount(detail.getActualAmount());
+            detail.setTransferTime(new Date());
         }
-        detail.setCallbackJson(jsonStr);
+
+        //结算成功,账户解冻,入账户明细
+        UserAccountRecordVo recordVo = accountRecordService.detail(null, AccountBizTypeEnum.WITHDRAWAL, detail.getId());
+        userAccountService.accountChange(recordVo, PostStatusEnum.RECORDED);
         updateById(detail);
+        //发生结算成功通知
+        successSend(detail.getUserId(), detail.getPhone());
     }
 
     @Override

+ 1 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserWithdrawalMapper.xml

@@ -48,6 +48,7 @@
         , t.create_time_ as createTime
         , t.update_time_ as updateTime
         , t.status_ as status
+        , t.type_ as type
     </sql>
 
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo">