Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

zouxuan 3 tahun lalu
induk
melakukan
25bd247813
77 mengubah file dengan 1184 tambahan dan 291 penghapusan
  1. 1 1
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/MallAdminFeignService.java
  2. 6 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java
  3. 6 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java
  4. 7 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  5. 21 0
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  6. 4 0
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  7. 1 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/config/EnumConverter.java
  8. 9 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
  9. 4 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/service/impl/RedisIdGeneratorService.java
  10. 3 3
      cooleshow-mall/mall-admin/src/main/resources/config/mybatis/OmsOrderDao.xml
  11. 2 2
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  12. 2 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/CourseRemindTask.java
  13. 2 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/NoRepliedTeacherTask.java
  14. 11 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundController.java
  15. 2 3
      cooleshow-user/user-biz/pom.xml
  16. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/LiveRoomVideoDao.java
  17. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysConfigDao.java
  18. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserBankCardDao.java
  19. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/EmployeeDto.java
  20. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/AuthOperaReq.java
  21. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TeacherApplyDetailReq.java
  22. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/EmployeeSearch.java
  23. 10 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/StudentSearch.java
  24. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Teacher.java
  25. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserBankCard.java
  26. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  27. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/YesOrNoEnum.java
  28. 0 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java
  29. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomVideoService.java
  30. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysConfigService.java
  31. 18 31
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  32. 14 16
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java
  33. 22 18
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  34. 71 31
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java
  35. 56 29
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomVideoServiceImpl.java
  36. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SmsCodeServiceImpl.java
  37. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysConfigServiceImpl.java
  38. 19 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMessageServiceImpl.java
  39. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserBankCardServiceImpl.java
  40. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java
  41. 7 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundServiceImpl.java
  42. 23 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java
  43. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupVideoVo.java
  44. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/EmployeeVo.java
  45. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicianAuthEntryRecordVo.java
  46. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFens.java
  47. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFollow.java
  48. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomeVo.java
  49. 9 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentVo.java
  50. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherAuthEntryRecordVo.java
  51. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeVo.java
  52. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherVo.java
  53. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wordfilter/EndType.java
  54. 48 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wordfilter/FlagIndex.java
  55. 249 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wordfilter/WordContext.java
  56. 216 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wordfilter/WordFilter.java
  57. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wordfilter/WordType.java
  58. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wordfilter/annotation/CheckWord.java
  59. 42 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wordfilter/annotation/CheckWordAspect.java
  60. 2 2
      cooleshow-user/user-biz/src/main/resources/config/contracts/latest_contract_template.ftl
  61. 11 4
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml
  62. 28 9
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  63. 4 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/LiveRoomVideoMapper.xml
  64. 21 18
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  65. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  66. 5 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SysConfigMapper.xml
  67. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  68. 5 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserBankCardMapper.xml
  69. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SmsCodeController.java
  70. 1 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysUserContractRecordController.java
  71. 0 8
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/LiveRoomVideoController.java
  72. 0 1
      toolset/pom.xml
  73. 1 1
      toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/message/provider/AwSmsPlugin.java
  74. 14 2
      toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/message/provider/JiguangPushPlugin.java
  75. 0 29
      toolset/toolset-emoji/pom.xml
  76. 0 21
      toolset/toolset-emoji/src/main/java/com/yonge/toolset/emoji/serializer/EmojiSerializer.java
  77. 0 8
      toolset/toolset-mybatis/src/main/java/com/yonge/toolset/mybatis/config/MyBatisPlusConfig.java

+ 1 - 1
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/MallAdminFeignService.java

@@ -17,7 +17,7 @@ import java.util.Map;
 public interface MallAdminFeignService {
 
 
-    @PostMapping(value = "/order/userOrderInfoList")
+    @PostMapping(value = "/feign-client/order/userOrderInfoList")
     /***
      * 远程查询订单成功的用户和时间信息
      * @author liweifan

+ 6 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/dal/dao/SysUserDao.java

@@ -153,6 +153,12 @@ public interface SysUserDao extends BaseDAO<Long, SysUser> {
 
     List<SysUser> queryEmployeeList(SysUserQueryInfo queryInfo);
 
+    /**
+     * 用户注销
+     * @param userId
+     */
+    void logoffById(@Param("userId")Long userId);
+
     void updateImGroupMember(@Param("userId") Long userId,
                              @Param("username") String username,
                              @Param("avatar") String avatar);

+ 6 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java

@@ -193,4 +193,10 @@ public interface SysUserService extends BaseService<Long, SysUser> {
      * @return
      */
     boolean verifyQrCode(String phone, String qrCode);
+
+    /**
+     * 用户注销
+     * @param id
+     */
+    void logoffById(Long id);
 }

+ 7 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java

@@ -266,4 +266,11 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
         return false;
     }
 
+    @Override
+    public void logoffById(Long id) {
+        //移动用户到注销表
+        sysUserDao.logoffById(id);
+        sysUserDao.delete(id);
+    }
+
 }

+ 21 - 0
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java

@@ -17,6 +17,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -389,6 +390,26 @@ public class UserController extends BaseController {
         return failed();
     }
 
