Преглед изворни кода

Merge remote-tracking branch 'origin/master'

zouxuan пре 3 година
родитељ
комит
84b8ea6259
100 измењених фајлова са 1824 додато и 289 уклоњено
  1. 1 1
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/SysUser.java
  2. 1 1
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java
  3. 1 0
      cooleshow-auth/auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  4. 31 17
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsArticleServiceImpl.java
  5. 23 5
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsLikeServiceImpl.java
  6. 8 7
      cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsPrivateMessageServiceImpl.java
  7. 1 1
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java
  8. 14 6
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/queryinfo/NewsInformationQueryInfo.java
  9. 6 6
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/SysNewsInformation.java
  10. 6 7
      cooleshow-cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml
  11. 19 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
  12. 2 2
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/entity/HttpResponseResult.java
  13. 26 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ContractTemplateSourceEnum.java
  14. 35 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ContractTemplateTypeEnum.java
  15. 1 0
      cooleshow-gateway/gateway-web/src/main/java/com/yonge/gateway/web/config/SwaggerDocumentConfig.java
  16. 8 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/component/CancelOrderReceiver.java
  17. 1 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/ResourceServerConfig.java
  18. 4 4
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsCartItemController.java
  19. 8 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java
  20. 2 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/PaymentController.java
  21. 26 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/ProductCategorySmallVo.java
  22. 2 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsCartItemService.java
  23. 5 5
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsCartItemServiceImpl.java
  24. 2 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderReturnApplyServiceImpl.java
  25. 5 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  26. 24 9
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/PmsPortalProductServiceImpl.java
  27. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/AdminCourseGroupController.java
  28. 8 5
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ContractTemplateController.java
  29. 96 2
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseGroupController.java
  30. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseHomeworkController.java
  31. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseScheduleRepliedController.java
  32. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/EmployeeController.java
  33. 118 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HotSearchController.java
  34. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MemberPriceSettingsController.java
  35. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java
  36. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  37. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicTagController.java
  38. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/PianoRoomSettingsController.java
  39. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/PracticeController.java
  40. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentAttendanceController.java
  41. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentController.java
  42. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentCourseHomeworkController.java
  43. 49 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/SysUserContractRecordController.java
  44. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherAuthEntryRecordController.java
  45. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherAuthMusicianRecordController.java
  46. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java
  47. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherStyleVideoController.java
  48. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserAccountRecordController.java
  49. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderController.java
  50. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundController.java
  51. 10 7
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java
  52. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VideoLessonController.java
  53. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VipCardRecordController.java
  54. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/constant/WithdrawalConstant.java
  55. 6 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/WithdrawalStatusConvert.java
  56. 6 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ContractTemplateDao.java
  57. 70 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java
  58. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRepliedDao.java
  59. 23 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/HotSearchDao.java
  60. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SubjectDao.java
  61. 25 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysUserContractRecordDao.java
  62. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysUserTsignDao.java
  63. 20 19
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/excel/UserWithdrawalExport.java
  64. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/WithdrawalReq.java
  65. 12 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/CourseGroupDetailSearch.java
  66. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/HomeworkSearch.java
  67. 40 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/HotSearchSearch.java
  68. 26 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/SysUserContractRecordSearch.java
  69. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherWithdrawalSearch.java
  70. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserAccountRecordSearch.java
  71. 17 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ContractTemplate.java
  72. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/CourseScheduleRecord.java
  73. 128 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/HotSearch.java
  74. 94 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysUserTsign.java
  75. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TeacherFreeTime.java
  76. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserAccountRecord.java
  77. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderPayment.java
  78. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserWithdrawal.java
  79. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserWithdrawalCallback.java
  80. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AccountBizTypeEnum.java
  81. 0 35
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ContractTypeEnum.java
  82. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/DealStatusEnum.java
  83. 46 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/HomeworkStatusEnum.java
  84. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  85. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/ContractTemplateQueryInfo.java
  86. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/WithdrawSdk.java
  87. 20 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ContractService.java
  88. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ContractTemplateService.java
  89. 75 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java
  90. 40 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/HotSearchService.java
  91. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentTotalService.java
  92. 25 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserContractRecordService.java
  93. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserTsignService.java
  94. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherTotalService.java
  95. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalService.java
  96. 328 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ContractServiceImpl.java
  97. 36 48
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ContractTemplateServiceImpl.java
  98. 87 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  99. 12 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java
  100. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java

+ 1 - 1
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/SysUser.java

