liweifan 2 gadi atpakaļ
vecāks
revīzija
9f69135d0a
22 mainītis faili ar 373 papildinājumiem un 165 dzēšanām
  1. 1 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/CacheNameEnum.java
  2. 36 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/PostStatusEnum.java
  3. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserAccountRecordDao.java
  4. 4 41
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserAccountRecordDto.java
  5. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java
  6. 10 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderSearch.java
  7. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserAccountRecordSearch.java
  8. 14 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserAccountRecord.java
  9. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrder.java
  10. 9 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AccountBizTypeEnum.java
  11. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ClientEnum.java
  12. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/FrozenTypeEnum.java
  13. 30 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserAccountService.java
  14. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentTimeServiceImpl.java
  15. 113 60
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java
  16. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  17. 1 9
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserAccountMapper.xml
  18. 78 24
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserAccountRecordMapper.xml
  19. 9 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  20. 2 1
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java
  21. 2 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserOrderController.java
  22. 20 20
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/SmsCodeController.java

+ 1 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/CacheNameEnum.java

@@ -21,6 +21,7 @@ public enum CacheNameEnum implements BaseEnum<String, CacheNameEnum> {
     STUDENT_SUBJECT_ITEM("学生声部下拉缓存", Duration.ofHours(1L)),
 
     LOCK_EXECUTE_ORDER("用户下单/付款/取消订单锁"),
+    LOCK_RECORD_ACCOUNT("账户记录锁"),
     LOCK_CHANGE_ACCOUNT("账户变更锁"),
     LOCK_WITHDRAWAL("锁用户结算"),
 

+ 36 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/PostStatusEnum.java

@@ -0,0 +1,36 @@
+package com.yonge.cooleshow.common.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 入账状态 WAIT 待入账 FROZEN 冻结入账 RECORDED 已入账 CANCEL 取消
+ *
+ * @Author: liweifan
+ * @Data: 2022/4/7 15:48
+ */
+public enum PostStatusEnum implements BaseEnum<String, PostStatusEnum> {
+
+    WAIT("待入账"),
+    FROZEN("冻结入账"),
+    RECORDED("已入账"),
+    CANCEL("取消");
+
+    @EnumValue
+    private String code;
+    private String msg;
+
+    PostStatusEnum(String msg) {
+        this.code = this.name();
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserAccountRecordDao.java

@@ -35,6 +35,9 @@ public interface UserAccountRecordDao extends BaseMapper<UserAccountRecord> {
 	 */
 	List<UserAccountRecordVo> selectPage(@Param("page") IPage page, @Param("param") UserAccountRecordSearch userAccountRecord);
 
+	List<UserAccountRecordVo> selectAllPage(@Param("param") UserAccountRecordSearch userAccountRecord);
+
+
 	/**
 	 * 老师本月收入
 	 *

+ 4 - 41
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserAccountRecordDto.java

@@ -4,6 +4,7 @@ import com.yonge.cooleshow.biz.dal.entity.UserAccountRecord;
 import com.yonge.cooleshow.biz.dal.enums.AccountBizTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.FrozenTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
+import com.yonge.cooleshow.common.enums.PostStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -17,27 +18,13 @@ import java.math.BigDecimal;
  */
 @ApiModel(value = "UserAccountRecordDto对象", description = "账户变更传输对象")
 public class UserAccountRecordDto extends UserAccountRecord {
-
-    @ApiModelProperty(value = "用户id", required = true)
-    private Long userId;
-    @ApiModelProperty(value = "变更冻结类型 NONE 无 FROZEN 冻结 UNFROZEN 解冻")
-    private FrozenTypeEnum frozenType;
-
-    private Boolean saveRecord = true;
-
     public UserAccountRecordDto() {
     }
 
-    public UserAccountRecordDto(Long userId, BigDecimal transAmount, InOrOutEnum inOrOut, AccountBizTypeEnum bizType) {
-        this.userId = userId;
-        this.setTransAmount(transAmount);
-        this.setInOrOut(inOrOut);
-        this.setBizType(bizType);
-    }
-
-    public UserAccountRecordDto(Long userId, BigDecimal transAmount, InOrOutEnum inOrOut, AccountBizTypeEnum bizType,
+    public UserAccountRecordDto(Long accountId, PostStatusEnum postStatus, BigDecimal transAmount, InOrOutEnum inOrOut, AccountBizTypeEnum bizType,
                                 Long bizId, String bizName, String orderNo) {
-        this.userId = userId;
+        this.setAccountId(accountId);
+        this.setPostStatus(postStatus);
         this.setTransAmount(transAmount);
         this.setInOrOut(inOrOut);
         this.setBizType(bizType);
@@ -45,28 +32,4 @@ public class UserAccountRecordDto extends UserAccountRecord {
         this.setBizName(bizName);
         this.setOrderNo(orderNo);
     }
-
-    public Boolean getSaveRecord() {
-        return saveRecord;
-    }
-
-    public void setSaveRecord(Boolean saveRecord) {
-        this.saveRecord = saveRecord;
-    }
-
-    public Long getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Long userId) {
-        this.userId = userId;
-    }
-
-    public FrozenTypeEnum getFrozenType() {
-        return frozenType;
-    }
-
-    public void setFrozenType(FrozenTypeEnum frozenType) {
-        this.frozenType = frozenType;
-    }
 }

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

@@ -1,8 +1,10 @@
 package com.yonge.cooleshow.biz.dal.dto.req;
 
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
+import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import springfox.documentation.annotations.ApiIgnore;
@@ -24,6 +26,8 @@ public class OrderReq {
     private Long userId;
     @ApiModelProperty(value = "订单号", hidden = true)
     private String orderNo;
+    @ApiModelProperty(value = "下单客户端 ",hidden = true)
+    private ClientEnum orderClient;
     @NotBlank(message = "订单名称不能为空")
     @ApiModelProperty(value = "订单名称 ", required = true)
     private String orderName;
@@ -199,4 +203,12 @@ public class OrderReq {
     public void setOrderNo(String orderNo) {
         this.orderNo = orderNo;
     }
+
+    public ClientEnum getOrderClient() {
+        return orderClient;
+    }
+
+    public void setOrderClient(ClientEnum orderClient) {
+        this.orderClient = orderClient;
+    }
 }

+ 10 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderSearch.java

@@ -15,6 +15,8 @@ import java.time.LocalDateTime;
 public class OrderSearch extends QueryInfo{
     @ApiModelProperty("交易流水号/订单号")
 	private String searchNo;
+	@ApiModelProperty("下单应用:STUDENT 学生端 TEACHER 老师端")
+	private String orderClient;
 	@ApiModelProperty("交易类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 (多选用,分割)")
 	private String orderType;
 	@ApiModelProperty("订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭 FAIL 支付失败 (多选用,分割)")
@@ -31,8 +33,6 @@ public class OrderSearch extends QueryInfo{
 	private Long merchId;
 	@ApiModelProperty("查询时间(yyyy-mm) ")
 	private String searchDate;
-
-
 	@ApiModelProperty(hidden = true)
 	private String goodType;
 	@ApiModelProperty(hidden = true)
@@ -94,7 +94,6 @@ public class OrderSearch extends QueryInfo{
 		this.merchId = merchId;
 	}
 
-
 	public String getSearchDate() {
 		return searchDate;
 	}
@@ -118,4 +117,12 @@ public class OrderSearch extends QueryInfo{
 	public void setBizId(Long bizId) {
 		this.bizId = bizId;
 	}
+
+	public String getOrderClient() {
+		return orderClient;
+	}
+
+	public void setOrderClient(String orderClient) {
+		this.orderClient = orderClient;
+	}
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserAccountRecordSearch.java

@@ -22,6 +22,9 @@ public class UserAccountRecordSearch extends QueryInfo{
 	@ApiModelProperty("用户id ")
 	private Long userId;
 
+	@ApiModelProperty("订单号 ")
+	private String orderNo;
+
 	@ApiModelProperty("收支类型:IN、收入 OUT、支出 ")
 	private InOrOutEnum inOrOut;
 
@@ -88,4 +91,12 @@ public class UserAccountRecordSearch extends QueryInfo{
 	public void setEndTime(LocalDateTime endTime) {
 		this.endTime = endTime;
 	}
+
+	public String getOrderNo() {
+		return orderNo;
+	}
+
+	public void setOrderNo(String orderNo) {
+		this.orderNo = orderNo;
+	}
 }

+ 14 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserAccountRecord.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.yonge.cooleshow.biz.dal.enums.AccountBizTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
+import com.yonge.cooleshow.common.enums.PostStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -38,10 +39,13 @@ public class UserAccountRecord implements Serializable {
     @ApiModelProperty(value = "收支类型:IN、收入 OUT、支出 ",required = true)
     @TableField(value = "in_or_out_")
     private InOrOutEnum inOrOut;
-    @ApiModelProperty(value = "业务类型:PRACTICE、陪练课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 WITHDRAWAL、结算 ",required = true)
+    @ApiModelProperty(value = "入账状态 WAIT 待入账 FROZEN 冻结入账 RECORDED 已入账 CANCEL 取消 ")
+    @TableField(value = "post_status_")
+    private PostStatusEnum postStatus;
+    @ApiModelProperty(value = "业务类型:PRACTICE、陪练课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 WITHDRAWAL、提现 LIVE_SHARE、直播课分润 VIDEO_SHARE、视频课分润 MUSIC_SHARE、乐谱分润 VIP_SHARE、会员分润 MALL_SHARE、商品分润",required = true)
     @TableField(value = "biz_type_")
     private AccountBizTypeEnum bizType;
-    @ApiModelProperty("业务id ")
+    @ApiModelProperty("业务id(陪练课,直播课course_schedule_id_ | 视频课,乐谱为课程组曲子id | 提现为提现记录id | 会员分润为会员购买记录id | 商品分润为商品订单id)")
     @TableField(value = "biz_id_")
     private Long bizId;
     @ApiModelProperty("业务名称 ")
@@ -157,4 +161,12 @@ public class UserAccountRecord implements Serializable {
     public void setErrMsg(String errMsg) {
         this.errMsg = errMsg;
     }
+
+    public PostStatusEnum getPostStatus() {
+        return postStatus;
+    }
+
+    public void setPostStatus(PostStatusEnum postStatus) {
+        this.postStatus = postStatus;
+    }
 }

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrder.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
 import io.swagger.annotations.ApiModel;
@@ -35,6 +36,9 @@ public class UserOrder implements Serializable {
     @ApiModelProperty("订单名称 ")
     @TableField(value = "order_name_")
     private String orderName;
+    @ApiModelProperty("下单应用:STUDENT 学生端 TEACHER 老师端")
+    @TableField(value = "order_client_")
+    private ClientEnum orderClient;
     @ApiModelProperty("订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ) 老师端(PINAO_ROOM、琴房时长)")
     @TableField(value = "order_type_")
     private OrderTypeEnum orderType;
@@ -112,6 +116,14 @@ public class UserOrder implements Serializable {
         this.orderName = orderName;
     }
 
+    public ClientEnum getOrderClient() {
+        return orderClient;
+    }
+
+    public void setOrderClient(ClientEnum orderClient) {
+        this.orderClient = orderClient;
+    }
+
     public OrderTypeEnum getOrderType() {
         return orderType;
     }

+ 9 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AccountBizTypeEnum.java

@@ -14,7 +14,15 @@ public enum AccountBizTypeEnum implements BaseEnum<String, AccountBizTypeEnum> {
     LIVE("直播课", InOrOutEnum.IN),
     VIDEO("视频课", InOrOutEnum.IN),
     MUSIC("乐谱", InOrOutEnum.IN),
-    WITHDRAWAL("结算", InOrOutEnum.OUT);
+    WITHDRAWAL("结算", InOrOutEnum.OUT),
+
+    LIVE_SHARE("直播课分润", InOrOutEnum.IN),
+    VIDEO_SHARE("视频课分润", InOrOutEnum.IN),
+    MUSIC_SHARE("乐谱分润", InOrOutEnum.IN),
+    VIP_SHARE("会员分润", InOrOutEnum.IN),
+    MALL_SHARE("商品分润", InOrOutEnum.IN),
+
+    ;
     @EnumValue
     private String code;
     private String msg;

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ClientEnum.java

@@ -13,6 +13,7 @@ public enum ClientEnum implements BaseEnum<String, ClientEnum> {
     TEACHER("老师端"),
     STUDENT("学生端"),
     SYSTEM("平台端"),
+    WEBSITE("官网"),
 
     ;
     @EnumValue

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/FrozenTypeEnum.java

@@ -17,6 +17,8 @@ public enum  FrozenTypeEnum implements BaseEnum<String, FrozenTypeEnum> {
     private String code;
     private String msg;
 
+
+
     FrozenTypeEnum(String msg) {
         this.code = this.name();
         this.msg = msg;

+ 30 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserAccountService.java

@@ -10,9 +10,17 @@ import com.yonge.cooleshow.biz.dal.dto.search.UserAccountSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserAccount;
 import com.yonge.cooleshow.biz.dal.vo.res.AccountTotal;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.PostStatusEnum;
 
 /**
  * 用户账户表 服务类
+ * 入账逻辑:
+ *   普通入账 -(记录入账接口)并在业务中记录账户记录id 入账状态:WAIT     待入账
+ *           - 业务确认入账(调用记录状态变更接口)   入账状态:RECORDED 已入账  修改账户总表
+ *           - 业务取消 (调用记录状态变更接口)     入账状态:CANCEL   取消
+ *   冻结入账 -(记录入账接口)并在业务中记录账户记录id 入账状态:FROZEN   冻结入账  修改账户总表 冻结金额 ++ 可用余额 --
+ *           - 业务确认入账(调用记录状态变更接口)   入账状态:RECORDED 已入账   修改账户总表 冻结金额 -- 账户余额 --
+ *           - 业务取消 (调用记录状态变更接口)     入账状态:CANCEL   取消     修改账户总表 冻结金额 -- 可用余额 ++
  * @author liweifan
  * @date 2022-03-30
  */
@@ -31,14 +39,33 @@ public interface UserAccountService extends IService<UserAccount>  {
  	 * @date 2022-03-30
      */
     IPage<UserAccountVo> selectPage(IPage<UserAccountVo> page, UserAccountSearch query);
+
+    /**
+     * 记录入账
+     * 使用 new UserAccountRecordDto(Long accountId, PostStatusEnum postStatus, BigDecimal transAmount, InOrOutEnum inOrOut, AccountBizTypeEnum bizType,
+     *                                 Long bizId, String bizName, String orderNo);
+     * accountId: 账户id
+     * postStatus: WAIT("待入账"),FROZEN("冻结入账")
+     * transAmount: 交易金额
+     * inOrOut: IN("收入"),OUT("支出")
+     * bizType:业务类型
+     * bizId:业务id
+     * bizName:业务名称
+     * orderNo:订单号
+     * @author liweifan
+     * @date 2022-07-20
+     */
+    HttpResponseResult<UserAccountRecord> accountRecord(UserAccountRecordDto accountRecordDto);
+
     /***
-     * 账户变更(账户变更使用该方法,有分布式锁)
+     * 入账结算(入账状态变更
      * @author liweifan
-     * @param: accountRecordDto
+     * @param: recordId     记录id
+     * @param: postStatus   入账状态 RECORDED 已入账 CANCEL 取消
      * @updateTime 2022/4/7 16:40
      * @return: java.lang.Integer
      */
-    HttpResponseResult<UserAccountRecord> accountChange(UserAccountRecordDto accountRecordDto);
+    HttpResponseResult<UserAccountRecord> accountChange(Long recordId, PostStatusEnum postStatus);
     /***
      * 账户统计查询
      * @author liweifan

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentTimeServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.api.feign.MallAdminFeignService;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.UserOrderDetailService;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
@@ -43,6 +44,7 @@ public class StudentTimeServiceImpl extends ServiceImpl<StudentTimeDao, StudentT
         LocalDate toDay = LocalDate.now();
         //查询未记录第一次购买时间的订单
         OrderSearch query = new OrderSearch();
+        query.setOrderClient(ClientEnum.STUDENT.getCode());
         query.setStartTime(LocalDateTime.of(toDay, LocalTime.MIN));
         query.setEndTime(LocalDateTime.of(toDay, LocalTime.MAX));
 

+ 113 - 60
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java

@@ -10,12 +10,14 @@ import com.yonge.cooleshow.biz.dal.entity.UserAccountRecord;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
+import com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.enums.FrozenTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.UserAccountRecordService;
 import com.yonge.cooleshow.biz.dal.vo.res.AccountTotal;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.PostStatusEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.payment.util.DistributedLock;
 import org.redisson.api.RLock;
@@ -64,27 +66,121 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
     }
 
     @Override
-    public HttpResponseResult<UserAccountRecord> accountChange(UserAccountRecordDto accountRecordDto) {
-        if (null == accountRecordDto.getUserId() || null == accountRecordDto.getTransAmount()
-                || null == accountRecordDto.getInOrOut() || null == accountRecordDto.getBizType()) {
-            return HttpResponseResult.failed("缺少参数");
+    public HttpResponseResult<UserAccountRecord> accountRecord(UserAccountRecordDto accountRecordDto) {
+        if (null == accountRecordDto.getInOrOut()
+                || null == accountRecordDto.getPostStatus()
+                || (!PostStatusEnum.WAIT.equals(accountRecordDto.getPostStatus()) && !PostStatusEnum.FROZEN.equals(accountRecordDto.getPostStatus()))
+        ) {
+            throw new BizException("记录入账-入账状态异常: param is {}", JSONObject.toJSONString(accountRecordDto));
         }
 
-        try {
-            HttpResponseResult<UserAccountRecord> res = DistributedLock.of(redissonClient)
-                    .runIfLockToFunction(CacheNameEnum.LOCK_CHANGE_ACCOUNT.getRedisKey(accountRecordDto.getUserId())
-                            , this::doAccountChange, accountRecordDto, 10L);
-            if (null != res) {
-                return res;
-            } else {
-                return HttpResponseResult.failed("账户变更失败");
+        if (null == accountRecordDto.getTransAmount() || null == accountRecordDto.getBizId()
+                || null == accountRecordDto.getBizType()) {
+            throw new BizException("记录入账-缺少入账参数: param is {}", JSONObject.toJSONString(accountRecordDto));
+        }
+        if (BigDecimal.ZERO.compareTo(accountRecordDto.getTransAmount()) < 0) {
+            throw new BizException("记录入账-变动金额不能为负数: param is {}", JSONObject.toJSONString(accountRecordDto));
+        }
+
+        HttpResponseResult<UserAccountRecord> res = DistributedLock.of(redissonClient)
+                .runIfLockToFunction(CacheNameEnum.LOCK_RECORD_ACCOUNT.getRedisKey(accountRecordDto.getAccountId())
+                        , this::doAccountRecord, accountRecordDto, 10L);
+        if (null != res) {
+            return res;
+        } else {
+            throw new BizException("记录入账-插入账户记录失败: param is {}", JSONObject.toJSONString(accountRecordDto));
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    HttpResponseResult<UserAccountRecord> doAccountRecord(UserAccountRecordDto accountRecordDto) {
+        //收入要校验金额
+        if (InOrOutEnum.IN.equals(accountRecordDto.getInOrOut())) {
+            UserOrder userOrder = orderService.getOne(Wrappers.<UserOrder>lambdaQuery()
+                    .eq(UserOrder::getOrderNo, accountRecordDto.getOrderNo()));
+            if (null == userOrder) {
+                throw new BizException("记录入账-未找到入账对应订单信息: param is {}", JSONObject.toJSONString(accountRecordDto));
+            }
+            //收入判断订单金额,所有收入不能大于订单用户付款
+            BigDecimal totalTransAmount = baseMapper.totalTransAmount(accountRecordDto);
+            if (null == totalTransAmount) {
+                totalTransAmount = BigDecimal.ZERO;
+            }
+            //金额校验失败
+            if (null == userOrder || totalTransAmount.add(accountRecordDto.getTransAmount()).compareTo(userOrder.getActualPrice()) > 0) {
+                log.error("记录入账-订单入账总金额大于购买金额: param is {}" + JSONObject.toJSONString(accountRecordDto));
+                accountRecordDto.setErrFlag(1);
+                accountRecordDto.setErrMsg("账户变更异常,订单入账总金额大于购买金额,订单号:" + accountRecordDto.getOrderNo());
+            }
+        } else {
+            //支出 需要判断所有支出金额不能大于账户余额
+            UserAccountVo detail = baseMapper.detail(accountRecordDto.getAccountId());
+            if (detail.getAmountUsable().compareTo(accountRecordDto.getTransAmount()) < 0) {
+                throw new BizException("记录入账-账户余额不足: param is {}", JSONObject.toJSONString(accountRecordDto));
             }
-        } catch (BizException e) {
-            return HttpResponseResult.failed(e.getMessage());
-        } catch (Exception e) {
-            e.printStackTrace();
-            return HttpResponseResult.failed("付款失败");
         }
+        //如果是冻结入账,需要修改主账户冻结金额和可用余额
+        if (PostStatusEnum.FROZEN.equals(accountRecordDto.getPostStatus()) && accountRecordDto.getErrFlag() == 0) {
+            baseMapper.frozenChangeAccount(accountRecordDto.getAccountId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
+        }
+        //插入账户变更记录
+        userAccountRecordService.save(accountRecordDto);
+        return HttpResponseResult.succeed(accountRecordDto);
+    }
+
+    @Override
+    public HttpResponseResult<UserAccountRecord> accountChange(Long recordId, PostStatusEnum postStatus) {
+        if (null == postStatus || null == recordId
+                || (!PostStatusEnum.RECORDED.equals(postStatus) && !PostStatusEnum.CANCEL.equals(postStatus))) {
+            throw new BizException("入账状态变更, 参数异常: recordId is {} postStatus is {}", recordId, postStatus.getCode());
+        }
+        UserAccountRecord param = new UserAccountRecord();
+        param.setId(recordId);
+        param.setPostStatus(postStatus);
+        HttpResponseResult<UserAccountRecord> res = DistributedLock.of(redissonClient)
+                .runIfLockToFunction(CacheNameEnum.LOCK_CHANGE_ACCOUNT.getRedisKey(recordId)
+                        , this::doAccountChange, param, 10L);
+        if (null != res) {
+            return res;
+        } else {
+            throw new BizException("记录变更-账户记录变更失败: param is {}", JSONObject.toJSONString(param));
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResponseResult<UserAccountRecord> doAccountChange(UserAccountRecord param) {
+        UserAccountRecordVo detail = userAccountRecordService.detail(param.getId());
+        if (null == detail) {
+            throw new BizException("入账状态变更, 未找到记录信息: recordId is {} postStatus is {}", param.getId(), param.getPostStatus().getCode());
+        }
+        detail.setPostStatus(param.getPostStatus());
+        //待入账
+        if (PostStatusEnum.WAIT.equals(detail.getPostStatus())) {
+            if (PostStatusEnum.RECORDED.equals(param.getPostStatus())) {
+                //正常入账
+                baseMapper.changeAccount(detail.getAccountId(), detail.getTransAmount(), detail.getInOrOut().getCode());
+            } else if (PostStatusEnum.CANCEL.equals(param.getPostStatus())) {
+                //取消入账
+            }
+        } else if (PostStatusEnum.FROZEN.equals(detail.getPostStatus())) {
+            if (PostStatusEnum.RECORDED.equals(param.getPostStatus())) {
+                //冻结后正常入账
+                baseMapper.frozenDeductChangeAccount(detail.getAccountId(), detail.getTransAmount(), detail.getInOrOut().getCode());
+            } else if (PostStatusEnum.CANCEL.equals(param.getPostStatus())) {
+                //冻结后取消入账
+                baseMapper.frozenBackChangeAccount(detail.getAccountId(), detail.getTransAmount(), detail.getInOrOut().getCode());
+            }
+        }
+
+        UserAccountVo accountVo = detail(detail.getAccountId());
+        if (accountVo.getAmountTotal().doubleValue() < 0
+                || accountVo.getAmountUsable().doubleValue() < 0 || accountVo.getAmountFrozen().doubleValue() < 0) {
+            throw new BizException("账户变更失败");
+        }
+        //插入账户变更记录
+        detail.setAccountBalance(accountVo.getAmountUsable());
+        userAccountRecordService.updateById(detail);
+        return HttpResponseResult.succeed(detail);
     }
 
     @Override
@@ -134,48 +230,5 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
         return HttpResponseResult.succeed(total);
     }
 
-    @Transactional(rollbackFor = Exception.class)
-    HttpResponseResult<UserAccountRecord> doAccountChange(UserAccountRecordDto accountRecordDto) {
-        //收入要校验金额
-        if (InOrOutEnum.IN.equals(accountRecordDto.getInOrOut())) {
-            UserOrder userOrder = orderService.getOne(Wrappers.<UserOrder>lambdaQuery()
-                    .eq(UserOrder::getOrderNo, accountRecordDto.getOrderNo()));
-
-            BigDecimal totalTransAmount = baseMapper.totalTransAmount(accountRecordDto);
-            if (null == totalTransAmount) {
-                totalTransAmount = BigDecimal.ZERO;
-            }
-            //金额校验失败,入账为冻结金额
-            if (null == userOrder || totalTransAmount.add(accountRecordDto.getTransAmount()).compareTo(userOrder.getActualPrice()) > 0) {
-                log.error("账户变更失败,param is " + JSONObject.toJSONString(accountRecordDto));
-                accountRecordDto.setErrFlag(1);
-                accountRecordDto.setErrMsg("账户变更异常,订单入账总金额大于购买金额,订单号:" + accountRecordDto.getOrderNo());
-            }
-        }
-        if (accountRecordDto.getErrFlag() == 0) {
-            if (FrozenTypeEnum.FROZEN.equals(accountRecordDto.getFrozenType())) {
-                baseMapper.frozenChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
-            } else if (FrozenTypeEnum.FROZEN_DEDUCT.equals(accountRecordDto.getFrozenType())) {
-                baseMapper.frozenDeductChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
-            } else if (FrozenTypeEnum.FROZEN_BACK.equals(accountRecordDto.getFrozenType())) {
-                baseMapper.frozenBackChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
-            } else {
-                baseMapper.changeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
-            }
-        }
-
-        UserAccountVo detail = detail(accountRecordDto.getUserId());
-        if (detail.getAmountTotal().doubleValue() < 0
-                || detail.getAmountUsable().doubleValue() < 0 || detail.getAmountFrozen().doubleValue() < 0) {
-            throw new BizException("账户变更失败");
-        }
 
-        if (accountRecordDto.getSaveRecord()) {
-            //插入账户变更记录
-            accountRecordDto.setAccountId(accountRecordDto.getUserId());
-            accountRecordDto.setAccountBalance(detail.getAmountUsable());
-            userAccountRecordService.save(accountRecordDto);
-        }
-        return HttpResponseResult.succeed(accountRecordDto);
-    }
 }

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

@@ -515,6 +515,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         userOrder.setUserId(orderReq.getUserId());
         userOrder.setOrderName(orderReq.getOrderName());
         userOrder.setOrderType(orderReq.getOrderType());
+        userOrder.setOrderClient(orderReq.getOrderClient());
 
         String desc = "";
         if (StringUtil.isEmpty(orderReq.getOrderDesc())) {

+ 1 - 9
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserAccountMapper.xml

@@ -142,18 +142,10 @@
     <select id="totalTransAmount" resultType="java.math.BigDecimal">
         select sum(trans_amount_) from user_cash_account_record
         <where>
-            <if test="param.accountId != null">
-                and account_id_ = #{param.accountId}
-            </if>
-            <if test="param.inOrOut != null">
-                and in_or_out_ = #{param.inOrOut}
-            </if>
+            and post_status_ in ('WAIT','FROZEN','RECORDED') and in_or_out_ = 'IN' and err_flag_ = 0
             <if test="param.orderNo != null and param.orderNo != ''">
                 and order_no_ = #{param.orderNo}
             </if>
-            <if test="param.bizType != null">
-                and biz_type_ = #{param.bizType}
-            </if>
         </where>
     </select>
 </mapper>

+ 78 - 24
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserAccountRecordMapper.xml

@@ -7,9 +7,11 @@
         <result column="trans_amount_" property="transAmount" />
         <result column="account_balance_" property="accountBalance" />
         <result column="in_or_out_" property="inOrOut" />
+        <result column="post_status_" property="postStatus" />
         <result column="biz_type_" property="bizType" />
         <result column="biz_id_" property="bizId" />
         <result column="biz_name_" property="bizName" />
+        <result column="order_no_" property="orderNo" />
         <result column="create_time_" property="createTime" />
     </resultMap>
 
@@ -20,15 +22,81 @@
         , t.trans_amount_ as transAmount
         , t.account_balance_ as accountBalance
         , t.in_or_out_ as inOrOut
+        , t.post_status_ as postStatus
         , t.biz_type_ as bizType
         , t.biz_id_ as bizId
         , t.biz_name_ as bizName
+        , t.order_no_ as orderNo
         , t.create_time_ as createTime
         </sql>
 
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo">
         SELECT
             <include refid="baseColumns"/>
+        FROM user_cash_account_record t
+        where t.id_ = #{id}
+    </select>
+
+    <sql id="selectCondition">
+        and t.err_flag_ = 0
+        <if test="null != param.orderNo and '' != param.orderNo">
+            AND t.order_no_ LIKE CONCAT('%', #{param.orderNo}, '%')
+        </if>
+
+        <if test="null != param.userId">
+            AND t.account_id_ = #{param.userId}
+        </if>
+        <if test="null != param.inOrOut">
+            AND t.in_or_out_ = #{param.inOrOut}
+        </if>
+        <if test="null != param.postStatus">
+            AND t.post_status_ = #{param.postStatus}
+        </if>
+        <if test="null != param.bizType">
+            AND t.biz_type_ = #{param.bizType}
+        </if>
+        <if test="param.startTime !=null">
+            <![CDATA[AND t.create_time_ >= #{param.startTime} ]]>
+        </if>
+        <if test="param.endTime !=null">
+            <![CDATA[AND t.create_time_ < #{param.endTime} ]]>
+        </if>
+    </sql>
+
+    <sql id="selectSql">
+        select
+            <include refid="baseColumns" />,
+            DATE_FORMAT(t.create_time_,'%m-%d') as timeDay,
+            a.start_time_ as startTime,
+            a.end_time_ as endTime
+        from user_cash_account_record t
+        left join sys_user u on t.account_id_ = u.id_
+        left join course_schedule a on t.biz_id_ = a.id_ and t.biz_type_ in ('PRACTICE','LIVE')
+        <where>
+            <if test="null != param.search and '' != param.search">
+                AND (
+                u.user_id_ LIKE CONCAT('%', #{param.search}, '%') or
+                u.username_ LIKE CONCAT('%', #{param.search}, '%') or
+                u.phone_ LIKE CONCAT('%', #{param.search}, '%')
+                )
+            </if>
+            <include refid="selectCondition"/>
+        </where>
+        order by t.create_time_ desc
+    </sql>
+
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo">
+        <include refid="selectSql"/>
+    </select>
+
+    <select id="selectAllPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo">
+        <include refid="selectSql"/>
+    </select>
+
+
+    <select id="appDetail" resultType="com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo">
+        SELECT
+            <include refid="baseColumns"/>
         FROM (
             select
                 max(t.id_) as id_,
@@ -36,6 +104,7 @@
                 sum(t.trans_amount_) as trans_amount_,
                 if(t.in_or_out_ = 'OUT', min(t.account_balance_), max(t.account_balance_)) as account_balance_,
                 t.in_or_out_,
+                t.post_status_,
                 t.biz_type_,
                 t.biz_id_,
                 t.biz_name_,
@@ -43,9 +112,9 @@
             from user_cash_account_record t
             where t.biz_type_ = 'LIVE' and exists(
                 select 1 from user_cash_account_record t1
-                where t1.biz_id_ = t.biz_id_ and t1.biz_type_ = 'LIVE' and  t1.id_ = #{id}
+                where t1.biz_id_ = t.biz_id_ and t1.post_status_ = t.post_status_ and t1.biz_type_ = 'LIVE' and  t1.id_ = #{id}
             )
-            group by t.account_id_,t.in_or_out_,t.biz_type_,biz_id_,biz_name_
+            group by t.account_id_,t.in_or_out_,t.post_status_,t.biz_type_,biz_id_,biz_name_
             union all
             select
                 t.id_,
@@ -53,6 +122,7 @@
                 t.trans_amount_,
                 t.account_balance_,
                 t.in_or_out_,
+                t.post_status_,
                 t.biz_type_,
                 t.biz_id_,
                 t.biz_name_,
@@ -61,26 +131,8 @@
             where t.biz_type_ != 'LIVE' and t.id_ = #{id}
         ) t
     </select>
-    
-    <sql id="selectCondition">
-        <if test="null != param.userId">
-            AND t.account_id_ = #{param.userId}
-        </if>
-        <if test="null != param.inOrOut">
-            AND t.in_or_out_ = #{param.inOrOut}
-        </if>
-        <if test="null != param.bizType">
-            AND t.biz_type_ = #{param.bizType}
-        </if>
-        <if test="param.startTime !=null">
-            <![CDATA[AND t.create_time_ >= #{param.startTime} ]]>
-        </if>
-        <if test="param.endTime !=null">
-            <![CDATA[AND t.create_time_ < #{param.endTime} ]]>
-        </if>
-    </sql>
 
-    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo">
+    <select id="appSelectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserAccountRecordVo">
         SELECT
             <include refid="baseColumns" />,
             DATE_FORMAT(t.create_time_,'%m-%d') as timeDay,
@@ -93,6 +145,7 @@
                 sum(t.trans_amount_) as trans_amount_,
                 if(t.in_or_out_ = 'OUT', min(t.account_balance_), max(t.account_balance_)) as account_balance_,
                 t.in_or_out_,
+                t.post_status_,
                 t.biz_type_,
                 t.biz_id_,
                 t.biz_name_,
@@ -100,7 +153,7 @@
             from user_cash_account_record t
             where t.biz_type_ = 'LIVE'
             <include refid="selectCondition"/>
-            group by t.account_id_,t.in_or_out_,t.biz_type_,biz_id_,biz_name_
+            group by t.account_id_,t.in_or_out_,t.post_status_,t.biz_type_,biz_id_,biz_name_
             union all
             select
                 t.id_,
@@ -108,6 +161,7 @@
                 t.trans_amount_,
                 t.account_balance_,
                 t.in_or_out_,
+                t.post_status_,
                 t.biz_type_,
                 t.biz_id_,
                 t.biz_name_,
@@ -123,7 +177,7 @@
     <select id="selectMonthDecimal" resultType="java.math.BigDecimal">
         select  sum(trans_amount_)
         from user_cash_account_record
-        where in_or_out_ = 'IN' and account_id_ = #{userId}
+        where in_or_out_ = 'IN' and post_status_ = 'RECORDED' and account_id_ = #{userId}
         and date_format(create_time_,'%Y-%m') = date_format(now(),'%Y-%m')
     </select>
 
@@ -134,7 +188,7 @@
             sum(ucar.trans_amount_)
         from user_cash_account_record ucar
         left join sys_user su on ucar.account_id_ = su.id_
-            where ucar.create_time_ > date_format(now(),'%Y-%m-%d')
+        where post_status_ = 'RECORDED' and ucar.create_time_ > date_format(now(),'%Y-%m-%d')
         group by su.id_, su.phone_
     </select>
 </mapper>

+ 9 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -6,6 +6,7 @@
         <result column="order_no_" property="orderNo"/>
         <result column="user_id_" property="userId"/>
         <result column="order_name_" property="orderName"/>
+        <result column="order_client_" property="orderClient"/>
         <result column="order_type_" property="orderType"/>
         <result column="order_desc_" property="orderDesc"/>
         <result column="status_" property="status"/>
@@ -27,6 +28,7 @@
         , t.order_no_ as orderNo
         , t.user_id_ as userId
         , t.order_name_ as orderName
+        , t.order_client_ as orderClient
         , t.order_type_ as orderType
         , t.order_desc_ as orderDesc
         , t.status_ as status
@@ -113,6 +115,9 @@
         left join sys_user u on t.user_id_ = u.id_
         <where>
             u.del_flag_ = 0
+            <if test="null != param.orderClient and '' != param.orderClient">
+                AND t.order_client_ = #{param.orderClient}
+            </if>
             <if test="null != param.search and '' != param.search">
                 AND (
                 t.user_id_ LIKE CONCAT('%', #{param.search}, '%') or
@@ -200,6 +205,9 @@
         left join user_order_payment p on t.order_no_ = p.order_no_ and (p.status_ = 'pending' or p.status_ = 'succeeded')
         where t.status_ in ('WAIT_PAY','PAYING')
         and t.user_id_ = #{param.userId}
+        <if test="null != param.orderClient and '' != param.orderClient">
+            AND t.order_client_ = #{param.orderClient}
+        </if>
         and exists (
             select 1 from user_order_detail d where t.order_no_ = d.order_no_
             and d.good_type_ = #{param.goodType}
@@ -218,6 +226,7 @@
         FROM user_order t
         left join student_time st on t.user_id_ = st.user_id_
         where t.status_ = 'PAID'
+        and t.order_client_ = #{param.orderClient}
         and exists (
             select 1 from user_order_detail od where t.order_no_ = od.order_no_
             and (

+ 2 - 1
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
@@ -64,7 +65,7 @@ public class UserOrderController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         orderReq.setUserId(user.getId());
-
+        orderReq.setOrderClient(ClientEnum.STUDENT);
         try {
             HttpResponseResult<UserOrder> res = DistributedLock.of(redissonClient)
                     .runIfLockToFunction(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(user.getId())

+ 2 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserOrderController.java

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.toolset.payment.util.DistributedLock;
@@ -66,7 +67,7 @@ public class UserOrderController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         orderReq.setUserId(user.getId());
-
+        orderReq.setOrderClient(ClientEnum.TEACHER);
         try {
             HttpResponseResult<UserOrder> res = DistributedLock.of(redissonClient)
                     .runIfLockToFunction(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(user.getId())

+ 20 - 20
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/SmsCodeController.java

@@ -31,27 +31,27 @@ public class SmsCodeController extends BaseController {
     @Autowired
     private SmsCodeService smsCodeService;
     @Autowired
-    private RedisTemplate<String,String> redisTemplate;
+    private RedisTemplate<String, String> redisTemplate;
 
     @ApiOperation(value = "发送登录短信验证码")
-    @ApiImplicitParams({  @ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String"),
-                          @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required = true, dataType = "String") })
+    @ApiImplicitParams({@ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required = true, dataType = "String")})
     @PostMapping(value = "/sendSmsCode")
-    public Object sendLoginVerifyCode(String mobile,String type) throws Exception {
-        smsCodeService.sendValidCode(mobile, type, ClientEnum.STUDENT);
+    public Object sendLoginVerifyCode(String mobile, String type) throws Exception {
+        smsCodeService.sendValidCode(mobile, type, ClientEnum.WEBSITE);
         return succeed();
     }
 
     @ApiOperation(value = "校验短信验证码")
-    @ApiImplicitParams({ @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String"),
-                         @ApiImplicitParam(name = "code", value = "短信验证码", required = true, dataType = "String"),
-                         @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required = true, dataType = "String") })
+    @ApiImplicitParams({@ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "code", value = "短信验证码", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required = true, dataType = "String")})
     @PostMapping(value = "/verifySmsCode")
-    public Object verifySmsCode(String phone,String code,String type) {
-        if(StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)){
+    public Object verifySmsCode(String phone, String code, String type) {
+        if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)) {
             return failed(SecurityConstants.PARAM_VERIFY_EXCEPTION);
         }
-        if(smsCodeService.verifyValidCode(phone, code, type)){
+        if (smsCodeService.verifyValidCode(phone, code, type)) {
             return succeed();
         }
         return failed("验证码校验失败");
@@ -59,15 +59,15 @@ public class SmsCodeController extends BaseController {
 
     @PostMapping(value = "/verifyImageCode")
     @ApiOperation("校验登录图形验证码")
-    @ApiImplicitParams({ @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "code", value = "验证码", required = true, dataType = "String") })
-    public Object verifyImageCode(String phone,String code){
-        if(StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)){
+    @ApiImplicitParams({@ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "code", value = "验证码", required = true, dataType = "String")})
+    public Object verifyImageCode(String phone, String code) {
+        if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)) {
             return failed(SecurityConstants.PARAM_VERIFY_EXCEPTION);
         }
         String redisKey = MessageTypeEnum.KAPTCHA_SESSION_KEY + phone;
-        if(redisTemplate.hasKey(redisKey)){
-            if(StringUtils.equalsIgnoreCase(redisTemplate.opsForValue().get(redisKey),code)){
+        if (redisTemplate.hasKey(redisKey)) {
+            if (StringUtils.equalsIgnoreCase(redisTemplate.opsForValue().get(redisKey), code)) {
                 return succeed();
             }
         }
@@ -77,12 +77,12 @@ public class SmsCodeController extends BaseController {
     @RequestMapping("/getImageCode")
     @ApiOperation("获取登录图片验证码")
     @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String")
-    public void getLoginImage(HttpServletRequest request, HttpServletResponse response,String phone) throws Exception {
-        if(StringUtils.isEmpty(phone)){
+    public void getLoginImage(HttpServletRequest request, HttpServletResponse response, String phone) throws Exception {
+        if (StringUtils.isEmpty(phone)) {
             throw new BizException("请输入手机号");
         }
         SpecCaptcha specCaptcha = new SpecCaptcha(125, 45, 4);
-        redisTemplate.opsForValue().set(MessageTypeEnum.KAPTCHA_SESSION_KEY + phone,specCaptcha.text(),3, TimeUnit.MINUTES);
+        redisTemplate.opsForValue().set(MessageTypeEnum.KAPTCHA_SESSION_KEY + phone, specCaptcha.text(), 3, TimeUnit.MINUTES);
         CaptchaUtil.out(specCaptcha, request, response);
     }
 }