+    @ApiOperation(value = "用户注销")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "smsCode", value = "短信验证码", paramType = "path", dataType = "long", required = true),
+    })
+    @PostMapping(value = "/logoff/{smsCode}")
+    public HttpResponseResult<Boolean> logoff(@PathVariable("smsCode") String smsCode) {
+        AuthUser authUser = SecurityUtils.getUser();
+        SysUser sysUser = sysUserService.get(authUser.getUserId());
+        if (sysUser == null) {
+            return failed("用户不存在");
+        }
+        // 验证码验证
+        boolean b = smsCodeService.verifyValidCode(sysUser.getPhone(), smsCode, "SMS_VERIFY_CODE_LOGOFF");
+        if (!b) {
+            throw new BadCredentialsException("验证码校验失败");
+        }
+        sysUserService.logoffById(sysUser.getId());
+        return succeed(true);
+    }
+
     @ApiOperation(value = "刷新token")
     @PostMapping(value = "/refreshImToken")
     public Object refreshImToken() {

+ 4 - 0
cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -269,6 +269,10 @@
         UPDATE im_user_friend SET friend_avatar_ = #{avatar},friend_nickname_ = #{username} WHERE friend_id_ = #{userId}
     </update>
 
+    <update id="logoffById">
+        insert into sys_user_off select * from sys_user where id_ = ${userId}
+    </update>
+
     <select id="queryEmployeeList" resultMap="SysUser">
         select  su.*
         from employee e

+ 1 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/config/EnumConverter.java

@@ -19,7 +19,7 @@ public class EnumConverter<T extends BaseEnum<?, ?>> implements Converter<String
 	private T getEnum(Class<T> targerType, String source) {
 		for (T en : targerType.getEnumConstants()) {
 			if (en.getCode() instanceof Integer) {
-				if ((Integer) en.getCode() == Integer.parseInt(source)) {
+				if (en.getCode().equals(Integer.parseInt(source))) {
 					return en;
 				}
 			} else {

+ 9 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -216,4 +216,13 @@ public interface SysConfigConstant {
      */
     String HOMEWORK_EXPIRE_TIME = "homework_expire_time";
 
+    /**
+     * 敏感词-黑名单
+     */
+    String BLACK_LIST = "black_list";
+
+    /**
+     * 敏感词-白名单
+     */
+    String WHITE_LIST = "white_list";
 }

+ 4 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/service/impl/RedisIdGeneratorService.java

@@ -32,6 +32,9 @@ public class RedisIdGeneratorService implements IdGeneratorService {
 	@Value("${message.debugMode}")
 	private boolean debugMode;
 
+	@Value("${message.authCode}")
+	private boolean authCode;
+
 	/**
 	 * @Description
 	 * @author butterfly
@@ -95,7 +98,7 @@ public class RedisIdGeneratorService implements IdGeneratorService {
 
 	@Override
 	public boolean verifyValidCode(String mobile, String authCode,String keyEnum) {
-		if (debugMode) {
+		if (debugMode || this.authCode) {
 			if (defaultPwd.equals(authCode)) {
 				return true;
 			}

+ 3 - 3
cooleshow-mall/mall-admin/src/main/resources/config/mybatis/OmsOrderDao.xml

@@ -105,14 +105,14 @@
     <select id="getUserOrderInfoList" resultType="java.util.Map">
         select
             member_id as userId,
-            min(receive_time) as receiveTime
+            min(payment_time) as receiveTime
         from oms_order
         <where>
             <if test="startTime != null and startTime !=''">
-                and receive_time &gt;= #{startTime}
+                and payment_time &gt;= #{startTime}
             </if>
             <if test="endTime != null and endTime != ''">
-                and receive_time &lt;= #{endTime}
+                and payment_time &lt;= #{endTime}
             </if>
             <if test="userIdList != null and userIdList.size() != 0">
                 and member_id in

+ 2 - 2
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -619,13 +619,13 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         BaseResult<Payment> executePayment = paymentClient.executePayment(payment);
         if (!executePayment.getStatus()) {
             // 异常将取消订单
-            cancelOrder(detail.getId(), executePayment.getMsg(), null);
+            // cancelOrder(detail.getId(), executePayment.getMsg(), null);
             throw new BizException(executePayment.getMsg());
         }
         if (!executePayment.getData()
                            .getPayAmt()
                            .equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) {
-            cancelOrder(detail.getId(), "订单金额和实际支付金额不符", null);
+            // cancelOrder(detail.getId(), "订单金额和实际支付金额不符", null);
             throw new BizException("订单金额和实际支付金额不符");
         }
 

+ 2 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/CourseRemindTask.java

@@ -4,11 +4,13 @@ import com.yonge.cooleshow.api.feign.TeacherFeignService;
 import com.yonge.cooleshow.task.core.BaseTask;
 import com.yonge.cooleshow.task.core.TaskException;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
 /**
  * @Author: cy
  * @Date: 2022/5/6
  */
+@Service
 public class CourseRemindTask extends BaseTask {
 
     @Autowired

+ 2 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/NoRepliedTeacherTask.java

@@ -4,11 +4,13 @@ import com.yonge.cooleshow.api.feign.StudentFeignService;
 import com.yonge.cooleshow.task.core.BaseTask;
 import com.yonge.cooleshow.task.core.TaskException;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
 /**
  * @Author: cy
  * @Date: 2022/5/6
  */
+@Service
 public class NoRepliedTeacherTask extends BaseTask {
 
     @Autowired

+ 11 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundController.java

@@ -62,4 +62,15 @@ public class UserOrderRefundController extends BaseController {
 		}
 		return userOrderRefundService.doAuth(authOperaReq, user);
 	}
+
+	@PostMapping("/orderRefund")
+	@ApiOperation(value = "直接退款", notes = "传入authOperaReq")
+	@PreAuthorize("@pcs.hasPermissions('userOrderRefunds/orderRefund')")
+	public HttpResponseResult<UserOrderRefundBill> orderRefund(String orderNo, String reason) throws Exception {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (user == null || null == user.getId()) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		return userOrderRefundService.orderRefund(orderNo, reason);
+	}
 }

+ 2 - 3
cooleshow-user/user-biz/pom.xml

@@ -75,9 +75,8 @@
         </dependency>
 
         <dependency>
-            <groupId>com.yonge.toolset</groupId>
-            <artifactId>toolset-emoji</artifactId>
-            <version>${project.toolset.version}</version>
+            <groupId>com.vdurmont</groupId>
+            <artifactId>emoji-java</artifactId>
         </dependency>
 
         <dependency>

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/LiveRoomVideoDao.java

@@ -16,5 +16,7 @@ public interface LiveRoomVideoDao extends BaseMapper<LiveRoomVideo> {
 
     int insertBatch(@Param("entities") List<LiveRoomVideo> entities);
 
+    LiveRoomVideo getLastRecord(@Param("roomId") String roomId, @Param("recordId") String recordId);
+
 }
 

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysConfigDao.java

@@ -28,4 +28,6 @@ public interface SysConfigDao extends BaseDAO<Long, SysConfig> {
     String findConfigValue(String paramName);
 
     void batchUpdate(@Param("configList") List<SysConfig> configList);
+
+    void updateByName(@Param("paramName") String paramName, @Param("paramValue") String paramValue);
 }

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserBankCardDao.java

@@ -50,5 +50,13 @@ public interface UserBankCardDao extends BaseMapper<UserBankCard>{
 	 * @updateTime 2022/4/14 16:36
 	 * @return: java.lang.Integer
 	 */
+	Integer deleteById(@Param("id") Long id);
+	/***
+	 * 删除用户所有银行卡
+	 * @author liweifan
+	 * @param: userId
+	 * @updateTime 2022/4/14 16:36
+	 * @return: java.lang.Integer
+	 */
     Integer deleteByUserId(@Param("userId") Long userId);
 }

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/EmployeeDto.java

@@ -51,10 +51,17 @@ public class EmployeeDto extends Employee{
         return gender;
     }
 
-    public void setGender(GenderEnum gender) {
+    public void setGender(GenderEnum gender){
         this.gender = gender;
     }
 
+    public void setGender(Object gender) {
+        try {
+            GenderEnum genderEnum = GenderEnum.valueOf(Integer.parseInt(gender.toString()));
+            this.gender = genderEnum;
+        }catch (Exception e){}
+    }
+
     public String getPhone() {
         return phone;
     }

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

@@ -23,6 +23,8 @@ public class AuthOperaReq {
     @NotBlank(message = "请说明审核理由")
     @ApiModelProperty(value = "审核理由", required = true)
     private String reason;
+    @ApiModelProperty(value = "用户id", hidden = true)
+    private Long userId;
 
     public String getId() {
         return id;
@@ -47,4 +49,12 @@ public class AuthOperaReq {
     public void setReason(String reason) {
         this.reason = reason;
     }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
 }

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TeacherApplyDetailReq.java

@@ -68,10 +68,17 @@ public class TeacherApplyDetailReq implements Serializable {
         return gender;
     }
 
-    public void setGender(GenderEnum gender) {
+    public void setGender(GenderEnum gender){
         this.gender = gender;
     }
 
+    public void setGender(Object gender) {
+        try {
+            GenderEnum genderEnum = GenderEnum.valueOf(Integer.parseInt(gender.toString()));
+            this.gender = genderEnum;
+        }catch (Exception e){}
+    }
+
     public Date getBirthdate() {
         return birthdate;
     }

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/EmployeeSearch.java

@@ -45,10 +45,17 @@ public class EmployeeSearch extends QueryInfo{
         return gender;
     }
 
-    public void setGender(GenderEnum gender) {
+    public void setGender(GenderEnum gender){
         this.gender = gender;
     }
 
+    public void setGender(Object gender) {
+        try {
+            GenderEnum genderEnum = GenderEnum.valueOf(Integer.parseInt(gender.toString()));
+            this.gender = genderEnum;
+        }catch (Exception e){}
+    }
+
     public String getSubjectIdList() {
         return subjectIdList;
     }

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

@@ -45,10 +45,17 @@ public class StudentSearch extends QueryInfo{
         return gender;
     }
 
-    public void setGender(GenderEnum gender) {
+    public void setGender(GenderEnum gender){
         this.gender = gender;
     }
 
+    public void setGender(Object gender) {
+        try {
+            GenderEnum genderEnum = GenderEnum.valueOf(Integer.parseInt(gender.toString()));
+            this.gender = genderEnum;
+        }catch (Exception e){}
+    }
+
     public String getSubjectId() {
         return subjectId;
     }
@@ -61,8 +68,8 @@ public class StudentSearch extends QueryInfo{
         return isVip;
     }
 
-    public void setIsVip(YesOrNoEnum isVip) {
-        this.isVip = isVip;
+    public void setIsVip(Integer isVip) {
+        this.isVip = YesOrNoEnum.valueOf(isVip);
     }
 
     public Date getStartTime() {

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Teacher.java

@@ -128,6 +128,9 @@ public class Teacher implements Serializable {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date liveDate;
+    @ApiModelProperty("对应user表用户编号 ")
+    @TableField(value = "browse_")
+    private Integer browse;
     @ApiModelProperty("备注 ")
 	@TableField(value = "memo_")
     private String memo;
@@ -299,4 +302,12 @@ public class Teacher implements Serializable {
     public void setLiveDate(Date liveDate) {
         this.liveDate = liveDate;
     }
+
+    public Integer getBrowse() {
+        return browse;
+    }
+
+    public void setBrowse(Integer browse) {
+        this.browse = browse;
+    }
 }

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserBankCard.java

@@ -58,6 +58,7 @@ public class UserBankCard implements Serializable {
     @ApiModelProperty("逻辑删除 ")
     @TableField(value = "del_flag_")
     private Boolean delFlag;
+
 	public Long getId() {
         return id;
     }

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

@@ -5,6 +5,7 @@ import com.yonge.toolset.base.enums.BaseEnum;
 
 public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     SMS_VERIFY_CODE_LOGIN("验证码登录"),
+    SMS_VERIFY_CODE_LOGOFF("用户注销"),
     SMS_VERIFY_CODE_REGISTER("验证码注册"),
     SMS_VERIFY_CODE_UPDATE_PSW("密码修改"),
     SMS_VERIFY_CODE_UPDATE_PHONE("修改手机号"),

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/YesOrNoEnum.java

@@ -23,4 +23,14 @@ public enum YesOrNoEnum implements BaseEnum<Integer, YesOrNoEnum> {
     public Integer getCode() {
         return this.code;
     }
+
+    public static YesOrNoEnum valueOf(Integer code) {
+    	YesOrNoEnum[] values = YesOrNoEnum.values();
+        for (YesOrNoEnum value : values) {
+            if(value.getCode().equals(code)){
+                return value;
+            }
+        }
+        return null;
+    }
 }

+ 0 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java

@@ -156,14 +156,6 @@ public interface CourseGroupService extends IService<CourseGroup> {
     void opsCourseGroup();
 
     /***
-     * 直播课退款单-创建前
-     * @param: refundReq
-     * @updateTime 2022/5/9 15:11
-     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes>
-     */
-    HttpResponseResult<RefundCreateRes> refundCreate(OrderRefundReq refundReq);
-
-    /***
      * 直播课退款单-创建后
      * @param: userOrderRefund
      * @updateTime 2022/5/9 15:11

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomVideoService.java

@@ -24,6 +24,9 @@ public interface LiveRoomVideoService extends IService<LiveRoomVideo> {
      */
     List<LiveRoomVideo> queryVideo(String roomUid);
 
+    /**
+     * 云端录制回调
+     */
     void recordSync(RecordNotify recordNotify);
 }
 

+ 3 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysConfigService.java

@@ -15,7 +15,7 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
      * @describe 根据配置名称获取配置信息
      */
     SysConfig findByParamName(String paramName);
-    
+
     List<SysConfig> findByParamName(List<String> paramNameList);
 
     String findConfigValue(String paramName);
@@ -23,4 +23,6 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     void batchUpdate(List<SysConfig> configList);
 
     void updateConfig(SysConfig config);
+
+    void updateByName(String paramName, String paramValue);
 }

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

@@ -362,7 +362,8 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         timeList.forEach(o -> {
             boolean checkDataTime = courseScheduleService.checkStudentCourseTime(studentId, startTimeFun.apply(o), endTimeFun.apply(o));
             if (checkDataTime) {
-                throw new BizException("学生id:" + studentId + ",预计安排在" + DateUtil.dateToString(startTimeFun.apply(o), "yyyy年MM月dd号 HH点mm分") + "的课程时间存在冲突!");
+                SysUser sysUser = sysUserFeignService.queryUserById(studentId);
+                throw new BizException("学生:" + sysUser.getUsername() + ",预计安排在" + DateUtil.dateToString(startTimeFun.apply(o), "yyyy年MM月dd号 HH点mm分") + "的课程时间存在冲突!");
             }
         });
     }
@@ -817,11 +818,11 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
             //极光-消息推送-老师端-通知老师有学生购买课程-跳转到APP
             MessageTypeEnum studentBuyLive = MessageTypeEnum.STUDENT_BUY_LIVE;
             //查询推送跳转的url
-            String studentBuyLiveUrl = sysMessageService.selectConfigUrl(studentBuyLive.getCode(),courseGroup.getId());
+            String studentBuyLiveUrl = sysMessageService.selectConfigUrl(studentBuyLive.getCode(), courseGroup.getId());
             Map<Long, String> teacherReceivers = new HashMap<>();
             teacherReceivers.put(teacherInfo.getId(), teacherInfo.getPhone());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, studentBuyLive,
-                    teacherReceivers, null, 0, studentBuyLiveUrl , ClientEnum.TEACHER.getCode(),
+                    teacherReceivers, null, 0, studentBuyLiveUrl, ClientEnum.TEACHER.getCode(),
                     studentInfo.getUsername(), courseGroup.getName());
             log.info("buyLiveCourseSuccess buyLiveSendMessage STUDENT_BUY_LIVE ok");
 
@@ -884,13 +885,6 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     }
 
     @Override
-    public HttpResponseResult<RefundCreateRes> refundCreate(OrderRefundReq refundReq) {
-        RefundCreateRes refundCreateRes = new RefundCreateRes();
-        refundCreateRes.setActualPrice(BigDecimal.ZERO);
-        return HttpResponseResult.succeed(refundCreateRes);
-    }
-
-    @Override
     public void refundAfter(UserOrderDetailVo userOrderDetailVo) {
 
     }
@@ -976,6 +970,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
 
     @Override
     public IPage<CourseGroupVideoVo> selectVideoGroup(IPage<CourseGroupVideoVo> page, CourseGroupSearch search) {
+        search.setStatus(AuthStatusEnum.PASS.getCode());
         return baseMapper.selectVideoGroup(page, search);
     }
 
@@ -1014,7 +1009,9 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
             courseGroup.setStatus(CourseGroupEnum.APPLY.getCode());
             try {
                 this.updateById(courseGroup);
-            } catch (Exception ignored) {
+            } catch (Exception e) {
+                log.error("openCourseGroup error >>> courseGroup: {} ",  JSON.toJSONString(courseGroup));
+                log.error("openCourseGroup error >>> ",  e.getCause());
             }
         });
     }
@@ -1053,25 +1050,16 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
                             .eq(CourseSchedule::getCourseGroupId, courseGroup.getId())
                             .set(CourseSchedule::getStatus, CourseScheduleEnum.CANCEL.getCode())
                     );
-                    // 直播课成课失败通知
-                    // 发短信
-                    try {
-                        SysUser user = sysUserFeignService.queryUserById(courseGroup.getTeacherId());
-                        Map<Long, String> receivers = new HashMap<>();
-                        receivers.put(user.getId(), user.getPhone());
-                        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_LIVE_COMPLETION_FAIL,
-                                receivers, null, 0, null, null,
-                                courseGroup.getName());
-                    } catch (Exception e) {
-                        log.warn("直播课成课失败短信发送失败,{}", e.getMessage());
-                    }
-                    sendMessage(courseGroup);
-
-                    refend(courseGroup);
-
+                    //直播课成课失败发送消息
+                    this.sendMessage(courseGroup);
+                    //退款
+                    this.refund(courseGroup);
                 }
+                courseGroup.setUpdatedTime(new Date());
                 this.updateById(courseGroup);
-            } catch (Exception ignored) {
+            } catch (Exception e) {
+                log.error("closeCourseGroup error >>> courseGroup: {} ",  JSON.toJSONString(courseGroup));
+                log.error("closeCourseGroup error >>> ",  e.getCause());
             }
         });
     }
@@ -1081,15 +1069,15 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
      *
      * @param courseGroup
      */
-    private void refend(CourseGroup courseGroup) {
+    private void refund(CourseGroup courseGroup) {
         // 退款
         List<String> orderNoList = courseScheduleStudentPaymentService.getOrderNoByGroupId(courseGroup.getId());
-
         for (String orderNo : orderNoList) {
             try {
                 userOrderRefundService.orderRefund(orderNo, "直播课成课失败退款");
             } catch (Exception e) {
                 log.warn("直播课成课失败退款 退款失败,退款订单号 {}", orderNo);
+                log.error("直播课成课失败退款 退款失败", e.getCause());
             }
         }
     }
@@ -1100,7 +1088,6 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
      * @param courseGroup 课程组
      */
     private void sendMessage(CourseGroup courseGroup) {
-        // 直播课成课失败通知
         // 发短信
         try {
             SysUser user = sysUserFeignService.queryUserById(courseGroup.getTeacherId());

+ 14 - 16
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java

@@ -87,24 +87,22 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
             replied.setTeacherRepliedTime(new Date());
             if (!repliedIsNull(replied)) {
                 repliedDao.updateReplied(replied);
-                return;
+            }else {
+                repliedDao.insert(replied);
             }
-            repliedDao.insert(replied);
-            return;
-        }
-
-        //当前用户为学员
-        isPayment(userId, scheduleId);
-        replied.setStudentId(userId);
-        replied.setTeacherReplied(null);
-        replied.setStudentRepliedTime(new Date());
-        if (!repliedIsNull(replied)) {
-            repliedDao.updateReplied(replied);
-            return;
+        }else {
+            //当前用户为学员
+            isPayment(userId, scheduleId);
+            replied.setStudentId(userId);
+            replied.setTeacherReplied(null);
+            replied.setStudentRepliedTime(new Date());
+            if (!repliedIsNull(replied)) {
+                repliedDao.updateReplied(replied);
+            }else {
+                repliedDao.insert(replied);
+            }
+            repliedSend(courseSchedule.getTeacherId(), userId);
         }
-        repliedDao.insert(replied);
-
-        repliedSend(courseSchedule.getTeacherId(), userId);
     }
 
     /**

+ 22 - 18
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -1424,27 +1424,31 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 Integer liveCount = 0;
                 Integer practiceCount = 0;
                 List<CountVo> typeCount = baseMapper.selectTypeCount(sysUser.getId(), tomorrow);
-                for (CountVo countVo : typeCount) {
-                    if (countVo.getType().equals(CourseScheduleEnum.LIVE.getCode())) {
-                        liveCount = countVo.getCount();
-                    }
-                    if (countVo.getType().equals(CourseScheduleEnum.PRACTICE.getCode())) {
-                        practiceCount = countVo.getCount();
+                if (CollectionUtils.isNotEmpty(typeCount)) {
+                    for (CountVo countVo : typeCount) {
+                        if (countVo.getType().equals(CourseScheduleEnum.LIVE.getCode())) {
+                            liveCount = countVo.getCount();
+                        }
+                        if (countVo.getType().equals(CourseScheduleEnum.PRACTICE.getCode())) {
+                            practiceCount = countVo.getCount();
+                        }
                     }
                 }
 
                 //老师端-明日课程提醒
-                String teacherUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.TOMORROW_COURSE_REMINDER.getCode());
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TOMORROW_COURSE_REMINDER,
-                        teacherReceivers, null, 0, teacherUrl, ClientEnum.TEACHER.getCode(),
-                        practiceCount.toString(), liveCount.toString());
-                log.info("send success {}", MessageTypeEnum.TOMORROW_COURSE_REMINDER);
-
-                //老师端-明日课程提醒(短信)
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_TOMORROW_COURSE_REMINDER,
-                        teacherSms, null, 0, null, null,
-                        practiceCount, liveCount);
-                log.info("send success {}", MessageTypeEnum.SMS_STUDENT_BUY_PRACTICE);
+                if (liveCount != 0 || practiceCount != 0) {
+                    String teacherUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.TOMORROW_COURSE_REMINDER.getCode());
+                    sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TOMORROW_COURSE_REMINDER,
+                            teacherReceivers, null, 0, teacherUrl, ClientEnum.TEACHER.getCode(),
+                            practiceCount.toString(), liveCount.toString());
+                    log.info("send success {}", MessageTypeEnum.TOMORROW_COURSE_REMINDER);
+
+                    //老师端-明日课程提醒(短信)
+                    sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_TOMORROW_COURSE_REMINDER,
+                            teacherSms, null, 0, null, null,
+                            practiceCount, liveCount);
+                    log.info("send success {}", MessageTypeEnum.SMS_STUDENT_BUY_PRACTICE);
+                }
             }
         }
     }
@@ -1710,7 +1714,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             }
 
             List<CourseScheduleStudentVo> courseList = userList.stream()
-                    .filter(s -> (s.getType().equals(CourseScheduleEnum.PRACTICE.getCode()) || s.getType().equals(CourseScheduleEnum.PIANO_ROOM_CLASS.getCode()) ))
+                    .filter(s -> (s.getType().equals(CourseScheduleEnum.PRACTICE.getCode()) || s.getType().equals(CourseScheduleEnum.PIANO_ROOM_CLASS.getCode())))
                     .collect(Collectors.toList());
 
             //清除缓存

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

@@ -5,15 +5,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.beust.jcommander.internal.Lists;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.LiveRoomDao;
 import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
-import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
-import com.yonge.cooleshow.biz.dal.enums.RoomTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.TeacherSalaryEnum;
+import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.IMHelper;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
@@ -21,6 +17,7 @@ import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.utils.date.DateUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -33,9 +30,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDate;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.function.BiFunction;
+import java.util.function.BiPredicate;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -75,6 +74,8 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     private StudentAttendanceService studentAttendanceService;
     @Autowired
     private TeacherAttendanceService teacherAttendanceService;
+    @Autowired
+    private SysMessageService sysMessageService;
 
     /**
      * 生成房间UID
@@ -103,7 +104,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     public PageInfo<LiveRoom> queryPageRoom(Map<String, Object> param) {
         String roomType = WrapperUtil.toStr(param, "roomType");
         Integer liveState = WrapperUtil.toInt(param, "liveState");
-        Long userId = getSysUser().getId();
+        Long userId = this.getSysUser().getId();
         Page<LiveRoom> pageInfo = PageUtil.getPageInfo(param);
         IPage<LiveRoom> page = this.page(pageInfo, Wrappers.<LiveRoom>lambdaQuery()
                 .eq(WrapperUtil.StrPredicate.test(roomType), LiveRoom::getType, roomType)
@@ -121,7 +122,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
      */
     @Override
     public RoomInfoCache studentCheckRoomInfo(String roomUid) {
-        return checkStudentRoom(roomUid, getSysUser());
+        return this.checkStudentRoom(roomUid, this.getSysUser());
     }
 
     /**
@@ -132,7 +133,16 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
      */
     @Override
     public RoomInfoCache speakerCheckRoomInfo(String roomUid) {
-        Long userId = getSysUser().getId();
+        Long userId = this.getSysUser().getId();
+        LiveRoom liveRoom = this.getOne(Wrappers.<LiveRoom>lambdaQuery()
+                .eq(LiveRoom::getRoomUid, roomUid));
+        if (Objects.isNull(liveRoom)) {
+            log.error("teacherCheckRoomInfo>>>live not start  roomUid: {} userId:{}", roomUid, userId);
+            throw new BizException("直播还未开始!");
+        }
+        if (liveRoom.getLiveState().equals(2)) {
+            throw new BizException("直播已结束");
+        }
         //校验房间是否存在
         RBucket<RoomInfoCache> roomInfoCache = getLiveRoomInfo(roomUid);
         if (!roomInfoCache.isExists()) {
@@ -156,20 +166,18 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void createCourseLiveRoom() {
-        Date now = new Date();
         //查询房间提前创建的时间
         String preCreateRoomMinute = sysConfigService.findConfigValue(PRE_CREATE_LIVE_ROOM_MINUTE);
         if (StringUtils.isEmpty(preCreateRoomMinute)) {
-            log.info("roomDestroy>>>> 未查询到配置:{}", PRE_CREATE_LIVE_ROOM_MINUTE);
+            log.info("createCourseLiveRoom>>>> 未查询到配置:{}", PRE_CREATE_LIVE_ROOM_MINUTE);
             return;
         }
-        Date endTime = DateUtil.addMinutes(now, Integer.parseInt(preCreateRoomMinute));
         //查询课时表生成直播间
         List<CourseSchedule> courseScheduleList = courseScheduleService.list(Wrappers.<CourseSchedule>lambdaQuery()
                 .eq(CourseSchedule::getType, CourseScheduleEnum.LIVE.getCode())
+                .in(CourseSchedule::getStatus, CourseScheduleEnum.NOT_START.getCode(), CourseScheduleEnum.ING.getCode())
                 .eq(CourseSchedule::getLock, 0)
-                .ge(CourseSchedule::getStartTime, now)
-                .le(CourseSchedule::getStartTime, endTime));
+                .eq(CourseSchedule::getClassDate, LocalDate.now().toString()));
         if (CollectionUtils.isEmpty(courseScheduleList)) {
             return;
         }
@@ -188,7 +196,18 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
                 });
         //生成课程对应的房间
         RoomTypeEnum en = RoomTypeEnum.LIVE;
+        Date now = new Date();
         courseScheduleList.forEach(c -> {
+            //课程开始时间-提前创建时间 = 创建房间时间
+            Date createRoomTime = DateUtil.addMinutes(c.getStartTime(), -Integer.parseInt(preCreateRoomMinute));
+            if (now.getTime() < createRoomTime.getTime()) {
+                return;
+            }
+            //避免重复创建直播间
+            int count = this.count(Wrappers.<LiveRoom>lambdaQuery().eq(LiveRoom::getCourseId, c.getId()));
+            if (count > 0) {
+                return;
+            }
             LiveRoom room = new LiveRoom();
             room.setCourseGroupId(c.getCourseGroupId());
             room.setCourseId(c.getId());
@@ -198,25 +217,47 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             room.setSpeakerId(c.getTeacherId());
             room.setLiveStartTime(c.getStartTime());
             room.setLiveEndTime(c.getEndTime());
-            room.setLiveState(0);
+            room.setLiveState(1);
             room.setRoomState(0);
             room.setType(en.getCode());
             room.setCreatedBy(-2L);
             room.setCreatedTime(now);
             this.save(room);
             //去融云创建房间及创建房间缓存信息
-            createLiveRoomInfo(room);
+            this.createLiveRoomInfo(room);
+            //开课提醒
+            this.pushLiveCreateRoom(room);
         });
     }
 
     /**
+     * 开课提醒
+     */
+    private void pushLiveCreateRoom(LiveRoom room) {
+        try {
+            //查询老师信息
+            SysUser teacherInfo = this.getSysUser(room.getSpeakerId());
+            //极光-消息推送
+            Map<Long, String> teacherMap = new HashMap<>();
+            teacherMap.put(teacherInfo.getId(), teacherInfo.getPhone());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.LIVE_REMINDER,
+                    teacherMap, null, 0, null, ClientEnum.TEACHER.getCode(),
+                    teacherInfo.getUsername(), room.getRoomTitle());
+        } catch (Exception e) {
+            log.error("pushLiveCreateRoom JIGUANG error param : {}", JSONObject.toJSONString(room));
+            log.error("pushLiveCreateRoom JIGUANG error", e.getCause());
+        }
+        log.info("pushLiveCreateRoom JIGUANG ok param : {}", JSONObject.toJSONString(room));
+    }
+
+    /**
      * 创建临时房间-直播间
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public String createTempLiveRoom(Map<String, Object> param) {
         //查询主讲人信息
-        SysUser sysUser = getSysUser();
+        SysUser sysUser = this.getSysUser();
         Long teacherId = sysUser.getId();
         List<LiveRoom> liveRoomList = this.list(Wrappers.<LiveRoom>lambdaQuery()
                 .eq(LiveRoom::getSpeakerId, teacherId)
@@ -266,7 +307,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
      */
     private void createLiveRoomInfo(LiveRoom room) {
         //查询主讲人信息
-        SysUser sysUser = getSysUser(room.getSpeakerId());
+        SysUser sysUser = this.getSysUser(room.getSpeakerId());
         this.createLiveRoomInfo(room, sysUser);
     }
 
@@ -404,15 +445,15 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         String roomUid = room.getRoomUid();
 
         //删除房间全部人员缓存
-        getTotalUserCache(roomUid).deleteAsync();
+        this.getTotalUserCache(roomUid).deleteAsync();
         //获取在线人员信息
-        RMap<Long, String> onlineUserCache = getOnlineUserCache(roomUid);
+        RMap<Long, String> onlineUserCache = this.getOnlineUserCache(roomUid);
         //删除人员对应直播间编号信息
         onlineUserCache.forEach((id, s) -> redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, id.toString())).deleteAsync());
         //删除房间在线人员缓存
         onlineUserCache.deleteAsync();
         //删除房间信息