@@ -100,7 +100,7 @@ public class SysUser implements Serializable{
 	@ApiModelProperty(value = "用户角色")
 	private List<Long> roles;
 
-	private String certificateType;
+	private String certificateType = "IDENTITY";
 
 	public String getCertificateType() {
 		return certificateType;

+ 1 - 1
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/TokenController.java

@@ -222,7 +222,7 @@ public class TokenController extends BaseController {
             QRLoginDto dto = (QRLoginDto) data;
             return HttpResponseResult.succeed(dto);
         } else {
-            return HttpResponseResult.succeed("二维码已过期");
+            return HttpResponseResult.succeed(null, "二维码已过期");
         }
     }
 

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

@@ -65,6 +65,7 @@
         VALUES(#{isSuperAdmin},#{imToken},#{id},#{username},#{salt},#{phone},#{avatar},now(),now(),#{wxOpenid},#{qqOpenid},#{userType},
         #{gender},#{nation},#{birthdate},#{email},#{idCardNo},#{wechatId},#{realName},#{certificateType})
     </insert>
+
     <insert id="saveTeacher">
         INSERT INTO teacher (user_id_,create_time_,update_time_)VALUES(#{userId},NOW(),NOW())
     </insert>

+ 31 - 17
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsArticleServiceImpl.java

@@ -5,28 +5,31 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.common.enums.SysUserType;
+import com.yonge.cooleshow.bbs.dao.BbsArticleDao;
 import com.yonge.cooleshow.bbs.dao.BbsAuthRecordDao;
+import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
 import com.yonge.cooleshow.bbs.dto.search.BbsReplySearch;
+import com.yonge.cooleshow.bbs.entity.BbsArticle;
 import com.yonge.cooleshow.bbs.entity.BbsAuthRecord;
 import com.yonge.cooleshow.bbs.enums.ArticleEnum;
 import com.yonge.cooleshow.bbs.enums.YesOrNoEnum;
+import com.yonge.cooleshow.bbs.service.BbsArticleService;
+import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
 import com.yonge.cooleshow.bbs.vo.BbsReplyVo;
+import com.yonge.cooleshow.common.enums.SysUserType;
 import com.yonge.toolset.base.exception.BizException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import com.yonge.cooleshow.bbs.entity.BbsArticle;
-import com.yonge.cooleshow.bbs.vo.BbsArticleVo;
-import com.yonge.cooleshow.bbs.dto.search.BbsArticleSearch;
-import com.yonge.cooleshow.bbs.dao.BbsArticleDao;
-import com.yonge.cooleshow.bbs.service.BbsArticleService;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 @Service
@@ -166,18 +169,29 @@ public class BbsArticleServiceImpl extends ServiceImpl<BbsArticleDao, BbsArticle
     public IPage<BbsReplyVo> articleReply(IPage<BbsReplyVo> page, BbsReplySearch query) {
         query.setStatus(ArticleEnum.PASS);
         List<BbsReplyVo> allReply = baseMapper.articleReply(null, query);
-        for (BbsReplyVo replyVo : allReply) {
+
+        List<BbsReplyVo> tree = allReply.stream().filter((parentReply) -> {
+            return parentReply.getParentId() == 0;
+        }).map((p) -> {
             List<BbsReplyVo> list = new ArrayList<>();
 
-            findChildren(replyVo, list);
-            replyVo.setChildren(list);
-        }
 
-        return page.setRecords(allReply);
+            List<BbsReplyVo> childrens = getChildren(p, allReply, list);
+            List<BbsReplyVo> collect = childrens.stream().sorted(Comparator.comparing(BbsReplyVo::getCreatedTime)).collect(Collectors.toList());
+            p.setChildren(collect);
+            return p;
+        }).collect(Collectors.toList());
+        return page.setRecords(tree);
     }
 
-
-    public void findChildren(BbsReplyVo replyVo, List<BbsReplyVo> list) {
-
+    private List<BbsReplyVo> getChildren(BbsReplyVo rootReply, List<BbsReplyVo> allReply, List<BbsReplyVo> list) {
+        allReply.stream().filter(categoryEntity -> {
+            return categoryEntity.getParentId().equals(rootReply.getId());
+        }).map(child -> {
+            list.add(child);
+            getChildren(child, allReply, list);
+            return child;
+        }).collect(Collectors.toList());
+        return list;
     }
 }

+ 23 - 5
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsLikeServiceImpl.java

@@ -11,8 +11,12 @@ import com.yonge.cooleshow.bbs.vo.BbsLikeVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsLikeSearch;
 import com.yonge.cooleshow.bbs.dao.BbsLikeDao;
 import com.yonge.cooleshow.bbs.service.BbsLikeService;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class BbsLikeServiceImpl extends ServiceImpl<BbsLikeDao, BbsLike> implements BbsLikeService {
@@ -39,13 +43,27 @@ public class BbsLikeServiceImpl extends ServiceImpl<BbsLikeDao, BbsLike> impleme
      */
     @Override
     public void dolike(Long articleId, Long userId) {
-        String key = LIKE + articleId;
-        Boolean isLike = redisTemplate.opsForSet().isMember(key, userId);
+        // String key = LIKE + articleId;
+        // Boolean isLike = redisTemplate.opsForSet().isMember(key, userId);
+        //
+        // if (isLike) {
+        //     redisTemplate.opsForSet().remove(key, userId);
+        // } else {
+        //     redisTemplate.opsForSet().add(key, userId);
+        // }
 
-        if (isLike) {
-            redisTemplate.opsForSet().remove(key, userId);
+        List<BbsLike> list = this.lambdaQuery()
+                                 .eq(BbsLike::getArticleId, articleId)
+                                 .eq(BbsLike::getLikeUserId, userId)
+                                 .list();
+        if (CollectionUtils.isEmpty(list)) {
+            BbsLike bbsLike = new BbsLike();
+            bbsLike.setLikeUserId(userId);
+            bbsLike.setArticleId(articleId);
+            bbsLike.setCreatedTime(new Date());
+            this.save(bbsLike);
         } else {
-            redisTemplate.opsForSet().add(key, userId);
+            this.removeByIds(list.stream().map(BbsLike::getId).collect(Collectors.toList()));
         }
     }
 }

+ 8 - 7
cooleshow-bbs/src/main/java/com/yonge/cooleshow/bbs/service/impl/BbsPrivateMessageServiceImpl.java

@@ -2,17 +2,17 @@ package com.yonge.cooleshow.bbs.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.yonge.cooleshow.bbs.dto.BbsPrivateMessageDto;
+import com.yonge.cooleshow.bbs.dao.BbsPrivateMessageDao;
 import com.yonge.cooleshow.bbs.dto.MessageReadDto;
 import com.yonge.cooleshow.bbs.dto.PrivateMessagePersonVo;
-import org.springframework.stereotype.Service;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import com.yonge.cooleshow.bbs.entity.BbsPrivateMessage;
-import com.yonge.cooleshow.bbs.vo.BbsPrivateMessageVo;
 import com.yonge.cooleshow.bbs.dto.search.BbsPrivateMessageSearch;
-import com.yonge.cooleshow.bbs.dao.BbsPrivateMessageDao;
+import com.yonge.cooleshow.bbs.entity.BbsPrivateMessage;
 import com.yonge.cooleshow.bbs.service.BbsPrivateMessageService;
+import com.yonge.cooleshow.bbs.vo.BbsPrivateMessageVo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -37,6 +37,7 @@ public class BbsPrivateMessageServiceImpl extends ServiceImpl<BbsPrivateMessageD
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean read(MessageReadDto readDto) {
         return baseMapper.read(readDto) ;
     }

+ 1 - 1
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java

@@ -110,7 +110,7 @@ public class NewsController extends BaseController {
 			}
 		}
 		if(newsInfo.getType() == 4) {
-			if (StringUtil.isEmpty(newsInfo.getPlatformType() )) {
+			if (StringUtil.isEmpty(newsInfo.getClientType() )) {
 				return failed("平台不能为空");
 			}
 		}

+ 14 - 6
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/queryinfo/NewsInformationQueryInfo.java

@@ -1,15 +1,12 @@
 package com.yonge.cooleshow.cms.controller.queryinfo;
 
-import io.swagger.annotations.ApiModelProperty;
-
-import java.util.Date;
-import java.util.List;
-
-import com.yonge.cooleshow.cms.dal.entity.NewsStatusEnum;
 import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
 
 public class NewsInformationQueryInfo extends QueryInfo {
 
@@ -21,6 +18,9 @@ public class NewsInformationQueryInfo extends QueryInfo {
 	@NotBlank(message = "平台类型不能为空")
 	private String platformType;
 
+	@ApiModelProperty("轮播图客户端类型 STUDENT:学生端 WEBSITE:官网 ")
+	private String clientType;
+
 	@ApiModelProperty(value = "子类型  章节id", required = false)
 	private String subType;
 
@@ -48,6 +48,14 @@ public class NewsInformationQueryInfo extends QueryInfo {
 	private Date date;
 
 
+	public String getClientType() {
+		return clientType;
+	}
+
+	public void setClientType(String clientType) {
+		this.clientType = clientType;
+	}
+
 	public String getAttribute2() {
 		return attribute2;
 	}

+ 6 - 6
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/SysNewsInformation.java

@@ -95,15 +95,15 @@ public class SysNewsInformation {
 	private String linkType;
 
 	// 平台类型  ADMIN:平台端  STUDENT:学生端  TEACHER:老师端 WEBSITE:官网
-	@ApiModelProperty(value = "平台类型    STUDENT:学生端  WEBSITE:官网")
-	private String platformType;
+	@ApiModelProperty(value = "客户端类型    STUDENT:学生端  WEBSITE:官网")
+	private String clientType;
 
-	public String getPlatformType() {
-		return platformType;
+	public String getClientType() {
+		return clientType;
 	}
 
-	public void setPlatformType(String platformType) {
-		this.platformType = platformType;
+	public void setClientType(String clientType) {
+		this.clientType = clientType;
 	}
 
 	public Integer getShowTime() {

+ 6 - 7
cooleshow-cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml

@@ -30,7 +30,7 @@
 		<result column="update_by_" property="updateBy" />
 		<result column="link_type_" property="linkType" />
 		<result column="create_by_" property="createBy" />
-		<result column="platform_type_" property="platformType" />
+		<result column="client_type_" property="clientType" />
 	</resultMap>
 	
 	<resultMap type="com.yonge.cooleshow.cms.dto.SysNewsInformationDto" id="SysNewsInformationDto" extends="SysNewsInformation">
@@ -72,15 +72,14 @@
 				<if test="type == 4">
 					<choose>
 						<when test="platformType == 'WEBSITE'">
-							and sni.platform_type_ = #{platformType}
+							and sni.client_type_ = #{platformType}
 						</when>
 						<when test="platformType == 'STUDENT'">
-							and sni.platform_type_ = #{platformType}
+							and sni.client_type_ = #{platformType}
 						</when>
 					</choose>
 				</if>
 
-
 			</if>
 			<if test="excludeIds!=null and excludeIds.size()>0">
 				AND sni.id_ NOT IN
@@ -109,8 +108,8 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.yonge.cooleshow.cms.dal.entity.SysNewsInformation" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO sys_news_information (id_,title_,content_,cover_image_,video_cover_image_,type_,online_time_,offline_time_,sub_type_,status_,create_time_,update_time_,link_url_,href_target_,order_,del_flag_,memo_,attribute1_,attribute2_,subject_id_list_,create_by_,update_by_,show_time_,link_type_,platform_type_)
-		VALUES(#{id},#{title},#{content},#{coverImage},#{videoCoverImage},#{type},#{onlineTime},#{offlineTime},#{subType},#{status, typeHandler=com.yonge.toolset.mybatis.dal.CustomEnumTypeHandler},now(),now(),#{linkUrl},#{hrefTarget},#{order},0,#{memo},#{attribute1},#{attribute2},#{subjectIdList},#{createBy},#{updateBy},#{showTime},#{linkType},#{platformType})
+		INSERT INTO sys_news_information (id_,title_,content_,cover_image_,video_cover_image_,type_,online_time_,offline_time_,sub_type_,status_,create_time_,update_time_,link_url_,href_target_,order_,del_flag_,memo_,attribute1_,attribute2_,subject_id_list_,create_by_,update_by_,show_time_,link_type_,client_type_)
+		VALUES(#{id},#{title},#{content},#{coverImage},#{videoCoverImage},#{type},#{onlineTime},#{offlineTime},#{subType},#{status, typeHandler=com.yonge.toolset.mybatis.dal.CustomEnumTypeHandler},now(),now(),#{linkUrl},#{hrefTarget},#{order},0,#{memo},#{attribute1},#{attribute2},#{subjectIdList},#{createBy},#{updateBy},#{showTime},#{linkType},#{clientType})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -139,7 +138,7 @@
 				subject_id_list_ = #{subjectIdList},
 				update_by_ = #{updateBy},
 				link_type_ = #{linkType},
-				platform_type_ = #{platformType},
+				client_type_ = #{clientType},
 				show_time_ = #{showTime}
 		</set>
 		WHERE id_ = #{id}

+ 19 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -20,7 +20,7 @@ public interface SysConfigConstant {
      */
     String OPEN_LIVE_OVER_CLASS = "open_list_over_class";
     /***
-     * 平台提现手续费
+     * 平台结算手续费
      * @author liweifan
      * @updateTime 2022/3/24 17:15
      */
@@ -140,6 +140,12 @@ public interface SysConfigConstant {
      */
     String GOOD_LOGO_MUSIC = "good_logo_music";
     /***
+     * 商品曲目图片
+     * @author liweifan
+     * @updateTime 2022/4/20 11:43
+     */
+    String GOOD_LOGO_PIANO_ROOM = "good_logo_piano_room";
+    /***
      * 陪练课&直播课老师课程结算日期(天)
      * @author cy
      * @updateTime 2022/5/24 10:03
@@ -174,4 +180,16 @@ public interface SysConfigConstant {
 
     /** 老师分享曲目二维码跳转链接 */
     String TEACHER_MUSIC_SHEET_SHARE_URL = "teacher_music_sheet_share_url";
+    /**
+     * 琴房课扣时公式
+     */
+    String PIANO_ROOM_TIME_FORMULA = "piano_room_time_formula";
+
+    /** 公司名称 */
+    String COMPANY_NAME = "company_name";
+    /** 公司签章 */
+    String COMPANY_SEAL_PICTURE = "company_seal_picture";
+    /** 统一社会信用代码 */
+    String COMPANY_ORGAN_CODE = "company_organ_code";
+
 }

+ 2 - 2
cooleshow-common/src/main/java/com/yonge/cooleshow/common/entity/HttpResponseResult.java

@@ -30,8 +30,8 @@ public class HttpResponseResult<T> extends BaseResult<T> {
         return getResponseData(true, HttpStatus.OK, null, "");
     }
 
-    public static <T> HttpResponseResult<T> succeed(String message) {
-        return getResponseData(true, HttpStatus.OK, null, message);
+    public static <T> HttpResponseResult<T> succeed(T object, String message) {
+        return getResponseData(true, HttpStatus.OK, object, message);
     }
 
     public static <T> HttpResponseResult<T> warned(String message) {

+ 26 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ContractTemplateSourceEnum.java

@@ -0,0 +1,26 @@
+package com.yonge.cooleshow.common.enums;
+
+import com.yonge.toolset.base.enums.BaseEnum;
+
+public enum ContractTemplateSourceEnum implements BaseEnum<String, ContractTemplateSourceEnum> {
+    PLATFORM("平台协议"), LINGXINPAY("灵薪付");
+
+    private String code;
+
+    private String desc;
+
+    ContractTemplateSourceEnum(String desc) {
+        this.code = this.name();
+        this.desc = desc;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getDesc() {
+        return this.desc;
+    }
+
+}

+ 35 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ContractTemplateTypeEnum.java

@@ -0,0 +1,35 @@
+package com.yonge.cooleshow.common.enums;
+
+import com.yonge.toolset.base.enums.BaseEnum;
+
+public enum ContractTemplateTypeEnum implements BaseEnum<String, ContractTemplateTypeEnum> {
+    REGISTER(ContractTemplateSourceEnum.PLATFORM, "注册"),
+    COURSES(ContractTemplateSourceEnum.PLATFORM, "课程购买"),
+    PRODUCT(ContractTemplateSourceEnum.PLATFORM, "产品"),
+    WITHDRAW(ContractTemplateSourceEnum.LINGXINPAY, "用户结算");
+
+    private String code;
+
+    private ContractTemplateSourceEnum source;
+
+    private String desc;
+
+    ContractTemplateTypeEnum(ContractTemplateSourceEnum source, String desc) {
+        this.code = this.name();
+        this.source = source;
+        this.desc = desc;
+    }
+
+    @Override
+    public String getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public ContractTemplateSourceEnum getSource() {
+        return source;
+    }
+}

+ 1 - 0
cooleshow-gateway/gateway-web/src/main/java/com/yonge/gateway/web/config/SwaggerDocumentConfig.java

@@ -24,6 +24,7 @@ public class SwaggerDocumentConfig implements SwaggerResourcesProvider {
 		resources.add(swaggerResource("STUDENT服务", "/student-server/v2/api-docs", "2.0"));
 		resources.add(swaggerResource("TEACHER服务", "/teacher-server/v2/api-docs", "2.0"));
 		resources.add(swaggerResource("ADMIN服务", "/admin-server/v2/api-docs", "2.0"));
+		resources.add(swaggerResource("WEBSITE服务", "/website-server/v2/api-docs", "2.0"));
 		resources.add(swaggerResource("MALL_ADMIN服务", "/mall-admin-server/v2/api-docs", "2.0"));
 		resources.add(swaggerResource("MALL_PORTAL服务", "/mall-portal-server/v2/api-docs", "2.0"));
 		resources.add(swaggerResource("网络教室", "/classroom-server/v2/api-docs", "2.0"));

+ 8 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/component/CancelOrderReceiver.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.portal.component;
 
 import com.yonge.cooleshow.portal.service.OmsPortalOrderService;
+import com.yonge.toolset.base.exception.BizException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
@@ -20,7 +21,13 @@ public class CancelOrderReceiver {
     private OmsPortalOrderService portalOrderService;
     @RabbitHandler
     public void handle(Long orderId){
-        portalOrderService.cancelOrder(orderId, "超时取消", null);
+        try {
+            portalOrderService.cancelOrder(orderId, "超时取消", null);
+
+        } catch (BizException e) {
+            e.printStackTrace();
+            logger.warn(e.getLocalizedMessage());
+        }
         logger.info("process orderId:{}", orderId);
     }
 }

+ 1 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/config/ResourceServerConfig.java

@@ -27,7 +27,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
             .authorizeRequests().antMatchers("/task/**").hasIpAddress("0.0.0.0/0")
                 .and()
                 .authorizeRequests().antMatchers("/wechat/*","/v2/api-docs", "/code/*","/payment/callback/**",
-                 "/order/paySuccess/test")
+                 "/order/paySuccess/test","/order/cancelUserOrder/test")
             .permitAll().anyRequest().permitAll().and().httpBasic();
     }
 

+ 4 - 4
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsCartItemController.java

@@ -31,10 +31,10 @@ public class OmsCartItemController {
     @ApiOperation("添加商品到购物车")
     @RequestMapping(value = "/add", method = RequestMethod.POST)
     @ResponseBody
-    public CommonResult add(@RequestBody OmsCartItem cartItem) {
-        int count = cartItemService.add(cartItem);
-        if (count > 0) {
-            return CommonResult.success(count);
+    public CommonResult<OmsCartItem> add(@RequestBody OmsCartItem cartItem) {
+        OmsCartItem omsCartItem = cartItemService.add(cartItem);
+        if (omsCartItem != null) {
+            return CommonResult.success(omsCartItem);
         }
         return CommonResult.failed();
     }

+ 8 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java

@@ -145,4 +145,12 @@ public class OmsPortalOrderController {
         Integer count = portalOrderService.paySuccess(orderId,payType);
         return CommonResult.success(count, "支付成功");
     }
+
+    @ApiOperation("用户取消订单")
+    @GetMapping(value = "/cancelUserOrder/test")
+    @ResponseBody
+    public CommonResult cancelUserOrderTest(@RequestParam Long orderId) {
+        portalOrderService.cancelOrder(orderId, "用户取消订单", null);
+        return CommonResult.success(null);
+    }
 }

+ 2 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/PaymentController.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.portal.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -144,6 +145,7 @@ public class PaymentController extends BaseController {
         BaseResult<PaymentCallBack> res = paymentClient.analysisNotice(
                 OpenEnum.valueOf(openType), PaymentClientEnum.valueOf(client),
                 PayChannelEnum.valueOf(payChannel), MethodNameEnum.valueOf(payMethod), request);
+        log.info("支付回调整理后的信息 : {}", JSON.toJSONString(res));
         if (res.getStatus()) {
             PaymentCallBack data = res.getData();
 

+ 26 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/ProductCategorySmallVo.java

@@ -3,6 +3,9 @@ package com.yonge.cooleshow.portal.dto;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Description
  *
@@ -14,6 +17,9 @@ public class ProductCategorySmallVo {
 
     private Long id;
 
+    @ApiModelProperty("上级id")
+    private Long parentId;
+
     @ApiModelProperty("名称")
     private String name;
 
@@ -23,6 +29,26 @@ public class ProductCategorySmallVo {
     @ApiModelProperty(value = "描述")
     private String description;
 
+    @ApiModelProperty("下级类型")
+    private List<ProductCategorySmallVo> children = new ArrayList<>();
+
+
+    public Long getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId) {
+        this.parentId = parentId;
+    }
+
+    public List<ProductCategorySmallVo> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<ProductCategorySmallVo> children) {
+        this.children = children;
+    }
+
     public Long getId() {
         return id;
     }

+ 2 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsCartItemService.java

@@ -14,9 +14,10 @@ import java.util.List;
 public interface OmsCartItemService {
     /**
      * 查询购物车中是否包含该商品,有增加数量,无添加到购物车
+     * @return
      */
     @Transactional
-    int add(OmsCartItem cartItem);
+    OmsCartItem add(OmsCartItem cartItem);
 
     /**
      * 根据会员编号获取购物车列表

+ 5 - 5
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsCartItemServiceImpl.java

@@ -44,8 +44,7 @@ public class OmsCartItemServiceImpl implements OmsCartItemService {
     private PmsSkuStockMapper skuStockMapper;
 
     @Override
-    public int add(OmsCartItem cartItem) {
-        int count;
+    public OmsCartItem add(OmsCartItem cartItem) {
         UmsMember currentMember =memberService.getCurrentMember();
         cartItem.setMemberId(currentMember.getId());
         cartItem.setMemberNickname(currentMember.getNickname());
@@ -76,13 +75,14 @@ public class OmsCartItemServiceImpl implements OmsCartItemService {
             }
 
             cartItem.setCreateDate(new Date());
-            count = cartItemMapper.insert(cartItem);
+            cartItemMapper.insert(cartItem);
+            return cartItem;
         } else {
             cartItem.setModifyDate(new Date());
             existCartItem.setQuantity(existCartItem.getQuantity() + cartItem.getQuantity());
-            count = cartItemMapper.updateByPrimaryKey(existCartItem);
+            cartItemMapper.updateByPrimaryKey(existCartItem);
         }
-        return count;
+        return existCartItem;
     }
 
     /**

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

@@ -133,6 +133,8 @@ public class OmsPortalOrderReturnApplyServiceImpl implements OmsPortalOrderRetur
 
     @Override
     public void refundPaymentCallBack(PaymentCallBack data) {
+
+        log.info("退款回调信息: {}",JSON.toJSONString(data));
         if (TradeStatusEnum.succeeded.equals(data.getStatus())) {//退款成功
             paymentRefundSucceededHandle(data);
         } else if (TradeStatusEnum.failed.equals(data.getStatus())) {//退款失败

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

@@ -388,6 +388,8 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             // 发起关单
             userOrderPaymentService.closePayment(cancelOrder.getOrderSn(), message, data);
 
+        } else {
+            throw new BizException("订单状态非待支付和支付中,不能取消");
         }
     }
 
@@ -645,6 +647,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 
     @Override
     public void executePaymentCallBack(PaymentCallBack data) {
+        LOG.info("支付回调信息: {}",JSON.toJSONString(data));
         if (TradeStatusEnum.succeeded.equals(data.getStatus())) {//支付成功
             paymentSucceededHandle(data);
         } else if (TradeStatusEnum.failed.equals(data.getStatus())) {//支付失败
@@ -654,6 +657,8 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 
     @Override
     public void closePaymentCallBack(PaymentCallBack data) {
+
+        LOG.info("关单回调信息: {}",JSON.toJSONString(data));
         if (TradeStatusEnum.succeeded.equals(data.getStatus())) {//关单成功
             paymentCloseSucceededHandle(data);
         } else if (TradeStatusEnum.failed.equals(data.getStatus())) {//关单失败

+ 24 - 9
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/PmsPortalProductServiceImpl.java

@@ -20,7 +20,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * 前台订单管理Service实现类
@@ -200,22 +199,38 @@ public class PmsPortalProductServiceImpl implements PmsPortalProductService {
         }
         return pmsProductCategories;
     }
+
     private List<ProductCategorySmallVo> getProductCategoryList() {
         PmsProductCategoryExample example = new PmsProductCategoryExample();
         example.setOrderByClause("sort desc");
-        example.createCriteria().andParentIdEqualTo(0L)
+        example.createCriteria()
                .andShowStatusEqualTo(1);
         List<PmsProductCategory> pmsProductCategories = productCategoryMapper.selectByExample(example);
         if (CollectionUtils.isEmpty(pmsProductCategories)) {
             return new ArrayList<>();
         }
-        return pmsProductCategories.stream()
-                                   .map( pmsProductCategory ->  {
-                                       ProductCategorySmallVo productCategorySmallVo = new ProductCategorySmallVo();
-                                       BeanUtils.copyProperties(pmsProductCategory,productCategorySmallVo);
-                                       return productCategorySmallVo;
-                                   })
-                                   .collect(Collectors.toList());
+        List<ProductCategorySmallVo> collect = pmsProductCategories.stream().map(pmsProductCategory -> {
+            ProductCategorySmallVo productCategorySmallVo = new ProductCategorySmallVo();
+            BeanUtils.copyProperties(pmsProductCategory, productCategorySmallVo);
+            return productCategorySmallVo;
+        }).collect(Collectors.toList());
+
+        List<ProductCategorySmallVo> tree = new ArrayList<>();
+        for (ProductCategorySmallVo categorySmallVo : collect) {
+            if (categorySmallVo.getParentId() == null || categorySmallVo.getParentId() == 0) {
+                tree.add(categorySmallVo);
+            }
+            for (ProductCategorySmallVo tagVo : collect) {
+                if (tagVo.getParentId() != null && tagVo.getParentId() != 0 && tagVo.getParentId().equals(categorySmallVo.getId())) {
+                    if (categorySmallVo.getChildren() == null) {
+                        categorySmallVo.setChildren(new ArrayList<>());
+                    }
+                    categorySmallVo.getChildren().add(tagVo);
+                }
+
+            }
+        }
+        return tree;
     }
 
     private List<PmsBrand> getBrandList() {

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/AdminCourseGroupController.java

@@ -8,7 +8,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentCourseSearch
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentSearch;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;

+ 8 - 5
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ContractTemplateController.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.admin.controller;
 
-import com.yonge.cooleshow.biz.dal.enums.ContractTypeEnum;
+import com.yonge.cooleshow.common.enums.ContractTemplateSourceEnum;
+import com.yonge.cooleshow.common.enums.ContractTemplateTypeEnum;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
@@ -23,7 +24,7 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 
 @RequestMapping("contractTemplate")
-@Api(tags = "机构协议模板")
+@Api(tags = "协议模板")
 @RestController
 public class ContractTemplateController extends BaseController {
 
@@ -37,6 +38,7 @@ public class ContractTemplateController extends BaseController {
 	@GetMapping(value = "/list")
 	@PreAuthorize("@pcs.hasPermissions('contractTemplate/list')")
 	public HttpResponseResult<PageInfo<ContractTemplateDto>> getList(ContractTemplateQueryInfo queryInfo) {
+		queryInfo.setSource(ContractTemplateSourceEnum.PLATFORM.getCode());
 		return succeed(contractTemplateService.queryPageList(queryInfo));
 	}
 
@@ -51,7 +53,7 @@ public class ContractTemplateController extends BaseController {
 	@ApiOperation("查询最新启用的协议模板")
 	@GetMapping(value = "/queryLatestContractTemplate")
 	@PreAuthorize("@pcs.hasPermissions('contractTemplate/queryLatestContractTemplate')")
-	public HttpResponseResult<ContractTemplate> queryLatestContractTemplate(@ApiParam(value = "业务类型 REGISTER 注册 COURSES 课程购买 PRODUCT 产品 WITHDRAW 提现", required = true) @RequestParam("contractType") ContractTypeEnum contractType) {
+	public HttpResponseResult<ContractTemplate> queryLatestContractTemplate(@ApiParam(value = "业务类型 REGISTER 注册 COURSES 课程购买 PRODUCT 产品 WITHDRAW 结算", required = true) @RequestParam("contractType") ContractTemplateTypeEnum contractType) {
 		return succeed(contractTemplateService.queryLatestContractTemplate(contractType));
 	}
 
@@ -59,12 +61,13 @@ public class ContractTemplateController extends BaseController {
 	@PostMapping(value = "/add", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
 	@PreAuthorize("@pcs.hasPermissions('contractTemplate/add')")
 	public HttpResponseResult<Object> add(@RequestBody ContractTemplate contractTemplate) {
+		contractTemplate.setSource(ContractTemplateSourceEnum.PLATFORM.getCode());
+
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        
         if(sysUser == null || sysUser.getId() == null){
         	return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-		
+
 		contractTemplate.setStatus(false);
 		contractTemplate.setModifyBy(sysUser.getId());
 		contractTemplateService.createContractTemplate(contractTemplate);

+ 96 - 2
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseGroupController.java

@@ -1,11 +1,13 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.CourseGroupDetailSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.CourseGroupSearch;
-import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -13,10 +15,12 @@ import com.yonge.toolset.base.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * @Author: cy
@@ -29,6 +33,10 @@ import javax.validation.constraints.NotNull;
 public class CourseGroupController extends BaseController {
     @Autowired
     private CourseGroupService courseGroupService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private CourseScheduleService courseScheduleService;
 
     @ApiOperation(value = "课程组管理-陪练课",notes = "{\n" +
             "    \"subjectId\":20,\n" +
@@ -121,4 +129,90 @@ public class CourseGroupController extends BaseController {
     public HttpResponseResult<CourseGroupInfoVo> selectLiveGroupInfo(@NotNull Long groupId) {
         return succeed(courseGroupService.selectLiveGroupInfo(groupId));
     }
+
+    @ApiOperation(value = "课程组管理-琴房课",notes = "{\n" +
+            "    \"subjectId\":20,\n" +
+            "    \"search\":\"师\",\n" +
+            "    \"status\":\"ING\"\n" +
+            "}")
+    @PostMapping(value = "/piano")
+    public HttpResponseResult<PageInfo<CourseGroupPianoVo>> selectPianoGroup(@RequestBody CourseGroupSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectPianoGroup(PageUtil.getPage(search), search)));
+    }
+
+    @ApiOperation(value = "课程组管理-琴房课-详情",notes = "{\n" +
+            "    \"courseGroupId\":334,\n" +
+            "    \"search\":\"\",\n" +
+            "    \"status\":\"\",\n" +
+            "    \"startTime\":null,\n" +
+            "    \"endTime\":null,\n" +
+            "    \"teacherSign\":null,\n" +
+            "    \"studentSign\":null\n" +
+            "}")
+    @PostMapping(value = "/piano/detail")
+    public HttpResponseResult<PageInfo<CourseGroupPianoDetailVo>> selectPianoGroupDetail(@Validated @RequestBody CourseGroupDetailSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectPianoGroupDetail(PageUtil.getPage(search), search)));
+    }
+
+    @ApiOperation(value = "课程组管理-琴房课-详情-学员名单")
+    @GetMapping(value = "/piano/student")
+    public HttpResponseResult<List<StudentSignVo>> studentSign(@NotNull Long courseId) {
+        return succeed(courseGroupService.studentSign(courseId,null));
+    }
+
+    @ApiOperation(value = "学员管理-琴房课",notes = "{\n" +
+            "    \"studentId\":20,\n" +
+            "    \"search\":\"师\",\n" +
+            "    \"status\":\"ING\"\n" +
+            "}")
+    @PostMapping(value = "/piano/student")
+    public HttpResponseResult<PageInfo<CourseGroupPianoVo>> selectPianoGroupStudent(@RequestBody CourseGroupSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectPianoGroupStudent(PageUtil.getPage(search), search)));
+    }
+
+    @ApiOperation(value = "学员管理-琴房课-详情",notes = "{\n" +
+            "    \"studentId\":20,\n" +
+            "    \"courseGroupId\":334,\n" +
+            "    \"search\":\"\",\n" +
+            "    \"status\":\"\",\n" +
+            "    \"startTime\":null,\n" +
+            "    \"endTime\":null,\n" +
+            "    \"teacherSign\":0,\n" +
+            "    \"studentSign\":0\n" +
+            "}")
+    @PostMapping(value = "/piano/student/detail")
+    public HttpResponseResult<PageInfo<CourseGroupPianoDetailVo>> selectPianoGroupStudentDetail(@Validated @RequestBody CourseGroupDetailSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectPianoGroupStudentDetail(PageUtil.getPage(search), search)));
+    }
+
+    @ApiOperation("查询琴房剩余时长、冻结时长、统计学员人数")
+    @GetMapping("/selectRemainTime")
+    public HttpResponseResult<PianoRoomTimeVo> selectRemainTime(Long teacherId) {
+        return succeed(courseScheduleService.selectRemainTime(teacherId));
+    }
+
+    @ApiOperation(value = "老师管理-琴房课",notes = "{\n" +
+            "    \"teacherId\":20,\n" +
+            "    \"search\":\"师\",\n" +
+            "    \"status\":\"ING\"\n" +
+            "}")
+    @PostMapping(value = "/piano/teacher")
+    public HttpResponseResult<PageInfo<CourseGroupPianoVo>> selectPianoGroupTeacher(@RequestBody CourseGroupSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectPianoGroupTeacher(PageUtil.getPage(search), search)));
+    }
+
+    @ApiOperation(value = "老师管理-琴房课-详情",notes = "{\n" +
+            "    \"teacherId\":20,\n" +
+            "    \"courseGroupId\":334,\n" +
+            "    \"search\":\"\",\n" +
+            "    \"status\":\"\",\n" +
+            "    \"startTime\":null,\n" +
+            "    \"endTime\":null,\n" +
+            "    \"teacherSign\":0,\n" +
+            "    \"studentSign\":0\n" +
+            "}")
+    @PostMapping(value = "/piano/teacher/detail")
+    public HttpResponseResult<PageInfo<CourseGroupPianoDetailVo>> selectPianoGroupTeacherDetail(@Validated @RequestBody CourseGroupDetailSearch search) {
+        return succeed(PageUtil.pageInfo(courseGroupService.selectPianoGroupTeacherDetail(PageUtil.getPage(search), search)));
+    }
 }

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseHomeworkController.java

@@ -5,7 +5,7 @@ import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseHomeworkService;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
 import com.yonge.cooleshow.common.controller.BaseController;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseScheduleRepliedController.java

@@ -2,7 +2,7 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/EmployeeController.java

@@ -7,7 +7,7 @@ import com.yonge.cooleshow.biz.dal.dao.EmployeeDao;
 import com.yonge.cooleshow.biz.dal.dto.EmployeeDto;
 import com.yonge.cooleshow.biz.dal.dto.search.EmployeeSearch;
 import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.EmployeeVo;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;

+ 118 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HotSearchController.java

@@ -0,0 +1,118 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.search.HotSearchSearch;
+import com.yonge.cooleshow.biz.dal.entity.HotSearch;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import com.yonge.cooleshow.biz.dal.service.HotSearchService;
+import com.yonge.toolset.mybatis.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.HotSearchVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Date;
+
+@RestController
+@RequestMapping("/hotSearch")
+@Api(value = "热门搜索表", tags = "热门搜索表")
+public class HotSearchController extends BaseController {
+
+    @Autowired
+    private HotSearchService hotSearchService;
+
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+	/**
+     * 查询单条
+     */
+    @GetMapping("/detail/{id}")
+    @ApiOperation(value = "详情", notes = "传入id")
+    public HttpResponseResult<HotSearch> detail(@PathVariable("id") Long id) {
+		HotSearch hotSearch = hotSearchService.getById(id);
+		if (hotSearch == null) {
+			return failed("未找到对应信息");
+		}
+		return succeed(hotSearch);
+	}
+    
+    /**
+     * 查询分页
+     */
+    @PostMapping("/page")
+    @ApiOperation(value = "查询分页", notes = "传入hotSearchSearch")
+    public HttpResponseResult<PageInfo<HotSearchVo>> page(@RequestBody HotSearchSearch query) {
+		IPage<HotSearchVo> pages = hotSearchService.selectPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(pages));
+	}
+    
+    /**
+	 * 新增
+	 */
+	@PostMapping("/save")
+	@ApiOperation(value = "新增", notes = "传入hotSearch")
+	public HttpResponseResult save(@Valid @RequestBody HotSearch hotSearch) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (user == null || user.getId() == null) {
+			return failed("用户信息不存在");
+		}
+
+		hotSearch.setCreateOn(new Date());
+		hotSearch.setModifyOn(new Date());
+		hotSearch.setCreateBy(user.getId());
+		hotSearch.setUpdateBy(user.getId());
+		hotSearch.setStatus(YesOrNoEnum.NO);
+
+		return status(hotSearchService.save(hotSearch));
+	}
+    
+    /**
+	 * 修改
+	 */
+	@PostMapping("/update")
+	@ApiOperation(value = "修改", notes = "传入hotSearch")
+	public HttpResponseResult update(@Valid @RequestBody HotSearch hotSearch) {
+		if (hotSearch.getId() == null) {
+			return failed("热门搜索id不能为空");
+		}
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (user == null || user.getId() == null) {
+			return failed("用户信息不存在");
+		}
+		hotSearch.setModifyOn(new Date());
+		hotSearch.setUpdateBy(user.getId());
+
+		return status(hotSearchService.update(hotSearch));
+	}
+
+ 	/**
+	 * 删除
+	 */
+	@PostMapping("/remove/{id}")
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public HttpResponseResult remove(@PathVariable Long id) {
+
+		if (id == null) {
+			return failed("参数错误");
+		}
+		return status(hotSearchService.removeById(id));
+	}
+
+
+	@PostMapping("/status/{id}")
+	@ApiOperation(value = "修改状态", notes = "传入ids")
+	public HttpResponseResult status(@PathVariable Long id) {
+
+		if (id == null) {
+			return failed("参数错误");
+		}
+		return status(hotSearchService.status(id));
+	}
+}

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MemberPriceSettingsController.java

@@ -2,7 +2,7 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.search.MemberPriceSettingsSearch;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.MemberPriceSettingsVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java

@@ -9,7 +9,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicAlbum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.AlbumDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
 import com.yonge.cooleshow.common.controller.BaseController;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java

@@ -15,7 +15,7 @@ import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.service.MusicTagService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicTagController.java

@@ -5,7 +5,7 @@ import com.yonge.cooleshow.biz.dal.dto.MusicTagSaveDto;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicTagSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicTag;
 import com.yonge.cooleshow.biz.dal.service.MusicTagService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.MusicTagVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/PianoRoomSettingsController.java

@@ -6,7 +6,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 
 import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.*;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/PracticeController.java

@@ -3,7 +3,7 @@ package com.yonge.cooleshow.admin.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.search.PracticeSearch;
 import com.yonge.cooleshow.biz.dal.service.PracticeService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.PracticeVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentAttendanceController.java

@@ -2,7 +2,7 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentController.java

@@ -3,7 +3,7 @@ package com.yonge.cooleshow.admin.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentCourseHomeworkController.java

@@ -2,7 +2,7 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;

+ 49 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/SysUserContractRecordController.java

@@ -0,0 +1,49 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.search.SysUserContractRecordSearch;
+import com.yonge.cooleshow.biz.dal.service.SysUserContractRecordService;
+import com.yonge.cooleshow.biz.dal.vo.SysUserContractRecordVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.mybatis.support.PageUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * 用户协议记录表-一个用户一种协议一个版本一条记录(SysUserContractRecord)表控制层
+ *
+ * @author hgw
+ * @since 2022-05-07 15:04:05
+ */
+@Api(tags = "用户协议记录表-一个用户一种协议一个版本一条记录")
+@RestController
+@RequestMapping("/sysUserContractRecord")
+public class SysUserContractRecordController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private SysUserContractRecordService sysUserContractRecordService;
+
+    /**
+     * 查询分页
+     */
+    @PostMapping("/page")
+    @ApiOperation(value = "查询分页", notes = "传入sysUserContractRecordSearch")
+    @PreAuthorize("@pcs.hasPermissions('sysUserContractRecord/page')")
+    public HttpResponseResult<PageInfo<SysUserContractRecordVo>> page(@RequestBody SysUserContractRecordSearch query) {
+        IPage<SysUserContractRecordVo> pages = sysUserContractRecordService.selectPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(pages));
+    }
+
+}
+

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherAuthEntryRecordController.java

@@ -6,7 +6,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
 import com.yonge.cooleshow.biz.dal.dto.search.AuthEntryRecordSearch;
 import com.yonge.cooleshow.biz.dal.service.TeacherAuthEntryRecordService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.TeacherAuthEntryRecordVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherAuthMusicianRecordController.java

@@ -6,7 +6,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
 import com.yonge.cooleshow.biz.dal.dto.search.AuthEntryRecordSearch;
 import com.yonge.cooleshow.biz.dal.service.TeacherAuthMusicianRecordService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.MusicianAuthEntryRecordVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherStyleVideoController.java

@@ -6,7 +6,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 
 import com.yonge.toolset.base.page.PageInfo;
 import io.swagger.annotations.*;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserAccountRecordController.java

@@ -2,7 +2,7 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;

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

@@ -3,7 +3,7 @@ package com.yonge.cooleshow.admin.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import com.yonge.cooleshow.biz.dal.dto.excel.UserOrderExport;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;

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

@@ -7,7 +7,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
 import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundBill;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;

+ 10 - 7
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserWithdrawalController.java

@@ -3,12 +3,14 @@ package com.yonge.cooleshow.admin.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.dto.excel.UserWithdrawalExport;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.utils.easyexcel.*;
 import io.swagger.annotations.*;
+import org.apache.commons.beanutils.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -17,11 +19,12 @@ import com.yonge.cooleshow.biz.dal.vo.UserWithdrawalVo;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherWithdrawalSearch;
 import com.yonge.cooleshow.biz.dal.service.UserWithdrawalService;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.*;
 
 @RestController
 @RequestMapping("/userWithdrawal")
-@Api(value = "用户提现", tags = "用户提现")
+@Api(value = "用户结算", tags = "用户结算")
 public class UserWithdrawalController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
@@ -57,26 +60,26 @@ public class UserWithdrawalController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('userWithdrawal/exportExcel')")
     public void exportExcel(@RequestBody TeacherWithdrawalSearch query) {
         List<UserWithdrawalVo> withdrawalVoList = userWithdrawalService.selectList(query);
-        /*List<UserWithdrawalExport> list = new ArrayList<>();
+        List<UserWithdrawalExport> list = new ArrayList<>();
         withdrawalVoList.forEach(o -> {
             UserWithdrawalExport export = new UserWithdrawalExport();
             try {
                 BeanUtils.copyProperties(export, o);
-                StringBuffer buffer = new StringBuffer(export.getId().toString());
+                /*StringBuffer buffer = new StringBuffer(export.getId().toString());
                 buffer.append(export.getUserId());
                 buffer.append(export.getAmount().setScale(2, RoundingMode.HALF_UP));
                 buffer.append(export.getPlantformFee().setScale(2, RoundingMode.HALF_UP));
                 buffer.append(export.getActualAmount().setScale(2, RoundingMode.HALF_UP));
                 String s = DigestUtils.md5DigestAsHex(buffer.toString().getBytes());
-                export.setSign(s);
+                export.setSign(s);*/
                 list.add(export);
             } catch (IllegalAccessException e) {
                 e.printStackTrace();
             } catch (InvocationTargetException e) {
                 e.printStackTrace();
             }
-        });*/
-        ExcelUtils.exportExcel(withdrawalVoList, "提现列表数据" + System.currentTimeMillis(),
+        });
+        ExcelUtils.exportExcel(list, "结算列表数据" + System.currentTimeMillis(),
                 "列表数据");
     }
 

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VideoLessonController.java

@@ -9,7 +9,7 @@ import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupDetailService;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.valid.AddGroup;
 import com.yonge.cooleshow.biz.dal.valid.SelectGroup;
 import com.yonge.cooleshow.biz.dal.vo.*;

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VipCardRecordController.java

@@ -3,7 +3,7 @@ package com.yonge.cooleshow.admin.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.search.VipCardRecordSearch;
 import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/constant/WithdrawalConstant.java

@@ -2,7 +2,7 @@ package com.yonge.cooleshow.biz.dal.constant;
 
 public interface WithdrawalConstant {
     /**
-     * 提现三方类型:lingxinpay 灵薪付
+     * 结算三方类型:lingxinpay 灵薪付
      */
     String openType = "lingxinpay";
     //第三方url

+ 6 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/WithdrawalStatusConvert.java

@@ -6,12 +6,13 @@ import com.alibaba.excel.metadata.CellData;
 import com.alibaba.excel.metadata.GlobalConfiguration;
 import com.alibaba.excel.metadata.property.ExcelContentProperty;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
 
 /**
  * @Author: liweifan
  * @Data: 2022/4/15 15:36
  */
-public class WithdrawalStatusConvert implements Converter<AuthStatusEnum> {
+public class WithdrawalStatusConvert implements Converter<TradeStatusEnum> {
 
     @Override
     public Class supportJavaTypeKey() {
@@ -24,18 +25,18 @@ public class WithdrawalStatusConvert implements Converter<AuthStatusEnum> {
     }
 
     @Override
-    public AuthStatusEnum convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+    public TradeStatusEnum convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
         try {
-            return AuthStatusEnum.valueOf(cellData.getStringValue().trim());
+            return TradeStatusEnum.valueOf(cellData.getStringValue().trim());
         } catch (Exception e) {
             return null;
         }
     }
 
     @Override
-    public CellData convertToExcelData(AuthStatusEnum statusEnum, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+    public CellData convertToExcelData(TradeStatusEnum statusEnum, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
         if (null != statusEnum) {
-            return new CellData(statusEnum.getName());
+            return new CellData(statusEnum.getMsg());
         }
         return new CellData("异常数据");
     }

+ 6 - 9
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ContractTemplateDao.java

@@ -11,13 +11,10 @@ import com.yonge.toolset.mybatis.dal.BaseDAO;
 
 public interface ContractTemplateDao extends BaseDAO<Integer, ContractTemplate> {
 
-	List<ContractTemplateDto> queryPageList(Map<String, Object> params);
-	
-	ContractTemplate queryLatestContractTemplate( @Param("type") String type);
-	
-	int disableContract(@Param("owner") String owner, @Param("type") String type);
-	
-	Integer queryMaxVersion();
-
-	
+    List<ContractTemplateDto> queryPageList(Map<String, Object> params);
+
+    ContractTemplate queryLatestContractTemplate(@Param("contractSource") String contractSource, @Param("type") String type);
+
+    int disableContract(@Param("type") String type);
+
 }

+ 70 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseGroupDao.java

@@ -182,8 +182,78 @@ public interface CourseGroupDao extends BaseMapper<CourseGroup> {
 
     /**
      * 批量更新组状态
+     *
      * @param list
      */
     void updateBatch(List<Long> list);
+
+    /**
+     * 查询琴房课组
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupPianoVo> selectPianoGroup(@Param("page") IPage<CourseGroupPianoVo> page,
+                                               @Param("param") CourseGroupSearch search);
+
+    /**
+     * 查询琴房课详情
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupPianoDetailVo> selectPianoGroupDetail(@Param("page") IPage<CourseGroupPianoDetailVo> page,
+                                                           @Param("param") CourseGroupDetailSearch search);
+
+    /**
+     * 查询琴房课学员考勤
+     *
+     * @param courseId
+     * @param type
+     * @return
+     */
+    List<StudentSignVo> studentSign(@Param("courseId") Long courseId, @Param("type") String type);
+
+    /**
+     * 根据学员查询琴房课组
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupPianoVo> selectPianoGroupStudent(@Param("page") IPage<CourseGroupPianoVo> page,
+                                                      @Param("param") CourseGroupSearch search);
+
+    /**
+     * 查询琴房课详情
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupPianoDetailVo> selectPianoGroupStudentDetail(@Param("page") IPage<CourseGroupPianoDetailVo> page,
+                                                                  @Param("param") CourseGroupDetailSearch search);
+
+    /**
+     * 根据老师查询琴房课组
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupPianoVo> selectPianoGroupTeacher(@Param("page") IPage<CourseGroupPianoVo> page,
+                                                      @Param("param") CourseGroupSearch search);
+
+    /**
+     * 查询琴房课详情
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupPianoDetailVo> selectPianoGroupTeacherDetail(@Param("page") IPage<CourseGroupPianoDetailVo> page,
+                                                                  @Param("param") CourseGroupDetailSearch search);
 }
 

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleRepliedDao.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.vo.CourseRepliedVo;
+import com.yonge.cooleshow.biz.dal.vo.CourseScheduleStudentVo;
 import com.yonge.cooleshow.biz.dal.vo.MyRepliedVo;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleReplied;
@@ -39,6 +40,8 @@ public interface CourseScheduleRepliedDao extends BaseMapper<CourseScheduleRepli
 
     List<Long> selectAll();
 
+    List<Long> selectReplyStudent();
+
     List<Long> selectAllClass();
 
 	/**
@@ -61,4 +64,6 @@ public interface CourseScheduleRepliedDao extends BaseMapper<CourseScheduleRepli
 	 * @Date: 2022/4/19
 	 */
     CourseRepliedVo selectReplied(CourseScheduleReplied replied);
+
+    void insertBatch(List<CourseScheduleStudentVo> list);
 }

+ 23 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/HotSearchDao.java

@@ -0,0 +1,23 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.search.HotSearchSearch;
+import com.yonge.cooleshow.biz.dal.entity.HotSearch;
+import com.yonge.cooleshow.biz.dal.vo.HotSearchVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+public interface HotSearchDao extends BaseMapper<HotSearch> {
+
+    /**
+     * 分页
+     *
+     * @param page
+     * @param query
+     * @return
+     */
+    List<HotSearchVo> selectPage(@Param("page") IPage<HotSearchVo> page, @Param("query") HotSearchSearch query);
+}

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SubjectDao.java

@@ -33,6 +33,12 @@ public interface SubjectDao extends BaseDAO<Long, Subject> {
      */
     List<Subject> findByParentId(@Param("parentId") Long parentId);
 
+    /**
+     * 判断声部是否有人使用
+     * @param id
+     * @return
+     */
+    Boolean useSubject(@Param("id") Long id);
     /***
      * 通过id删除
      * @param: id
@@ -47,4 +53,5 @@ public interface SubjectDao extends BaseDAO<Long, Subject> {
     Subject queryByCode(@Param("code") String code);
 
     Subject queryByName(@Param("name") String name);
+
 }

+ 25 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysUserContractRecordDao.java

@@ -1,12 +1,13 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.search.SysUserContractRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.SysUserContractRecord;
-import com.yonge.cooleshow.biz.dal.enums.ContractTypeEnum;
+import com.yonge.cooleshow.biz.dal.vo.SysUserContractRecordVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 用户协议记录表-一个用户一种协议一个版本一条记录(SysUserContractRecord)表数据库访问层
@@ -15,14 +16,35 @@ import java.util.Map;
  * @since 2022-05-07 15:04:05
  */
 public interface SysUserContractRecordDao extends BaseMapper<SysUserContractRecord> {
+    /**
+     * 查询详情
+     *
+     * @author liweifan
+     * @date 2022-06-16 13:47:21
+     * @return: com.yonge.cooleshow.biz.dal.vo.SysUserContractRecordVo
+     */
+    SysUserContractRecordVo detail(@Param("id") Long id);
+
+    /**
+     * 分页查询
+     *
+     * @author liweifan
+     * @date 2022-06-16 13:47:21
+     * @return: com.yonge.cooleshow.biz.dal.vo.SysUserContractRecordVo
+     */
+    List<SysUserContractRecordVo> selectPage(@Param("page") IPage page, @Param("param") SysUserContractRecordSearch sysUserContractRecord);
 
     int insertBatch(@Param("entities") List<SysUserContractRecord> entities);
 
-    Boolean checkContractSign(@Param("userId") Long userId, @Param("contractType") String contractType);
+    Boolean checkContractSign(@Param("userId") Long userId, @Param("userType") String userType, @Param("contractSource") String contractSource, @Param("contractType") String contractType);
+
+    SysUserContractRecord queryLatestContract(@Param("userId") Long userId, @Param("userType") String userType, @Param("contractSource") String contractSource, @Param("contractType") String contractType);
 
     void contractCallbackUpdate(@Param("status") String status,
                                 @Param("serialNo") String serialNo,
                                 @Param("url") String url,
                                 @Param("errMsg") String errMsg);
+
+
 }
 

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysUserTsignDao.java

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import com.yonge.cooleshow.biz.dal.entity.SysUserTsign;
+import com.yonge.toolset.mybatis.dal.BaseDAO;
+
+public interface SysUserTsignDao extends BaseDAO<Long, SysUserTsign> {
+
+	/**
+	 * 根据证件号码查询
+	 * @param cardNo
+	 * @return
+	 */
+	SysUserTsign queryByCardNo(String cardNo);
+}

+ 20 - 19
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/excel/UserWithdrawalExport.java

@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.yonge.cooleshow.biz.dal.convert.WithdrawalStatusConvert;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import javax.validation.constraints.NotBlank;
@@ -16,20 +17,20 @@ import java.util.Date;
  * @Data: 2022/4/15 18:01
  */
 public class UserWithdrawalExport {
-    @NotNull(message = "提现编号不能为空")
-    @ExcelProperty(value = "提现编号", index = 0)
+    @NotNull(message = "结算编号不能为空")
+    @ExcelProperty(value = "结算编号", index = 0)
     private Long id;
-    @ExcelProperty(value = "提现人", index = 1)
+    @ExcelProperty(value = "结算人", index = 1)
     private String	withdrawaUser;
-    @ExcelProperty(value = "提现人编号", index = 2)
-    @NotNull(message = "提现人编号不能为空")
+    @ExcelProperty(value = "结算人编号", index = 2)
+    @NotNull(message = "结算人编号不能为空")
     private Long userId;
     @ExcelProperty(value = "开户行", index = 3)
     private String bankName;
     @ExcelProperty(value = "银行卡号", index = 4)
     private String bankCard;
-    @NotNull(message = "提现金额不能为空")
-    @ExcelProperty(value = "提现金额", index = 5)
+    @NotNull(message = "结算金额不能为空")
+    @ExcelProperty(value = "结算金额", index = 5)
     private BigDecimal amount;
     @NotNull(message = "平台服务费不能为空")
     @ExcelProperty(value = "平台服务费", index = 6)
@@ -37,16 +38,16 @@ public class UserWithdrawalExport {
     @ExcelProperty(value = "转账金额", index = 7)
     private BigDecimal actualAmount;
 
-    @NotNull(message = "提现状态不能为空")
-    @ExcelProperty(value = "提现状态 审核中/通过/不通过", index = 8,converter = WithdrawalStatusConvert.class)
-    private AuthStatusEnum status;
-    @ExcelProperty(value = "审核原因", index = 9)
-    private String verifyReason;
-    @ExcelProperty(value = "银行流水号", index = 10)
+    @NotNull(message = "结算状态不能为空")
+    @ExcelProperty(value = "结算状态 审核中/通过/不通过", index = 8,converter = WithdrawalStatusConvert.class)
+    private TradeStatusEnum status;
+    /*@ExcelProperty(value = "审核原因", index = 9)
+    private String verifyReason;*/
+    @ExcelProperty(value = "银行流水号", index = 9)
     private String bankFlowNo;
-    @NotBlank(message = "签名不能为空")
+    /*@NotBlank(message = "签名不能为空")
     @ExcelProperty(value = "签名", index = 11)
-    private String sign;
+    private String sign;*/
 
     public Long getId() {
         return id;
@@ -120,15 +121,15 @@ public class UserWithdrawalExport {
         this.bankFlowNo = bankFlowNo;
     }
 
-    public AuthStatusEnum getStatus() {
+    public TradeStatusEnum getStatus() {
         return status;
     }
 
-    public void setStatus(AuthStatusEnum status) {
+    public void setStatus(TradeStatusEnum status) {
         this.status = status;
     }
 
-    public String getVerifyReason() {
+    /*public String getVerifyReason() {
         return verifyReason;
     }
 
@@ -142,5 +143,5 @@ public class UserWithdrawalExport {
 
     public void setSign(String sign) {
         this.sign = sign;
-    }
+    }*/
 }

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/WithdrawalReq.java

@@ -10,14 +10,14 @@ import java.math.BigDecimal;
  * @Author: liweifan
  * @Data: 2022/4/7 15:07
  */
-@ApiModel(value = "WithdrawalReq对象", description = "用户发起提现申请对象")
+@ApiModel(value = "WithdrawalReq对象", description = "用户发起结算申请对象")
 public class WithdrawalReq {
     @NotNull(message = "缺少用户银行卡id")
     @ApiModelProperty("用户银行卡id")
     private Long bankCardId;
 
-    @NotNull(message = "缺少提现金额")
-    @ApiModelProperty("提现金额")
+    @NotNull(message = "缺少结算金额")
+    @ApiModelProperty("结算金额")
     private BigDecimal amountWithdrawal;
 
     public Long getBankCardId() {

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

@@ -8,6 +8,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotNull;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Author: cy
@@ -16,7 +17,7 @@ import java.util.Date;
 @ApiModel
 public class CourseGroupDetailSearch extends QueryInfo {
     @ApiModelProperty(value = "课程组id")
-    @NotNull
+    @NotNull(message = "课程组id不能为空")
     private Long courseGroupId;
     @ApiModelProperty(value = "课程编号/老师姓名/老师编号/学员姓名/学员编号")
     private String search;
@@ -40,6 +41,16 @@ public class CourseGroupDetailSearch extends QueryInfo {
     private Long studentId;
     @ApiModelProperty(value = "老师id")
     private Long teacherId;
+    @ApiModelProperty(value = "课程id集合")
+    private List<Long> courseIds;
+
+    public List<Long> getCourseIds() {
+        return courseIds;
+    }
+
+    public void setCourseIds(List<Long> courseIds) {
+        this.courseIds = courseIds;
+    }
 
     public Long getStudentId() {
         return studentId;

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.dto.search;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.enums.HomeworkStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
@@ -35,6 +36,9 @@ public class HomeworkSearch extends QueryInfo {
     @ApiModelProperty("提交作业状态 0:否,1:是")
     private YesOrNoEnum submit;
 
+    @ApiModelProperty("NOTCOMMIT:未提交 ,NOTREVIEW: 未评价 REVIEWED:已评价")
+    private HomeworkStatusEnum homeworkStatus;
+
     @ApiModelProperty(value = "课程编号ID",hidden = true)
     private Long courseScheduleId;
 
@@ -57,6 +61,14 @@ public class HomeworkSearch extends QueryInfo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
 
+    public HomeworkStatusEnum getHomeworkStatus() {
+        return homeworkStatus;
+    }
+
+    public void setHomeworkStatus(HomeworkStatusEnum homeworkStatus) {
+        this.homeworkStatus = homeworkStatus;
+    }
+
     public Long getCourseScheduleId() {
         return courseScheduleId;
     }

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

@@ -0,0 +1,40 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-06-15
+ */
+@ApiModel("热门搜索查询条件")
+public class HotSearchSearch extends QueryInfo {
+
+    @ApiModelProperty("编号/关键词")
+    private String search;
+
+    @ApiModelProperty(value = "状态  0:停用,1:启用",dataType = "int")
+    private YesOrNoEnum status;
+
+    @Override
+    public String getSearch() {
+        return search;
+    }
+
+    @Override
+    public void setSearch(String search) {
+        this.search = search;
+    }
+
+    public YesOrNoEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(YesOrNoEnum status) {
+        this.status = status;
+    }
+}

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

@@ -0,0 +1,26 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-06-16 13:47:21
+ */
+@ApiModel(value = "SysUserContractRecordSearch对象", description = "用户协议记录表-一个用户一种协议一个版本一条记录查询对象")
+public class SysUserContractRecordSearch extends QueryInfo{
+	private static final long serialVersionUID = 1L;
+
+	@ApiModelProperty(value = "用户id")
+	private Long userId;
+
+
+	public Long getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+}

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

@@ -12,7 +12,7 @@ import java.time.LocalDateTime;
  * @Author: liweifan
  * @Data: 2022-03-30 13:53:51
  */
-@ApiModel(value = "TeacherWithdrawalSearch对象", description = "老师账户提现表查询对象")
+@ApiModel(value = "TeacherWithdrawalSearch对象", description = "老师账户结算表查询对象")
 public class TeacherWithdrawalSearch extends QueryInfo{
 	private static final long serialVersionUID = 1L;
 	@ApiModelProperty("三方交易流水号 ")

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

@@ -25,7 +25,7 @@ public class UserAccountRecordSearch extends QueryInfo{
 	@ApiModelProperty("收支类型:IN、收入 OUT、支出 ")
 	private InOrOutEnum inOrOut;
 
-	@ApiModelProperty("业务类型:PRACTICE、陪练课 LIVE、直播课 MUSIC、乐谱 WITHDRAWAL、提现 ")
+	@ApiModelProperty("业务类型:PRACTICE、陪练课 LIVE、直播课 MUSIC、乐谱 WITHDRAWAL、结算 ")
 	private AccountBizTypeEnum bizType;
 
 	@ApiModelProperty("查询时间(yyyy-mm) ")

+ 17 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ContractTemplate.java

@@ -10,13 +10,16 @@ public class ContractTemplate {
 
 	@ApiModelProperty(value = "",required = false)
 	private Integer id;
+
+	@ApiModelProperty(value = "协议来源 PLATFORM 平台 LINGXINPAY 灵薪付",required = false)
+	private String source;
+
+	@ApiModelProperty(value = "协议类型",required = false)
+	private String type ;
 	
 	@ApiModelProperty(value = "协议名称",required = false)
 	private String name;
-	
-	@ApiModelProperty(value = "协议类型",required = false)
-	private String type;
-	
+
 	@ApiModelProperty(value = "协议内容",required = false)
 	private String contractTemplateContent;
 	
@@ -151,7 +154,16 @@ public class ContractTemplate {
 	public String getOwner(){
 		return this.owner;
 	}
-			
+
+	public String getSource() {
+		return source;
+	}
+
+	public ContractTemplate setSource(String source) {
+		this.source = source;
+		return this;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

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

@@ -47,6 +47,18 @@ public class CourseScheduleRecord implements Serializable {
     @ApiModelProperty(value = "更新时间")
     private Date updatedTime;
 
+    @TableField(exist = false)
+    @ApiModelProperty(value = "单课时长")
+    private Integer singleCourseTime;
+
+    public Integer getSingleCourseTime() {
+        return singleCourseTime;
+    }
+
+    public void setSingleCourseTime(Integer singleCourseTime) {
+        this.singleCourseTime = singleCourseTime;
+    }
+
     public Date getEndTime() {
         return endTime;
     }

+ 128 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/HotSearch.java

@@ -0,0 +1,128 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 热门搜索表
+ */
+@TableName("hot_search")
+@ApiModel(value = "HotSearch对象", description = "热门搜索表")
+public class HotSearch implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @TableId(value = "id_", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("关键词 ")
+    @TableField(value = "key_")
+    @NotBlank(message = "关键词不能为空")
+    private String key;
+
+    @ApiModelProperty("状态 1启用 0禁用 ")
+    @TableField(value = "status_")
+    private YesOrNoEnum status;
+
+    @ApiModelProperty("排序 ")
+    @TableField(value = "order_")
+    @NotNull(message = "排序值不能为空")
+    private Integer order;
+
+    @ApiModelProperty("创建时间 ")
+    @TableField(value = "create_on_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createOn;
+
+    @ApiModelProperty("修改时间 ")
+    @TableField(value = "modify_on_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date modifyOn;
+
+    @ApiModelProperty("创建人id ")
+    @TableField(value = "create_by_")
+    private Long createBy;
+
+    @ApiModelProperty("修改人id ")
+    @TableField(value = "update_by_")
+    private Long updateBy;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public YesOrNoEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(YesOrNoEnum status) {
+        this.status = status;
+    }
+
+    public Integer getOrder() {
+        return order;
+    }
+
+    public void setOrder(Integer order) {
+        this.order = order;
+    }
+
+    public Date getCreateOn() {
+        return createOn;
+    }
+
+    public void setCreateOn(Date createOn) {
+        this.createOn = createOn;
+    }
+
+    public Date getModifyOn() {
+        return modifyOn;
+    }
+
+    public void setModifyOn(Date modifyOn) {
+        this.modifyOn = modifyOn;
+    }
+
+    public Long getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(Long createBy) {
+        this.createBy = createBy;
+    }
+
+    public Long getUpdateBy() {
+        return updateBy;
+    }
+
+    public void setUpdateBy(Long updateBy) {
+        this.updateBy = updateBy;
+    }
+
+}

+ 94 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysUserTsign.java

@@ -0,0 +1,94 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import java.util.Date;
+
+/**
+ * 对应数据库表(sys_user_tsign):
+ */
+public class SysUserTsign extends BaseEntity {
+
+	/**  */
+	private Long userId;
+
+	/** e签宝账户ID */
+	private String accountId;
+
+	/** 电子印章数据 */
+	private String sealData;
+
+	private String name;
+
+	private String cardNo;
+
+	/**  */
+	private Date createTime = new Date();
+
+	public SysUserTsign() {
+		// TODO Auto-generated constructor stub
+	}
+
+    public SysUserTsign(Long userId, String accountId, String sealData, String name, String cardNo) {
+        this.userId = userId;
+        this.accountId = accountId;
+        this.sealData = sealData;
+        this.name = name;
+        this.cardNo = cardNo;
+    }
+
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+
+	public Long getUserId() {
+		return this.userId;
+	}
+
+	public void setAccountId(String accountId) {
+		this.accountId = accountId;
+	}
+
+	public String getAccountId() {
+		return this.accountId;
+	}
+
+	public void setSealData(String sealData) {
+		this.sealData = sealData;
+	}
+
+	public String getSealData() {
+		return this.sealData;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getCardNo() {
+		return cardNo;
+	}
+
+	public void setCardNo(String cardNo) {
+		this.cardNo = cardNo;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getCreateTime() {
+		return this.createTime;
+	}
+
+    @Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

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

@@ -87,6 +87,18 @@ public class TeacherFreeTime implements Serializable {
     @ApiModelProperty(value = "修改时间;")
     private Date updateTime;
 
+    @TableField("enable_flag_")
+    @ApiModelProperty(value = "是否开启陪练课(1是 0否)")
+    private Boolean enableFlag = true;
+
+    public Boolean getEnableFlag() {
+        return enableFlag;
+    }
+
+    public void setEnableFlag(Boolean enableFlag) {
+        this.enableFlag = enableFlag;
+    }
+
     public Boolean getDefaultFlag() {
         return defaultFlag;
     }

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

@@ -25,19 +25,19 @@ public class UserAccountRecord implements Serializable {
     @ApiModelProperty("id ")
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
-    @ApiModelProperty("账户id ")
+    @ApiModelProperty(value = "账户id ",required = true)
     @TableField(value = "account_id_")
     private Long accountId;
-    @ApiModelProperty("交易金额 ")
+    @ApiModelProperty(value = "交易金额 ",required = true)
     @TableField(value = "trans_amount_")
     private BigDecimal transAmount;
     @ApiModelProperty("账户余额 ")
     @TableField(value = "account_balance_")
     private BigDecimal accountBalance;
-    @ApiModelProperty("收支类型:IN、收入 OUT、支出 ")
+    @ApiModelProperty(value = "收支类型:IN、收入 OUT、支出 ",required = true)
     @TableField(value = "in_or_out_")
     private InOrOutEnum inOrOut;
-    @ApiModelProperty("业务类型:PRACTICE、陪练课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 WITHDRAWAL、提现 ")
+    @ApiModelProperty(value = "业务类型:PRACTICE、陪练课 LIVE、直播课 VIDEO、视频课 MUSIC、乐谱 WITHDRAWAL、结算 ",required = true)
     @TableField(value = "biz_type_")
     private AccountBizTypeEnum bizType;
     @ApiModelProperty("业务id ")

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

@@ -28,7 +28,7 @@ public class UserOrderPayment implements Serializable {
     @ApiModelProperty("服务提供方: ORIGINAL 微信支付宝 ADAPAY 汇付")
     @TableField(value = "open_type_")
     private OpenEnum openType;
-    @ApiModelProperty("服务提供方: STUDENT 微信支付宝 TEACHER 汇付")
+    @ApiModelProperty("支付客户端: STUDENT 学生端 TEACHER 老师端")
     @TableField(value = "payment_client_")
     private String paymentClient;
     @ApiModelProperty("支付渠道: alipay 支付宝  wx_lite 微信 ")

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

@@ -15,19 +15,19 @@ import org.springframework.format.annotation.DateTimeFormat;
 import java.math.BigDecimal;
 
 /**
- * 用户账户提现
+ * 用户账户结算
  */
 @TableName("user_withdrawal")
-@ApiModel(value = "UserWithdrawal对象", description = "用户账户提现表")
+@ApiModel(value = "UserWithdrawal对象", description = "用户账户结算表")
 public class UserWithdrawal implements Serializable {
     private static final long serialVersionUID = 1L;
-    @ApiModelProperty("提现id ")
+    @ApiModelProperty("结算id ")
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
     @ApiModelProperty("用户表id ")
     @TableField(value = "user_id_")
     private Long userId;
-    @ApiModelProperty("提现金额 ")
+    @ApiModelProperty("结算金额 ")
     @TableField(value = "amount_")
     private BigDecimal amount;
     @ApiModelProperty("平台服务费 ")

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

@@ -7,11 +7,11 @@ import io.swagger.annotations.ApiModelProperty;
 import java.util.Date;
 
 /**
- * @Description: 提现回调
+ * @Description: 结算回调
  * @Author: cy
  * @Date: 2022/5/10
  */
-@ApiModel(value = "user_withdrawal_callback-提现回调")
+@ApiModel(value = "user_withdrawal_callback-结算回调")
 public class UserWithdrawalCallback extends BaseEntity {
     @ApiModelProperty(value = "众薪平台唯一订单号")
     private String orderNo;

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

@@ -14,7 +14,7 @@ public enum AccountBizTypeEnum implements BaseEnum<String, AccountBizTypeEnum> {
     LIVE("直播课", InOrOutEnum.IN),
     VIDEO("视频课", InOrOutEnum.IN),
     MUSIC("乐谱", InOrOutEnum.IN),
-    WITHDRAWAL("提现", InOrOutEnum.OUT);
+    WITHDRAWAL("结算", InOrOutEnum.OUT);
     @EnumValue
     private String code;
     private String msg;

+ 0 - 35
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ContractTypeEnum.java

@@ -1,35 +0,0 @@
-package com.yonge.cooleshow.biz.dal.enums;
-
-import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.yonge.toolset.base.enums.BaseEnum;
-
-/**
- * 协议模板类型枚举
- */
-public enum ContractTypeEnum implements BaseEnum<String, ContractTypeEnum> {
-
-    REGISTER("注册"),
-    COURSES("课程购买"),
-    PRODUCT("产品"),
-    WITHDRAW("用户提现")
-    ;
-
-    @EnumValue
-    private String code;
-
-    private String desc;
-
-    ContractTypeEnum(String desc) {
-        this.code = this.name();
-        this.desc = desc;
-    }
-
-    @Override
-    public String getCode() {
-        return code;
-    }
-
-    public String getDesc() {
-        return desc;
-    }
-}

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

@@ -11,7 +11,7 @@ import com.yonge.toolset.base.enums.BaseEnum;
  */
 public enum DealStatusEnum implements BaseEnum<String, DealStatusEnum> {
     DOING("处理中"),
-    SCCESS("成功"),
+    SUCCESS("成功"),
     FAILED("失败");
     @EnumValue
     private String code;

+ 46 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/HomeworkStatusEnum.java

@@ -0,0 +1,46 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-06-17
+ */
+public enum HomeworkStatusEnum implements BaseEnum<String,HomeworkStatusEnum> {
+
+    NOTCOMMIT( "未提交"),
+    NOTREVIEW( "未评价"),
+    REVIEWED( "已评价"),
+
+    ;
+    @EnumValue
+    private String code;
+    private String msg;
+
+    HomeworkStatusEnum(String msg) {
+        this.code = this.name();
+        this.msg = msg;
+    }
+
+    public String getMsg() {
+        return this.msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public static GenderEnum valueOf(Integer code) {
+        GenderEnum[] values = GenderEnum.values();
+        for (GenderEnum value : values) {
+            if(value.getCode().equals(code)){
+                return value;
+            }
+        }
+        return null;
+    }
+}

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

@@ -51,7 +51,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     COURSE_SETTLEMENT("课酬结算(每晚9点)"),
     NOT_EVALUATE_STUDENT_PRACTICE("当日陪练课未评价/布置作业(每晚9点30,已评价/已布置不发)"),
     STUDENT_EVALUATE_TEACHER_PRACTICE("学员对老师评价"),
-    WITHDRAWAL_SUCCESS("提现成功"),
+    WITHDRAWAL_SUCCESS("结算成功"),
     STUDENT_JOIN_FANSGROUP("学员申请加入粉丝群"),
 
     VIP_BUY_SUCCESS("会员购买成功"),
@@ -81,7 +81,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     TEACHER_STYLE_VIDEO_SUCCESS("个人风采审核通过"),
     TEACHER_STYLE_VIDEO_FAIL("个人风采审核失败"),
 
-    TEACHER_WITHDRAW_SUCCESS("老师提现成功"),
+    TEACHER_WITHDRAW_SUCCESS("老师结算成功"),
 
     //------短信模板------
     SMS_BUY_LIVE("直播课购买成功"),

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/ContractTemplateQueryInfo.java

@@ -4,8 +4,18 @@ import com.yonge.toolset.base.page.QueryInfo;
 
 public class ContractTemplateQueryInfo extends QueryInfo {
 
+	private String source;
+
     private Boolean status;
 
+	public String getSource() {
+		return source;
+	}
+
+	public void setSource(String source) {
+		this.source = source;
+	}
+
 	public Boolean getStatus() {
 		return status;
 	}

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/WithdrawSdk.java

@@ -42,10 +42,10 @@ public class WithdrawSdk {
     //签署协议url
     @Value("${withdraw.contractApiUrl}")
     private String contractApiUrl;
-    //提现回调地址
+    //结算回调地址
     @Value("${withdraw.notifyUrl}")
     private String notifyUrl;
-    //提现第三方url
+    //结算第三方url
     @Value("${withdraw.apiUrl}")
     private String apiUrl;
 
@@ -141,7 +141,7 @@ public class WithdrawSdk {
     }
 
     /**
-     * 单笔提现
+     * 单笔结算
      *
      * @param outerOrderNo  商户唯一订单号
      * @param name          收款方姓名(银行预留姓名等)

+ 20 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ContractService.java

@@ -0,0 +1,20 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.ContractTemplateTypeEnum;
+import com.yonge.cooleshow.common.enums.SysUserType;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+public interface ContractService {
+
+	@Async
+	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRES_NEW)
+	HttpResponseResult<String> transferProduceContract(Long userId, SysUserType userType, ContractTemplateTypeEnum contractType);
+
+	@Transactional(isolation = Isolation.READ_COMMITTED)
+	HttpResponseResult<String> queryProductContract(Long userId, SysUserType userType, ContractTemplateTypeEnum contractType);
+}

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ContractTemplateService.java

@@ -2,7 +2,7 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.yonge.cooleshow.biz.dal.dto.ContractTemplateDto;
 import com.yonge.cooleshow.biz.dal.entity.ContractTemplate;
-import com.yonge.cooleshow.biz.dal.enums.ContractTypeEnum;
+import com.yonge.cooleshow.common.enums.ContractTemplateTypeEnum;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.mybatis.service.BaseService;
@@ -35,7 +35,7 @@ public interface ContractTemplateService extends BaseService<Integer, ContractTe
 	 * @param contractType
 	 * @return
 	 */
-	ContractTemplate queryLatestContractTemplate(ContractTypeEnum contractType);
+	ContractTemplate queryLatestContractTemplate(ContractTemplateTypeEnum contractType);
 	
 	boolean createContractTemplate(ContractTemplate contractTemplate);
 	

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

@@ -146,6 +146,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
      * <p>定时将符合结束售卖日期的在售卖中的直播课课程组修改为取消或者成课状态状态-每隔10分钟执行一次
      */
     void opsCourseGroup();
+
     /***
      * 直播课退款单-创建前
      * @param: refundReq
@@ -153,6 +154,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes>
      */
     HttpResponseResult<RefundCreateRes> refundCreate(OrderRefundReq refundReq);
+
     /***
      * 直播课退款单-创建后
      * @param: userOrderRefund
@@ -160,6 +162,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes>
      */
     void refundAfter(UserOrderDetailVo userOrderDetailVo);
+
     /***
      * 直播课退款单-退款成功
      * @param: userOrderRefund
@@ -167,6 +170,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes>
      */
     void refundSuccess(UserOrderDetailVo userOrderDetailVo);
+
     /***
      * 直播课退款单-退款失败
      * @param: userOrderRefund
@@ -177,6 +181,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
 
     /**
      * 课程组管理-陪练课
+     *
      * @param page
      * @param search
      * @return
@@ -185,6 +190,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
 
     /**
      * 课程组管理-陪练课-详情
+     *
      * @param page
      * @param search
      * @return
@@ -193,6 +199,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
 
     /**
      * 课程组管理-直播课
+     *
      * @param page
      * @param search
      * @return
@@ -201,6 +208,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
 
     /**
      * 课程组管理-直播课-购买学员
+     *
      * @param page
      * @param search
      * @return
@@ -209,6 +217,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
 
     /**
      * 课程组管理-直播课-教学计划
+     *
      * @param page
      * @param search
      * @return
@@ -217,6 +226,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
 
     /**
      * 课程组管理-视频课
+     *
      * @param page
      * @param search
      * @return
@@ -225,6 +235,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
 
     /**
      * 课程组管理-视频课-购买学员
+     *
      * @param page
      * @param search
      * @return
@@ -233,6 +244,7 @@ public interface CourseGroupService extends IService<CourseGroup> {
 
     /**
      * 课程组管理-视频课-教学计划
+     *
      * @param page
      * @param search
      * @return
@@ -241,9 +253,72 @@ public interface CourseGroupService extends IService<CourseGroup> {
 
     /**
      * 课程组管理-直播课-课程信息
+     *
      * @param groupId
      * @return
      */
     CourseGroupInfoVo selectLiveGroupInfo(Long groupId);
+
+    /**
+     * 课程组管理-琴房课
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupPianoVo> selectPianoGroup(IPage<CourseGroupPianoVo> page, CourseGroupSearch search);
+
+    /**
+     * 课程组管理-琴房课-详情
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupPianoDetailVo> selectPianoGroupDetail(IPage<CourseGroupPianoDetailVo> page, CourseGroupDetailSearch search);
+
+    /**
+     * 课程组管理-琴房课-详情-学员名单
+     *
+     * @param courseId
+     * @return
+     */
+    List<StudentSignVo> studentSign(Long courseId, String type);
+
+    /**
+     * 学员管理-琴房课
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupPianoVo> selectPianoGroupStudent(IPage<CourseGroupPianoVo> page, CourseGroupSearch search);
+
+    /**
+     * 学员管理-琴房课-详情
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupPianoDetailVo> selectPianoGroupStudentDetail(IPage<CourseGroupPianoDetailVo> page, CourseGroupDetailSearch search);
+
+    /**
+     * 老师管理-琴房课
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupPianoVo> selectPianoGroupTeacher(IPage<CourseGroupPianoVo> page, CourseGroupSearch search);
+
+    /**
+     * 老师管理-琴房课-详情
+     *
+     * @param page
+     * @param search
+     * @return
+     */
+    IPage<CourseGroupPianoDetailVo> selectPianoGroupTeacherDetail(IPage<CourseGroupPianoDetailVo> page, CourseGroupDetailSearch search);
 }
 

+ 40 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/HotSearchService.java

@@ -0,0 +1,40 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.dto.search.HotSearchSearch;
+import com.yonge.cooleshow.biz.dal.entity.HotSearch;
+import com.yonge.cooleshow.biz.dal.vo.HotSearchVo;
+
+/**
+ * 热门搜索表 服务类
+ * @author liweifan
+ * @date 2022-06-15
+ */
+public interface HotSearchService extends IService<HotSearch>  {
+
+    /**
+     * 修改热门搜索
+     *
+     * @param hotSearch
+     * @return
+     */
+    boolean update(HotSearch hotSearch);
+
+    /**
+     * 修改热门搜索的状态
+     *
+     * @param hotSearchId 热门词id
+     * @return
+     */
+    boolean status(Long hotSearchId);
+
+    /**
+     * 分页查询
+     *
+     * @param page
+     * @param query
+     * @return
+     */
+    IPage<HotSearchVo> selectPage(IPage<HotSearchVo> page, HotSearchSearch query);
+}

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

@@ -42,5 +42,7 @@ public interface StudentTotalService extends IService<StudentTotal>  {
 	 * @updateTime 2022/5/13 17:42
 	 * @return: com.yonge.cooleshow.biz.dal.entity.StudentTotal
 	 */
-	StudentTotal getStudentTotalById(Long id);
+	StudentTotal getTotalById(Long id);
+
+	void updateTotalCache(StudentTotal studentTotal);
 }

+ 25 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserContractRecordService.java

@@ -1,10 +1,14 @@
 package com.yonge.cooleshow.biz.dal.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.SysUserContractRecordDao;
+import com.yonge.cooleshow.biz.dal.dto.search.SysUserContractRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.SysUserContractRecord;
-import com.yonge.cooleshow.biz.dal.enums.ContractTypeEnum;
+import com.yonge.cooleshow.biz.dal.vo.SysUserContractRecordVo;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.ContractTemplateTypeEnum;
+import com.yonge.cooleshow.common.enums.SysUserType;
 
 /**
  * 用户协议记录表-一个用户一种协议一个版本一条记录(SysUserContractRecord)表服务接口
@@ -15,13 +19,31 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 public interface SysUserContractRecordService extends IService<SysUserContractRecord> {
 
     SysUserContractRecordDao getDao();
-
+    /**
+     * 查询详情
+     * @author liweifan
+     * @date 2022-06-16
+     */
+    SysUserContractRecordVo detail(Long id);
+    /**
+     * 分页查询
+     * @author liweifan
+     * @date 2022-06-16
+     */
+    IPage<SysUserContractRecordVo> selectPage(IPage<SysUserContractRecordVo> page, SysUserContractRecordSearch query);
     /**
      * 查询用户是否签署协议
      * @param userId
      * @param contractType
      * @return
      */
-    HttpResponseResult<Boolean> checkContractSign(Long userId, ContractTypeEnum contractType);
+    Boolean checkContractSign(Long userId, SysUserType userType, ContractTemplateTypeEnum contractType);
+    /**
+     * 获取用户最新版签署中的协议
+     * @param userId
+     * @param contractType
+     * @return
+     */
+    SysUserContractRecord queryLatestContract(Long userId, SysUserType userType, ContractTemplateTypeEnum contractType);
 }
 

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserTsignService.java

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.yonge.cooleshow.biz.dal.entity.SysUserTsign;
+import com.yonge.toolset.mybatis.service.BaseService;
+
+public interface SysUserTsignService extends BaseService<Long, SysUserTsign> {
+
+	/**
+	 * 根据证件号码查询
+	 * @param cardNo
+	 * @return
+	 */
+	SysUserTsign queryByCardNo(String cardNo);
+}

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

@@ -53,5 +53,7 @@ public interface TeacherTotalService extends IService<TeacherTotal>  {
 	 * @updateTime 2022/5/13 18:37
 	 * @return: com.yonge.cooleshow.biz.dal.entity.TeacherTotal
 	 */
-    TeacherTotal getTeacherTotalById(Long userId);
+    TeacherTotal getTotalById(Long userId);
+
+	void updateTotalCache(TeacherTotal teacherTotal);
 }

+ 4 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalService.java

@@ -17,7 +17,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * 用户账户提现表 服务类
+ * 用户账户结算表 服务类
  *
  * @author liweifan
  * @date 2022-03-30
@@ -50,7 +50,7 @@ public interface UserWithdrawalService extends IService<UserWithdrawal> {
     List<UserWithdrawalVo> selectList(TeacherWithdrawalSearch query);
 
     /***
-     * 查询提现页面信息
+     * 查询结算页面信息
      * @author liweifan
      * @param: userId
      * @updateTime 2022/4/7 14:31
@@ -59,7 +59,7 @@ public interface UserWithdrawalService extends IService<UserWithdrawal> {
     HttpResponseResult<WithdrawalInfoRes> getWithdrawalInfo(Long userId);
 
     /***
-     * 用户发起提现申请
+     * 用户发起结算申请
      * @author liweifan
      * @param: user
      * @param: withdrawalReq
@@ -69,7 +69,7 @@ public interface UserWithdrawalService extends IService<UserWithdrawal> {
     HttpResponseResult<Boolean> withdrawal(SysUser user, WithdrawalReq withdrawalReq);
 
     /**
-     * 提现回调
+     * 结算回调
      *
      * @param callback
      */

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

@@ -0,0 +1,328 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.auth.api.enums.CertificateTypeEnum;
+import com.yonge.cooleshow.biz.dal.entity.ContractTemplate;
+import com.yonge.cooleshow.biz.dal.entity.SysUserTsign;
+import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.vo.StudentVo;
+import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.ContractTemplateTypeEnum;
+import com.yonge.cooleshow.common.enums.SysUserType;
+import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.thirdparty.eseal.ESealPlugin;
+import com.yonge.toolset.thirdparty.storage.StoragePluginContext;
+import com.yonge.toolset.thirdparty.storage.provider.KS3StoragePlugin;
+import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPluginContext;
+import com.yonge.toolset.thirdparty.user.realname.provider.LinkfaceRealnameAuthenticationPlugin;
+import com.yonge.toolset.utils.date.DateUtil;
+import com.yonge.toolset.utils.freemarker.FreemarkerTemplateEngine;
+import com.yonge.toolset.utils.pdf.PDFUtil;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.*;
+
+@Service
+public class ContractServiceImpl implements ContractService {
+    @Autowired
+    private SysUserService sysUserService;
+    @Autowired
+    private SysUserTsignService sysUserTsignService;
+    @Autowired
+    private ContractTemplateService contractTemplateService;
+    @Autowired
+    private SysUserContractRecordService contractRecordService;
+    @Autowired
+    private StudentService studentService;
+    @Autowired
+    private TeacherService teacherService;
+    @Autowired
+    private SysConfigService sysConfigService;
+    @Autowired
+    private RealnameAuthenticationPluginContext realnameAuthenticationPluginContext;
+    @Autowired
+    private StoragePluginContext storagePluginContext;
+    @Autowired
+    private ESealPlugin eSealPlugin;
+
+    @Value("${contract.baseDir:/var/pdf}")
+    private String contractBaseDir;
+
+    @Value("${message.debugMode}")
+    private boolean debugMode;
+
+    private DateFormat dateFormatOss = new SimpleDateFormat("yyyy/MM/dd");
+
+    private DateFormat dateFormat1 = new SimpleDateFormat("yyMMddHHmmSS");
+
+    private final Logger logger = LoggerFactory.getLogger(ContractService.class);
+
+    @Override
+    @Async
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRES_NEW)
+    public HttpResponseResult<String> transferProduceContract(Long userId, SysUserType userType, ContractTemplateTypeEnum contractType) {
+        SysUser user = sysUserService.findUserById(userId);
+        if (user == null) {
+            logger.error("用户不存在({})", userId);
+            return HttpResponseResult.failed("用户不存在");
+        }
+
+        if (StringUtils.isBlank(user.getRealName()) || StringUtils.isBlank(user.getIdCardNo())) {
+            logger.error("身份信息缺失({})", userId);
+            return HttpResponseResult.failed("身份信息缺失");
+        }
+
+        SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
+        if (sysUserTsign == null) {
+            try {
+                sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
+            } catch (Exception e) {
+                logger.error("用户电子签章注册失败", e);
+                return HttpResponseResult.failed("用户电子签章注册失败");
+            }
+        }
+        Date date = new Date();
+
+        // 合成freemarker
+        String srcPdfPath = contractBaseDir + "/product/" + dateFormat1.format(date) + "/" + userId + "_" + LocalDateTime.now().getSecond() + ".pdf";
+
+        File srcFile = new File(srcPdfPath);
+
+        File debtFile = new File(srcFile.getParent());
+        if (!debtFile.exists()) {
+            debtFile.mkdirs();
+        }
+
+        FreemarkerTemplateEngine templateEngine = FreemarkerTemplateEngine.getInstance();
+        templateEngine.setClassForTemplateLoading(ContractServiceImpl.class, "/config/contracts/");
+
+        Boolean signflag = contractRecordService.checkContractSign(userId, userType, contractType);
+        if (signflag) {
+            return HttpResponseResult.failed("用户已经签署协议");
+        }
+
+        // 查询最新协议模板
+        ContractTemplate tenantContractTemplate = contractTemplateService.queryLatestContractTemplate(contractType);
+        if (tenantContractTemplate == null) {
+            logger.error("最新协议模板查询失败");
+            return HttpResponseResult.failed("最新协议模板查询失败");
+        }
+        String mainContent = tenantContractTemplate.getContractTemplateContent();
+
+        Map<String, Object> params = new HashMap<>();
+        String companyName = sysConfigService.findConfigValue(SysConfigConstant.COMPANY_NAME);
+        params.put("companyName", companyName);
+        params.put("companySealPicture", sysConfigService.findConfigValue(SysConfigConstant.COMPANY_SEAL_PICTURE));
+        params.put("contractMainContent", mainContent);
+        params.put("isShowVisualSeal", false);
+
+
+        Map<String, Object> userInfo = new HashMap<>();
+        userInfo.put("realName", user.getRealName());
+        userInfo.put("phone", user.getPhone());
+        userInfo.put("idCardNo", user.getIdCardNo());
+
+        if (SysUserType.STUDENT.equals(userType)) {
+            StudentVo detail = studentService.detail(userId);
+            userInfo.put("subjectName", detail.getSubjectName());
+        } else if (SysUserType.TEACHER.equals(userType)) {
+            TeacherVo detail = teacherService.detail(userId);
+            userInfo.put("subjectName", detail.getSubjectName());
+        }
+        params.put("userInfo", userInfo);
+
+        templateEngine.render(params, "latest_contract_template.ftl", srcFile);
+
+        // 生成借款协议PDF
+        try {
+            PDFUtil.renderToPDFByData(ContractServiceImpl.class.getResource("/").getFile(), FileUtils.readFileToString(srcFile), srcPdfPath, "simsun.ttc");
+        } catch (IOException e) {
+            logger.error("生成产品协议失败", e);
+            return HttpResponseResult.failed("生成产品协议失败");
+        }
+
+        String organCode = sysConfigService.findConfigValue(SysConfigConstant.COMPANY_ORGAN_CODE);
+        SysUserTsign organTsign = sysUserTsignService.queryByCardNo(organCode);
+        if (organTsign == null) {
+            //创建企业签章
+            organTsign = addTsign(0L, organCode, companyName);
+        }
+
+        eSealPlugin.organSign(organTsign.getSealData(), srcPdfPath, srcPdfPath);
+        if (sysUserTsign != null && CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())) {
+            eSealPlugin.userSign(sysUserTsign.getAccountId(), sysUserTsign.getSealData(), srcPdfPath, srcPdfPath);
+        }
+
+        // 上传到oss
+        String dateStrOss = dateFormatOss.format(date);
+        dateStrOss = "product/" + dateStrOss + "/" + DateUtil.getHour(date);
+        String pdfFilePath = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, dateStrOss, srcFile);
+        FileUtils.deleteQuietly(srcFile);
+        return HttpResponseResult.succeed(pdfFilePath);
+    }
+
+    @Override
+    @Transactional(isolation = Isolation.READ_COMMITTED)
+    public HttpResponseResult<String> queryProductContract(Long userId, SysUserType userType, ContractTemplateTypeEnum contractType) {
+        Map<String, Object> result = new HashMap<>();
+        result.put("code", "false");
+
+        SysUser user = sysUserService.findUserById(userId);
+        if (user == null) {
+            return HttpResponseResult.failed("用户不存在");
+        }
+
+        if (StringUtils.isBlank(user.getRealName()) || StringUtils.isBlank(user.getIdCardNo())) {
+            return HttpResponseResult.failed("身份信息缺失");
+        }
+
+        Date date = new Date();
+
+        // 合成freemarker
+        String srcPdfPath = contractBaseDir + "/product/" + dateFormat1.format(date) + "/" + userId + "_" + LocalDateTime.now().getSecond() + ".pdf";
+
+        File srcFile = new File(srcPdfPath);
+
+        File debtFile = new File(srcFile.getParent());
+        if (!debtFile.exists()) {
+            debtFile.mkdirs();
+        }
+
+        FreemarkerTemplateEngine templateEngine = FreemarkerTemplateEngine.getInstance();
+        templateEngine.setClassForTemplateLoading(ContractServiceImpl.class, "/config/contracts/");
+
+        // 查询最新协议模板
+        ContractTemplate tenantContractTemplate = contractTemplateService.queryLatestContractTemplate(contractType);
+        if (tenantContractTemplate == null) {
+            return HttpResponseResult.failed("最新协议模板查询失败");
+        }
+        String mainContent = tenantContractTemplate.getContractTemplateContent();
+        if(StringUtils.isEmpty(mainContent)){
+            return HttpResponseResult.failed("没有协议内容");
+        }
+
+        Map<String, Object> params = new HashMap<>();
+        String companyName = sysConfigService.findConfigValue(SysConfigConstant.COMPANY_NAME);
+        params.put("companyName", companyName);
+        params.put("companySealPicture", sysConfigService.findConfigValue(SysConfigConstant.COMPANY_SEAL_PICTURE));
+        params.put("contractMainContent", mainContent);
+        params.put("isShowVisualSeal", true);
+
+
+        Map<String, Object> userInfo = new HashMap<>();
+        userInfo.put("realName", user.getRealName());
+        userInfo.put("phone", user.getPhone());
+        userInfo.put("idCardNo", user.getIdCardNo());
+
+        if (SysUserType.STUDENT.equals(userType)) {
+            StudentVo detail = studentService.detail(userId);
+            userInfo.put("subjectName", detail.getSubjectName());
+        } else if (SysUserType.TEACHER.equals(userType)) {
+            TeacherVo detail = teacherService.detail(userId);
+            userInfo.put("subjectName", detail.getSubjectName());
+        }
+        params.put("userInfo", userInfo);
+        templateEngine.render(params, "latest_contract_template.ftl", srcFile);
+
+        String html = "";
+        try {
+            html = FileUtils.readFileToString(srcFile);
+        } catch (IOException e) {
+            return HttpResponseResult.failed("读取产品协议出错");
+        } finally {
+            FileUtils.deleteQuietly(srcFile);
+        }
+        return HttpResponseResult.succeed(html);
+    }
+
+
+    private SysUserTsign register(Long userId, String realName, String idCardNo, String mobileNo) {
+        if (StringUtils.isBlank(realName) || StringUtils.isBlank(idCardNo) || StringUtils.isBlank(mobileNo)) {
+            return null;
+        }
+
+        SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
+        if (sysUserTsign == null) {
+
+            String accountId = "";
+            String sealData = "";
+
+            SysUser user = sysUserService.findUserById(userId);
+            if (user == null) {
+                throw new BizException("用户信息查询失败");
+            }
+
+            if (CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())) {
+                if (!debugMode) {
+                    realnameAuthenticationPluginContext.getRealnameAuthenticationPlugin(LinkfaceRealnameAuthenticationPlugin.getName()).verify(realName, idCardNo);
+                }
+
+                accountId = eSealPlugin.createUserAccount(realName, idCardNo, mobileNo);
+
+                if (StringUtils.isBlank(accountId)) {
+                    throw new BizException("创建电子存证账户失败");
+                }
+
+                sealData = eSealPlugin.createUserSeal(accountId);
+
+                if (StringUtils.isBlank(sealData)) {
+                    throw new BizException("创建电子存证印章失败");
+                }
+            }
+            sysUserTsign = new SysUserTsign(userId, accountId, sealData, realName, idCardNo);
+
+            sysUserTsignService.insert(sysUserTsign);
+            return sysUserTsign;
+        }
+        return null;
+    }
+
+    private SysUserTsign addTsign(Long userId, String organCode, String orgName) {
+        Optional.ofNullable(organCode).orElseThrow(() -> new BizException("营业执照编号不能为空!"));
+        Optional.ofNullable(orgName).orElseThrow(() -> new BizException("营业名称不能为空"));
+
+        SysUserTsign orignSysUserTsign = sysUserTsignService.queryByCardNo(organCode);
+
+        if (orignSysUserTsign == null) {
+
+            String accountId = eSealPlugin.createOrganAccount(orgName, organCode);
+            if (StringUtils.isBlank(accountId)) {
+                throw new BizException("创建企业电子存证账户失败");
+            }
+
+            String sealData = eSealPlugin.createOrganSeal(accountId, "", "");
+            if (StringUtils.isBlank(sealData)) {
+                throw new BizException("创建电子存证印章失败");
+            }
+
+            orignSysUserTsign = new SysUserTsign(-userId, accountId, sealData, orgName, organCode);
+            sysUserTsignService.insert(orignSysUserTsign);
+
+        } else if (!StringUtils.equals(orignSysUserTsign.getName(), orgName)) {
+            if (eSealPlugin.updateOrganAccount(orignSysUserTsign.getAccountId(), orgName, organCode)) {
+                orignSysUserTsign.setName(orgName);
+                sysUserTsignService.update(orignSysUserTsign);
+            }
+        }
+        return orignSysUserTsign;
+
+    }
+
+}

+ 36 - 48
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ContractTemplateServiceImpl.java

@@ -7,7 +7,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
-import com.yonge.cooleshow.biz.dal.enums.ContractTypeEnum;
+import com.yonge.cooleshow.common.enums.ContractTemplateTypeEnum;
 import com.yonge.toolset.mybatis.service.impl.BaseServiceImpl;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
@@ -55,7 +55,7 @@ public class ContractTemplateServiceImpl extends BaseServiceImpl<Integer, Contra
             dataList = contractTemplateDao.queryPageList(params);
         }
         if (count == 0) {
-            dataList = new ArrayList<ContractTemplateDto>();
+            dataList = new ArrayList<>();
         }
         pageInfo.setRows(dataList);
         return pageInfo;
@@ -64,36 +64,26 @@ public class ContractTemplateServiceImpl extends BaseServiceImpl<Integer, Contra
     @Override
     @Transactional
     public boolean enableContract(Integer id, Long userId) {
-        ContractTemplate contractTemplate = contractTemplateDao.get(id);
-
-        if (contractTemplate == null) {
-            throw new BizException("未查询到协议模板");
-        }
-
-        if (contractTemplate.getStatus()) {
-            return true;
-        }
-
         RLock lock = redissonClient.getLock(LOCK_NAME);
-
         try {
             if (lock.tryLock(10, 10, TimeUnit.SECONDS)) {
+                ContractTemplate contractTemplate = contractTemplateDao.get(id);
 
-                Integer maxVersion = contractTemplateDao.queryMaxVersion();
-                int version = maxVersion == null ? 1 : maxVersion + 1;
+                if (contractTemplate == null) {
+                    throw new BizException("未查询到协议模板");
+                }
 
-                contractTemplate.setVersion(version);
-
-                contractTemplateDao.disableContract(contractTemplate.getOwner(), contractTemplate.getType());
-
-                Date date = new Date();
+                if (contractTemplate.getStatus()) {
+                    return true;
+                }
+                contractTemplate.setVersion(contractTemplate.getVersion() == null ? 1 : contractTemplate.getVersion() + 1);
+                //关闭类型下的所有协议,只启用当前这个协议
+                contractTemplateDao.disableContract(contractTemplate.getType());
 
                 contractTemplate.setStatus(true);
-                contractTemplate.setUpdateTime(date);
+                contractTemplate.setUpdateTime(new Date());
                 contractTemplate.setModifyBy(userId);
-
                 contractTemplateDao.update(contractTemplate);
-
                 return true;
             }
         } catch (InterruptedException e) {
@@ -101,7 +91,6 @@ public class ContractTemplateServiceImpl extends BaseServiceImpl<Integer, Contra
         } finally {
             lock.unlock();
         }
-
         return false;
     }
 
@@ -112,29 +101,29 @@ public class ContractTemplateServiceImpl extends BaseServiceImpl<Integer, Contra
     }
 
     @Override
-    public ContractTemplate queryLatestContractTemplate(ContractTypeEnum contractType) {
-        ContractTemplate ContractTemplate = contractTemplateDao.queryLatestContractTemplate(contractType.getCode());
+    public ContractTemplate queryLatestContractTemplate(ContractTemplateTypeEnum contractType) {
+        String code = contractType.getSource().getCode();
+        ContractTemplate ContractTemplate = contractTemplateDao.queryLatestContractTemplate(
+                code , contractType.getCode());
         return ContractTemplate;
     }
 
     @Override
     @Transactional
-    public boolean createContractTemplate(ContractTemplate ContractTemplate) {
-
+    public boolean createContractTemplate(ContractTemplate contractTemplate) {
         RLock lock = redissonClient.getLock(LOCK_NAME);
-
         try {
             if (lock.tryLock(10, 10, TimeUnit.SECONDS)) {
-
-                Integer maxVersion = contractTemplateDao.queryMaxVersion();
-                int version = maxVersion == null ? 1 : maxVersion + 1;
-
-                ContractTemplate.setVersion(version);
+                ContractTemplate latestContractTemplate = contractTemplateDao.queryLatestContractTemplate(contractTemplate.getSource(), contractTemplate.getType());
+                if(null == latestContractTemplate || null == latestContractTemplate.getVersion()){
+                    contractTemplate.setVersion(1);
+                }else{
+                    contractTemplate.setVersion(latestContractTemplate.getVersion() + 1);
+                }
                 Date date = new Date();
-                ContractTemplate.setCreateTime(date);
-                ContractTemplate.setUpdateTime(date);
-                insert(ContractTemplate);
-
+                contractTemplate.setCreateTime(date);
+                contractTemplate.setUpdateTime(date);
+                insert(contractTemplate);
                 return true;
             }
         } catch (InterruptedException e) {
@@ -148,20 +137,20 @@ public class ContractTemplateServiceImpl extends BaseServiceImpl<Integer, Contra
 
     @Override
     @Transactional
-    public boolean updateContractTempalte(ContractTemplate ContractTemplate) {
-
+    public boolean updateContractTempalte(ContractTemplate contractTemplate) {
         RLock lock = redissonClient.getLock(LOCK_NAME);
 
         try {
             if (lock.tryLock(10, 10, TimeUnit.SECONDS)) {
-                Integer maxVersion = contractTemplateDao.queryMaxVersion();
-                int version = maxVersion == null ? 1 : maxVersion + 1;
-
-                ContractTemplate.setVersion(version);
+                ContractTemplate latestContractTemplate = contractTemplateDao.queryLatestContractTemplate(contractTemplate.getSource(), contractTemplate.getType());
+                if(null == latestContractTemplate || null == latestContractTemplate.getVersion()){
+                    contractTemplate.setVersion(1);
+                }else{
+                    contractTemplate.setVersion(latestContractTemplate.getVersion() + 1);
+                }
                 Date date = new Date();
-                ContractTemplate.setUpdateTime(date);
-
-                update(ContractTemplate);
+                contractTemplate.setUpdateTime(date);
+                update(contractTemplate);
                 return true;
             }
         } catch (InterruptedException e) {
@@ -169,7 +158,6 @@ public class ContractTemplateServiceImpl extends BaseServiceImpl<Integer, Contra
         } finally {
             lock.unlock();
         }
-
         return false;
     }
 

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

@@ -18,7 +18,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.*;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.service.*;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
@@ -86,6 +86,8 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     private UserOrderService userOrderService;
     @Autowired
     private SysMessageService sysMessageService;
+    @Autowired
+    private ImGroupMemberService imGroupMemberService;
 
     @Autowired
     private UserOrderRefundService userOrderRefundService;
@@ -359,7 +361,7 @@ 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分") + "的课程时间存在冲突!");
+                throw new BizException("学生id:" + studentId + ",预计安排在" + DateUtil.dateToString(startTimeFun.apply(o), "yyyy年MM月dd号 HH点mm分") + "的课程时间存在冲突!");
             }
         });
     }
@@ -541,7 +543,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         // 获取课程组声部
         List<LiveCourseGroupVo> subjectList = baseMapper.selectCourseGroupSubject(courseGroupIdList);
         Map<Long, List<LiveCourseGroupVo>> collect = subjectList.stream()
-                                .collect(Collectors.groupingBy( LiveCourseGroupVo::getCourseGroupId));
+                .collect(Collectors.groupingBy(LiveCourseGroupVo::getCourseGroupId));
         for (LiveCourseGroupVo record : records) {
             List<LiveCourseGroupVo> liveCourseGroupVos = collect.get(record.getCourseGroupId());
             if (CollectionUtils.isEmpty(liveCourseGroupVos)) {
@@ -740,6 +742,21 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         log.info("buyLiveCourseSuccess ok");
         //课程购买成功后进行消息推送
         buyLiveSendMessage(studentPayment, courseGroup);
+
+        //创建群聊
+        try {
+            ImGroup imGroup = imGroupService.getDao().selectOne(Wrappers.<ImGroup>lambdaQuery().eq(ImGroup::getCourseGroupId, courseGroup.getId()));
+            if (imGroup == null) {//群组不存在->创建群组
+                imGroupService.autoCreate(courseGroup.getId(), CourseScheduleEnum.LIVE.getCode());
+            } else {//存在->加入当前学员
+                String imGroupId = imGroup.getId();
+                Set<Long> userIds = new HashSet<>(Arrays.asList(studentPayment.getUserId()));
+                imGroupMemberService.initGroupMembers(imGroupId, userIds, ImGroupMemberRoleType.STUDENT);
+            }
+        } catch (Exception e) {
+            log.error("直播课程组id:{},创建群聊失败:{}", courseGroup.getId(), e);
+            e.printStackTrace();
+        }
     }
 
     /**
@@ -923,32 +940,32 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
 
     @Override
     public IPage<CourseGroupLiveVo> selectLiveGroup(IPage<CourseGroupLiveVo> page, CourseGroupSearch search) {
-        return baseMapper.selectLiveGroup(page,search);
+        return baseMapper.selectLiveGroup(page, search);
     }
 
     @Override
     public IPage<CourseSchedulePaymentVo> selectLiveGroupStudent(IPage<CourseSchedulePaymentVo> page, CourseGroupSearch search) {
-        return baseMapper.selectLiveGroupStudent(page,search);
+        return baseMapper.selectLiveGroupStudent(page, search);
     }
 
     @Override
     public IPage<CourseSchedulePlanVo> selectLiveGroupPlan(IPage<CourseSchedulePlanVo> page, CourseGroupSearch search) {
-        return baseMapper.selectLiveGroupPlan(page,search);
+        return baseMapper.selectLiveGroupPlan(page, search);
     }
 
     @Override
     public IPage<CourseGroupVideoVo> selectVideoGroup(IPage<CourseGroupVideoVo> page, CourseGroupSearch search) {
-        return baseMapper.selectVideoGroup(page,search);
+        return baseMapper.selectVideoGroup(page, search);
     }
 
     @Override
     public IPage<CourseGroupStudentVo> selectVideoGroupStudent(IPage<CourseGroupStudentVo> page, CourseGroupSearch search) {
-        return baseMapper.selectVideoGroupStudent(page,search);
+        return baseMapper.selectVideoGroupStudent(page, search);
     }
 
     @Override
     public IPage<VideoLessonGroupDetail> selectVideoGroupPlan(IPage<VideoLessonGroupDetail> page, CourseGroupSearch search) {
-        return baseMapper.selectVideoGroupPlan(page,search);
+        return baseMapper.selectVideoGroupPlan(page, search);
     }
 
     @Override
@@ -1079,5 +1096,66 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
             log.warn("直播课成课失败推送发送失败,{}", e.getMessage());
         }
     }
+
+    @Override
+    public IPage<CourseGroupPianoVo> selectPianoGroup(IPage<CourseGroupPianoVo> page, CourseGroupSearch search) {
+        return baseMapper.selectPianoGroup(page, search);
+    }
+
+    @Override
+    public IPage<CourseGroupPianoDetailVo> selectPianoGroupDetail(IPage<CourseGroupPianoDetailVo> page, CourseGroupDetailSearch search) {
+        if (search.getStudentSign() != null) {
+            List<StudentSignVo> list = studentSign(null, CourseScheduleEnum.PIANO_ROOM_CLASS.getCode());
+            List<Long> collect=new ArrayList<>();
+            if (search.getStudentSign() == 0) {//异常学生
+                collect = list.stream().filter(s -> (s.getStudentOutSign() + s.getStudentInSign()) != 2).map(StudentSignVo::getCourseId).collect(Collectors.toList());
+            }
+            if (search.getStudentSign() == 1) {//正常学生
+                collect = list.stream().filter(s -> (s.getStudentOutSign() + s.getStudentInSign()) == 2).map(StudentSignVo::getCourseId).collect(Collectors.toList());
+            }
+            collect.add(Long.valueOf(-1));
+            search.setCourseIds(collect);
+        }
+
+        IPage<CourseGroupPianoDetailVo> pianoGroupDetail = baseMapper.selectPianoGroupDetail(page, search);
+        List<CourseGroupPianoDetailVo> records = pianoGroupDetail.getRecords();
+
+        for (CourseGroupPianoDetailVo record : records) {
+            List<StudentSignVo> studentSigns = studentSign(record.getCourseId(), null);
+            for (StudentSignVo studentSign : studentSigns) {
+                if ((studentSign.getStudentInSign() + studentSign.getStudentOutSign()) == 2) {//签到正常
+                    record.setStudentSign(1);
+                } else {//签到异常
+                    record.setStudentSign(0);
+                }
+            }
+        }
+        return pianoGroupDetail;
+    }
+
+    @Override
+    public List<StudentSignVo> studentSign(Long courseId, String type) {
+        return baseMapper.studentSign(courseId, type);
+    }
+
+    @Override
+    public IPage<CourseGroupPianoVo> selectPianoGroupStudent(IPage<CourseGroupPianoVo> page, CourseGroupSearch search) {
+        return baseMapper.selectPianoGroupStudent(page, search);
+    }
+
+    @Override
+    public IPage<CourseGroupPianoDetailVo> selectPianoGroupStudentDetail(IPage<CourseGroupPianoDetailVo> page, CourseGroupDetailSearch search) {
+        return baseMapper.selectPianoGroupStudentDetail(page,search);
+    }
+
+    @Override
+    public IPage<CourseGroupPianoVo> selectPianoGroupTeacher(IPage<CourseGroupPianoVo> page, CourseGroupSearch search) {
+        return baseMapper.selectPianoGroupTeacher(page,search);
+    }
+
+    @Override
+    public IPage<CourseGroupPianoDetailVo> selectPianoGroupTeacherDetail(IPage<CourseGroupPianoDetailVo> page, CourseGroupDetailSearch search) {
+        return baseMapper.selectPianoGroupTeacherDetail(page,search);
+    }
 }
 

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

@@ -20,12 +20,13 @@ import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseHomeworkVo;
 import com.yonge.cooleshow.biz.dal.vo.CourseScheduleHomeworkVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentHomeworkVo;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.string.MessageFormatter;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -65,8 +66,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
 
 	@Override
     public CourseHomeworkVo detail(Long id) {
-        CourseHomeworkVo detail = baseMapper.detail(id);
-        return detail;
+        return baseMapper.detail(id);
     }
     
     @Override
@@ -99,7 +99,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
                 .collect(Collectors.groupingBy( CourseHomeworkVo::getCourseId));
 
         // 老师信息
-        List<CourseHomeworkVo> teacherInfoList = baseMapper.selectTeacherInfo(practiceRecordIdList);
+        List<CourseHomeworkVo> teacherInfoList = baseMapper.selectTeacherInfo(recordIdList);
         if (CollectionUtils.isEmpty(teacherInfoList)) {
             teacherInfoList = new ArrayList<>();
         }
@@ -233,6 +233,8 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
         }
         SysUser teacher = sysUserFeignService.queryUserById(teacherId);
         String url = sysMessageService.selectConfigUrl(MessageTypeEnum.TEACHER_DECORATE_HOMEWORK.getCode());
+
+        url = MessageFormatter.arrayFormat(url, courseScheduleId);
         for (CourseScheduleStudentPayment courseScheduleStudentPayment : paymentList) {
             SysUser student = sysUserFeignService.queryUserById(courseScheduleStudentPayment.getUserId());
             Map<Long,String> studentReceivers = new HashMap<>();
@@ -240,7 +242,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
 
             try {
                 sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum
-                       .TEACHER_DECORATE_HOMEWORK,studentReceivers, null, 0,url + courseScheduleId ,
+                       .TEACHER_DECORATE_HOMEWORK,studentReceivers, null, 0,url ,
                        ClientEnum.STUDENT.getCode(),teacher.getUsername());
             } catch (Exception e) {
                 log.warn("老师布置作业消息发送失败  学生id:{}",student.getId());
@@ -302,6 +304,8 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
         Map<Long,String> studentReceivers = new HashMap<>();
         studentReceivers.put(student.getId(), student.getPhone());
         String url = sysMessageService.selectConfigUrl(MessageTypeEnum.TEACHER_REVIEW_HOMEWORK.getCode());
+
+        url = MessageFormatter.arrayFormat(url, reviewDto.getCourseScheduleId());
         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_REVIEW_HOMEWORK,
         studentReceivers, null, 0, url + reviewDto.getCourseScheduleId() , ClientEnum.STUDENT.getCode(), teacher.getUsername());
     }
@@ -356,9 +360,9 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
         receivers.put(teacher.getId(), teacher.getPhone());
 
         String url = sysMessageService.selectConfigUrl(MessageTypeEnum.STUDENT_SUBMIT_HOMEWORK.getCode());
-
+        url = MessageFormatter.arrayFormat(url, submitDto.getCourseScheduleId(),student.getId());
         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SUBMIT_HOMEWORK,
-        receivers, null, 0, url + submitDto.getCourseScheduleId(), ClientEnum.TEACHER.getCode(), student.getUsername());
+        receivers, null, 0, url, ClientEnum.TEACHER.getCode(), student.getUsername());
     }
 
     @Override
@@ -372,7 +376,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
         CourseScheduleHomeworkVo courseScheduleHomeworkVo = baseMapper
                 .selectCourseHomeworkByCourseId(query.getCourseId());
         if (courseScheduleHomeworkVo == null) {
-            return courseScheduleHomeworkVo;
+            return new CourseScheduleHomeworkVo();
         }
         // 课程组的群聊
         ImGroup imGroup = imGroupService.getByCourseGroupId(courseScheduleHomeworkVo.getCourseGroupId());

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

@@ -77,7 +77,7 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
         }
 
         //当前用户为老师
-        if (userId == courseSchedule.getTeacherId()) {
+        if (userId.equals(courseSchedule.getTeacherId())) {
             if (studentId == null) {
                 throw new RuntimeException("评价的学生id不能为空");
             }

Неке датотеке нису приказане због велике количине промена