-        getLiveRoomInfo(room.getRoomUid()).deleteAsync();
+        this.getLiveRoomInfo(room.getRoomUid()).deleteAsync();
         //删除点赞数
         redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, room.getRoomUid())).deleteAsync();
         //删除当前主讲人最后一次进入房间的ip
@@ -444,8 +485,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     private void ImDestroyLiveRoom(String roomId) {
         try {
             //删除服务器房间
-            List<String> deleteRoomIds = Lists.newArrayList(roomId);
-            IMApiResultInfo resultInfo = imHelper.deleteChrm(deleteRoomIds);
+            IMApiResultInfo resultInfo = imHelper.deleteChrm(Collections.singletonList(roomId));
             if (!resultInfo.isSuccess()) {
                 log.error("destroyLiveRoom error" + resultInfo.getErrorMessage());
             }
@@ -491,7 +531,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             }
             String roomUid = userRoom.get();
             //根据房间号获取房间信息
-            RBucket<RoomInfoCache> roomInfoCache = getLiveRoomInfo(roomUid);
+            RBucket<RoomInfoCache> roomInfoCache = this.getLiveRoomInfo(roomUid);
             if (!roomInfoCache.isExists()) {
                 return;
             }
@@ -508,7 +548,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             //用户id
             Long userId = Long.valueOf(userIdStr);
             //从房间累计用户信息中查询该用户的信息
-            RMap<Long, String> roomTotalUser = getTotalUserCache(roomUid);
+            RMap<Long, String> roomTotalUser = this.getTotalUserCache(roomUid);
             //该房间未查询到用户数据则不处理
             if (!roomTotalUser.isExists() && !roomTotalUser.containsKey(userId)) {
                 return;
@@ -519,7 +559,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             String userJsonStr = JSONObject.toJSONString(userInfo);
             roomTotalUser.fastPut(userId, userJsonStr);
             //查询在线人员列表
-            RMap<Long, String> onlineUserInfo = getOnlineUserCache(roomUid);
+            RMap<Long, String> onlineUserInfo = this.getOnlineUserCache(roomUid);
             if (!onlineUserInfo.isExists()) {
                 return;
             }
@@ -594,7 +634,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             }
         }
         //如果退出时间大于进入时间就无需再次退出-直接返回
-        if (compareDate.apply(roomInfo.getExitRoomTime(), roomInfo.getJoinRoomTime())) {
+        if (compareDate.test(roomInfo.getExitRoomTime(), roomInfo.getJoinRoomTime())) {
             return;
         }
 
@@ -625,7 +665,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
      * <p>- date1 时间1
      * <p>- date2 时间2
      */
-    private final BiFunction<Date, Date, Boolean> compareDate = (date1, date2) -> {
+    private final BiPredicate<Date, Date> compareDate = (date1, date2) -> {
         if (Objects.nonNull(date1) && Objects.nonNull(date2)) {
             return date1.getTime() > date2.getTime();
         } else {
@@ -712,7 +752,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     //校验学生与房间的关系
     private RoomInfoCache checkStudentRoom(String roomUid, SysUser sysUser) {
         //校验房间是否存在
-        RBucket<RoomInfoCache> roomInfoCache = getLiveRoomInfo(roomUid);
+        RBucket<RoomInfoCache> roomInfoCache = this.getLiveRoomInfo(roomUid);
         if (!roomInfoCache.isExists()) {
             throw new BizException("直播还未开始!");
         }
@@ -946,7 +986,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         //result
         Map<String, Object> result = new HashMap<>();
         //获取房间信息
-        RBucket<RoomInfoCache> speakerCache = getLiveRoomInfo(roomUid);
+        RBucket<RoomInfoCache> speakerCache = this.getLiveRoomInfo(roomUid);
         if (speakerCache.isExists()) {
             result.put("房间信息信息", speakerCache.get());
         } else {
@@ -972,7 +1012,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         int look = 0;
 
         //累计总观看的用户数量
-        List<RoomUserInfoCache> totalUserInfo = getTotalUserInfo(roomUid);
+        List<RoomUserInfoCache> totalUserInfo = this.getTotalUserInfo(roomUid);
         if (CollectionUtils.isNotEmpty(totalUserInfo)) {
             totalLook = totalUserInfo.size();
             result.put("总人员数据", totalUserInfo);
@@ -981,7 +1021,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         }
         result.put("总观看人数", totalLook);
         //正在房间观看的用户数据
-        List<RoomUserInfoCache> onlineUserInfo = getOnlineUserInfo(roomUid);
+        List<RoomUserInfoCache> onlineUserInfo = this.getOnlineUserInfo(roomUid);
         if (CollectionUtils.isNotEmpty(onlineUserInfo)) {
             look = onlineUserInfo.size();
             result.put("正在观看的人员信息", onlineUserInfo);

+ 56 - 29
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomVideoServiceImpl.java

@@ -9,6 +9,7 @@ import com.yonge.cooleshow.biz.dal.entity.LiveRoomVideo;
 import com.yonge.cooleshow.biz.dal.entity.RecordNotify;
 import com.yonge.cooleshow.biz.dal.service.LiveRoomService;
 import com.yonge.cooleshow.biz.dal.service.LiveRoomVideoService;
+import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,45 +51,71 @@ public class LiveRoomVideoServiceImpl extends ServiceImpl<LiveRoomVideoDao, Live
         );
     }
 
+    /**
+     * 云端录制回调
+     */
     @Override
     public void recordSync(RecordNotify recordNotify) {
         if (recordNotify.getCode().equals(200)) {
-            //云端录制文件地址
-            String fileUrl = recordNotify.getOutput().getFileUrl();
-            //房间uid
-            String roomUid = recordNotify.getRoomId();
-            //融云唯一id标识
-            String recordId = recordNotify.getRecordId();
-            //回调事件类型
-            Integer notifyType = recordNotify.getType();
-            if (Objects.nonNull(notifyType)) {
-                Date now = new Date();
-                //notifyType 1: 录制开始;4: 文件上传-融云回调完成
+            if (Objects.nonNull(recordNotify.getType())) {
+                //云端录制文件地址
+                String fileUrl = recordNotify.getOutput().getFileUrl();
+                //房间uid
+                String roomUId = recordNotify.getRoomId();
+                //融云唯一id标识
+                String recordId = recordNotify.getRecordId();
+                //回调事件类型
+                Integer notifyType = recordNotify.getType();
+                //查询直播间
+                LiveRoom room = liveRoomService.getOne(new QueryWrapper<LiveRoom>().lambda()
+                        .eq(LiveRoom::getRoomUid, roomUId));
+                //开始录制
                 if (notifyType == 1) {
-                    LiveRoomVideo video = new LiveRoomVideo();
-                    LiveRoom room = liveRoomService.getOne(new QueryWrapper<LiveRoom>().lambda()
-                            .eq(LiveRoom::getRoomUid, roomUid));
-                    video.setCourseGroupId(room.getCourseGroupId());
-                    video.setCourseId(room.getCourseId());
-                    video.setRoomUid(roomUid);
-                    video.setRecordId(recordId);
-                    video.setUrl(fileUrl);
-                    video.setStartTime(now);
-                    video.setType(notifyType);
-                    video.setCreatedTime(now);
-                    this.save(video);
+                    insertVideo(fileUrl, recordId, notifyType, room);
+                    return;
                 }
+                //录制完成
                 if (notifyType == 4) {
-                    LiveRoomVideo video = this.getOne(Wrappers.<LiveRoomVideo>lambdaQuery()
-                            .eq(LiveRoomVideo::getRoomUid, roomUid)
-                            .eq(LiveRoomVideo::getRecordId, recordId));
-                    video.setEndTime(now);
-                    video.setType(notifyType);
-                    this.updateById(video);
+                    //写入数据库
+                    try {
+                        //获取最后一次录制视频
+                        LiveRoomVideo video = baseMapper.getLastRecord(roomUId, recordId);
+                        if (Objects.isNull(video)) {
+                            log.error("recordSync error :roomUId : {} ,recordId:{}", roomUId, recordId);
+                            return;
+                        }
+                        if (StringUtils.isNotEmpty(video.getUrl())) {
+                            //保存切片
+                            insertVideo(fileUrl, recordId, notifyType, room);
+                        } else {
+                            Date now = new Date();
+                            video.setEndTime(now);
+                            video.setType(notifyType);
+                            video.setUrl(fileUrl);
+                            video.setCreatedTime(now);
+                            this.updateById(video);
+                        }
+                    } catch (Exception e) {
+                        log.error("recordSync error : {}", e.getMessage());
+                    }
                 }
             }
         }
     }
 
+    private void insertVideo(String fileUrl, String recordId, Integer notifyType, LiveRoom room) {
+        Date now = new Date();
+        LiveRoomVideo roomVideo = new LiveRoomVideo();
+        roomVideo.setCourseGroupId(room.getCourseGroupId());
+        roomVideo.setCourseId(room.getCourseId());
+        roomVideo.setRoomUid(room.getRoomUid());
+        roomVideo.setRecordId(recordId);
+        roomVideo.setUrl(fileUrl);
+        roomVideo.setStartTime(now);
+        roomVideo.setType(notifyType);
+        roomVideo.setCreatedTime(now);
+        this.save(roomVideo);
+    }
+
 }
 

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SmsCodeServiceImpl.java

@@ -54,6 +54,7 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 
 	@Override
 	public boolean sendValidCode(String mobile, String type, ClientEnum platform) {
+		//SMS_VERIFY_CODE_LOGOFF
 		SysUser sysUser = sysUserFeignService.queryUserByMobile(mobile);
 		// 修改手机号 有用户了不许修改
 		if ("PHONE".equals(type) && sysUser != null) {
@@ -80,17 +81,16 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 		}
 		if ("PASSWD".equals(type)) {
 			sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE_UPDATE_PSW, mobile,platform.getMsg());
-
 		} else if ("LOGIN".equals(type)) {
 			sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE_LOGIN, mobile,platform.getMsg());
-
 		} else if ("REGISTER".equals(type)) {
 			sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE_REGISTER, mobile,platform.getMsg());
-
 		} else if ("BANK".equals(type)){
 			sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE_BANK_CARD, mobile,platform.getMsg());
 		} else if ("PHONE".equals(type)) {
 			sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE_UPDATE_PHONE, mobile,platform.getMsg());
+		} else if("LOGOFF".equals(type)){
+			sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE_LOGOFF, mobile,platform.getMsg());
 		} else {
 			sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE, mobile,platform.getMsg());
 		}

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

@@ -47,4 +47,7 @@ public class SysConfigServiceImpl extends BaseServiceImpl<Long, SysConfig> imple
 		sysConfigDao.update(config);
 	}
 
+    public void updateByName(String paramName, String paramValue) {
+        sysConfigDao.updateByName(paramName, paramValue);
+    }
 }

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

@@ -9,6 +9,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Random;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import com.alibaba.fastjson.JSON;
 import com.yonge.cooleshow.biz.dal.dto.JumpUrlDto;
@@ -72,6 +73,9 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	@Value("${message.debugMode}")
 	private boolean debugMode;
 
+	@Value("${message.authCode}")
+	private boolean authCode;
+
 	@Override
 	public BaseDAO<Long, SysMessage> getDAO() {
 		return sysMessageDao;
@@ -210,8 +214,21 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 			LOGGER.error("接收地址不能为空");
 			return;
 		}
+		if (StringUtils.isEmpty(url)) {
+			url = selectConfigUrl(type.getCode());
+		}
 
-		String[] tos = receivers.values().toArray(new String[receivers.size()]);
+		String[] tos;
+		if(messageSender.getSendMode().equals(MessageSender.JIGUANG.getSendMode())) {
+			tos= new String[receivers.size()];
+			tos = receivers.entrySet()
+						   .stream()
+						   .map(longStringEntry -> String.valueOf(longStringEntry.getKey()))
+						   .collect(Collectors.toList())
+						   .toArray(tos);
+		} else {
+			tos = receivers.values().toArray(new String[receivers.size()]);
+		}
 		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(type.getCode());
 		if (messageConfig == null) {
 			throw new BizException("消息类型错误");
@@ -332,7 +349,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 		String key = getVerificationCodeCacheKey(messageType, receiver);
 		int code = DEFAULT_CODE;
-		if (debugMode == false) {
+		if (debugMode == false && !authCode) {
 			code = getRandomCode(messageType, receiver);
 		}
 		Map<Long, String> receivers = new HashMap<>(1);

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

@@ -56,6 +56,7 @@ public class UserBankCardServiceImpl extends ServiceImpl<UserBankCardDao, UserBa
         UserBankCard oldBankCard = baseMapper.selectOne(Wrappers.<UserBankCard>lambdaQuery()
                 .eq(UserBankCard::getUserId, bankCard.getUserId())
                 .eq(UserBankCard::getBankCard, bankCard.getBankCard())
+                .eq(UserBankCard::getDelFlag,false)
         );
         if(null != oldBankCard){
             return HttpResponseResult.failed("已经绑定该银行卡");
@@ -88,6 +89,7 @@ public class UserBankCardServiceImpl extends ServiceImpl<UserBankCardDao, UserBa
         if (!verify) {
             return HttpResponseResult.failed("未通过验证");
         }
+
         int i = baseMapper.deleteById(bankCard.getId());
         return HttpResponseResult.succeed(detail);
     }

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

@@ -205,7 +205,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
             } else if (TradeStatusEnum.failed.equals(data.getStatus())) {//支付失败
                 paymentFailedHandle(data, data.getErrMsg());
             }
-        } else if (!userOrderVo.getStatus().equals(OrderStatusEnum.PAID)) {
+        } else {
             //原路退还
             orderRefundService.orderFailRefund(data, userOrderVo.getOrderNo(), "订单已超时,金额原路退回");
         }

+ 7 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundServiceImpl.java

@@ -81,9 +81,6 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
     @PostConstruct
     private void init() {
         /**********退费单生成前******************/
-        //直播课退费
-        refundCreate.put(GoodTypeEnum.LIVE, courseGroupService::refundCreate);
-
         refundSuccess.put(GoodTypeEnum.LIVE, courseGroupService::refundSuccess);
     }
 
@@ -125,7 +122,9 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
         if (CollectionUtils.isEmpty(refundReq.getOredrDetilIds())) {
             //查询订单下未退款的所有详情订单
             List<UserOrderDetail> orderDetails = baseMapper.selectOrderRefundDetils(detail.getId());
-
+            if(CollectionUtils.isEmpty(orderDetails)){
+                return HttpResponseResult.failed("订单中没有可退款商品");
+            }
             refundReq.setOredrDetilIds(orderDetails.stream().map(UserOrderDetail::getId).collect(Collectors.toList()));
         }
         //退款的详情id
@@ -237,6 +236,9 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
         }
         //查询订单下未退款的所有详情订单
         List<UserOrderDetail> orderDetails = baseMapper.selectOrderRefundDetils(detail.getId());
+        if(CollectionUtils.isEmpty(orderDetails)){
+            return HttpResponseResult.failed("订单中没有可退款商品");
+        }
 
         //退款的详情id
         List<Long> detilIds = orderDetails.stream().map(UserOrderDetail::getId).collect(Collectors.toList());
@@ -259,11 +261,9 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
                 orderRefundReq.setOredrDetil(vo);
                 HttpResponseResult<RefundCreateRes> apply = refundCreateFunction.apply(orderRefundReq);
                 if (apply.getStatus()) {
-                    detilIds.add(vo.getId());
                     actualPrice = actualPrice.add(apply.getData().getActualPrice());
                 }
             } else {
-                detilIds.add(vo.getId());
                 actualPrice = actualPrice.add(vo.getActualPrice());
             }
         }
@@ -276,6 +276,7 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
         orderRefunds.setOredrDetilIds(join);
         orderRefunds.setStatus(AuthStatusEnum.PASS);
         orderRefunds.setApplyAmount(actualPrice);
+        orderRefunds.setActualAmount(actualPrice);
         orderRefunds.setReason(reason);
         save(orderRefunds);
 

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

@@ -42,7 +42,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 
 
 @Service
@@ -213,40 +212,50 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
         if (useDecimal.compareTo(totalAmount) < 0) {
             return HttpResponseResult.failed("账户余额不足");
         }
-
+        int successNum = 0;
+        String msg = "执行完成!";
         for (Long id : ids) {
             AuthOperaReq param = new AuthOperaReq();
             param.setId(id.toString());
             param.setReason(authOperaReq.getReason());
             param.setPass(authOperaReq.getPass());
-
+            param.setUserId(sysUser.getId());
             try {
-                DistributedLock.of(redissonClient)
-                        .runIfLockCanGet(CacheNameEnum.LOCK_WITHDRAWAL.getRedisKey(id.toString())
-                                , () -> doAuth(param, sysUser), 60L, TimeUnit.SECONDS);
+                HttpResponseResult<UserWithdrawalVo> res = DistributedLock.of(redissonClient)
+                        .runIfLockToFunction(CacheNameEnum.LOCK_WITHDRAWAL.getRedisKey(id.toString())
+                                , this::doAuth, param, 10L);
+                if (!res.getStatus()) {
+                    msg += successNum + "条成功," + "1条失败," + (ids.size() - successNum - 1) + "条未执行,失败原因:" + res.getMsg();
+                    return HttpResponseResult.failed(msg);
+                } else {
+                    successNum++;
+                }
             } catch (BizException e) {
-                return HttpResponseResult.failed(e.getMessage());
+                msg += successNum + "条成功," + "1条失败," + (ids.size() - successNum - 1) + "条未执行,失败原因:" + e.getMessage();
+                return HttpResponseResult.failed(msg);
             } catch (Exception e) {
                 e.printStackTrace();
-                return HttpResponseResult.failed("结算失败");
+                msg += successNum + "条成功," + "1条失败," + (ids.size() - successNum - 1) + "条未执行,失败原因:结算失败";
+                return HttpResponseResult.failed(msg);
             }
         }
         return HttpResponseResult.succeed();
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void doAuth(AuthOperaReq authOperaReq, SysUser sysUser) {
+    public HttpResponseResult<UserWithdrawalVo> doAuth(AuthOperaReq authOperaReq) {
         UserWithdrawalVo build = detail(Long.parseLong(authOperaReq.getId()));
         if (null == build || !AuthStatusEnum.DOING.equals(build.getAuthStatus())) {
-            return;
+            return HttpResponseResult.succeed();
         }
         build.setAuthStatus(authOperaReq.getPass() ? AuthStatusEnum.PASS : AuthStatusEnum.UNPASS);
         build.setReason(authOperaReq.getReason());
-        build.setAuthUserId(sysUser.getId());
+        build.setAuthUserId(authOperaReq.getUserId());
         build.setUpdateTime(new Date());
         build.setAuthTime(new Date());
 
         SysUser withdrawalUser = sysUserService.findUserById(build.getUserId());
+        HttpResponseResult res = HttpResponseResult.succeed(build);
         if (authOperaReq.getPass()) {
             //交易流水号生成
             Long transNo = idGeneratorService.generatorId("withdrawNo");
@@ -261,7 +270,8 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
             } else {
                 build.setAuthStatus(AuthStatusEnum.DOING);
                 build.setTradeStatus(TradeStatusEnum.failed);
-                build.setErrorMsg("请求三方接口同步返回失败");
+                build.setErrorMsg(withdraw.getMsg());
+                res = HttpResponseResult.failed("结算" + authOperaReq.getId() + "失败,失败原因:" + withdraw.getMsg());
             }
         } else {
             //审核不通过,账户解冻
@@ -277,6 +287,7 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
             unpassSend(build.getUserId(), build.getPhone(), authOperaReq.getReason());
         }
         updateById(build);
+        return res;
     }
 
     @Override

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CourseGroupVideoVo.java

@@ -32,6 +32,16 @@ public class CourseGroupVideoVo extends BaseEntity {
     private String teacherRealName;
     @ApiModelProperty("创建日期")
     private Date createTime;
+    @ApiModelProperty("审核通过日期")
+    private Date recordTime;
+
+    public Date getRecordTime() {
+        return recordTime;
+    }
+
+    public void setRecordTime(Date recordTime) {
+        this.recordTime = recordTime;
+    }
 
     public Long getGroupId() {
         return groupId;

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/EmployeeVo.java

@@ -43,10 +43,17 @@ public class EmployeeVo extends Employee {
         return gender;
     }
 
-    public void setGender(GenderEnum gender) {
+    public void setGender(GenderEnum gender){
         this.gender = gender;
     }
 
+    public void setGender(Object gender) {
+        try {
+            GenderEnum genderEnum = GenderEnum.valueOf(Integer.parseInt(gender.toString()));
+            this.gender = genderEnum;
+        }catch (Exception e){}
+    }
+
     public String getPhone() {
         return phone;
     }

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicianAuthEntryRecordVo.java

@@ -103,10 +103,17 @@ public class MusicianAuthEntryRecordVo extends TeacherAuthMusicianRecord {
         return gender;
     }
 
-    public void setGender(GenderEnum gender) {
+    public void setGender(GenderEnum gender){
         this.gender = gender;
     }
 
+    public void setGender(Object gender) {
+        try {
+            GenderEnum genderEnum = GenderEnum.valueOf(Integer.parseInt(gender.toString()));
+            this.gender = genderEnum;
+        }catch (Exception e){}
+    }
+
     public String getSubjectName() {
         return subjectName;
     }

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFens.java

@@ -67,7 +67,14 @@ public class MyFens extends BaseEntity {
         return gender;
     }
 
-    public void setGender(GenderEnum gender) {
+    public void setGender(GenderEnum gender){
         this.gender = gender;
     }
+
+    public void setGender(Object gender) {
+        try {
+            GenderEnum genderEnum = GenderEnum.valueOf(Integer.parseInt(gender.toString()));
+            this.gender = genderEnum;
+        }catch (Exception e){}
+    }
 }

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFollow.java

@@ -90,10 +90,17 @@ public class MyFollow extends BaseEntity {
         return gender;
     }
 
-    public void setGender(GenderEnum gender) {
+    public void setGender(GenderEnum gender){
         this.gender = gender;
     }
 
+    public void setGender(Object gender) {
+        try {
+            GenderEnum genderEnum = GenderEnum.valueOf(Integer.parseInt(gender.toString()));
+            this.gender = genderEnum;
+        }catch (Exception e){}
+    }
+
     public Double getStarGrade() {
         return starGrade;
     }

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomeVo.java

@@ -148,10 +148,17 @@ public class StudentHomeVo extends Student {
         return gender;
     }
 
-    public void setGender(GenderEnum gender) {
+    public void setGender(GenderEnum gender){
         this.gender = gender;
     }
 
+    public void setGender(Object gender) {
+        try {
+            GenderEnum genderEnum = GenderEnum.valueOf(Integer.parseInt(gender.toString()));
+            this.gender = genderEnum;
+        }catch (Exception e){}
+    }
+
     public String getPhone() {
         return phone;
     }

+ 9 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentVo.java

@@ -65,10 +65,17 @@ public class StudentVo extends Student {
         return gender;
     }
 
-    public void setGender(GenderEnum gender) {
+    public void setGender(GenderEnum gender){
         this.gender = gender;
     }
 
+    public void setGender(Object gender) {
+        try {
+            GenderEnum genderEnum = GenderEnum.valueOf(Integer.parseInt(gender.toString()));
+            this.gender = genderEnum;
+        }catch (Exception e){}
+    }
+
     public String getPhone() {
         return phone;
     }
@@ -130,6 +137,7 @@ public class StudentVo extends Student {
     }
 
     public void setIsVip(YesOrNoEnum isVip) {
+
         this.isVip = isVip;
     }
 

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherAuthEntryRecordVo.java

@@ -51,10 +51,17 @@ public class TeacherAuthEntryRecordVo extends TeacherAuthEntryRecord {
         return gender;
     }
 
-    public void setGender(GenderEnum gender) {
+    public void setGender(GenderEnum gender){
         this.gender = gender;
     }
 
+    public void setGender(Object gender) {
+        try {
+            GenderEnum genderEnum = GenderEnum.valueOf(Integer.parseInt(gender.toString()));
+            this.gender = genderEnum;
+        }catch (Exception e){}
+    }
+
     public String getPhone() {
         return phone;
     }

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeVo.java

@@ -175,10 +175,17 @@ public class TeacherHomeVo extends Teacher implements Serializable {
         return gender;
     }
 
-    public void setGender(GenderEnum gender) {
+    public void setGender(GenderEnum gender){
         this.gender = gender;
     }
 
+    public void setGender(Object gender) {
+        try {
+            GenderEnum genderEnum = GenderEnum.valueOf(Integer.parseInt(gender.toString()));
+            this.gender = genderEnum;
+        }catch (Exception e){}
+    }
+
     public String getPhone() {
         return phone;
     }

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherVo.java

@@ -147,10 +147,17 @@ public class TeacherVo extends Teacher {
         return gender;
     }
 
-    public void setGender(GenderEnum gender) {
+    public void setGender(GenderEnum gender){
         this.gender = gender;
     }
 
+    public void setGender(Object gender) {
+        try {
+            GenderEnum genderEnum = GenderEnum.valueOf(Integer.parseInt(gender.toString()));
+            this.gender = genderEnum;
+        }catch (Exception e){}
+    }
+
     public UserLockFlag getLockFlag() {
         return lockFlag;
     }

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wordfilter/EndType.java

@@ -0,0 +1,15 @@
+package com.yonge.cooleshow.biz.dal.wordfilter;
+
+/**
+ * 结束类型定义
+ *
+ * @author minghu.zhang
+ * @date 11:37 2020/11/11
+ **/
+public enum EndType {
+
+    /**
+     * 有下一个,结束
+     */
+    HAS_NEXT, IS_END
+}

+ 48 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wordfilter/FlagIndex.java

@@ -0,0 +1,48 @@
+package com.yonge.cooleshow.biz.dal.wordfilter;
+
+import java.util.List;
+
+/**
+ * 敏感词标记
+ *
+ * @author minghu.zhang
+ */
+public class FlagIndex {
+
+    /**
+     * 标记结果
+     */
+    private boolean flag;
+    /**
+     * 是否黑名单词汇
+     */
+    private boolean isWhiteWord;
+    /**
+     * 标记索引
+     */
+    private List<Integer> index;
+
+    public boolean isFlag() {
+        return flag;
+    }
+
+    public void setFlag(boolean flag) {
+        this.flag = flag;
+    }
+
+    public List<Integer> getIndex() {
+        return index;
+    }
+
+    public void setIndex(List<Integer> index) {
+        this.index = index;
+    }
+
+    public boolean isWhiteWord() {
+        return isWhiteWord;
+    }
+
+    public void setWhiteWord(boolean whiteWord) {
+        isWhiteWord = whiteWord;
+    }
+}

+ 249 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wordfilter/WordContext.java

@@ -0,0 +1,249 @@
+package com.yonge.cooleshow.biz.dal.wordfilter;
+
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
+import com.yonge.toolset.base.exception.BizException;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.PostConstruct;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.*;
+
+/**
+ * 词库上下文环境
+ * <p>
+ * 初始化敏感词库,将敏感词加入到HashMap中,构建DFA算法模型
+ *
+ * @author minghu.zhang
+ */
+@SuppressWarnings({"rawtypes", "unchecked"})
+@Configuration
+public class WordContext {
+    private final static Logger log = LoggerFactory.getLogger(WordContext.class);
+
+    @Autowired
+    private SysConfigService sysConfigService;
+
+    /**
+     * 敏感词字典
+     */
+    private final Map wordMap = new HashMap(1024);
+
+    /**
+     * 是否已初始化
+     */
+    private boolean init;
+    /**
+     * 黑名单列表
+     */
+    private String blackList;
+    /**
+     * 白名单列表
+     */
+    private String whiteList;
+
+    @PostConstruct
+    public void init() {
+        this.blackList = sysConfigService.findConfigValue(SysConfigConstant.BLACK_LIST);
+        this.whiteList = sysConfigService.findConfigValue(SysConfigConstant.WHITE_LIST);
+        initKeyWord();
+    }
+
+    /**
+     * 获取初始化的敏感词列表
+     *
+     * @return 敏感词列表
+     */
+    public Map getWordMap() {
+        return wordMap;
+    }
+
+    /**
+     * 初始化
+     */
+    private synchronized void initKeyWord() {
+        try {
+            if (!init) {
+                // 将敏感词库加入到HashMap中
+                addWord(strToSet(blackList), WordType.BLACK);
+                // 将非敏感词库也加入到HashMap中
+                addWord(strToSet(whiteList), WordType.WHITE);
+            }
+            init = true;
+        } catch (Exception e) {
+            log.error("初始化失败:" + e);
+            throw new BizException("敏感词列表初始化失败");
+        }
+    }
+
+    /**
+     * 读取敏感词库,将敏感词放入HashSet中,构建一个DFA算法模型:<br>
+     * 中 = { isEnd = 0 国 = {<br>
+     * isEnd = 1 人 = {isEnd = 0 民 = {isEnd = 1} } 男 = { isEnd = 0 人 = { isEnd = 1 }
+     * } } } 五 = { isEnd = 0 星 = { isEnd = 0 红 = { isEnd = 0 旗 = { isEnd = 1 } } } }
+     */
+    public void addWord(Iterable<String> wordList, WordType wordType) {
+        Map nowMap;
+        Map<String, String> newWorMap;
+        // 迭代keyWordSet
+        for (String key : wordList) {
+            nowMap = wordMap;
+            for (int i = 0; i < key.length(); i++) {
+                // 转换成char型
+                char keyChar = key.charAt(i);
+                // 获取
+                Object wordMap = nowMap.get(keyChar);
+                // 如果存在该key,直接赋值
+                if (wordMap != null) {
+                    nowMap = (Map) wordMap;
+                } else {
+                    // 不存在则构建一个map,同时将isEnd设置为0,因为他不是最后一个
+                    newWorMap = new HashMap<>(4);
+                    // 不是最后一个
+                    newWorMap.put("isEnd", String.valueOf(EndType.HAS_NEXT.ordinal()));
+                    nowMap.put(keyChar, newWorMap);
+                    nowMap = newWorMap;
+                }
+
+                if (i == key.length() - 1) {
+                    // 最后一个
+                    nowMap.put("isEnd", String.valueOf(EndType.IS_END.ordinal()));
+                    nowMap.put("isWhiteWord", String.valueOf(wordType.ordinal()));
+                }
+            }
+        }
+    }
+
+    /**
+     * 修改敏感词后初始化
+     */
+    public void mapInit() {
+        init = false;
+        this.blackList = sysConfigService.findConfigValue(SysConfigConstant.BLACK_LIST);
+        this.whiteList = sysConfigService.findConfigValue(SysConfigConstant.WHITE_LIST);
+        wordMap.clear();
+        initKeyWord();
+        /*Map nowMap;
+        for (String key : wordList) {
+            List<Map> cacheList = new ArrayList<>();
+            nowMap = wordMap;
+            for (int i = 0; i < key.length(); i++) {
+                char keyChar = key.charAt(i);
+
+                Object map = nowMap.get(keyChar);
+                if (map != null) {
+                    nowMap = (Map) map;
+                    cacheList.add(nowMap);
+                } else {
+                    return;
+                }
+
+                if (i == key.length() - 1) {
+                    char[] keys = key.toCharArray();
+                    boolean cleanable = false;
+                    char lastChar = 0;
+                    for (int j = cacheList.size() - 1; j >= 0; j--) {
+                        Map cacheMap = cacheList.get(j);
+                        if (j == cacheList.size() - 1) {
+                            if (String.valueOf(WordType.BLACK.ordinal()).equals(cacheMap.get("isWhiteWord"))) {
+                                if (wordType == WordType.WHITE) {
+                                    return;
+                                }
+                            }
+                            if (String.valueOf(WordType.WHITE.ordinal()).equals(cacheMap.get("isWhiteWord"))) {
+                                if (wordType == WordType.BLACK) {
+                                    return;
+                                }
+                            }
+                            cacheMap.remove("isWhiteWord");
+                            cacheMap.remove("isEnd");
+                            if (cacheMap.size() == 0) {
+                                cleanable = true;
+                                continue;
+                            }
+                        }
+                        if (cleanable) {
+                            Object isEnd = cacheMap.get("isEnd");
+                            if (String.valueOf(EndType.IS_END.ordinal()).equals(isEnd)) {
+                                cleanable = false;
+                            }
+                            cacheMap.remove(lastChar);
+                        }
+                        lastChar = keys[j];
+                    }
+
+                    if (cleanable) {
+                        wordMap.remove(lastChar);
+                    }
+                }
+            }
+        }*/
+    }
+
+    /**
+     * 删除敏感词
+     * @param paramName 黑/白名单(black_list/white_list)
+     * @param word 敏感词
+     */
+    public void removeWord(String paramName, String word) {
+        if (!paramName.equals(SysConfigConstant.BLACK_LIST) && !paramName.equals(SysConfigConstant.WHITE_LIST)) {
+            throw new BizException("paramName不合法");
+        }
+        Set<String> list = strToSet(sysConfigService.findConfigValue(paramName));
+        list.removeIf(s -> s.equals(word));
+        sysConfigService.updateByName(paramName, list.toString().replaceAll("(?:\\[|null|\\]| +)", ""));
+        mapInit();
+    }
+
+    /**
+     * 添加敏感词
+     * @param paramName 黑/白名单(black_list/white_list)
+     * @param word 敏感词
+     */
+    public void addWord(String paramName, String word) {
+        if (!paramName.equals(SysConfigConstant.BLACK_LIST) && !paramName.equals(SysConfigConstant.WHITE_LIST)) {
+            throw new BizException("paramName不合法");
+        }
+        Set<String> list = strToSet(sysConfigService.findConfigValue(paramName));
+        list.add(word);
+        sysConfigService.updateByName(paramName, list.toString().replaceAll("(?:\\[|null|\\]| +)", ""));
+        mapInit();
+    }
+
+    /**
+     * 读取敏感词库中的内容,将内容添加到set集合中
+     */
+    private Set<String> readWordFile(String file) throws Exception {
+        Set<String> set;
+        // 字符编码
+        String encoding = "UTF-8";
+        try (InputStreamReader read = new InputStreamReader(
+                this.getClass().getResourceAsStream(file), encoding)) {
+            set = new HashSet<>();
+            BufferedReader bufferedReader = new BufferedReader(read);
+            String txt;
+            // 读取文件,将文件内容放入到set中
+            while ((txt = bufferedReader.readLine()) != null) {
+                set.add(txt);
+            }
+        }
+        // 关闭文件流
+        return set;
+    }
+
+    /**
+     * 字符串转set
+     */
+    private Set<String> strToSet(String str) {
+        if (StringUtils.isNotBlank(str)){
+            String[] split = str.split(",");
+            return new HashSet<>(Arrays.asList(split));
+        }
+        return new HashSet<>();
+    }
+}

+ 216 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wordfilter/WordFilter.java

@@ -0,0 +1,216 @@
+package com.yonge.cooleshow.biz.dal.wordfilter;
+
+import org.springframework.context.annotation.Configuration;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 敏感词过滤器
+ *
+ * @author minghu.zhang
+ */
+@SuppressWarnings("rawtypes")
+@Configuration
+public class WordFilter {
+    /**
+     * 敏感词表
+     */
+    private final Map wordMap;
+
+    /**
+     * 构造函数
+     */
+    public WordFilter(WordContext context) {
+        this.wordMap = context.getWordMap();
+    }
+
+    /**
+     * 替换敏感词
+     *
+     * @param text 输入文本
+     */
+    public String replace(final String text) {
+        return replace(text, 0, '*');
+    }
+
+    /**
+     * 替换敏感词
+     *
+     * @param text   输入文本
+     * @param symbol 替换符号
+     */
+    public String replace(final String text, final char symbol) {
+        return replace(text, 0, symbol);
+    }
+
+    /**
+     * 替换敏感词
+     *
+     * @param text   输入文本
+     * @param skip   文本距离
+     * @param symbol 替换符号
+     */
+    public String replace(final String text, final int skip, final char symbol) {
+        char[] charset = text.toCharArray();
+        for (int i = 0; i < charset.length; i++) {
+            FlagIndex fi = getFlagIndex(charset, i, skip);
+            if (fi.isFlag()) {
+                if (!fi.isWhiteWord()) {
+                    for (int j : fi.getIndex()) {
+                        charset[j] = symbol;
+                    }
+                } else {
+                    i += fi.getIndex().size() - 1;
+                }
+            }
+        }
+        return new String(charset);
+    }
+
+    /**
+     * 是否包含敏感词
+     *
+     * @param text 输入文本
+     */
+    public boolean include(final String text) {
+        return include(text, 0);
+    }
+
+    /**
+     * 是否包含敏感词
+     *
+     * @param text 输入文本
+     * @param skip 文本距离
+     */
+    public boolean include(final String text, final int skip) {
+        boolean include = false;
+        char[] charset = text.toCharArray();
+        for (int i = 0; i < charset.length; i++) {
+            FlagIndex fi = getFlagIndex(charset, i, skip);
+            if (fi.isFlag()) {
+                if (fi.isWhiteWord()) {
+                    i += fi.getIndex().size() - 1;
+                } else {
+                    include = true;
+                    break;
+                }
+            }
+        }
+        return include;
+    }
+
+    /**
+     * 获取敏感词数量
+     *
+     * @param text 输入文本
+     */
+    public int wordCount(final String text) {
+        return wordCount(text, 0);
+    }
+
+    /**
+     * 获取敏感词数量
+     *
+     * @param text 输入文本
+     * @param skip 文本距离
+     */
+    public int wordCount(final String text, final int skip) {
+        int count = 0;
+        char[] charset = text.toCharArray();
+        for (int i = 0; i < charset.length; i++) {
+            FlagIndex fi = getFlagIndex(charset, i, skip);
+            if (fi.isFlag()) {
+                if (fi.isWhiteWord()) {
+                    i += fi.getIndex().size() - 1;
+                } else {
+                    count++;
+                }
+            }
+        }
+        return count;
+    }
+
+    /**
+     * 获取敏感词列表
+     *
+     * @param text 输入文本
+     */
+    public List<String> wordList(final String text) {
+        return wordList(text, 0);
+    }
+
+    /**
+     * 获取敏感词列表
+     *
+     * @param text 输入文本
+     * @param skip 文本距离
+     */
+    public List<String> wordList(final String text, final int skip) {
+        List<String> wordList = new ArrayList<>();
+        char[] charset = text.toCharArray();
+        for (int i = 0; i < charset.length; i++) {
+            FlagIndex fi = getFlagIndex(charset, i, skip);
+            if (fi.isFlag()) {
+                if (fi.isWhiteWord()) {
+                    i += fi.getIndex().size() - 1;
+                } else {
+                    StringBuilder builder = new StringBuilder();
+                    for (int j : fi.getIndex()) {
+                        char word = text.charAt(j);
+                        builder.append(word);
+                    }
+                    wordList.add(builder.toString());
+                }
+            }
+        }
+        return wordList;
+    }
+
+    /**
+     * 获取标记索引
+     *
+     * @param charset 输入文本
+     * @param begin   检测起始
+     * @param skip    文本距离
+     */
+    private FlagIndex getFlagIndex(final char[] charset, final int begin, final int skip) {
+        FlagIndex fi = new FlagIndex();
+
+        Map current = wordMap;
+        boolean flag = false;
+        int count = 0;
+        List<Integer> index = new ArrayList<>();
+        for (int i = begin; i < charset.length; i++) {
+            char word = charset[i];
+            Map mapTree = (Map) current.get(word);
+            if (count > skip || (i == begin && Objects.isNull(mapTree))) {
+                break;
+            }
+            if (Objects.nonNull(mapTree)) {
+                current = mapTree;
+                count = 0;
+                index.add(i);
+            } else {
+                count++;
+                if (flag && count > skip) {
+                    break;
+                }
+            }
+            if ("1".equals(current.get("isEnd"))) {
+                flag = true;
+            }
+            if ("1".equals(current.get("isWhiteWord"))) {
+                fi.setWhiteWord(true);
+                break;
+            }
+        }
+
+        fi.setFlag(flag);
+        fi.setIndex(index);
+
+        return fi;
+    }
+}

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wordfilter/WordType.java

@@ -0,0 +1,15 @@
+package com.yonge.cooleshow.biz.dal.wordfilter;
+
+/**
+ * 词汇类型
+ *
+ * @author minghu.zhang
+ * @date 11:37 2020/11/11
+ **/
+public enum WordType {
+
+    /**
+     * 黑名单/白名单
+     */
+    BLACK, WHITE
+}

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wordfilter/annotation/CheckWord.java

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.wordfilter.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * @Description: 敏感词校验/过滤
+ * @Author: cy
+ * @Date: 2022/7/6
+ */
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface CheckWord {
+}

+ 42 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wordfilter/annotation/CheckWordAspect.java

@@ -0,0 +1,42 @@
+package com.yonge.cooleshow.biz.dal.wordfilter.annotation;
+
+import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.biz.dal.wordfilter.WordFilter;
+import com.yonge.toolset.base.exception.BizException;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description: 敏感词过滤切面
+ * @Author: cy
+ * @Date: 2022/7/6
+ */
+@Aspect
+@Order(1)
+@Component
+public class CheckWordAspect {
+    @Autowired
+    private WordFilter wordFilter;
+    @Autowired
+    RedissonClient redissonClient;
+
+    @Pointcut("@annotation(com.yonge.cooleshow.biz.dal.wordfilter.annotation.CheckWord)")
+    private void checkWord() {
+    }
+
+    @Around("checkWord()")
+    public Object checkWord(ProceedingJoinPoint joinPoint) throws Throwable {
+        Object[] args = joinPoint.getArgs();
+        String text = JSON.toJSONString(args);
+        if (wordFilter.include(text, 3)) {
+            throw new BizException("文本包含敏感信息:{}", wordFilter.wordList(text));
+        }
+        return joinPoint.proceed();
+    }
+}

+ 2 - 2
cooleshow-user/user-biz/src/main/resources/config/contracts/latest_contract_template.ftl

@@ -85,10 +85,10 @@
         <h1>《产品与服务协议》</h1>
                             甲方:${companyName} <br/>
 
-        <div style="display: flex;">乙方:
+        <div style="display: flex;">
             <div style="flex: 1 auto;">
                 <div class="iInfo">
-                    <span>用户姓名:${userInfo.realName!}</span>
+                    <span>乙方:${userInfo.realName!}</span>
                     <span>电话:${userInfo.phone!}</span>
                 </div>
                 <#if userInfo.idCardNo?default("")?trim?length gt 1>

+ 11 - 4
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseGroupMapper.xml

@@ -250,7 +250,7 @@
                 and #{param.endTime} &gt;= cssp.created_time_
             </if>
         </where>
-        group by cssp.actual_price_
+        group by cssp.user_id_
         order by  cssp.id_ desc
     </select>
 
@@ -529,6 +529,7 @@
     </select>
     <select id="selectLiveGroupPlan" resultType="com.yonge.cooleshow.biz.dal.vo.CourseSchedulePlanVo">
         SELECT
+        distinct
             cs.id_ AS courseId,
             g.course_introduce_ AS courseIntroduce,
             cs.class_num_ AS classNum,
@@ -536,14 +537,13 @@
             cs.start_time_ AS startTime,
             cs.end_time_ AS endTime,
             ts.status_ AS salaryStatus,
-            v.url_ AS url,
+            (select group_concat(lrv.url_) from live_room_video lrv where lrv.course_id_ = cs.id_)AS url,
             cs.status_ AS courseStatus,
             (CASE WHEN cs.start_time_ &gt;= ta.sign_in_time_ THEN 1 ELSE 0 END) AS teacherInSign,
             (CASE WHEN cs.end_time_ &lt;= ta.sign_out_time_ THEN 1 ELSE 0 END) AS teacherOutSign
         FROM course_schedule cs
         LEFT JOIN course_group g ON cs.course_group_id_=g.id_
         LEFT JOIN course_schedule_teacher_salary ts ON cs.id_=ts.course_schedule_id_
-        LEFT JOIN live_room_video v ON cs.id_=v.course_id_
         LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_
         WHERE cs.course_group_id_= #{param.groupId}
         <if test="param.salaryStatus != null and param.salaryStatus != ''">
@@ -570,13 +570,17 @@
             g.teacher_id_ AS teacherId,
             u.username_ AS teacherName,
             u.real_name_ AS teacherRealName,
-            g.create_time_ AS createTime
+            g.create_time_ AS createTime,
+            r.create_time_ AS recordTime
         FROM video_lesson_group g
         LEFT JOIN `subject` s ON g.lesson_subject_=s.id_
         LEFT JOIN sys_user u ON g.teacher_id_=u.id_
         LEFT JOIN (
             SELECT video_lesson_group_id_,COUNT(1) AS count_ FROM video_lesson_purchase_record
             WHERE order_status_='PAID' GROUP BY video_lesson_group_id_) p ON g.id_=p.video_lesson_group_id_
+        LEFT JOIN (
+            SELECT video_group_id_,create_time_ FROM video_lesson_auth_record
+            WHERE audit_status_='PASS') r ON g.id_=r.video_group_id_
         <where>
             <if test="param.search != null and param.search != ''">
                 AND (
@@ -589,6 +593,9 @@
             <if test="param.subjectId != null and param.subjectId != ''">
                 AND g.lesson_subject_ = #{param.subjectId}
             </if>
+            <if test="param.status != null and param.status != ''">
+                AND g.audit_status_ = #{param.status}
+            </if>
         </where>
     </select>
     <select id="selectVideoGroupStudent" resultType="com.yonge.cooleshow.biz.dal.vo.CourseGroupStudentVo">

+ 28 - 9
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -261,6 +261,16 @@
         WHERE s.teacher_id_=#{teacherId}
         AND s.lock_=0
         AND s.status_ IN ('ING','COMPLETE','NOT_START')
+        AND p.course_type_ IN ('PIANO_ROOM_CLASS','PRACTICE')
+        <![CDATA[ AND s.class_date_  >= #{startDate} ]]>
+        <![CDATA[ AND s.class_date_  <= #{endDate} ]]>
+        UNION
+        SELECT s.class_date_
+        FROM course_group g
+        LEFT JOIN course_schedule s ON g.id_=s.course_group_id_
+        WHERE g.teacher_id_=#{teacherId}
+        AND g.type_='LIVE'
+        AND g.status_ IN ('COMPLETE','ING')
         <![CDATA[ AND s.class_date_  >= #{startDate} ]]>
         <![CDATA[ AND s.class_date_  <= #{endDate} ]]>
     </select>
@@ -711,18 +721,27 @@
     </select>
     <select id="selectTeacher" resultType="com.yonge.cooleshow.auth.api.entity.SysUser"
             parameterType="java.lang.String">
-        SELECT s.teacher_id_ AS id,u.phone_ AS phone
+        SELECT DISTINCT
+            s.teacher_id_ AS id,
+            u.phone_ AS phone
         FROM course_schedule s
-        LEFT JOIN sys_user u ON s.teacher_id_=u.id_
-        WHERE class_date_=#{tomorrow} AND lock_=0
-        GROUP BY s.teacher_id_
+        LEFT JOIN sys_user u ON s.teacher_id_ = u.id_
+        LEFT JOIN course_group g ON s.course_group_id_=g.id_
+        WHERE lock_=0
+        AND class_date_ = DATE_SUB(curdate(),INTERVAL -1 DAY)
+        AND g.status_='ING'
     </select>
     <select id="selectTypeCount" resultType="com.yonge.cooleshow.biz.dal.vo.CountVo">
-        SELECT type_ AS type, COUNT(1) AS count
-        FROM course_schedule
-        WHERE class_date_=#{tomorrow}
-        AND teacher_id_=#{teacherId} AND lock_=0
-        GROUP BY type_
+        SELECT
+            s.type_ AS type,
+            COUNT(1) AS `count`
+        FROM course_schedule s
+        LEFT JOIN course_group g ON s.course_group_id_=g.id_
+        WHERE s.lock_=0
+        AND s.teacher_id_=#{teacherId}
+        AND s.class_date_=DATE_SUB(curdate(),INTERVAL -1 DAY)
+        AND g.status_='ING'
+        GROUP BY s.type_
     </select>
 
 

+ 4 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/LiveRoomVideoMapper.xml

@@ -30,4 +30,8 @@
         </foreach>
     </insert>
 
+    <select id="getLastRecord" resultMap="BaseResultMap">
+        SELECT * FROM live_room_video WHERE room_uid_ = #{roomId} AND record_id_ = #{recordId} ORDER BY id_ DESC LIMIT 1
+    </select>
+
 </mapper>

+ 21 - 18
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -165,24 +165,27 @@
 
     <select id="detail" resultMap="DetailResultMap">
         SELECT
-        <include refid="Base_Column_List"/>
-        ,t.url_ as url
-        ,t.midi_url_ as midiUrl
-        ,t.metronome_url_ as metronomeUrl
-        ,msa.id_ as accompanimentId
-        ,msa.music_sheet_id_ as accompanimentMusicSheetId
-        ,msa.music_subject_ as accompanimentMusicSubject
-        ,msa.audio_file_url_ as accompanimentAudioFileUrl
-        ,msa.sort_number_ as accompanimentSortNumber
-        ,msa.create_time_ as accompanimentCreateTime
-        ,msa.metronome_url_ as accompanimentMetronomeUrl
-        ,msa.track_ as track
-        ,su.username_ as userName
-        ,su.avatar_ as userAvatar
-        ,(select group_concat(mt.name_) from music_tag mt
-        where find_in_set(mt.id_,t.music_tag_) and mt.del_flag_ = 0  and mt.state_ = 1) as musicTagNames
-        ,s2.name_ as subjectNames
-        ,s2.code_ as code
+            <include refid="Base_Column_List"/>
+            ,t.url_ as url
+            ,t.midi_url_ as midiUrl
+            ,t.metronome_url_ as metronomeUrl
+            ,msa.id_ as accompanimentId
+            ,msa.music_sheet_id_ as accompanimentMusicSheetId
+            ,msa.music_subject_ as accompanimentMusicSubject
+            ,msa.audio_file_url_ as accompanimentAudioFileUrl
+            ,msa.sort_number_ as accompanimentSortNumber
+            ,msa.create_time_ as accompanimentCreateTime
+            ,msa.metronome_url_ as accompanimentMetronomeUrl
+            ,msa.track_ as track
+            ,su.username_ as userName
+            ,su.avatar_ as userAvatar
+            ,(
+                select group_concat(mt.name_) from music_tag mt
+                where find_in_set(mt.id_,t.music_tag_)
+                and mt.del_flag_ = 0  and mt.state_ = 1
+            ) as musicTagNames
+            ,s2.name_ as subjectNames
+            ,s2.code_ as code
         FROM music_sheet t
         left join music_sheet_accompaniment msa on msa.music_sheet_id_ = t.id_
         left join sys_user su on t.create_by_ = su.id_

+ 2 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -103,10 +103,10 @@
                 and INTE_ARRAY(t.subject_id_,#{param.subjectId})
             </if>
             <if test="null != param.isVip">
-                <if test="true == param.isVip">
+                <if test="1 == param.isVip.code">
                     and t.membership_end_time_ &gt; now()
                 </if>
-                <if test="false == param.isVip">
+                <if test="0 == param.isVip.code">
                     and (t.membership_end_time_ is null or t.membership_end_time_ &lt;= now())
                 </if>
             </if>

+ 5 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysConfigMapper.xml

@@ -87,6 +87,11 @@
 				WHERE id_ = #{config.id}
 		</foreach>
 	</update>
+    <update id="updateByName">
+		UPDATE sys_config
+		SET param_value_=#{paramValue}
+		WHERE param_name_=#{paramName}
+	</update>
 
     <!-- 根据主键删除一条记录 -->
 	<delete id="delete">

+ 2 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -19,6 +19,7 @@
         <result column="musician_date_" property="musicianDate" />
         <result column="live_flag_" property="liveFlag" />
         <result column="live_date_" property="liveDate" />
+        <result column="browse_" property="browse" />
         <result column="memo_" property="memo" />
         <result column="create_time_" property="createTime" />
         <result column="update_time_" property="updateTime" />
@@ -43,6 +44,7 @@
         , t.musician_date_ as "musicianDate"
         , t.live_flag_ as "liveFlag"
         , t.live_date_ as "liveDate"
+        , t.browse_ as "browse"
         , t.memo_ as "memo"
         , t.create_time_ as "createTime"
         , t.update_time_ as "updateTime"

+ 5 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserBankCardMapper.xml

@@ -64,7 +64,11 @@
         and t.id_ = #{bankCardId}
     </select>
 
+    <update id="deleteById">
+        update user_bank_card set del_flag_ = 1 where id_ = #{id} and del_flag_ = 0
+    </update>
+
     <update id="deleteByUserId">
-        update user_bank_card set del_flag_ = 1 where user_id_ = #{userId}
+        update user_bank_card set del_flag_ = 1 where user_id_ = #{userId} and del_flag_ = 0
     </update>
 </mapper>

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

@@ -38,7 +38,7 @@ public class SmsCodeController extends BaseController {
 
     @ApiOperation(value = "发送登录短信验证码")
     @ApiImplicitParams({  @ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String"),
-                          @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号)", required = true, dataType = "String") })
+                          @ApiImplicitParam(name = "type", value = "类型(PASSWD:修改密码,LOGIN:登录或注册,BANK:绑定银行卡,PHONE:修改手机号,LOGOFF:用户注销)", required = true, dataType = "String") })
     @PostMapping(value = "/sendSmsCode")
     public Object sendLoginVerifyCode(String mobile,String type) throws Exception {
         smsCodeService.sendValidCode(mobile, type, ClientEnum.TEACHER);

+ 1 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysUserContractRecordController.java

@@ -51,6 +51,7 @@ public class SysUserContractRecordController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
+
         return HttpResponseResult.succeed(sysUserContractRecordService.checkContractSign(user.getId(), SysUserType.TEACHER, contractType));
     }
 

+ 0 - 8
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/LiveRoomVideoController.java

@@ -44,13 +44,5 @@ public class LiveRoomVideoController extends BaseController {
         return succeed(liveRoomVideoService.queryVideo(roomUid));
     }
 
-    @ApiOperation("录制结果回调")
-    @RequestMapping(value = "/recordSync")
-    public void recordSync(@RequestBody String body) {
-        log.info("recordSync body:{}", body);
-        RecordNotify recordNotify = JSONObject.parseObject(body, RecordNotify.class);
-        liveRoomVideoService.recordSync(recordNotify);
-    }
-
 }
 

+ 0 - 1
toolset/pom.xml

@@ -30,7 +30,6 @@
 		<module>dynamic-datasource</module>
 		<module>thirdparty-component</module>
 		<module>toolset-base</module>
-		<module>toolset-emoji</module>
 		<module>toolset-feign</module>
 		<module>toolset-mybatis</module>
 		<module>utils</module>

+ 1 - 1
toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/message/provider/AwSmsPlugin.java

@@ -35,7 +35,7 @@ public class AwSmsPlugin implements MessageSenderPlugin, InitializingBean {
 	 */
 	private String pswd = "9#O!9hSJ";
 
-	private String signature = "【管乐迷】";
+	private String signature = "【酷乐秀】";
 
 	public static String getName() {
 		return "awsms";

+ 14 - 2
toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/message/provider/JiguangPushPlugin.java

@@ -59,7 +59,7 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
 	 * @param content 消息内容
 	 * @return json对象
 	 */
-	private JSONObject generateJson(String[] alias, String alert, String content, String url,String sound,String channelId) {
+	private JSONObject generateJson(String[] alias, String alert, String content, String url,String sound,String channelId,String type) {
 		JSONObject json = new JSONObject();
 		JSONArray platform = new JSONArray();// 平台
 		platform.add("android");
@@ -89,9 +89,21 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
 		JSONObject android_extras = new JSONObject();// android额外参数
 		android_extras.put("type", "infomation");
 		android_extras.put("url", url);
+		android_extras.put("third_url_encode",true);
 		android_extras.put("memo", url);
 		android.put("extras", android_extras);
 
+		JSONObject android_intent = new JSONObject();// android额外参数
+		if ("STUDENT".equals(type)) {
+			android_intent.put("url",
+							   "intent:#Intent;action=cn.jiguang.push.customAction;component=com.cooleshow.student/com.cooleshow.student.ui.main.MainActivity;end");
+		} else {
+			android_intent.put("url",
+							   "intent:#Intent;action=cn.jiguang.push.customAction;component=com.cooleshow.teacher/com.cooleshow.teacher.ui.main.MainActivity;end");
+		}
+		android.put("intent",android_intent);
+
+
 		JSONObject ios = new JSONObject();// ios通知内容
 		ios.put("alert", alert);
 		ios.put("sound", sound);
@@ -141,7 +153,7 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
 				break;
 		}
 		String authorization = "Basic " + base64_auth_string;
-		return sendPostRequest(generateJson(alias, alert, content, url,sound,channelId).toString(), authorization);
+		return sendPostRequest(generateJson(alias, alert, content, url,sound,channelId,type).toString(), authorization);
 	}
 
 	/**

+ 0 - 29
toolset/toolset-emoji/pom.xml

@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>toolset</artifactId>
-        <groupId>com.yonge.toolset</groupId>
-        <version>1.0</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>toolset-emoji</artifactId>
-    <version>1.0</version>
-    <name>toolset-emoji</name>
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>com.yonge.toolset</groupId>
-            <artifactId>utils</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.vdurmont</groupId>
-            <artifactId>emoji-java</artifactId>
-        </dependency>
-    </dependencies>
-</project>

+ 0 - 21
toolset/toolset-emoji/src/main/java/com/yonge/toolset/emoji/serializer/EmojiSerializer.java

@@ -1,21 +0,0 @@
-package com.yonge.toolset.emoji.serializer;
-
-import com.alibaba.fastjson.serializer.JSONSerializer;
-import com.alibaba.fastjson.serializer.ObjectSerializer;
-import com.vdurmont.emoji.EmojiParser;
-
-import java.io.IOException;
-import java.lang.reflect.Type;
-
-/**
- * @Author: liweifan
- * @Data: 2022/4/28 14:39
- */
-public class EmojiSerializer implements ObjectSerializer {
-
-    @Override
-    public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
-        serializer.write(EmojiParser.parseToUnicode(object.toString()));
-    }
-
-}

+ 0 - 8
toolset/toolset-mybatis/src/main/java/com/yonge/toolset/mybatis/config/MyBatisPlusConfig.java

@@ -14,20 +14,12 @@ import org.springframework.context.annotation.Primary;
  */
 @Configuration
 public class MyBatisPlusConfig {
-
-    @Autowired
-    private MybatisPlusProperties plusProperties;
-
     /**
      * 分页插件
      */
     @Bean
     @Primary
     public PaginationInterceptor paginationInterceptor() {
-        MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();
-        mybatisConfiguration.setMapUnderscoreToCamelCase(true);
-        mybatisConfiguration.setCacheEnabled(false);
-        plusProperties.setConfiguration(mybatisConfiguration);
         return new PaginationInterceptor();
     }
 }