Browse Source

Merge branch 'master' of http://git.dayaedu.com/yonge/cooleshow into zouxuan

zouxuan 4 years ago
parent
commit
c8fe6fdbc4
100 changed files with 1536 additions and 1317 deletions
  1. 1 1
      cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/entity/SysUser.java
  2. 2 2
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  3. 5 5
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java
  4. 2 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/dao/SysNewsTypeDao.java
  5. 1 1
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/SysNewsTypeServiceImpl.java
  6. 1 1
      cooleshow-cms/src/main/resources/config/mybatis/HelpCenterContentMapper.xml
  7. 15 0
      cooleshow-cms/src/main/resources/config/mybatis/SysNewsTypeMapper.xml
  8. 75 134
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/entity/HttpResponseResult.java
  9. 7 4
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsCartItemController.java
  10. 4 2
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java
  11. 3 5
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderReturnApplyController.java
  12. 5 11
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/PmsPortalProductController.java
  13. 20 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OmsReturnApplyQueryParam.java
  14. 90 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/ProductSearch.java
  15. 4 8
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/AdminApplication.java
  16. 4 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseHomeworkController.java
  17. 1 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HomeController.java
  18. 10 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java
  19. 11 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  20. 7 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicTagController.java
  21. 4 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/SubjectController.java
  22. 2 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundController.java
  23. 3 8
      cooleshow-user/user-biz/pom.xml
  24. 0 48
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/config/HuifuConfiguration.java
  25. 9 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  26. 36 16
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentDao.java
  27. 24 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java
  28. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundBillDao.java
  29. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundBillDto.java
  30. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderPayReq.java
  31. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/StudentMusicSheetOrderSearch.java
  32. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/VideoLessonGroupSearch.java
  33. 43 31
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderPayment.java
  34. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefund.java
  35. 14 14
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefundBill.java
  36. 11 21
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  37. 0 152
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/props/HuifuProperties.java
  38. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/props/IMProperties.java
  39. 0 256
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/PaymentSdk.java
  40. 0 73
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/req/PaymentConfirmParam.java
  41. 0 168
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/req/PaymentReq.java
  42. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  43. 23 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentService.java
  44. 9 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java
  45. 4 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderPaymentService.java
  46. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundPaymentService.java
  47. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundService.java
  48. 1 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java
  49. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  50. 15 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java
  51. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java
  52. 130 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  53. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupMemberServiceImpl.java
  54. 28 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  55. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  56. 5 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthEntryRecordServiceImpl.java
  57. 3 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthMusicianRecordServiceImpl.java
  58. 45 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherFreeTimeServiceImpl.java
  59. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  60. 6 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java
  61. 88 73
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java
  62. 6 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundPaymentServiceImpl.java
  63. 38 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundServiceImpl.java
  64. 34 34
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  65. 4 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java
  66. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonEvaluateServiceImpl.java
  67. 36 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupServiceImpl.java
  68. 8 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonPurchaseRecordServiceImpl.java
  69. 8 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java
  70. 40 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/DistributedLock.java
  71. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/HttpHelper.java
  72. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetVo.java
  73. 73 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFens.java
  74. 134 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFollow.java
  75. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomePage.java
  76. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundBillVo.java
  77. 0 24
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundPaymentVo.java
  78. 30 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderVo.java
  79. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/WeekVo.java
  80. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/OrderPayRes.java
  81. 0 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml
  82. 21 4
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  83. 1 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml
  84. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/HomeMapper.xml
  85. 10 4
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  86. 26 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  87. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherAuthEntryRecordMapper.xml
  88. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherAuthMusicianRecordMapper.xml
  89. 14 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  90. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserAccountMapper.xml
  91. 15 5
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  92. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml
  93. 6 6
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundBillMapper.xml
  94. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundMapper.xml
  95. 10 8
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupDetailMapper.xml
  96. 3 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml
  97. 6 2
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/StudentApplication.java
  98. 47 40
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/PaymentController.java
  99. 35 3
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java
  100. 6 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java

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

@@ -50,7 +50,7 @@ public class SysUser implements Serializable{
 	private java.util.Date updateTime;
 
 	/** 0-正常,9-锁定 */
-	@ApiModelProperty(value = "0-正常,9-锁定")
+	@ApiModelProperty(value = "0-正常,1-锁定")
 	private Integer lockFlag;
 
 	/** 0-正常,1-删除 */

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

@@ -300,11 +300,11 @@ public class UserController extends BaseController {
     @GetMapping(value = "/changeLock/{userId}/{lockFlag}")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "userId", value = "userId", paramType = "path", dataType = "long", required = true),
-            @ApiImplicitParam(name = "lockFlag", value = "锁定状态 0-正常,9-锁定", paramType = "path", dataType = "int", required = true)
+            @ApiImplicitParam(name = "lockFlag", value = "锁定状态 0-正常,1-锁定", paramType = "path", dataType = "int", required = true)
     })
     @ApiOperation(value = "启用/冻结", notes = "传入lockFlag")
     public HttpResponseResult<Boolean> changeLock(@PathVariable("userId") Long userId, @PathVariable("lockFlag") Integer lockFlag) {
-        if (userId == null && lockFlag != 0 && lockFlag != 9) {
+        if (userId == null && lockFlag != 0 && lockFlag != 1) {
             return failed("参数校验异常");
         }
         SysUser sysUser = sysUserService.queryUserInfo(userId);

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

@@ -32,7 +32,7 @@ import javax.validation.Valid;
 
 @RestController
 @RequestMapping("news")
-@Api(tags = "资讯/广告/闪页/轮播图服务")
+@Api(tags = "资讯/广告/闪页/轮播图/乐理服务")
 public class NewsController extends BaseController {
 
 	@Autowired
@@ -41,7 +41,7 @@ public class NewsController extends BaseController {
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
 
-	@ApiOperation(value = "资讯/广告/闪页/轮播图 列表分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
+	@ApiOperation(value = "资讯/广告/闪页/轮播图/乐理 列表分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
 	@PostMapping(value = "/page",  consumes="application/json", produces="application/json")
 	public HttpResponseResult<PageInfo<SysNewsInformationDto>> getList(@Valid @RequestBody NewsInformationQueryInfo queryInfo) {
 		
@@ -51,7 +51,7 @@ public class NewsController extends BaseController {
 	}
 
 
-	@ApiOperation("查询资讯/广告/闪页/轮播图 详情")
+	@ApiOperation("查询资讯/广告/闪页/轮播图/乐理 详情")
 	@ApiImplicitParam(name = "id", value = "资讯ID编号", required = true, dataType = "Long", paramType = "path")
 	@GetMapping(value = "/query/{id}")
 	public HttpResponseResult<SysNewsInformationDto> query(@PathVariable Long id) {
@@ -59,7 +59,7 @@ public class NewsController extends BaseController {
 		return succeed(sysNewsInformationService.queryById(id));
 	}
 
-	@ApiOperation(value = "新增资讯/广告/闪页/轮播图 ", httpMethod="POST", consumes="application/json", produces="application/json")
+	@ApiOperation(value = "新增资讯/广告/闪页/轮播图/乐理 ", httpMethod="POST", consumes="application/json", produces="application/json")
 	@PostMapping(value = "/add",  consumes="application/json", produces="application/json")
 	@AuditLogAnnotation(operateName = "资讯新增",interfaceURL = "news/add")
 	// @PreAuthorize("@pcs.hasPermissions('news/add')")
@@ -144,7 +144,7 @@ public class NewsController extends BaseController {
 		return succeed();
 	}
 
-	@ApiOperation(value = "更新资讯/广告/闪页/轮播图 ", httpMethod="POST", consumes="application/json", produces="application/json")
+	@ApiOperation(value = "更新资讯/广告/闪页/轮播图/乐理 ", httpMethod="POST", consumes="application/json", produces="application/json")
 	@PostMapping(value = "/update",  consumes="application/json", produces="application/json")
 	@AuditLogAnnotation(operateName = "资讯更新",interfaceURL = "news/update")
 	// @PreAuthorize("@pcs.hasPermissions('news/update')")

+ 2 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/dao/SysNewsTypeDao.java

@@ -14,4 +14,6 @@ public interface SysNewsTypeDao extends BaseDAO<Long, SysNewsType> {
 	List<SysNewsTypeTree> queryByParentId(Long parentId);
 
     List<SysNewsTypeDto> queryAppPage(Map<String, Object> params);
+
+	int queryAppCount(Map<String, Object> params);
 }

+ 1 - 1
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/SysNewsTypeServiceImpl.java

@@ -60,7 +60,7 @@ public class SysNewsTypeServiceImpl extends BaseServiceImpl<Long, SysNewsType> i
 		MapUtil.populateMap(params, query);
 
 		List<SysNewsTypeDto> dataList = null;
-		int count = sysNewsTypeDao.queryCount(params);
+		int count = sysNewsTypeDao.queryAppCount(params);
 		if (count > 0) {
 			pageInfo.setTotal(count);
 			params.put("offset", pageInfo.getOffset());

+ 1 - 1
cooleshow-cms/src/main/resources/config/mybatis/HelpCenterContentMapper.xml

@@ -73,7 +73,7 @@
 		left join help_center_catalog catalog on content.catalog_id_=catalog.id_
 		left join sys_user su on content.update_by_ = su.id_
 		<include refid="queryConditionUnion" />
-		order by content.order_ asc,content.id_ desc
+		order by content.order_ asc,content.release_time_ desc,content.id_ desc
 		<include refid="global.limit" />
 	</select>
 

+ 15 - 0
cooleshow-cms/src/main/resources/config/mybatis/SysNewsTypeMapper.xml

@@ -113,6 +113,9 @@
 		FROM sys_news_type snt
 		left join sys_news_information sni on sni.sub_type_ = snt.id_
 		where snt.del_flag_ = 0 and snt.parent_id_ = 6 and sni.del_flag_ = 0 and sni.status_ = 1
+		<if test="search != null and search != ''">
+			and  (sni.title_ like concat('%',#{search},'%') or snt.name_ like concat('%',#{search},'%'))
+		</if>
 		ORDER BY snt.order_ , sni.order_
 		<include refid="global.limit" />
 	</select>
@@ -152,4 +155,16 @@
 			<result column="create_by_" property="createBy" />
 		</collection>
 	</resultMap>
+
+	<select id="queryAppCount" resultType="int">
+		SELECT count(1)
+		FROM sys_news_type snt
+		left join sys_news_information sni on sni.sub_type_ = snt.id_
+		where snt.del_flag_ = 0 and snt.parent_id_ = 6 and sni.del_flag_ = 0 and sni.status_ = 1
+		<if test="search != null and search != ''">
+			and  (sni.title_ like concat('%',#{search},'%') or snt.name_ like concat('%',#{search},'%'))
+		</if>
+		ORDER BY snt.order_ , sni.order_
+		<include refid="global.limit" />
+	</select>
 </mapper>

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

@@ -1,146 +1,87 @@
 package com.yonge.cooleshow.common.entity;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
-import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.base.exception.ThirdpartyException;
-import com.yonge.toolset.utils.http.HttpUtil;
+import com.yonge.toolset.base.result.BaseResult;
 import com.yonge.toolset.utils.json.JsonUtil;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.exception.ExceptionUtils;
-import org.springframework.context.support.DefaultMessageSourceResolvable;
 import org.springframework.http.HttpStatus;
-import java.util.Date;
 
 /**
  * HttpResponse 返回结果
  */
-public class HttpResponseResult<T> {
+public class HttpResponseResult<T> extends BaseResult<T> {
 
-	private boolean status = true;
-	private String msg;
-	private T data;
-	private int code;
-	private Date nowTime = new Date();
-
-	public HttpResponseResult(boolean status, int code, T data, String message) {
-		this.status = status;
-		this.msg = message;
-		this.data = data;
-		this.code = code;
-	}
-
-	public HttpResponseResult(boolean status, HttpStatus resultCode, T data, String message) {
-		this.status = status;
-		this.msg = message;
-		this.data = data;
-		this.code = resultCode.value();
-	}
-
-	public HttpResponseResult() {
-	}
-
-	public int getCode() {
-		return code;
-	}
-
-	public void setCode(int code) {
-		this.code = code;
-	}
-
-	public boolean getStatus() {
-		return status;
-	}
-
-	public void setStatus(boolean status) {
-		this.status = status;
-	}
-
-	public String getMsg() {
-		return msg;
-	}
-
-	public void setMsg(String msg) {
-		this.msg = msg;
-	}
-
-	public T getData() {
-		return data;
-	}
-
-	public void setData(T data) {
-		this.data = data;
-	}
-
-	public void success() {
-		this.status = true;
-	}
-
-	public void fail() {
-		this.status = false;
-	}
-
-	public Date getNowTime() {
-		return nowTime;
-	}
-
-	public void setNowTime(Date nowTime) {
-		this.nowTime = nowTime;
-	}
-
-
-	public static <T> HttpResponseResult<T> succeed(T object) {
-		return getResponseData(true, HttpStatus.OK, object, "");
-	}
-
-	public static <T> HttpResponseResult<T> succeed() {
-		return getResponseData(true, HttpStatus.OK, null, "");
-	}
-
-	public static <T> HttpResponseResult<T> succeedData(T obj) {
-		return getResponseData(true, HttpStatus.OK, obj, "操作成功");
-	}
-
-	public static <T> HttpResponseResult<T> warned(String message) {
-		return failed(HttpStatus.MULTI_STATUS, message);
-	}
-
-	public static <T> HttpResponseResult<T> failed() {
-		return failed("");
-	}
-
-	public static <T> HttpResponseResult<T> failed(String msg) {
-		return failed(HttpStatus.INTERNAL_SERVER_ERROR, msg);
-	}
-
-	public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, String msg) {
-		return getResponseData(false, statusCode, null, msg);
-	}
-
-	public static <T> HttpResponseResult<T> status(boolean flag) {
-		return flag ? succeed() : failed("操作失败");
-	}
-
-	public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, T data, String msg) {
-		return getResponseData(false, statusCode, data, msg);
-	}
-	public static <T> HttpResponseResult<T> failed(int code, T data, String msg) {
-		return new HttpResponseResult<>(false, code, data, msg);
-	}
-
-	private static <T> HttpResponseResult<T> getResponseData(boolean status, HttpStatus statusCode, T data, String message) {
-		HttpResponseResult<T> obj = new HttpResponseResult<T>();
-		obj.setStatus(status);
-		obj.setCode(statusCode.value());
-		obj.setData(data);
-		obj.setMsg(message);
-		return obj;
-	}
-
-	@Override
-	public String toString(){
-	    return JsonUtil.toJSONString(this, SerializerFeature.PrettyFormat);
+    public HttpResponseResult(boolean status, int code, T data, String message) {
+        super(status, code, data, message);
+    }
+
+    public HttpResponseResult(boolean status, HttpStatus resultCode, T data, String message) {
+        super(status, resultCode, data, message);
+
+    }
+
+    public HttpResponseResult() {
+    }
+
+    public static <T> HttpResponseResult<T> succeed(T object) {
+        return getResponseData(true, HttpStatus.OK, object, "");
+    }
+
+    public static <T> HttpResponseResult<T> succeed() {
+        return getResponseData(true, HttpStatus.OK, null, "");
+    }
+
+    public static <T> HttpResponseResult<T> succeedData(T obj) {
+        return getResponseData(true, HttpStatus.OK, obj, "操作成功");
+    }
+
+    public static <T> HttpResponseResult<T> warned(String message) {
+        return failed(HttpStatus.MULTI_STATUS, message);
+    }
+
+    public static <T> HttpResponseResult<T> failed() {
+        return failed("");
+    }
+
+    public static <T> HttpResponseResult<T> failed(String msg) {
+        return failed(HttpStatus.INTERNAL_SERVER_ERROR, msg);
+    }
+
+    public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, String msg) {
+        return getResponseData(false, statusCode, null, msg);
+    }
+
+    public static <T> HttpResponseResult<T> status(boolean flag) {
+        return flag ? succeed() : failed("操作失败");
+    }
+
+    public static <T> HttpResponseResult<T> status(BaseResult<T> baseResult) {
+        HttpResponseResult<T> obj = new HttpResponseResult<T>();
+        obj.setStatus(baseResult.getStatus());
+        obj.setCode(baseResult.getCode());
+        obj.setData(baseResult.getData());
+        obj.setMsg(baseResult.getMsg());
+        return obj;
+    }
+
+    public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, T data, String msg) {
+        return getResponseData(false, statusCode, data, msg);
+    }
+
+    public static <T> HttpResponseResult<T> failed(int code, T data, String msg) {
+        return new HttpResponseResult<>(false, code, data, msg);
+    }
+
+    private static <T> HttpResponseResult<T> getResponseData(boolean status, HttpStatus statusCode, T data, String message) {
+        HttpResponseResult<T> obj = new HttpResponseResult<T>();
+        obj.setStatus(status);
+        obj.setCode(statusCode.value());
+        obj.setData(data);
+        obj.setMsg(message);
+        return obj;
+    }
+
+    @Override
+    public String toString() {
+        return JsonUtil.toJSONString(this, SerializerFeature.PrettyFormat);
     }
 }

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

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.portal.domain.CartProduct;
 import com.yonge.cooleshow.portal.domain.CartPromotionItem;
 import com.yonge.cooleshow.portal.service.OmsCartItemService;
 import com.yonge.cooleshow.portal.service.UmsMemberService;
+import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -49,8 +50,9 @@ public class OmsCartItemController {
     @ApiOperation("获取当前会员的购物车列表,包括促销信息")
     @RequestMapping(value = "/list/promotion", method = RequestMethod.GET)
     @ResponseBody
-    public CommonResult<List<CartPromotionItem>> listPromotion(@RequestParam(required = false) List<Long> cartIds) {
-        List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(memberService.getCurrentMember().getId(), cartIds);
+    public CommonResult<List<CartPromotionItem>> listPromotion(@RequestParam(required = false) String cartIds) {
+        List<Long> list = StringUtil.toLongList(cartIds);
+        List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(memberService.getCurrentMember().getId(), list);
         return CommonResult.success(cartPromotionItemList);
     }
 
@@ -88,8 +90,9 @@ public class OmsCartItemController {
     @ApiOperation("删除购物车中的指定商品")
     @RequestMapping(value = "/delete", method = RequestMethod.POST)
     @ResponseBody
-    public CommonResult delete(@RequestParam("ids") List<Long> ids) {
-        int count = cartItemService.delete(memberService.getCurrentMember().getId(), ids);
+    public CommonResult delete(@RequestParam("ids") String ids) {
+        List<Long> list = StringUtil.toLongList(ids);
+        int count = cartItemService.delete(memberService.getCurrentMember().getId(), list);
         if (count > 0) {
             return CommonResult.success(count);
         }

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

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.portal.domain.ConfirmOrderResult;
 import com.yonge.cooleshow.portal.domain.OmsOrderDetail;
 import com.yonge.cooleshow.portal.domain.OrderParam;
 import com.yonge.cooleshow.portal.service.OmsPortalOrderService;
+import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
@@ -30,8 +31,9 @@ public class OmsPortalOrderController {
     @ApiOperation("根据购物车信息生成确认单")
     @RequestMapping(value = "/generateConfirmOrder", method = RequestMethod.POST)
     @ResponseBody
-    public CommonResult<ConfirmOrderResult> generateConfirmOrder(@RequestBody List<Long> cartIds) {
-        ConfirmOrderResult confirmOrderResult = portalOrderService.generateConfirmOrder(cartIds);
+    public CommonResult<ConfirmOrderResult> generateConfirmOrder(@RequestParam String cartIds) {
+        List<Long> list = StringUtil.toLongList(cartIds);
+        ConfirmOrderResult confirmOrderResult = portalOrderService.generateConfirmOrder(list);
         return CommonResult.success(confirmOrderResult);
     }
 

+ 3 - 5
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderReturnApplyController.java

@@ -53,12 +53,10 @@ public class OmsPortalOrderReturnApplyController {
     }
 
     @ApiOperation("分页查询退货申请")
-    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
     @ResponseBody
-    public CommonResult<CommonPage<OmsOrderReturnApply>> list(OmsReturnApplyQueryParam queryParam,
-                                                              @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
-                                                              @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) {
-        List<OmsOrderReturnApply> returnApplyList = returnApplyService.list(queryParam, pageSize, pageNum);
+    public CommonResult<CommonPage<OmsOrderReturnApply>> list(@RequestBody OmsReturnApplyQueryParam queryParam) {
+        List<OmsOrderReturnApply> returnApplyList = returnApplyService.list(queryParam, queryParam.getPageSize(), queryParam.getPageNum());
         return CommonResult.success(CommonPage.restPage(returnApplyList));
     }
 

+ 5 - 11
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/PmsPortalProductController.java

@@ -4,6 +4,7 @@ import com.yonge.cooleshow.mall.common.api.CommonPage;
 import com.yonge.cooleshow.mall.common.api.CommonResult;
 import com.yonge.cooleshow.mbg.model.PmsProduct;
 import com.yonge.cooleshow.portal.domain.PmsPortalProductDetail;
+import com.yonge.cooleshow.portal.dto.ProductSearch;
 import com.yonge.cooleshow.portal.dto.ProductSearchConditionVo;
 import com.yonge.cooleshow.portal.service.PmsPortalProductService;
 import io.swagger.annotations.Api;
@@ -28,18 +29,11 @@ public class PmsPortalProductController {
     private PmsPortalProductService portalProductService;
 
     @ApiOperation(value = "综合搜索、筛选、排序")
-    @ApiImplicitParam(name = "sort", value = "排序字段:0->按相关度;1->按新品;2->按销量;3->价格从低到高;4->价格从高到低",
-            defaultValue = "0", allowableValues = "0,1,2,3,4", paramType = "query", dataType = "integer")
-    @RequestMapping(value = "/search", method = RequestMethod.GET)
+    @RequestMapping(value = "/search", method = RequestMethod.POST)
     @ResponseBody
-    public CommonResult<CommonPage<PmsProduct>> search(@RequestParam(required = false) String keyword,
-                                                       @RequestParam(required = false) Long brandId,
-                                                       @RequestParam(required = false) Long productCategoryId,
-                                                       @RequestParam(required = false) Long productAttributeCategoryId,
-                                                       @RequestParam(required = false, defaultValue = "0") Integer pageNum,
-                                                       @RequestParam(required = false, defaultValue = "5") Integer pageSize,
-                                                       @RequestParam(required = false, defaultValue = "0") Integer sort) {
-        List<PmsProduct> productList = portalProductService.search(keyword, brandId, productCategoryId,productAttributeCategoryId, pageNum, pageSize, sort);
+    public CommonResult<CommonPage<PmsProduct>> search(@RequestBody ProductSearch search) {
+        List<PmsProduct> productList = portalProductService.search(search.getKeyword(),search.getBrandId(),search.getProductCategoryId(),
+                       search.getProductAttributeCategoryId(), search.getPageNum(), search.getPageSize(), search.getSort());
         return CommonResult.success(CommonPage.restPage(productList));
     }
 

+ 20 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OmsReturnApplyQueryParam.java

@@ -22,6 +22,26 @@ public class OmsReturnApplyQueryParam {
     @ApiModelProperty(value = "处理时间")
     private String handleTime;
 
+
+    private Integer pageSize;
+    private Integer pageNum;
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public Integer getPageNum() {
+        return pageNum;
+    }
+
+    public void setPageNum(Integer pageNum) {
+        this.pageNum = pageNum;
+    }
+
     public Long getId() {
         return id;
     }

+ 90 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/ProductSearch.java

@@ -0,0 +1,90 @@
+package com.yonge.cooleshow.portal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-13
+ */
+public class ProductSearch {
+
+    @ApiModelProperty("名称搜索")
+    private String keyword;
+
+    @ApiModelProperty("品牌id")
+    private Long brandId;
+
+    @ApiModelProperty("商品分类id")
+    private Long productCategoryId;
+
+    @ApiModelProperty("商品类型id")
+    private Long productAttributeCategoryId;
+
+    @ApiModelProperty("")
+    private Integer pageNum = 0;
+
+    @ApiModelProperty("")
+    private Integer pageSize= 5;
+
+    @ApiModelProperty("")
+    private Integer sort = 0;
+
+    public String getKeyword() {
+        return keyword;
+    }
+
+    public void setKeyword(String keyword) {
+        this.keyword = keyword;
+    }
+
+    public Long getBrandId() {
+        return brandId;
+    }
+
+    public void setBrandId(Long brandId) {
+        this.brandId = brandId;
+    }
+
+    public Long getProductCategoryId() {
+        return productCategoryId;
+    }
+
+    public void setProductCategoryId(Long productCategoryId) {
+        this.productCategoryId = productCategoryId;
+    }
+
+    public Long getProductAttributeCategoryId() {
+        return productAttributeCategoryId;
+    }
+
+    public void setProductAttributeCategoryId(Long productAttributeCategoryId) {
+        this.productAttributeCategoryId = productAttributeCategoryId;
+    }
+
+    public Integer getPageNum() {
+        return pageNum;
+    }
+
+    public void setPageNum(Integer pageNum) {
+        this.pageNum = pageNum;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public Integer getSort() {
+        return sort;
+    }
+
+    public void setSort(Integer sort) {
+        this.sort = sort;
+    }
+}

+ 4 - 8
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/AdminApplication.java

@@ -13,15 +13,11 @@ import com.spring4all.swagger.EnableSwagger2Doc;
 @SpringBootApplication
 @EnableDiscoveryClient
 @EnableFeignClients("com.yonge.cooleshow")
-@MapperScan("com.yonge.cooleshow.biz.dal.dao")
+@MapperScan(basePackages = {"com.yonge.cooleshow.biz.dal.dao", "com.yonge.toolset.payment.core.dao"})
 @ComponentScan(basePackages = {
-		"com.yonge.cooleshow.admin",
-		"com.yonge.cooleshow.auth",
-		"com.yonge.cooleshow.biz",
-		"com.yonge.cooleshow.common",
-		"com.yonge.cooleshow.common.security",
-		"com.yonge.toolset.log",
-		"com.yonge.toolset.thirdparty"
+		"com.yonge.cooleshow.admin", "com.yonge.cooleshow.auth", "com.yonge.cooleshow.biz",
+		"com.yonge.cooleshow.common", "com.yonge.cooleshow.common.security",
+		"com.yonge.toolset.log", "com.yonge.toolset.thirdparty", "com.yonge.toolset.payment"
 })
 @Configuration
 @EnableSwagger2Doc

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

@@ -15,6 +15,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -32,6 +33,7 @@ public class CourseHomeworkController extends BaseController {
 
 	@ApiOperation(value = "课后作业-列表", httpMethod = "POST", consumes = "application/json", produces = "application/json")
 	@PostMapping(value = "/list", consumes = "application/json", produces = "application/json")
+	@PreAuthorize("@pcs.hasPermissions('homework/list')")
 	public HttpResponseResult<PageInfo<CourseHomeworkVo>> list(@Valid @RequestBody HomeworkAdminSearch query) {
 		query.setDecorate(YesOrNoEnum.YES);
 		query.setCourseStatus(CourseScheduleEnum.COMPLETE);
@@ -42,6 +44,7 @@ public class CourseHomeworkController extends BaseController {
 
 	@ApiOperation(value = "首页-我的课程-课程详情(陪练课)-课后作业信息详情",notes = "传入课程编号ID")
 	@GetMapping(value = "/detail/{courseId}")
+	@PreAuthorize("@pcs.hasPermissions('homework/detail')")
 	public HttpResponseResult<CourseHomeworkDetailVo> detail(@ApiParam(value = "课程编号ID", required = true)
 															 @PathVariable("courseId") Long courseId) {
 		return succeed(courseHomeworkService.getCourseHomeworkDetailByCourseId(courseId));
@@ -51,6 +54,7 @@ public class CourseHomeworkController extends BaseController {
 
 	@PostMapping(value = "/teacherSend")
 	@ApiOperation(value = "发送老师未评价和未布置作业消息")
+	@PreAuthorize("@pcs.hasPermissions('homework/teacherSend')")
 	public HttpResponseResult<Object> sendTodayNotRepliedAndNotDecorateHomework() {
 		courseScheduleService.sendTodayNotRepliedAndNotDecorateHomework();
 		return HttpResponseResult.succeed();

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

@@ -51,6 +51,7 @@ public class HomeController extends BaseController {
 
     @ApiOperation(value = "首页曲目点播数据")
     @PostMapping("/musicSheet")
+    @PreAuthorize("@pcs.hasPermissions('home/musicSheet')")
     public HttpResponseResult<HomeMusicSheetVo> musicSheet() {
         return succeed(musicSheetService.getMusicSheetHome());
     }

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

@@ -18,6 +18,7 @@ import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -41,6 +42,7 @@ public class MusicAlbumController extends BaseController {
 
 	@ApiOperation(value = "新增", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/create", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/album/create')")
     public HttpResponseResult<Object> create(@Valid @RequestBody MusicAlbum musicAlbum) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -57,6 +59,7 @@ public class MusicAlbumController extends BaseController {
 
     @ApiOperation(value = "删除", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping("/delete/{id}")
+    @PreAuthorize("@pcs.hasPermissions('music/album/delete')")
     public Object delete(@PathVariable Long id) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -68,6 +71,7 @@ public class MusicAlbumController extends BaseController {
 
     @ApiOperation(value = "修改", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/update", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/album/update')")
     public HttpResponseResult<Object> update(@Valid @RequestBody MusicAlbum musicAlbum) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -87,6 +91,7 @@ public class MusicAlbumController extends BaseController {
 
     @ApiOperation(value = "分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/list", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/album/list')")
     public HttpResponseResult<PageInfo<MusicAlbumVo>> list(@RequestBody MusicAlbumSearch query) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -101,6 +106,7 @@ public class MusicAlbumController extends BaseController {
      */
     @PostMapping("/state/{id}")
     @ApiOperation(value = "启用/停用", notes = "传入id")
+    @PreAuthorize("@pcs.hasPermissions('music/album/state')")
     public HttpResponseResult<Boolean> state(@ApiParam(value = "专辑编号", required = true)  @PathVariable Long id) {
         if (StringUtil.isEmpty(id)) {
             return failed("参数不能为空");
@@ -114,6 +120,7 @@ public class MusicAlbumController extends BaseController {
      */
     @PostMapping(value = "/detail", consumes="application/json", produces="application/json")
     @ApiOperation(value = "专辑详情",  httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/album/detail')")
     public HttpResponseResult<AlbumDetailVo> detail(@Valid @RequestBody MusicAlbumDetailSearch query) {
 
         query.setType(2);
@@ -127,6 +134,7 @@ public class MusicAlbumController extends BaseController {
      */
     @PostMapping(value = "/detail/canAddMusicSheet", consumes="application/json", produces="application/json")
     @ApiOperation(value = "专辑详情能新增的曲目列表",  httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/album/detail/canAddMusicSheet')")
     public HttpResponseResult<AlbumDetailVo> detailAddMusicSheet(@Valid @RequestBody MusicAlbumDetailSearch query) {
 
         query.setType(1);
@@ -141,6 +149,7 @@ public class MusicAlbumController extends BaseController {
      */
     @PostMapping(value = "/detail/delMusicSheet" ,consumes="application/json", produces="application/json")
     @ApiOperation(value = "专辑详情删除曲目列表",  httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/album/detail/delMusicSheet')")
     public HttpResponseResult<Boolean> detailDelMusicSheet(@Valid @RequestBody MusicAlbumSheetDto query) {
         if (StringUtil.isEmpty(query.getAlbumId())) {
             return failed("专辑编号ID不能为空");
@@ -158,6 +167,7 @@ public class MusicAlbumController extends BaseController {
      */
     @PostMapping(value = "/detail/addMusicSheet",consumes="application/json", produces="application/json")
     @ApiOperation(value = "专辑详情添加曲目列表",  httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/album/detail/addMusicSheet')")
     public HttpResponseResult<Boolean> detailAddMusicSheet(@Valid @RequestBody MusicAlbumSheetDto query) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {

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

@@ -24,6 +24,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -54,6 +55,7 @@ public class MusicSheetController extends BaseController {
      */
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入id")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/detail')")
     public HttpResponseResult<MusicSheetDetailVo> detail(@ApiParam(value = "曲谱编号", required = true) @PathVariable("id") Long id) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -64,6 +66,7 @@ public class MusicSheetController extends BaseController {
 
 	@ApiOperation(value = "新增", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/create", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/create')")
     public HttpResponseResult<Object> create(@Valid @RequestBody MusicSheetDto musicSheetDto) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -101,6 +104,7 @@ public class MusicSheetController extends BaseController {
 
     @ApiOperation(value = "删除", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping("/delete/{id}")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/delete')")
     public Object delete(@PathVariable Long id) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -117,6 +121,7 @@ public class MusicSheetController extends BaseController {
 
     @ApiOperation(value = "修改", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/update", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/update')")
     public HttpResponseResult<Object> update(@Valid @RequestBody MusicSheetDto musicSheet) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -141,6 +146,7 @@ public class MusicSheetController extends BaseController {
 
     @ApiOperation(value = "分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/list", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/list')")
     public HttpResponseResult<PageInfo<MusicSheetVo>> list(@RequestBody MusicSheetSearch query) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {
@@ -157,6 +163,7 @@ public class MusicSheetController extends BaseController {
      */
     @PostMapping("/state/{id}")
     @ApiOperation(value = "启用/停用", notes = "传入id")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/state')")
     public HttpResponseResult<Boolean> state(@ApiParam(value = "曲目编号", required = true)  @PathVariable Long id) {
         if (StringUtil.isEmpty(id)) {
             return failed("参数不能为空");
@@ -169,6 +176,7 @@ public class MusicSheetController extends BaseController {
      */
     @PostMapping(value = "/student", consumes="application/json", produces="application/json")
     @ApiOperation(value = "学生详情-乐谱", httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/student')")
     public HttpResponseResult<PageInfo<StudentMusicSheetOrderVo>> student(@Valid @RequestBody StudentMusicSheetOrderSearch query) {
         return succeed(PageUtil.pageInfo(musicSheetService.selectStudentOrderPage(PageUtil.getPage(query),query)));
     }
@@ -179,6 +187,7 @@ public class MusicSheetController extends BaseController {
      */
     @PostMapping(value = "/teacher", consumes="application/json", produces="application/json")
     @ApiOperation(value = "老师详情-乐谱", httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/teacher')")
     public HttpResponseResult<PageInfo<TeacherMusicSheetVo>> teacher(@Valid @RequestBody TeacherMusicSheetSearch query) {
         return succeed(PageUtil.pageInfo(musicSheetService.selectTeacherPage(PageUtil.getPage(query),query)));
     }
@@ -188,6 +197,7 @@ public class MusicSheetController extends BaseController {
      */
     @PostMapping(value = "/audit/list", consumes="application/json", produces="application/json")
     @ApiOperation(value = "审核中心-乐谱审核列表", httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/audit/list')")
     public HttpResponseResult<PageInfo<TeacherMusicSheetVo>> audit(@RequestBody TeacherMusicSheetAuditSearch query) {
         return succeed(PageUtil.pageInfo(musicSheetService.selectAuditPage(PageUtil.getPage(query),query)));
     }
@@ -197,6 +207,7 @@ public class MusicSheetController extends BaseController {
      */
     @PostMapping(value = "/audit", consumes="application/json", produces="application/json")
     @ApiOperation(value = "审核中心-乐谱审核", httpMethod="POST", consumes="application/json", produces="application/json")
+    @PreAuthorize("@pcs.hasPermissions('music/sheet/audit')")
     public HttpResponseResult<Boolean> audit(@Valid @RequestBody TeacherMusicSheetAuditReq param) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null  || sysUser.getId() == null) {

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

@@ -15,6 +15,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -34,6 +35,7 @@ public class MusicTagController extends BaseController {
      */
     @GetMapping("/detail/{id}")
 	@ApiOperation(value = "详情", notes = "传入id")
+	@PreAuthorize("@pcs.hasPermissions('MusicTag/detail')")
     public HttpResponseResult<MusicTagVo> detail(@ApiParam(value = "标签编号", required = true) @PathVariable("id") Long id) {
     	return succeed(musicTagService.detail(id));
 	}
@@ -43,6 +45,7 @@ public class MusicTagController extends BaseController {
      */
     @PostMapping(value = "/page", consumes="application/json", produces="application/json")
     @ApiOperation(value = "查询分页", httpMethod="POST", consumes="application/json", produces="application/json")
+	@PreAuthorize("@pcs.hasPermissions('MusicTag/page')")
     public HttpResponseResult<PageInfo<MusicTagVo>> page(@Valid @RequestBody MusicTagSearch query) {
 		IPage<MusicTagVo> pages = musicTagService.selectPage(PageUtil.getPage(query), query);
 		return succeed(PageUtil.pageInfo(pages));
@@ -64,6 +67,7 @@ public class MusicTagController extends BaseController {
 	 */
 	@PostMapping(value = "/save",  consumes="application/json", produces="application/json")
 	@ApiOperation(value = "新增", httpMethod="POST", consumes="application/json", produces="application/json")
+	@PreAuthorize("@pcs.hasPermissions('MusicTag/save')")
 	public HttpResponseResult<Boolean> save(@Validated(MusicTagSaveDto.Create.class) @RequestBody MusicTagSaveDto musicTagSaveDto) {
 		if (musicTagSaveDto.getParentTagId() != null && musicTagSaveDto.getParentTagId() != 0) {
 			MusicTag musicTag = musicTagService.getById(musicTagSaveDto.getParentTagId());
@@ -79,6 +83,7 @@ public class MusicTagController extends BaseController {
 	 */
 	@PostMapping(value =  "/update",  consumes="application/json", produces="application/json")
 	@ApiOperation(value = "修改", httpMethod="POST", consumes="application/json", produces="application/json")
+	@PreAuthorize("@pcs.hasPermissions('MusicTag/update')")
 	public HttpResponseResult<Boolean> update(@Validated(MusicTagSaveDto.Update.class) @RequestBody MusicTagSaveDto musicTagSaveDto) {
 		if (musicTagSaveDto.getParentTagId() != null && musicTagSaveDto.getParentTagId() != 0) {
 			MusicTag musicTag = musicTagService.getById(musicTagSaveDto.getParentTagId());
@@ -94,6 +99,7 @@ public class MusicTagController extends BaseController {
 	 */
 	@PostMapping("/remove/{id}")
 	@ApiOperation(value = "逻辑删除", notes = "传入id")
+	@PreAuthorize("@pcs.hasPermissions('MusicTag/remove')")
 	public HttpResponseResult<Boolean> remove(@ApiParam(value = "标签编号", required = true) @PathVariable Long id) {
         if (StringUtil.isEmpty(id)) {
 			return failed("参数不能为空");
@@ -106,6 +112,7 @@ public class MusicTagController extends BaseController {
 	 */
 	@PostMapping("/state/{id}")
 	@ApiOperation(value = "启用/停用", notes = "传入id")
+	@PreAuthorize("@pcs.hasPermissions('MusicTag/state')")
 	public HttpResponseResult<Boolean> state(@ApiParam(value = "标签编号", required = true)  @PathVariable Long id) {
 		if (StringUtil.isEmpty(id)) {
 			return failed("参数不能为空");

+ 4 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/SubjectController.java

@@ -43,6 +43,10 @@ public class SubjectController extends BaseController {
 	@PreAuthorize("@pcs.hasPermissions('subject/queryPage')")
 	public HttpResponseResult<PageInfo<Subject>> queryPage(SubjectQueryInfo queryInfo) {
 		PageInfo<Subject> pageInfo = subjectService.queryPage(queryInfo);
+		
+		if(pageInfo.getRows().size() == 0){
+			return succeed(pageInfo);
+		}
 
 		Map<Long, Subject> map = subjectService.findBySubjectByIdList(pageInfo.getRows().stream().map(t -> t.getParentSubjectId()).collect(Collectors.toList())).stream()
 				.collect(Collectors.toMap(Subject::getId, t -> t));

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

@@ -11,6 +11,7 @@ import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
 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.payment.base.model.RefundBill;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -53,7 +54,7 @@ public class UserOrderRefundController extends BaseController {
 	@PostMapping("/doAuth")
 	@ApiOperation(value = "审核", notes = "传入authOperaReq")
 	@PreAuthorize("@pcs.hasPermissions('userOrderRefunds/doAuth')")
-	public HttpResponseResult<Boolean> doAuth(@Valid @RequestBody AuthOperaReq authOperaReq) throws Exception {
+	public HttpResponseResult<RefundBill> doAuth(@Valid @RequestBody AuthOperaReq authOperaReq) throws Exception {
 		SysUser user = sysUserFeignService.queryUserInfo();
 		if (user == null || null == user.getId()) {
 			return failed(HttpStatus.FORBIDDEN, "请登录");

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

@@ -87,14 +87,9 @@
         </dependency>
 
         <dependency>
-            <groupId>com.huifu.adapay</groupId>
-            <artifactId>adapay-java-sdk</artifactId>
-            <version>1.2.10</version>
-        </dependency>
-        <dependency>
-            <groupId>com.alipay.sdk</groupId>
-            <artifactId>alipay-sdk-java</artifactId>
-            <version>4.23.0.ALL</version>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-payment</artifactId>
+            <version>${project.toolset.version}</version>
         </dependency>
     </dependencies>
 

+ 0 - 48
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/config/HuifuConfiguration.java

@@ -1,48 +0,0 @@
-package com.yonge.cooleshow.biz.dal.config;
-
-import com.alipay.api.AlipayClient;
-import com.alipay.api.DefaultAlipayClient;
-import com.huifu.adapay.Adapay;
-import com.huifu.adapay.model.MerConfig;
-import com.yonge.cooleshow.biz.dal.props.HuifuProperties;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * 路由配置信息
- */
-@Configuration
-@EnableConfigurationProperties({HuifuProperties.class})
-public class HuifuConfiguration {
-	private static HuifuProperties huifuProperties;
-	@Bean
-	public MerConfig merConfig(HuifuProperties authProperties) {
-		this.huifuProperties = authProperties;
-
-		MerConfig merConfig = new MerConfig();
-		merConfig.setApiKey(authProperties.getApiKey());
-		merConfig.setApiMockKey(authProperties.getMockApiKey());
-		merConfig.setRSAPrivateKey(authProperties.getRsaPrivateKey());
-		try {
-			Adapay.initWithMerConfig(merConfig);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return merConfig;
-	}
-
-	@Bean
-	public AlipayClient alipayClient(HuifuProperties authProperties){
-		AlipayClient alipayClient = new DefaultAlipayClient(
-				"https://openapi.alipay.com/gateway.do",
-				authProperties.getAliAppid(),
-				authProperties.getAliPrivatekey(),
-				"json","GBK",authProperties.getAliPublickey(),"RSA2");
-		return alipayClient;
-	}
-
-	public static HuifuProperties getHuifuProperties(){
-		return huifuProperties;
-	}
-}

+ 9 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java

@@ -13,6 +13,7 @@ import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -175,7 +176,7 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
     List<SysUser> selectTeacher(String tomorrow);
 
     //根据老师id统计明日课程
-    List<CountVo> selectTypeCount(@Param("teacherId")Long teacherId,@Param("tomorrow") String tomorrow);
+    List<CountVo> selectTypeCount(@Param("teacherId") Long teacherId, @Param("tomorrow") String tomorrow);
 
 
     List<TodayNotRepliedAndNotDecorateHomeworkVo> selectTodayNotRepliedAndNotDecorateHomework();
@@ -188,14 +189,20 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
 
     /**
      * 按年查询首页课程数据
+     *
      * @param param
      */
     List<CourseHomeVo.CourseHomeInfoVo> queryCourseHomeOfYear(@Param("param") Map<String, Object> param);
 
     /**
      * 按月查询首页课程数据
+     *
      * @param param
      */
     List<CourseHomeVo.CourseHomeInfoVo> queryCourseHomeOfMonth(@Param("param") Map<String, Object> param);
-}
 
+    //查询老师声部价格
+    BigDecimal selectPrice(@Param("teacherId") Long teacherId, @Param("subjectId") Long subjectId);
+
+    List<CourseSchedule> selectSchedule(Integer courseId);
+}

+ 36 - 16
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentDao.java

@@ -1,12 +1,14 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
 import java.util.List;
+import java.util.Map;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.vo.MyFollow;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -24,21 +26,39 @@ public interface StudentDao extends BaseMapper<Student> {
      * 自定义分页
      */
     List<StudentVo> selectPage(@Param("page") IPage page, @Param("param") StudentSearch studentSearch);
-	/***
-	 * 设置学员声部
-	 * @author liweifan
-	 * @param: id
-	 * @param: subjectIds
-	 * @updateTime 2022/4/7 10:12
-	 * @return: java.lang.Integer
-	 */
+
+    /***
+     * 设置学员声部
+     * @author liweifan
+     * @param: id
+     * @param: subjectIds
+     * @updateTime 2022/4/7 10:12
+     * @return: java.lang.Integer
+     */
     Integer setSubject(@Param("id") Long id, @Param("subjectIds") String subjectIds);
-	/***
-	 * 获取声部下拉框
-	 * @author liweifan
-	 * @param: id
-	 * @updateTime 2022/5/9 10:17
-	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
-	 */
-	List<Subject> querySubjectItem(@Param("userId")Long id);
+
+    /***
+     * 获取声部下拉框
+     * @author liweifan
+     * @param: id
+     * @updateTime 2022/5/9 10:17
+     * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
+     */
+    List<Subject> querySubjectItem(@Param("userId") Long id);
+
+    /**
+     * 我的关注
+     *
+     * @param page
+     * @param studentId
+     * @return
+     */
+    List<MyFollow> queryMyFollow(@Param("page") IPage<MyFollow> page, @Param("studentId") Long studentId);
+
+    /**
+     * 取消关注
+     *
+     * @param map
+     */
+    void unfollow(@Param("param") Map<String, Long> map);
 }

+ 24 - 9
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java

@@ -9,6 +9,7 @@ import com.yonge.cooleshow.biz.dal.dto.BasicUserInfo;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
+import com.yonge.cooleshow.biz.dal.vo.MyFens;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -21,35 +22,39 @@ public interface TeacherDao extends BaseMapper<Teacher> {
      * @return: com.yonge.cooleshow.biz.dal.vo.TeacherVo
      */
     TeacherVo detail(@Param("userId") Long userId);
+
     /**
      * 自定义分页
      */
     List<TeacherVo> selectPage(@Param("page") IPage page, @Param("param") TeacherSearch teacher);
 
     /**
-    * @description: 获取用户基本信息
      * @param userId
-    * @return com.yonge.cooleshow.biz.dal.dto.BasicUserInfo
-    * @author zx
-    * @date 2022/3/22 13:52
-    */
+     * @return com.yonge.cooleshow.biz.dal.dto.BasicUserInfo
+     * @description: 获取用户基本信息
+     * @author zx
+     * @date 2022/3/22 13:52
+     */
     BasicUserInfo getBasicUserInfo(@Param("userId") Long userId);
+
     /**
-     * @description: 获取用户基本信息
      * @param studentIds
      * @return com.yonge.cooleshow.biz.dal.dto.BasicUserInfo
+     * @description: 获取用户基本信息
      * @author zx
      * @date 2022/3/22 13:52
      */
     List<BasicUserInfo> findBasicUserInfo(@Param("studentIds") Set<Long> studentIds);
+
     /**
-     * @description: 获取老师可授课声部列表
      * @param
      * @return java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
+     * @description: 获取老师可授课声部列表
      * @author zx
      * @date 2022/3/25 09:38
      */
     List<Subject> querySubject(@Param("userId") Long userId);
+
     /***
      * 设置学员声部
      * @author liweifan
@@ -59,6 +64,7 @@ public interface TeacherDao extends BaseMapper<Teacher> {
      * @return: java.lang.Integer
      */
     Integer setSubject(@Param("id") Long id, @Param("subjectIds") String subjectIds);
+
     /***
      * 增加主页浏览量
      * @author liweifan
@@ -66,7 +72,8 @@ public interface TeacherDao extends BaseMapper<Teacher> {
      * @updateTime 2022/4/24 17:46
      * @return: java.lang.Integer
      */
-    Integer addHomeBrowse(@Param("userId")Long userId);
+    Integer addHomeBrowse(@Param("userId") Long userId);
+
     /***
      * 获取声部下拉框
      * @author liweifan
@@ -74,5 +81,13 @@ public interface TeacherDao extends BaseMapper<Teacher> {
      * @updateTime 2022/5/9 10:17
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
      */
-    List<Subject> querySubjectItem(@Param("userId")Long id);
+    List<Subject> querySubjectItem(@Param("userId") Long id);
+
+    /**
+     * 查询我的粉丝
+     * @param page
+     * @param teacherId
+     * @return
+     */
+    List<MyFens> queryMyFans(@Param("page") IPage<MyFens> page, @Param("teacherId") Long teacherId);
 }

+ 5 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundPaymentDao.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundBillDao.java

@@ -5,19 +5,19 @@ import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundBill;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundBillVo;
 import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundPaymentSearch;
 
 
-public interface UserOrderRefundPaymentDao extends BaseMapper<UserOrderRefundPayment>{
+public interface UserOrderRefundBillDao extends BaseMapper<UserOrderRefundBill>{
 	/**
 	 * 查询详情
      * @author liweifan
      * @date 2022-05-09 17:14:30
      * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo
 	 */
-	UserOrderRefundPaymentVo detail(@Param("id") Long id);
+	UserOrderRefundBillVo detail(@Param("id") Long id);
 
 	/**
 	 * 分页查询
@@ -25,6 +25,6 @@ public interface UserOrderRefundPaymentDao extends BaseMapper<UserOrderRefundPay
      * @date 2022-05-09 17:14:30
      * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo
 	 */
-	List<UserOrderRefundPaymentVo> selectPage(@Param("page") IPage page, @Param("param") UserOrderRefundPaymentSearch userOrderRefundPayment);
+	List<UserOrderRefundBillVo> selectPage(@Param("page") IPage page, @Param("param") UserOrderRefundPaymentSearch userOrderRefundPayment);
 	
 }

+ 4 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundPaymentDto.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundBillDto.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.biz.dal.dto;
 
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundBill;
 import io.swagger.annotations.ApiModel;
 import org.apache.commons.beanutils.BeanUtils;
 
@@ -9,12 +9,12 @@ import org.apache.commons.beanutils.BeanUtils;
  * @Data: 2022-05-09 17:14:30
  */
 @ApiModel(value = "UserOrderRefundPaymentDto对象", description = "退款单表数据传输对象")
-public class UserOrderRefundPaymentDto extends UserOrderRefundPayment{
+public class UserOrderRefundBillDto extends UserOrderRefundBill {
 	private static final long serialVersionUID = 1L;
     
-    public UserOrderRefundPaymentDto buildDto(UserOrderRefundPayment userOrderRefundPayment){
+    public UserOrderRefundBillDto buildDto(UserOrderRefundBill userOrderRefundBill){
         try {
-            BeanUtils.copyProperties(this,userOrderRefundPayment);
+            BeanUtils.copyProperties(this, userOrderRefundBill);
         } catch (Exception e) {
             e.printStackTrace();
         }

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

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.biz.dal.dto.req;
 
-import com.yonge.cooleshow.biz.dal.enums.PayChannelEnum;
+import com.yonge.toolset.payment.base.enums.PayChannelEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 

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

@@ -46,6 +46,9 @@ public class StudentMusicSheetOrderSearch extends QueryInfo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
 
+    @ApiModelProperty(value = "订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭", hidden = true)
+    private YesOrNoEnum orderStatus = YesOrNoEnum.YES;
+
     @ApiModelProperty(value = "假删除 0 : 未删除 1:已删除", hidden = true)
     private Boolean delFlag = false;
 
@@ -116,4 +119,11 @@ public class StudentMusicSheetOrderSearch extends QueryInfo {
         this.delFlag = delFlag;
     }
 
+    public YesOrNoEnum getOrderStatus() {
+        return orderStatus;
+    }
+
+    public void setOrderStatus(YesOrNoEnum orderStatus) {
+        this.orderStatus = orderStatus;
+    }
 }

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

@@ -27,6 +27,9 @@ public class VideoLessonGroupSearch extends QueryInfo {
     @ApiModelProperty(value = "老师id")
     private Long teacherId;
 
+    @ApiModelProperty(value = "声部id")
+    private Long lessonSubject;
+
     @ApiModelProperty(value = "是否审核时可见 (0:否  1:是)",hidden = true)
     private YesOrNoEnum auditVersion;
 
@@ -36,6 +39,14 @@ public class VideoLessonGroupSearch extends QueryInfo {
     @ApiModelProperty(value = "平台",required = true)
     private String platform;
 
+    public Long getLessonSubject() {
+        return lessonSubject;
+    }
+
+    public void setLessonSubject(Long lessonSubject) {
+        this.lessonSubject = lessonSubject;
+    }
+
     public YesOrNoEnum getAuditVersion() {
         return auditVersion;
     }

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

@@ -4,8 +4,9 @@ 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.PayChannelEnum;
 import com.yonge.cooleshow.biz.dal.enums.TradeStatusEnum;
+import com.yonge.toolset.payment.base.enums.OpenEnum;
+import com.yonge.toolset.payment.base.enums.PayChannelEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -24,18 +25,21 @@ public class UserOrderPayment implements Serializable {
 	private static final long serialVersionUID = 1L;
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
+    @ApiModelProperty("服务提供方: ORIGINAL 微信支付宝 ADAPAY 汇付")
+    @TableField(value = "open_type_")
+    private OpenEnum openType;
+    @ApiModelProperty("支付渠道:  alipay 支付宝  wx_lite 微信 ")
+    @TableField(value = "pay_channel_")
+    private PayChannelEnum payChannel;
     @ApiModelProperty("订单号 ")
 	@TableField(value = "order_no_")
     private String orderNo;
-    @ApiModelProperty("汇付支付订单号(一个订单对应多个支付订单,新发起一个支付订单会关闭其他交易) ")
-    @TableField(value = "adapay_no_")
-    private String adapayNo;
+    @ApiModelProperty("支付订单号(一个订单对应多个支付订单,新发起一个支付订单会关闭其他交易) ")
+    @TableField(value = "payment_no_")
+    private String paymentNo;
     @ApiModelProperty("交易流水号 ")
 	@TableField(value = "trans_no_")
     private String transNo;
-    @ApiModelProperty("支付渠道:  alipay 支付宝  wx_lite 微信 ")
-	@TableField(value = "pay_channel_")
-    private PayChannelEnum payChannel;
     @ApiModelProperty("交易金额,必须大于0,保留两位小数点,如0.10、100.05等 ")
 	@TableField(value = "pay_amt_")
     private BigDecimal payAmt;
@@ -84,6 +88,22 @@ public class UserOrderPayment implements Serializable {
         this.id = id;
     }
 
+    public OpenEnum getOpenType() {
+        return openType;
+    }
+
+    public void setOpenType(OpenEnum openType) {
+        this.openType = openType;
+    }
+
+    public PayChannelEnum getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(PayChannelEnum payChannel) {
+        this.payChannel = payChannel;
+    }
+
     public String getOrderNo() {
         return orderNo;
     }
@@ -92,20 +112,20 @@ public class UserOrderPayment implements Serializable {
         this.orderNo = orderNo;
     }
 
-    public String getTransNo() {
-        return transNo;
+    public String getPaymentNo() {
+        return paymentNo;
     }
 
-    public void setTransNo(String transNo) {
-        this.transNo = transNo;
+    public void setPaymentNo(String paymentNo) {
+        this.paymentNo = paymentNo;
     }
 
-    public PayChannelEnum getPayChannel() {
-        return payChannel;
+    public String getTransNo() {
+        return transNo;
     }
 
-    public void setPayChannel(PayChannelEnum payChannel) {
-        this.payChannel = payChannel;
+    public void setTransNo(String transNo) {
+        this.transNo = transNo;
     }
 
     public BigDecimal getPayAmt() {
@@ -116,6 +136,14 @@ public class UserOrderPayment implements Serializable {
         this.payAmt = payAmt;
     }
 
+    public BigDecimal getBackPayAmt() {
+        return backPayAmt;
+    }
+
+    public void setBackPayAmt(BigDecimal backPayAmt) {
+        this.backPayAmt = backPayAmt;
+    }
+
     public BigDecimal getFeeAmt() {
         return feeAmt;
     }
@@ -187,20 +215,4 @@ public class UserOrderPayment implements Serializable {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
-
-    public BigDecimal getBackPayAmt() {
-        return backPayAmt;
-    }
-
-    public void setBackPayAmt(BigDecimal backPayAmt) {
-        this.backPayAmt = backPayAmt;
-    }
-
-    public String getAdapayNo() {
-        return adapayNo;
-    }
-
-    public void setAdapayNo(String adapayNo) {
-        this.adapayNo = adapayNo;
-    }
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefund.java

@@ -31,6 +31,9 @@ public class UserOrderRefund implements Serializable {
     @ApiModelProperty("订单id")
     @TableField(value = "order_id_")
     private Long orderId;
+    @ApiModelProperty("订单号")
+    @TableField(value = "order_no_")
+    private String orderNo;
     @ApiModelProperty("订单详情id(多个详情,分割) ")
     @TableField(value = "oredr_detil_ids_")
     private String oredrDetilIds;
@@ -157,4 +160,11 @@ public class UserOrderRefund implements Serializable {
         this.updateTime = updateTime;
     }
 
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
 }

+ 14 - 14
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefundPayment.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefundBill.java

@@ -16,18 +16,18 @@ import java.math.BigDecimal;
 /**
  * 退款单表
  */
-@TableName("user_order_refund_payment")
-@ApiModel(value = "UserOrderRefundPayment对象", description = "退款单表")
-public class UserOrderRefundPayment implements Serializable {
+@TableName("user_order_refund_bill")
+@ApiModel(value = "UserOrderRefundBill对象", description = "退款单表")
+public class UserOrderRefundBill implements Serializable {
 	private static final long serialVersionUID = 1L;
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
     @ApiModelProperty("退款申请单号 ")
 	@TableField(value = "refund_id_")
     private String refundId;
-    @ApiModelProperty("汇付退款订单号 ")
-	@TableField(value = "adapay_no_")
-    private String adapayNo;
+    @ApiModelProperty("退款订单号 ")
+	@TableField(value = "bill_no_")
+    private String billNo;
     @ApiModelProperty("交易流水号(支付对象id) ")
 	@TableField(value = "trans_no_")
     private String transNo;
@@ -37,7 +37,7 @@ public class UserOrderRefundPayment implements Serializable {
     @ApiModelProperty("回调交易金额 ")
 	@TableField(value = "back_refund_amt_")
     private BigDecimal backRefundAmt;
-    @ApiModelProperty("汇付收取的服务费 ")
+    @ApiModelProperty("收取的服务费 ")
 	@TableField(value = "fee_amt_")
     private BigDecimal feeAmt;
     @ApiModelProperty("交易状态 pending 交易处理中 succeeded 交易成功 failed 交易失败 close 交易关闭 ")
@@ -70,16 +70,16 @@ public class UserOrderRefundPayment implements Serializable {
     public void setRefundId(String refundId) {
         this.refundId = refundId;
     }
-    
-	public String getAdapayNo() {
-        return adapayNo;
+
+    public String getBillNo() {
+        return billNo;
     }
 
-    public void setAdapayNo(String adapayNo) {
-        this.adapayNo = adapayNo;
+    public void setBillNo(String billNo) {
+        this.billNo = billNo;
     }
-    
-	public String getTransNo() {
+
+    public String getTransNo() {
         return transNo;
     }
 

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

@@ -12,20 +12,23 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     MUSIC_SHEET_AUTH_PASS("MUSIC_SHEET_AUTH_PASS","乐谱审核通过"),
     MUSIC_SHEET_AUTH_UNPASS("MUSIC_SHEET_AUTH_UNPASS","乐谱审核失败"),
 
+    VIDEO_SHEET_AUTH_PASS("VIDEO_SHEET_AUTH_PASS","视频课审核通过"),
+    VIDEO_SHEET_AUTH_UNPASS("VIDEO_SHEET_AUTH_UNPASS","视频课审核失败"),
+
     STUDENT_BUY_MUSIC_SHEET_SUCCESS("STUDENT_BUY_MUSIC_SHEET_SUCCESS","学员购买乐谱成功"),
     SMS_STUDENT_BUY_MUSIC_SHEET_SUCCESS("SMS_STUDENT_BUY_MUSIC_SHEET_SUCCESS","学员购买乐谱(短信)"),
 
     TEACHER_DECORATE_HOMEWORK("TEACHER_DECORATE_HOMEWORK","老师布置作业"),
     TEACHER_REVIEW_HOMEWORK("TEACHER_REVIEW_HOMEWORK","老师点评作业"),
-    STUDENT_SUBMIT_HOMEWORK("STUDENT_SUBMIT_HOMEWORK","学提交作业"),
+    STUDENT_SUBMIT_HOMEWORK("STUDENT_SUBMIT_HOMEWORK","学提交作业"),
 
-    TEACHER_AUTH_PASS("TEACHER_AUTH_PASS","老师认证通过","H5?https//www.xxxx.com/teacher/#/practiceSetting"),
+    TEACHER_AUTH_PASS("TEACHER_AUTH_PASS","老师认证通过"),
     SMS_TEACHER_AUTH_PASS("SMS_TEACHER_AUTH_PASS","老师认证通过(短信)"),
 
-    TEACHER_AUTH_FAIL("TEACHER_AUTH_FAIL","老师认证失败","H5?https//www.xxxx.com/teacher/#/teacherCert"),
+    TEACHER_AUTH_FAIL("TEACHER_AUTH_FAIL","老师认证失败"),
     SMS_TEACHER_AUTH_FAIL("SMS_TEACHER_AUTH_FAIL","老师认证失败(短信)"),
 
-    MUSICIAN_AUTH_PASS("MUSICIAN_AUTH_PASS","音乐人认证通过","H5?https//www.xxxx.com/teacher/#/music-upload"),
+    MUSICIAN_AUTH_PASS("MUSICIAN_AUTH_PASS","音乐人认证通过"),
     SMS_MUSICIAN_AUTH_PASS("SMS_MUSICIAN_AUTH_PASS","音乐人认证通过(短信)"),
 
     MUSICIAN_AUTH_FAIL("MUSICIAN_AUTH_FAIL","音乐人认证失败"),
@@ -50,11 +53,11 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     VIP_BUY_SUCCESS("VIP_BUY_SUCCESS","会员购买成功"),
     SMS_VIP_BUY_SUCCESS("SMS_VIP_BUY_SUCCESS","会员购买成功(短信)"),
 
-    VIP_EXPIRE_THIRTY_DAY("VIP_EXPIRE_THIRTY_DAY","会员到期前30天","H5?https//www.xxxx.com/student/#/memberCenter"),
-    SMS_VIP_EXPIRE_THIRTY_DAY("SMS_VIP_EXPIRE_THIRTY_DAY","会员到期前30天(短信)","H5?https//www.xxxx.com/student/#/memberCenter"),
+    VIP_EXPIRE_THIRTY_DAY("VIP_EXPIRE_THIRTY_DAY","会员到期前30天"),
+    SMS_VIP_EXPIRE_THIRTY_DAY("SMS_VIP_EXPIRE_THIRTY_DAY","会员到期前30天(短信)"),
 
-    VIP_EXPIRE("VIP_EXPIRE","会员到期","H5?https//www.xxxx.com/student/#/memberCenter"),
-    SMS_VIP_EXPIRE("SMS_VIP_EXPIRE","会员到期(短信)","H5?https//www.xxxx.com/student/#/memberCenter"),
+    VIP_EXPIRE("VIP_EXPIRE","会员到期"),
+    SMS_VIP_EXPIRE("SMS_VIP_EXPIRE","会员到期(短信)"),
 
     PRACTICE_BUY("PRACTICE_BUY","陪练课购买"),
     SMS_PRACTICE_BUY("SMS_PRACTICE_BUY", "陪练课购买(短信)"),
@@ -81,18 +84,12 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
         this.msg = msg;
     }
 
-    MessageTypeEnum(String code, String msg, String url) {
-        this.code = code;
-        this.msg = msg;
-        this.url = url;
-    }
 
     @EnumValue
     private String code;
 
     private String msg;
 
-    private String url;
 
     public void setCode(String code) {
         this.code = code;
@@ -111,11 +108,4 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
         return code;
     }
 
-    public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
 }

+ 0 - 152
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/props/HuifuProperties.java

@@ -1,152 +0,0 @@
-package com.yonge.cooleshow.biz.dal.props;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.cloud.context.config.annotation.RefreshScope;
-
-/**
- * 权限过滤
- */
-@RefreshScope
-@ConfigurationProperties("huifu")
-public class HuifuProperties {
-    /***
-     * 汇付 控制台 主页面应用的app_id
-     * @author liweifan
-     * @updateTime 2022/3/31 11:19
-     */
-    private String appId;
-    /***
-     * 汇付 控制台->商户信息管理->证书管理中的API Key(prod模式的API KEY)
-     * @author liweifan
-     * @updateTime 2022/3/31 11:19
-     */
-    private String apiKey;
-    /***
-     * 汇付 控制台->商户信息管理->证书管理中的API Key(mock模式的API KEY)
-     * @author liweifan
-     * @updateTime 2022/3/31 11:19
-     */
-    private String mockApiKey;
-    /***
-     * 商户发起请求时,用于请求参数加签所需要的RSA私钥
-     * @author liweifan
-     * @updateTime 2022/3/31 11:24
-     */
-    private String rsaPrivateKey;
-    /***
-     * 付款成功回调地址
-     * @author liweifan
-     * @updateTime 2022/3/31 11:24
-     */
-    private String notifyUrl;
-    /***
-     * 微信appid
-     * @author liweifan
-     * @updateTime 2022/3/31 11:24
-     */
-    private String wxAppid;
-    /***
-     * 微信secret
-     * @author liweifan
-     * @updateTime 2022/3/31 11:24
-     */
-    private String wxSecret;
-    /***
-     * 支付宝appid
-     * @author liweifan
-     * @updateTime 2022/3/31 11:24
-     */
-    private String aliAppid;
-    /***
-     * 支付宝开发者私钥(由开发者自己生成)
-     * @author liweifan
-     * @updateTime 2022/3/31 11:24
-     */
-    private String aliPrivatekey;
-    /***
-     * 支付宝公钥(由支付宝生成)
-     * @author liweifan
-     * @updateTime 2022/3/31 11:24
-     */
-    private String aliPublickey;
-
-    public String getApiKey() {
-        return apiKey;
-    }
-
-    public void setApiKey(String apiKey) {
-        this.apiKey = apiKey;
-    }
-
-    public String getMockApiKey() {
-        return mockApiKey;
-    }
-
-    public void setMockApiKey(String mockApiKey) {
-        this.mockApiKey = mockApiKey;
-    }
-
-    public String getRsaPrivateKey() {
-        return rsaPrivateKey;
-    }
-
-    public void setRsaPrivateKey(String rsaPrivateKey) {
-        this.rsaPrivateKey = rsaPrivateKey;
-    }
-
-    public String getAppId() {
-        return appId;
-    }
-
-    public void setAppId(String appId) {
-        this.appId = appId;
-    }
-
-    public String getWxAppid() {
-        return wxAppid;
-    }
-
-    public void setWxAppid(String wxAppid) {
-        this.wxAppid = wxAppid;
-    }
-
-    public String getWxSecret() {
-        return wxSecret;
-    }
-
-    public void setWxSecret(String wxSecret) {
-        this.wxSecret = wxSecret;
-    }
-
-    public String getNotifyUrl() {
-        return notifyUrl;
-    }
-
-    public void setNotifyUrl(String notifyUrl) {
-        this.notifyUrl = notifyUrl;
-    }
-
-    public String getAliAppid() {
-        return aliAppid;
-    }
-
-    public void setAliAppid(String aliAppid) {
-        this.aliAppid = aliAppid;
-    }
-
-    public String getAliPrivatekey() {
-        return aliPrivatekey;
-    }
-
-    public void setAliPrivatekey(String aliPrivatekey) {
-        this.aliPrivatekey = aliPrivatekey;
-    }
-
-    public String getAliPublickey() {
-        return aliPublickey;
-    }
-
-    public void setAliPublickey(String aliPublickey) {
-        this.aliPublickey = aliPublickey;
-    }
-}

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/config/IMProperties.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/props/IMProperties.java

@@ -1,4 +1,4 @@
-package com.yonge.cooleshow.biz.dal.config;
+package com.yonge.cooleshow.biz.dal.props;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;

+ 0 - 256
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/PaymentSdk.java

@@ -1,256 +0,0 @@
-package com.yonge.cooleshow.biz.dal.sdk;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.alipay.api.AlipayApiException;
-import com.alipay.api.AlipayClient;
-import com.alipay.api.DefaultAlipayClient;
-import com.alipay.api.request.AlipaySystemOauthTokenRequest;
-import com.alipay.api.response.AlipaySystemOauthTokenResponse;
-import com.huifu.adapay.core.exception.BaseAdaPayException;
-import com.huifu.adapay.model.Payment;
-import com.huifu.adapay.model.PaymentConfirm;
-import com.yonge.cooleshow.biz.dal.config.HuifuConfiguration;
-import com.yonge.cooleshow.biz.dal.sdk.req.PaymentReq;
-import com.yonge.cooleshow.biz.dal.service.impl.ImGroupMemberServiceImpl;
-import com.yonge.cooleshow.common.constant.CommonConstants;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.base.exception.ThirdpartyException;
-import com.yonge.toolset.utils.collection.MapUtil;
-import com.yonge.toolset.utils.http.HttpUtil;
-import com.yonge.toolset.utils.string.StringUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
-
-import java.util.*;
-
-@Component
-public class PaymentSdk {
-    private final static Logger log = LoggerFactory.getLogger(PaymentSdk.class);
-    @Autowired
-    private AlipayClient alipayClient;
-
-    /**
-     * 执行一个支付交易
-     *
-     * @return 创建的支付对象
-     * @throws Exception 异常
-     */
-    public HttpResponseResult<Map<String, Object>> executePayment(PaymentReq paymentReq) {
-        paymentReq.setApp_id(HuifuConfiguration.getHuifuProperties().getAppId());
-        //创建分账对象
-        Map<String, String> div_member = new HashMap<>();
-        div_member.put("member_id", "0");
-        div_member.put("amount", paymentReq.getPay_amt());
-        div_member.put("fee_flag", "Y");
-        List<Map<String, String>> div_members = Arrays.asList(div_member);
-        paymentReq.setDiv_members(JSONObject.toJSONString(div_members));
-
-        log.info("汇付[创建支付对象] Req:{}", JSONObject.toJSONString(paymentReq));
-        //调用sdk方法,创建支付,得到支付对象
-        Map<String, Object> paymentParams = MapUtil.populateMap(new HashMap<>(), paymentReq);
-        Map<String, Object> res;
-        try {
-            res = Payment.create(paymentParams);
-        } catch (BaseAdaPayException e) {
-            return HttpResponseResult.failed(e.getMessage());
-        }
-        if (CollectionUtils.isEmpty(res)) {
-            return HttpResponseResult.failed("请求失败");
-        }
-        log.info("汇付[创建支付对象] Resp:{}", res);
-        String errorCode = (String) res.get("error_code");
-        if (null != errorCode) {
-            String errorMsg = (String) res.get("error_msg");
-            return HttpResponseResult.failed(errorMsg);
-        }
-        return HttpResponseResult.succeed(res);
-    }
-
-    /**
-     * 创建确认对象
-     * 创建支付确认对象适用于延时分账的场景
-     *
-     * @return 查询的支付对象
-     * @throws Exception 异常
-     */
-    public Map<String, Object> createConfirm(Map<String, Object> confirm) throws Exception {
-        confirm = PaymentConfirm.create(confirm);
-
-        String error_code = (String) confirm.get("error_code");
-        if (null != error_code) {
-            String errorMsg = (String) confirm.get("error_msg");
-            throw new ThirdpartyException(errorMsg);
-        }
-        return confirm;
-    }
-
-    /**
-     * 关闭一个支付交易
-     *
-     * @param paymentId 要关闭的支付id
-     * @return 关闭的支付对象
-     * @throws Exception 异常
-     */
-    public HttpResponseResult<Map<String, Object>> closePayment(String paymentId, String reason, String expend) {
-        Map<String, Object> paymentParams = new HashMap<>(10);
-        paymentParams.put("payment_id", paymentId);
-        paymentParams.put("reason", reason);
-        paymentParams.put("expend", expend);
-        paymentParams.put("notify_url", HuifuConfiguration.getHuifuProperties().getNotifyUrl());
-
-        Map<String, Object> res;
-        try {
-            res = Payment.close(paymentParams);
-        } catch (BaseAdaPayException e) {
-            return HttpResponseResult.failed(e.getMessage());
-        }
-        if (CollectionUtils.isEmpty(res)) {
-            return HttpResponseResult.failed("请求失败");
-        }
-        log.info("汇付[创建支付对象] Resp:{}", res);
-        String errorCode = (String) res.get("error_code");
-        if (null != errorCode) {
-            String errorMsg = (String) res.get("error_msg");
-            return HttpResponseResult.failed(errorMsg);
-        }
-        return HttpResponseResult.succeed(res);
-    }
-
-    /**
-     * 查询一个支付交易
-     *
-     * @param paymentId 要查询的支付id
-     * @return 查询的支付对象
-     * @throws Exception 异常
-     */
-    public Map<String, Object> queryPayment(String paymentId) throws Exception {
-        System.out.println("=======query payment begin=======");
-        //查询支付对象的参数,全部参数请参考 https://docs.adapay.tech/api/04-trade.html#id7
-        //调用sdk方法,查询支付交易,得到支付对象
-        Map<String, Object> payment = new HashMap<>();
-        try {
-            System.out.println("支付查询请求参数:" + JSON.toJSONString(paymentId));
-            payment = com.huifu.adapay.model.Payment.query(paymentId);
-        } catch (ThirdpartyException e) {
-            e.printStackTrace();
-        }
-
-        System.out.println("支付查询返回参数:" + JSON.toJSONString(payment));
-
-        String error_code = (String) payment.get("error_code");
-        if (null != error_code) {
-            String error_msg = (String) payment.get("error_msg");
-            System.out.println("error_code:" + error_code + "............." + error_msg);
-        }
-        System.out.println("=======query payment end=======");
-        return payment;
-    }
-
-    /***
-     * 获取openId
-     * @author liweifan
-     * @param: js_code
-     * @updateTime 2022/4/8 15:49
-     * @return: java.lang.Object
-     */
-    public HttpResponseResult<Map<String, String>> getOpenId(String js_code) {
-        log.info("微信[获取用户openId] Req:{}", js_code);
-        Map<String, Object> param = new HashMap<>();
-        param.put("appid", HuifuConfiguration.getHuifuProperties().getWxAppid());
-        param.put("secret", HuifuConfiguration.getHuifuProperties().getWxSecret());
-        param.put("js_code", js_code);
-        param.put("grant_type", CommonConstants.WECHAT_GRANT_TYPE);
-
-        try {
-            String res = HttpUtil.get("https://api.weixin.qq.com/sns/jscode2session", param);
-            JSONObject jsonObject = JSONObject.parseObject(res);
-            log.info("微信[获取用户openId] Res:{}", jsonObject.toJSONString());
-            String errcode = jsonObject.getString("errcode");
-            if (StringUtil.isEmpty(errcode) || "0".equals(errcode)) {
-                Map<String, String> resMap = new HashMap<>();
-                resMap.put("openid", jsonObject.getString("openid"));
-                resMap.put("session_key", jsonObject.getString("session_key"));
-                return HttpResponseResult.succeed(resMap);
-            } else {
-                return HttpResponseResult.failed(jsonObject.getString("errmsg"));
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            return HttpResponseResult.failed("请求失败");
-        }
-    }
-
-    public HttpResponseResult<AlipaySystemOauthTokenResponse> getAliToken(String authorization_code) {
-        AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
-        request.setGrantType("authorization_code");
-        request.setCode(authorization_code);
-        AlipaySystemOauthTokenResponse response = null;
-        try {
-            response = alipayClient.execute(request);
-            if (response.isSuccess()) {
-                return HttpResponseResult.succeed(response);
-            } else {
-                return HttpResponseResult.failed(response.getMsg());
-            }
-        } catch (AlipayApiException e) {
-            log.error("请求支付宝获取token异常,参数{},code is {},msg is {}", authorization_code, e.getErrCode(), e.getErrMsg());
-            return HttpResponseResult.failed(e.getErrMsg());
-        }
-    }
-
-/*
-    public static Map<String, Object> queryList(Integer pageIndex, Long createdGte, Long createdLte) throws Exception {
-        Map<String, Object> paymentParams = new HashMap<>();
-        paymentParams.put("app_id", ConfigInit.appId);
-        paymentParams.put("page_index", pageIndex);
-        paymentParams.put("page_size", "20");
-        paymentParams.put("created_gte", createdGte);
-        paymentParams.put("created_lte", createdLte);
-        Map<String, Object> payment = com.huifu.adapay.model.Payment.queryList(paymentParams);
-        String error_code = (String) payment.get("error_code");
-        if (null != error_code) {
-            String errorMsg = (String) payment.get("error_msg");
-            throw new ThirdpartyException(errorMsg);
-        }
-        return payment;
-    }
-
-    public static Map<String, Object> queryConfirmList(String paymentId) throws Exception {
-        Map<String, Object> paymentParams = new HashMap<>();
-        paymentParams.put("app_id", ConfigInit.appId);
-        paymentParams.put("payment_id", paymentId);
-
-        Map<String, Object> payment = com.huifu.adapay.model.Payment.queryConfirmList(paymentParams);
-        String error_code = (String) payment.get("error_code");
-        if (null != error_code) {
-            String errorMsg = (String) payment.get("error_msg");
-            throw new ThirdpartyException(errorMsg);
-        }
-        return payment;
-    }
-
-
-    public static Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody) throws Exception {
-        Map<String, Object> paymentParams = new LinkedHashMap<>();
-        paymentParams.put("appId", ConfigInit.appId);
-        paymentParams.put("amount", amount.setScale(2, BigDecimal.ROUND_HALF_UP));
-        paymentParams.put("orderNo", orderNo);
-//        paymentParams.put("notifyUrl", notifyUrl);
-//        paymentParams.put("returnUrl", returnUrl);
-        paymentParams.put("orderSubject", orderSubject);
-        paymentParams.put("orderBody", orderBody);
-        paymentParams.put("wxAppId", ConfigInit.wxAppId);
-
-        String originalStr = JSONObject.toJSONString(paymentParams);
-        String sign = DigestUtils.md5DigestAsHex(originalStr.getBytes());
-
-        paymentParams.put("sign", sign);
-        paymentParams.remove("appId");
-        return paymentParams;
-    }*/
-}

+ 0 - 73
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/req/PaymentConfirmParam.java

@@ -1,73 +0,0 @@
-package com.yonge.cooleshow.biz.dal.sdk.req;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * @Author: liweifan
- * @Data: 2022/3/11 17:44
- */
-public class PaymentConfirmParam implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    //Adapay生成的支付对象id
-    private String payment_id;
-    //请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
-    private String order_no;
-    //确认金额,必须大于0,保留两位小数点,如0.10、100.05等。必须小于等于原支付金额-已确认金额-已撤销金额。
-    private String confirm_amt;
-    //附加说明
-    private String description;
-    //分账对象信息列表,一次请求最多仅支持7个分账方
-    private List<DivMember> div_members;
-    //手续费收取模式:O-商户手续费账户扣取手续费,I-交易金额中扣取手续费;值为空时,默认值为I;若为O时,分账对象列表中不支持传入手续费承担方
-    private String fee_mode;
-
-    public String getPayment_id() {
-        return payment_id;
-    }
-
-    public void setPayment_id(String payment_id) {
-        this.payment_id = payment_id;
-    }
-
-    public String getOrder_no() {
-        return order_no;
-    }
-
-    public void setOrder_no(String order_no) {
-        this.order_no = order_no;
-    }
-
-    public String getConfirm_amt() {
-        return confirm_amt;
-    }
-
-    public void setConfirm_amt(String confirm_amt) {
-        this.confirm_amt = confirm_amt;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public List<DivMember> getDiv_members() {
-        return div_members;
-    }
-
-    public void setDiv_members(List<DivMember> div_members) {
-        this.div_members = div_members;
-    }
-
-    public String getFee_mode() {
-        return fee_mode;
-    }
-
-    public void setFee_mode(String fee_mode) {
-        this.fee_mode = fee_mode;
-    }
-}

+ 0 - 168
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/req/PaymentReq.java

@@ -1,168 +0,0 @@
-package com.yonge.cooleshow.biz.dal.sdk.req;
-
-import java.io.Serializable;
-import java.util.Map;
-
-/**
- * 创建支付对象请求参数
- * @Author: liweifan
- * @Data: 2022/3/31 10:58
- */
-public class PaymentReq implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    /***
-     * 请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
-     * @author liweifan
-     * @updateTime 2022/3/31 11:00
-     */
-    private String order_no;
-    /***
-     * 控制台 主页面应用的app_id
-     * @author liweifan
-     * @updateTime 2022/3/31 11:00
-     */
-    private String app_id;
-    /***
-     * 支付渠道,参见 支付渠道
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private String pay_channel;
-    /***
-     * 交易金额,必须大于0,保留两位小数点,如0.10、100.05等
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private String pay_amt;
-    /***
-     * 商品标题
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private String goods_title;
-    /***
-     * 商品描述信息,微信小程序和微信公众号该字段最大长度42个字符
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private String goods_desc;
-    /***
-     * 分账对象信息列表,最多仅支持7个分账方,json 数组形式,详见 分账对象信息列表
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private String div_members;
-    /***
-     * 订单附加说明
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private String description;
-    /***
-     * 前端设备信息,详见 设备信息
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private DeviceInfo device_info;
-    /***
-     * 支付渠道额外参数,JSON格式,条件可输入,详见 支付渠道 expend参数
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private Map<String,Object> expend;
-    /***
-     * 异步通知地址,url为http/https路径,服务器POST回调,URL 上请勿附带参数
-     * @author liweifan
-     * @updateTime 2022/3/31 11:01
-     */
-    private String notify_url;
-
-    public String getOrder_no() {
-        return order_no;
-    }
-
-    public void setOrder_no(String order_no) {
-        this.order_no = order_no;
-    }
-
-    public String getApp_id() {
-        return app_id;
-    }
-
-    public void setApp_id(String app_id) {
-        this.app_id = app_id;
-    }
-
-    public String getPay_amt() {
-        return pay_amt;
-    }
-
-    public void setPay_amt(String pay_amt) {
-        this.pay_amt = pay_amt;
-    }
-
-    public String getGoods_title() {
-        return goods_title;
-    }
-
-    public void setGoods_title(String goods_title) {
-        this.goods_title = goods_title;
-    }
-
-    public String getGoods_desc() {
-        return goods_desc;
-    }
-
-    public void setGoods_desc(String goods_desc) {
-        this.goods_desc = goods_desc;
-    }
-
-    public String getDiv_members() {
-        return div_members;
-    }
-
-    public void setDiv_members(String div_members) {
-        this.div_members = div_members;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public DeviceInfo getDevice_info() {
-        return device_info;
-    }
-
-    public void setDevice_info(DeviceInfo device_info) {
-        this.device_info = device_info;
-    }
-
-    public Map<String, Object> getExpend() {
-        return expend;
-    }
-
-    public void setExpend(Map<String, Object> expend) {
-        this.expend = expend;
-    }
-
-    public String getNotify_url() {
-        return notify_url;
-    }
-
-    public void setNotify_url(String notify_url) {
-        this.notify_url = notify_url;
-    }
-
-    public String getPay_channel() {
-        return pay_channel;
-    }
-
-    public void setPay_channel(String pay_channel) {
-        this.pay_channel = pay_channel;
-    }
-}

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

@@ -184,7 +184,7 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
 
     void buyPracticeCourseFailed(UserOrderDetailVo orderParam);
 
-    void courseAdjust(CourseAdjustVo adjustVo);
+    void courseAdjust(CourseAdjustVo adjustVo,Long teacherId);
 
     StudentHomePage queryLiveAndVideo(Long studentId, Long teacherId, YesOrNoEnum appAuditVersion);
 
@@ -231,5 +231,6 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
      */
     void sendTodayNotRepliedAndNotDecorateHomework();
 
+    Map<String, String> selectRoomConfig();
 }
 

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

@@ -6,18 +6,21 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.vo.MyFollow;
 import com.yonge.cooleshow.biz.dal.vo.StudentHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentTotalVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 学生表 服务类
+ *
  * @author liweifan
  * @date 2022-03-23
  */
-public interface StudentService extends IService<Student>  {
+public interface StudentService extends IService<Student> {
     /***
      * 查询学员详情
      * @author liweifan
@@ -26,10 +29,12 @@ public interface StudentService extends IService<Student>  {
      * @return: com.yonge.cooleshow.biz.dal.vo.TeacherVo
      */
     StudentVo detail(Long userId);
+
     /**
      * 自定义分页
+     *
      * @author liweifan
- 	 * @date 2022-03-23
+     * @date 2022-03-23
      */
     IPage<StudentVo> selectPage(IPage<StudentVo> page, StudentSearch studentSearch);
 
@@ -60,4 +65,20 @@ public interface StudentService extends IService<Student>  {
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
      */
     List<Subject> querySubjectItem(Long id);
+
+    /**
+     * 我的关注
+     *
+     * @param page
+     * @param studentId
+     * @return
+     */
+    IPage<MyFollow> queryMyFollow(IPage<MyFollow> page, Long studentId);
+
+    /**
+     * 取消关注
+     *
+     * @param map
+     */
+    void unfollow(Map<String, Long> map);
 }

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

@@ -10,10 +10,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
-import com.yonge.cooleshow.biz.dal.vo.TeacherHomeVo;
-import com.yonge.cooleshow.biz.dal.vo.TeacherTotalVo;
-import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
-import com.yonge.cooleshow.biz.dal.vo.UserSetVo;
+import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
 import java.util.List;
@@ -123,4 +120,12 @@ public interface TeacherService extends IService<Teacher> {
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
      */
     List<Subject> querySubjectItem(Long id);
+
+    /**
+     * 我的粉丝
+     * @param page
+     * @param teacherId
+     * @return
+     */
+    IPage<MyFens> queryMyFans(IPage<MyFens> page, Long teacherId);
 }

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

@@ -4,13 +4,11 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
-import com.yonge.cooleshow.biz.dal.enums.PayChannelEnum;
 import com.yonge.cooleshow.biz.dal.enums.TradeStatusEnum;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-
-import java.util.Map;
+import com.yonge.toolset.payment.base.enums.PayChannelEnum;
 
 /**
  * 平台订单支付表 服务类
@@ -45,7 +43,7 @@ public interface UserOrderPaymentService extends IService<UserOrderPayment> {
      * @updateTime 2022/4/13 16:09
      * @return: com.yonge.cooleshow.biz.dal.entity.UserOrderPayment
      */
-    UserOrderPayment detailByAdapayNo(String transNo);
+    UserOrderPayment detailByPaymentNo(String paymentNo);
     /***
      * 关闭付款单
      * @author liweifan
@@ -55,7 +53,6 @@ public interface UserOrderPaymentService extends IService<UserOrderPayment> {
      * @return: com.yonge.cooleshow.biz.dal.entity.UserOrderPayment
      */
     UserOrderPayment closePayment(String orderNo, String reason);
-
     /***
      * 支付关单成功
      * @author liweifan
@@ -63,7 +60,6 @@ public interface UserOrderPaymentService extends IService<UserOrderPayment> {
      * @updateTime 2022/4/27 15:33
      */
     void paymentCloseSucceededHandle(JSONObject hfRes);
-
     /***
      * 支付关单失败
      * @author liweifan
@@ -71,7 +67,6 @@ public interface UserOrderPaymentService extends IService<UserOrderPayment> {
      * @updateTime 2022/4/27 15:33
      */
     void paymentCloseFailedHandle(JSONObject hfRes);
-
     /***
      * 创建付款单
      * @author liweifan
@@ -79,5 +74,6 @@ public interface UserOrderPaymentService extends IService<UserOrderPayment> {
      * @param: detail
      * @updateTime 2022/5/7 13:56
      */
-    HttpResponseResult<OrderPayRes> createOrderPayment(OrderPayReq payReq, UserOrderVo detail);
+    HttpResponseResult<OrderPayRes> createOrderPayment(OrderPayReq payReq, UserOrderVo detail) throws Exception;
+
 }

+ 5 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundPaymentService.java

@@ -2,28 +2,28 @@ 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.vo.UserOrderRefundPaymentVo;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundBillVo;
 import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundPaymentSearch;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundBill;
 
 /**
  * 退款单表 服务类
  * @author liweifan
  * @date 2022-05-09
  */
-public interface UserOrderRefundPaymentService extends IService<UserOrderRefundPayment>  {
+public interface UserOrderRefundPaymentService extends IService<UserOrderRefundBill>  {
 
 	/**
      * 查询详情
      * @author liweifan
  	 * @date 2022-05-09
      */
-	UserOrderRefundPaymentVo detail(Long id);
+	UserOrderRefundBillVo detail(Long id);
 
     /**
      * 分页查询
      * @author liweifan
  	 * @date 2022-05-09
      */
-    IPage<UserOrderRefundPaymentVo> selectPage(IPage<UserOrderRefundPaymentVo> page, UserOrderRefundPaymentSearch query);
+    IPage<UserOrderRefundBillVo> selectPage(IPage<UserOrderRefundBillVo> page, UserOrderRefundPaymentSearch query);
 }

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

@@ -9,6 +9,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.payment.base.model.RefundBill;
 
 /**
  * 用户退款表 服务类
@@ -45,5 +46,5 @@ public interface UserOrderRefundService extends IService<UserOrderRefund>  {
 	 * @updateTime 2022/5/9 16:25
 	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
 	 */
-    HttpResponseResult<Boolean> doAuth(AuthOperaReq authOperaReq, SysUser user);
+    HttpResponseResult<RefundBill> doAuth(AuthOperaReq authOperaReq, SysUser user);
 }

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

@@ -89,7 +89,7 @@ public interface UserOrderService extends IService<UserOrder> {
      * @param: data
      * @updateTime 2022/4/8 18:24
      */
-    void orderCallback(String data, String type);
+    void adapayCallback(String data, String type);
 
     /***
      * 轮询用户订单
@@ -116,8 +116,6 @@ public interface UserOrderService extends IService<UserOrder> {
      */
     HttpResponseResult<Boolean> orderCancel(OrderPayReq payReq);
 
-
-
     /***
      * 取消订单(未判断付款单状态)
      * @author liweifan

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

@@ -752,8 +752,8 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
             Map<Long, String> studentReceivers = new HashMap<>();
             studentReceivers.put(studentInfo.getId(), studentInfo.getPhone());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, liveBuy,
-                    studentReceivers, null, 0, null, ClientEnum.STUDENT.getCode(),
-                    teacherInfo.getUsername(), courseGroup.getName(), liveBuyUrl);
+                    studentReceivers, null, 0, liveBuyUrl, ClientEnum.STUDENT.getCode(),
+                    teacherInfo.getUsername(), courseGroup.getName());
             log.info("buyLiveCourseSuccess buyLiveSendMessage LIVE_BUY ok");
 
             //短信-消息推送-学生端-通知学生购买成功-跳转到APP
@@ -774,8 +774,8 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
             Map<Long, String> teacherReceivers = new HashMap<>();
             teacherReceivers.put(teacherInfo.getId(), teacherInfo.getPhone());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, studentBuyLive,
-                    teacherReceivers, null, 0, null, ClientEnum.TEACHER.getCode(),
-                    studentInfo.getUsername(), courseGroup.getName(), studentBuyLiveUrl);
+                    teacherReceivers, null, 0, studentBuyLiveUrl, ClientEnum.TEACHER.getCode(),
+                    studentInfo.getUsername(), courseGroup.getName() );
             log.info("buyLiveCourseSuccess buyLiveSendMessage STUDENT_BUY_LIVE ok");
 
             //短信-消息推送-老师端-通知老师有学生购买课程-无需跳转到APP

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

@@ -13,6 +13,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseHomework;
 import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.entity.CourseScheduleStudentPayment;
+import com.yonge.cooleshow.biz.dal.entity.SysMessageConfig;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
@@ -56,6 +57,9 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
     private SysUserFeignService sysUserFeignService;
 
     @Autowired
+    private SysMessageConfigService sysMessageConfigService;
+
+    @Autowired
     private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
 
 	@Override
@@ -161,7 +165,10 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
         Map<Long,String> studentReceivers = new HashMap<>();
         studentReceivers.put(student.getId(), student.getPhone());
 
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_DECORATE_HOMEWORK, studentReceivers, null, 0,"homework?courseId=" + courseScheduleId , ClientEnum.STUDENT.getCode(),teacher.getUsername());
+        String url = sysMessageService.selectConfigUrl(MessageTypeEnum.TEACHER_DECORATE_HOMEWORK.getCode());
+
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_DECORATE_HOMEWORK,
+         studentReceivers, null, 0,url + courseScheduleId , ClientEnum.STUDENT.getCode(),teacher.getUsername());
     }
 
     /**
@@ -218,7 +225,9 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
         SysUser teacher = sysUserFeignService.queryUserById(courseHomeworkDetailVo.getTeacherId());
         Map<Long,String> studentReceivers = new HashMap<>();
         studentReceivers.put(student.getId(), student.getPhone());
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_REVIEW_HOMEWORK, studentReceivers, null, 0, "homework?courseId=" + reviewDto.getCourseScheduleId() , ClientEnum.STUDENT.getCode(), teacher.getUsername());
+        String url = sysMessageService.selectConfigUrl(MessageTypeEnum.TEACHER_REVIEW_HOMEWORK.getCode());
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_REVIEW_HOMEWORK,
+        studentReceivers, null, 0, url + reviewDto.getCourseScheduleId() , ClientEnum.STUDENT.getCode(), teacher.getUsername());
     }
 
     @Override
@@ -270,7 +279,10 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
         Map<Long,String> receivers = new HashMap<>();
         receivers.put(teacher.getId(), teacher.getPhone());
 
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SUBMIT_HOMEWORK, receivers, null, 0, "homework?courseId=" + submitDto.getCourseScheduleId(), ClientEnum.TEACHER.getCode(), student.getUsername());
+        String url = sysMessageService.selectConfigUrl(MessageTypeEnum.STUDENT_SUBMIT_HOMEWORK.getCode());
+
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SUBMIT_HOMEWORK,
+        receivers, null, 0, url + submitDto.getCourseScheduleId(), ClientEnum.TEACHER.getCode(), student.getUsername());
     }
 
     @Override

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

@@ -120,8 +120,8 @@ public class CourseRepliedServiceImpl extends ServiceImpl<CourseScheduleRepliedD
 
             String url = sysMessageService.selectConfigUrl(MessageTypeEnum.STUDENT_EVALUATE_TEACHER_PRACTICE.getCode());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_EVALUATE_TEACHER_PRACTICE,
-                    teacherReceivers, null, 0, null, ClientEnum.TEACHER.getCode(),
-                    student.getUsername(), url);
+                    teacherReceivers, null, 0, url, ClientEnum.TEACHER.getCode(),
+                    student.getUsername());
             log.info("send success {}", MessageTypeEnum.STUDENT_EVALUATE_TEACHER_PRACTICE);
         } catch (Exception e) {
             log.error("send fail {}", MessageTypeEnum.STUDENT_EVALUATE_TEACHER_PRACTICE);

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

@@ -33,6 +33,7 @@ import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.utils.date.DateUtil;
+import com.yonge.toolset.utils.obj.ObjectUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RMap;
@@ -53,6 +54,8 @@ import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import static com.yonge.cooleshow.biz.dal.support.WrapperUtil.inInterSection;
+
 /**
  * 老师课程表(CourseSchedule)表服务实现类
  *
@@ -797,7 +800,6 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         return map;
     }
 
-
     /**
      * 学生-查询直播课
      *
@@ -829,6 +831,38 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
+     * 批量检查老师课时在数据库是否重复
+     *
+     * @param teacherId 老师id
+     * @param timeList  时间集合
+     */
+    private <T> void batchCheckTeacherCourseTime(Long teacherId, List<T> timeList, Function<T, Date> startTimeFun, Function<T, Date> endTimeFun) {
+        //再校验数据库中课程时间和传入时间是否有交集
+        timeList.forEach(o -> {
+            boolean checkDataTime = this.checkTeacherCourseTime(teacherId, startTimeFun.apply(o), endTimeFun.apply(o));
+            if (checkDataTime) {
+                throw new BizException("预计安排在" + DateUtil.dateToString(startTimeFun.apply(o), "yyyy年MM月dd号 HH点mm分") + "的课程时间存在冲突!");
+            }
+        });
+    }
+
+    /**
+     * 批量检查学生课时在数据库是否重复
+     *
+     * @param studentId 老师id
+     * @param timeList  时间集合
+     */
+    private <T> void batchCheckStudentCourseTime(Long studentId, List<T> timeList, Function<T, Date> startTimeFun, Function<T, Date> endTimeFun) {
+        //再校验数据库中课程时间和传入时间是否有交集
+        timeList.forEach(o -> {
+            boolean checkDataTime = this.checkStudentCourseTime(studentId, startTimeFun.apply(o), endTimeFun.apply(o));
+            if (checkDataTime) {
+                throw new BizException("预计安排在" + DateUtil.dateToString(startTimeFun.apply(o), "yyyy年MM月dd号 HH点mm分") + "的课程时间存在冲突!");
+            }
+        });
+    }
+
+    /**
      * @Description: 学生购买陪练课
      * @Author: cy
      * @Date: 2022/4/21
@@ -843,10 +877,28 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 
         ObjectMapper objectMapper = new ObjectMapper();
         PracticeScheduleDto scheduleDto = objectMapper.convertValue(orderReqInfo.getBizContent(), PracticeScheduleDto.class);
+        List<CourseScheduleDate> dateList = scheduleDto.getClassTime();
+        Integer courseNum = scheduleDto.getCourseNum();//课程数
+
+        //校验课时数
+        if (dateList.size() != courseNum) {
+            throw new BizException("课程数与课时数不符");
+        }
+        BigDecimal price = baseMapper.selectPrice(scheduleDto.getTeacherId(), scheduleDto.getSubjectId());//老师设置声部价格
+        BigDecimal decimal = new BigDecimal(courseNum);//选购课程节数
+        BigDecimal multiply = price.multiply(decimal);//预计总价
+        if (multiply.compareTo(scheduleDto.getCoursePrice()) != 0) {
+            throw new BizException("价格异常。预计价格:{},实际价格:{}", multiply, scheduleDto.getCoursePrice());
+        }
+
+        //批量检查老师课时在数据库是否重复
+        batchCheckTeacherCourseTime(scheduleDto.getTeacherId(), dateList, CourseScheduleDate::getStartTime, CourseScheduleDate::getEndTime);
+        //批量检查学生课时在数据库是否重复
+        batchCheckStudentCourseTime(studentId, dateList, CourseScheduleDate::getStartTime, CourseScheduleDate::getEndTime);
 
         String orderNo = orderReqInfo.getOrderNo();
         scheduleDto.setType(CourseScheduleEnum.PRACTICE.getCode());
-        scheduleDto.setStatus(CourseGroupEnum.ING.getCode());
+        scheduleDto.setStatus(CourseGroupEnum.NOT_SALE.getCode());
         scheduleDto.setMixStudentNum(1);
         scheduleDto.setStudentId(studentId);
 
@@ -990,7 +1042,57 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * @Date: 2022/4/21
      */
     @Override
-    public void courseAdjust(CourseAdjustVo adjustVo) {
+    public void courseAdjust(CourseAdjustVo adjustVo, Long teacherId) {
+        Integer courseId = adjustVo.getCourseId();
+        Date classDate = adjustVo.getClassDate();
+        Date startTime = adjustVo.getStartTime();
+        Date endTime = adjustVo.getEndTime();
+        Date now = new Date();
+        //校验时间是否为未来时刻
+        if (classDate.before(now) || startTime.before(now) || endTime.before(now)) {
+            throw new BizException("排课日期必须大于当前日期");
+        }
+        if (!(DateUtil.dateToString(classDate).equals(DateUtil.dateToString(startTime))) ||
+                !(DateUtil.dateToString(startTime).equals(DateUtil.dateToString(endTime)))) {
+            throw new BizException("排课日期必须为同天");
+        }
+
+        //校验课程是否存在
+        CourseSchedule schedule = baseMapper.selectOne(Wrappers.<CourseSchedule>lambdaQuery()
+                .eq(CourseSchedule::getId, courseId)
+                .eq(CourseSchedule::getLock, 0)
+                .eq(CourseSchedule::getStatus, CourseScheduleEnum.NOT_START)
+                .eq(CourseSchedule::getType, CourseScheduleEnum.PRACTICE));
+        if (ObjectUtil.isEmpty(schedule)) {
+            throw new BizException("课程不存在");
+        }
+
+        //查询是否有人购买
+        CourseScheduleStudentPayment studentPayment = paymentDao.selectOne(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
+                .eq(CourseScheduleStudentPayment::getCourseId, courseId)
+                .eq(CourseScheduleStudentPayment::getCourseType, CourseScheduleEnum.PRACTICE));
+        if (ObjectUtil.isEmpty(studentPayment)) {
+            throw new BizException("课程无人购买");
+        }
+
+        //校验老师课程是否冲突
+        List<CourseSchedule> scheduleList = this.list(Wrappers.<CourseSchedule>lambdaQuery()
+                .eq(CourseSchedule::getTeacherId, teacherId)
+                .in(CourseSchedule::getStatus, Lists.newArrayList(CourseScheduleEnum.NOT_START.getCode(), CourseScheduleEnum.ING.getCode())));
+        for (CourseSchedule courseSchedule : scheduleList) {
+            if (inInterSection(startTime, endTime, courseSchedule.getStartTime(), courseSchedule.getEndTime(), true)) {
+                throw new BizException("老师排课冲突,课程id:{}", courseSchedule.getId());
+            }
+        }
+
+        //校验学生课程是否冲突
+        List<CourseSchedule> studentList = baseMapper.selectSchedule(courseId);
+        for (CourseSchedule courseSchedule : studentList) {
+            if (inInterSection(startTime, endTime, courseSchedule.getStartTime(), courseSchedule.getEndTime(), true)) {
+                throw new BizException("学生排课冲突,课程id:{}", courseSchedule.getId());
+            }
+        }
+
         baseMapper.courseAdjust(adjustVo);
     }
 
@@ -1087,8 +1189,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         //老师端-学生买陪练课
         String teacherUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.STUDENT_BUY_PRACTICE.getCode());
         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_BUY_PRACTICE,
-                teacherReceivers, null, 0, null, ClientEnum.TEACHER.getCode(),
-                student.getUsername(), courseNum, teacherUrl);
+                teacherReceivers, null, 0, teacherUrl, ClientEnum.TEACHER.getCode(),
+                student.getUsername(), courseNum );
         log.info("send success {}", MessageTypeEnum.STUDENT_BUY_PRACTICE);
 
         //老师端-学生买陪练课(短信)
@@ -1100,13 +1202,13 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         //学生端-买陪练课
         String studentUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.PRACTICE_BUY.getCode());
         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PRACTICE_BUY,
-                studentReceivers, null, 0, null, ClientEnum.STUDENT.getCode(),
-                teacher.getUsername(), courseNum, studentUrl);
+                studentReceivers, null, 0, studentUrl, ClientEnum.STUDENT.getCode(),
+                teacher.getUsername(), courseNum );
         log.info("send success {}", MessageTypeEnum.PRACTICE_BUY);
 
         //学生端-买陪练课(短信)
         String studentSmsUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.SMS_PRACTICE_BUY.getCode());
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SMS_PRACTICE_BUY,
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_PRACTICE_BUY,
                 studentSms, null, 0, null, null,
                 teacher.getUsername(), courseNum, studentSmsUrl);
         log.info("send success {}", MessageTypeEnum.SMS_PRACTICE_BUY);
@@ -1157,8 +1259,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 //老师端-明日课程提醒
                 String teacherUrl = sysMessageService.selectConfigUrl(MessageTypeEnum.TOMORROW_COURSE_REMINDER.getCode());
                 sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TOMORROW_COURSE_REMINDER,
-                        teacherReceivers, null, 0, null, ClientEnum.TEACHER.getCode(),
-                        practiceCount.toString(), liveCount.toString(), teacherUrl);
+                        teacherReceivers, null, 0, teacherUrl, ClientEnum.TEACHER.getCode(),
+                        practiceCount.toString(), liveCount.toString() );
                 log.info("send success {}", MessageTypeEnum.TOMORROW_COURSE_REMINDER);
 
                 //老师端-明日课程提醒(短信)
@@ -1169,4 +1271,22 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             }
         }
     }
+
+    /**
+     * @Description: 查询课程配置
+     * @Author: cy
+     * @Date: 2022/5/10
+     */
+    public Map<String, String> selectRoomConfig() {
+        Map<String, String> sysConfig = new HashMap<>();
+        //提前XX分钟创建/进入陪练课房间时间
+        sysConfig.put("practiceStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_PRACTICE_ROOM_MINUTE));
+        //陪练课结束后,XX分钟关闭房间
+        sysConfig.put("practiceEndTime", sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
+        //提前XX分钟创建/进入直播房间的时间
+        sysConfig.put("liveStartTime", sysConfigService.findConfigValue(SysConfigConstant.PRE_CREATE_LIVE_ROOM_MINUTE));
+        //直播结束后,XX分钟关闭房间
+        sysConfig.put("liveEndTime", sysConfigService.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_LIVE_ROOM_MINUTE));
+        return sysConfig;
+    }
 }

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

@@ -57,8 +57,8 @@ public class ImGroupMemberServiceImpl extends ServiceImpl<ImGroupMemberDao, ImGr
     public List<GroupMember> initGroupMember(String imGroupId, Long userId, Boolean isAdmin, ImGroupMember.ImGroupMemberRoleType roleType) throws Exception {
         //记录群成员
         BasicUserInfo basicUserInfo = teacherDao.getBasicUserInfo(userId);
-        String username = roleType== ImGroupMember.ImGroupMemberRoleType.TEACHER?basicUserInfo.getRealName():basicUserInfo.getUsername();
-        ImGroupMember imGroupMember = new ImGroupMember(imGroupId, userId,basicUserInfo.getAvatar(), username, isAdmin, roleType);
+//        String username = roleType== ImGroupMember.ImGroupMemberRoleType.TEACHER?basicUserInfo.getRealName():basicUserInfo.getUsername();
+        ImGroupMember imGroupMember = new ImGroupMember(imGroupId, userId,basicUserInfo.getAvatar(), basicUserInfo.getUsername(), isAdmin, roleType);
         Date date = new Date();
         imGroupMember.setCreateTime(date);
         imGroupMember.setUpdateTime(date);

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

@@ -70,6 +70,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
     private StudentService studentService;
 
     @Autowired
+    private SysMessageConfigService sysMessageConfigService;
+
+    @Autowired
     private MusicSheetAuthRecordService musicSheetAuthRecordService;
 
     @Autowired
@@ -171,12 +174,11 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
                 }
             } else if  (ChargeTypeEnum.VIP.getCode().equals(detail.getChargeType().getCode())) {
                 // 会员 判断是否为会员, 会员可播放
-                Student student = studentService.getById(sysUser.getId());
-                if (new Date().compareTo(student.getMembershipEndTime()) < 0) {
+                StudentVo studentVo = studentService.detail(sysUser.getId());
+                if (studentVo != null && YesOrNoEnum.YES.getCode().equals(studentVo.getIsVip().getCode())) {
                     detail.setPlay(YesOrNoEnum.YES);
                 }
             }
-
         } else {
             detail.setPlay(YesOrNoEnum.YES);
         }
@@ -187,7 +189,22 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
 
     @Override
     public IPage<MusicSheetVo> selectStudentPage(IPage<MusicSheetVo> page, StudentMusicSheetSearch query) {
-        return page.setRecords(baseMapper.selectStudentMusicPage(page, query));
+        IPage<MusicSheetVo> musicSheetVoIPage = page.setRecords(baseMapper.selectStudentMusicPage(page, query));
+        List<MusicSheetVo> records = musicSheetVoIPage.getRecords();
+        if (query.getStudentId() != null) {
+            StudentVo studentVo = studentService.detail(query.getStudentId());
+            if (studentVo == null) {
+                return musicSheetVoIPage;
+            }
+            for (MusicSheetVo record : records) {
+                if (ChargeTypeEnum.VIP.getCode().equals(record.getChargeType().getCode())
+                        && YesOrNoEnum.YES.getCode().equals(studentVo.getIsVip().getCode())) {
+                    record.setPlay(YesOrNoEnum.YES);
+                }
+            }
+        }
+        return musicSheetVoIPage;
+
     }
 
     @Override
@@ -452,15 +469,19 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
         Map<Long,String> studentReceivers = new HashMap<>();
         studentReceivers.put(studentId, student.getPhone());
 
-        // todo 乐谱连接
+
+        String url = sysMessageService.selectConfigUrl(MessageTypeEnum.STUDENT_BUY_MUSIC_SHEET_SUCCESS.getCode());
+
         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
                                            MessageTypeEnum.STUDENT_BUY_MUSIC_SHEET_SUCCESS, studentReceivers, null,
-                                           0, null,ClientEnum.STUDENT.getCode(),musicSheet.getMusicSheetName());
+                                           0, url,ClientEnum.STUDENT.getCode(),musicSheet.getMusicSheetName());
         // 推送学生
         Map<Long,String> studentSMS = new HashMap<>();
         studentSMS.put(studentId, student.getPhone());
         // 推送短信
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_STUDENT_BUY_MUSIC_SHEET_SUCCESS,studentSMS,null,0,null,null,musicSheet.getMusicSheetName());
+        url = sysMessageService.selectConfigUrl(MessageTypeEnum.SMS_STUDENT_BUY_MUSIC_SHEET_SUCCESS.getCode());
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_STUDENT_BUY_MUSIC_SHEET_SUCCESS,
+        studentSMS,null,0,url,null,musicSheet.getMusicSheetName());
 
         return true;
     }

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

@@ -9,8 +9,10 @@ import com.yonge.cooleshow.biz.dal.dao.StudentStarDao;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.StudentTotal;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.toolset.utils.string.ValueUtil;
@@ -90,4 +92,14 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         }
         return subjectList;
     }
+
+    public IPage<MyFollow> queryMyFollow(IPage<MyFollow> page, Long studentId) {
+        List<MyFollow> teacherVos = baseMapper.queryMyFollow(page, studentId);
+        return page.setRecords(teacherVos);
+    }
+
+    public void unfollow(Map<String, Long> map) {
+        WrapperUtil.toLong(map, "teacherId", "老师id不能为空!");
+        baseMapper.unfollow(map);
+    }
 }

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

@@ -104,8 +104,9 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
         receivers.put(userId, phone);
         if (isPass) {
             try {
+                String url = sysMessageService.selectConfigUrl(MessageTypeEnum.TEACHER_AUTH_PASS.getCode());
                 sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_AUTH_PASS,
-                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(), MessageTypeEnum.TEACHER_AUTH_PASS.getUrl());
+                        receivers, null, 0, url, ClientEnum.TEACHER.getCode());
             } catch (Exception e) {
                 log.error("入驻审核极光消息推送异常,userId={}", userId);
             }
@@ -117,14 +118,15 @@ public class TeacherAuthEntryRecordServiceImpl extends ServiceImpl<TeacherAuthEn
             }
         } else {
             try {
+                String url = sysMessageService.selectConfigUrl(MessageTypeEnum.TEACHER_AUTH_FAIL.getCode());
                 sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_AUTH_FAIL,
-                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(), reason, MessageTypeEnum.TEACHER_AUTH_FAIL.getUrl());
+                        receivers, null, 0, url, ClientEnum.TEACHER.getCode(), reason);
             } catch (Exception e) {
                 log.error("入驻审核极光消息推送异常,userId={}", userId);
             }
 
             try {
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SMS_TEACHER_AUTH_FAIL,
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_TEACHER_AUTH_FAIL,
                         receivers, null, 0, null, ClientEnum.TEACHER.getCode(), reason);
             } catch (Exception e) {
                 log.error("入驻审核短信消息推送异常,userId={}", userId);

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

@@ -123,8 +123,9 @@ public class TeacherAuthMusicianRecordServiceImpl extends ServiceImpl<TeacherAut
         receivers.put(userId, phone);
         if (isPass) {
             try {
+                String url = sysMessageService.selectConfigUrl(MessageTypeEnum.MUSICIAN_AUTH_PASS.getCode());
                 sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.MUSICIAN_AUTH_PASS,
-                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(), MessageTypeEnum.MUSICIAN_AUTH_PASS.getUrl());
+                        receivers, null, 0, url, ClientEnum.TEACHER.getCode());
             } catch (Exception e) {
                 log.error("音乐人认证极光消息推送异常,userId={}", userId);
             }
@@ -143,7 +144,7 @@ public class TeacherAuthMusicianRecordServiceImpl extends ServiceImpl<TeacherAut
             }
 
             try {
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.SMS_MUSICIAN_AUTH_FAIL,
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_MUSICIAN_AUTH_FAIL,
                         receivers, null, 0, null, ClientEnum.TEACHER.getCode(), reason);
             } catch (Exception e) {
                 log.error("音乐人认证短信消息推送异常,userId={}", userId);

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

@@ -1,6 +1,8 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.TeacherFreeTimeDao;
 import com.yonge.cooleshow.biz.dal.dto.PracticeTimesSetting;
@@ -8,15 +10,18 @@ import com.yonge.cooleshow.biz.dal.entity.TeacherFreeTime;
 import com.yonge.cooleshow.biz.dal.entity.TeacherSubjectPrice;
 import com.yonge.cooleshow.biz.dal.service.TeacherFreeTimeService;
 import com.yonge.cooleshow.biz.dal.vo.TeacherFreeTimeVo;
+import com.yonge.cooleshow.biz.dal.vo.WeekVo;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.utils.date.DateUtil;
+import jodd.util.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * 老师可排课时间表(TeacherFreeTime)表服务实现类
@@ -39,6 +44,30 @@ public class TeacherFreeTimeServiceImpl extends ServiceImpl<TeacherFreeTimeDao,
         TeacherFreeTime oldTeacherFreeTime = baseMapper.findOne(teacherFreeTime.getTeacherId(),
                 teacherFreeTime.getCourseMinutes(),
                 teacherFreeTime.getFreeMinutes());
+        System.out.println(teacherFreeTime.getMonday());
+        //结束时间减去休息时间
+        if (StringUtil.isNotBlank(teacherFreeTime.getMonday())){
+            teacherFreeTime.setMonday(timeOffSet(teacherFreeTime.getMonday(), teacherFreeTime.getFreeMinutes()));
+        }
+        if (StringUtil.isNotBlank(teacherFreeTime.getTuesday())){
+            teacherFreeTime.setTuesday(timeOffSet(teacherFreeTime.getTuesday(),teacherFreeTime.getFreeMinutes()));
+        }
+        if (StringUtil.isNotBlank(teacherFreeTime.getWednesday())){
+            teacherFreeTime.setWednesday(timeOffSet(teacherFreeTime.getWednesday(),teacherFreeTime.getFreeMinutes()));
+        }
+        if (StringUtil.isNotBlank(teacherFreeTime.getThursday())){
+            teacherFreeTime.setThursday(timeOffSet(teacherFreeTime.getThursday(),teacherFreeTime.getFreeMinutes()));
+        }
+        if (StringUtil.isNotBlank(teacherFreeTime.getFriday())){
+            teacherFreeTime.setFriday(timeOffSet(teacherFreeTime.getFriday(),teacherFreeTime.getFreeMinutes()));
+        }
+        if (StringUtil.isNotBlank(teacherFreeTime.getSaturday())){
+            teacherFreeTime.setSaturday(timeOffSet(teacherFreeTime.getSaturday(),teacherFreeTime.getFreeMinutes()));
+        }
+        if (StringUtil.isNotBlank(teacherFreeTime.getSunday())){
+            teacherFreeTime.setSunday(timeOffSet(teacherFreeTime.getSunday(),teacherFreeTime.getFreeMinutes()));
+        }
+
         //删除原有设置
         if(Objects.nonNull(oldTeacherFreeTime)){
             baseMapper.deleteById(oldTeacherFreeTime.getId());
@@ -68,5 +97,18 @@ public class TeacherFreeTimeServiceImpl extends ServiceImpl<TeacherFreeTimeDao,
         getDetail.setSubjectPrice(priceList);
         return getDetail;
     }
+
+    public static String timeOffSet(String week,Integer freeMinutes){
+        List<WeekVo> list = JSONObject.parseArray(week, WeekVo.class);
+        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
+        List<WeekVo> weekList = new ArrayList<>();
+        for (WeekVo weekVo : list) {
+            WeekVo vo = new WeekVo();
+            vo.setStartTime(weekVo.getStartTime());
+            vo.setEndTime(sdf.format(DateUtil.offsetMinute(weekVo.getEndTime(), -freeMinutes, "HH:mm:ss")));
+            weekList.add(vo);
+        }
+        return JSON.toJSON(weekList).toString();
+    }
 }
 

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

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.biz.dal.vo.MyFens;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.biz.dal.dao.EmployeeDao;
 import com.yonge.cooleshow.biz.dal.dto.TeacherDto;
@@ -150,8 +151,9 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     public HttpResponseResult<Boolean> openLive(Long id) {
         TeacherTotal teacherTotal = (TeacherTotal) redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(id)).get();
         if (null == teacherTotal) {
-            return HttpResponseResult.succeed(false);
+            teacherTotal = new TeacherTotal();
         }
+
         //开通直播需要粉丝数
         Integer fansNum = Integer.parseInt(sysConfigService.findByParamName(SysConfigConstant.OPEN_LIVE_FANS_NUM).getParamValue());
         //开通直播需要已完成课时数
@@ -369,4 +371,9 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         }
         return subjectList;
     }
+
+    public IPage<MyFens> queryMyFans(IPage<MyFens> page, Long teacherId) {
+        List<MyFens> teacherVos = baseMapper.queryMyFans(page, teacherId);
+        return page.setRecords(teacherVos);
+    }
 }

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

@@ -61,12 +61,12 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
             throw new BizException("缺少参数");
         }
 
-        Future<HttpResponseResult<UserAccountRecord>> httpResponseResultFuture = DistributedLock.of(redissonClient)
-                .callIfLockCanGet(CacheNameEnum.LOCK_CHANGE_ACCOUNT.getRedisKey(accountRecordDto.getUserId())
-                        , () -> doAccountChange(accountRecordDto), 60L, TimeUnit.SECONDS);
-
         try {
-            return httpResponseResultFuture.get();
+            return DistributedLock.of(redissonClient)
+                    .runIfLockCanGet(CacheNameEnum.LOCK_CHANGE_ACCOUNT.getRedisKey(accountRecordDto.getUserId())
+                            , () -> doAccountChange(accountRecordDto), 60L, TimeUnit.SECONDS);
+        } catch (BizException e) {
+            return HttpResponseResult.failed(e.getMessage());
         } catch (Exception e) {
             e.printStackTrace();
             throw new BizException("账户变更失败");
@@ -94,7 +94,7 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
         }
         AccountTotal total = new AccountTotal();
 
-        total.setTotalInAmount(practiceAmount.add(liveAmount).add(musicAmount));
+        total.setTotalInAmount(practiceAmount.add(liveAmount).add(videoAmount).add(musicAmount));
         if (total.getTotalInAmount().doubleValue() > 0) {
             total.setPracticeAmount(practiceAmount);
             BigDecimal practiceRate = total.getPracticeAmount()

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

@@ -3,19 +3,21 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.yonge.cooleshow.biz.dal.config.HuifuConfiguration;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
-import com.yonge.cooleshow.biz.dal.enums.PayChannelEnum;
 import com.yonge.cooleshow.biz.dal.enums.TradeStatusEnum;
-import com.yonge.cooleshow.biz.dal.sdk.PaymentSdk;
-import com.yonge.cooleshow.biz.dal.sdk.req.DeviceInfo;
-import com.yonge.cooleshow.biz.dal.sdk.req.PaymentReq;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.service.IdGeneratorService;
+import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.payment.base.enums.OpenEnum;
+import com.yonge.toolset.payment.base.enums.PayChannelEnum;
+import com.yonge.toolset.payment.base.model.*;
+import com.yonge.toolset.payment.core.props.PaymentProperties;
+import com.yonge.toolset.payment.core.service.PaymentClient;
 import com.yonge.toolset.utils.string.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -25,10 +27,7 @@ import com.yonge.cooleshow.biz.dal.service.UserOrderPaymentService;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 @Service
@@ -38,7 +37,9 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
     @Autowired
     private IdGeneratorService idGeneratorService;
     @Autowired
-    private PaymentSdk paymentSdk;
+    private PaymentProperties paymentProperties;
+    @Autowired(required=true)
+    private PaymentClient paymentClient;
 
     @Override
     public UserOrderPayment detailByOrderNo(String orderNo, PayChannelEnum payChannel, TradeStatusEnum status) {
@@ -55,41 +56,35 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
     }
 
     @Override
-    public UserOrderPayment detailByAdapayNo(String adapayNo) {
+    public UserOrderPayment detailByPaymentNo(String paymentNo) {
         return baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery()
-                .eq(UserOrderPayment::getAdapayNo, adapayNo));
+                .eq(UserOrderPayment::getPaymentNo, paymentNo));
     }
 
     /***
      * 入订单付款表
      * @author liweifan
-     * @param: responseResult
+     * @param: paymentRes
      * @param: payReq
-     * @param: adapayNo
-     * @updateTime 2022/5/7 14:19
+     * @updateTime 2022/5/11 18:47
      * @return: com.yonge.cooleshow.biz.dal.entity.UserOrderPayment
      */
-    private UserOrderPayment insertOrderPayment(HttpResponseResult<Map<String, Object>> responseResult, OrderPayReq payReq, Long adapayNo) {
+    private UserOrderPayment insertOrderPayment(Payment payment) {
         UserOrderPayment orderPayment = new UserOrderPayment();
-        orderPayment.setOrderNo(payReq.getOrderNo());
-        orderPayment.setAdapayNo(adapayNo.toString());
-        orderPayment.setPayChannel(payReq.getPayChannel());
-        if (responseResult.getStatus()) {
-            Map<String, Object> res = responseResult.getData();
-            orderPayment.setTransNo(res.get("id").toString());
-            orderPayment.setPayAmt(
-                    new BigDecimal(res.get("pay_amt").toString()).setScale(2, RoundingMode.HALF_UP)
-            );
-            String pay_info = ((JSONObject) res.get("expend")).getString("pay_info");
-            orderPayment.setPayInfo(pay_info);
-            orderPayment.setStatus(TradeStatusEnum.pending);
-
-            //查询订单下支付中的付款单,取消支付
-            closePayment(payReq.getOrderNo(),"用户发起了新的付款请求");
-        } else {
-            orderPayment.setPayFailMsg(responseResult.getMsg());
-            orderPayment.setStatus(TradeStatusEnum.failed);
-        }
+        orderPayment.setOpenType(payment.getOpenType());
+        orderPayment.setPayChannel(payment.getPayChannel());
+        orderPayment.setOrderNo(payment.getOrderNo());
+        orderPayment.setPaymentNo(payment.getPaymentNo());
+        orderPayment.setTransNo(payment.getId());
+        orderPayment.setPayAmt(
+                new BigDecimal(payment.getPayAmt()).setScale(2, RoundingMode.HALF_UP)
+        );
+        orderPayment.setPayInfo(payment.getPayInfo());
+        orderPayment.setStatus(TradeStatusEnum.pending);
+
+        //查询订单下支付中的付款单,取消支付
+        closePayment(payment.getOrderNo(), "用户发起了新的付款请求");
+        //保存新的付款单
         save(orderPayment);
         return orderPayment;
     }
@@ -99,7 +94,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
         UserOrderPayment orderPayment = baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery()
                 .eq(UserOrderPayment::getOrderNo, orderNo)
                 .eq(UserOrderPayment::getStatus, TradeStatusEnum.pending));
-        if(null == orderPayment){
+        if (null == orderPayment) {
             return orderPayment;
         }
 
@@ -110,12 +105,20 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
 
         //发送支付关单请求
         if (!StringUtil.isEmpty(orderPayment.getTransNo())) {
-            HttpResponseResult<Map<String, Object>> responseResult = paymentSdk.closePayment(orderPayment.getTransNo(), reason, "");
-            if (!responseResult.getStatus()) {
-                orderPayment.setCloseStatus(TradeStatusEnum.failed);
-                orderPayment.setCloseFailMsg(responseResult.getMsg());
-            } else {
-                orderPayment.setCloseStatus(TradeStatusEnum.pending);
+            ClosePayment param = new ClosePayment(orderPayment.getOpenType(), orderPayment.getPayChannel());
+            param.setId(orderPayment.getTransNo());
+            param.setReason(reason);
+
+            try {
+                BaseResult<ClosePayment> responseResult = paymentClient.closePayment(param);
+                if (!responseResult.getStatus()) {
+                    orderPayment.setCloseStatus(TradeStatusEnum.failed);
+                    orderPayment.setCloseFailMsg(responseResult.getMsg());
+                } else {
+                    orderPayment.setCloseStatus(TradeStatusEnum.pending);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
             }
         }
         updateById(orderPayment);
@@ -147,54 +150,66 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
     }
 
     @Override
-    public HttpResponseResult<OrderPayRes> createOrderPayment(OrderPayReq payReq, UserOrderVo detail) {
+    public HttpResponseResult<OrderPayRes> createOrderPayment(OrderPayReq payReq, UserOrderVo detail) throws Exception {
         OrderPayRes orderPayRes = new OrderPayRes();
-        //付订单号生成
-        Long adapayNo = idGeneratorService.generatorId("adapayNo");
+        //付订单号生成
+        Long paymentNo = idGeneratorService.generatorId("paymentNo");
 
         //构建汇付统一下单请求
-        PaymentReq paymentReq = new PaymentReq();
-        paymentReq.setOrder_no(adapayNo.toString());
-        paymentReq.setPay_channel(payReq.getPayChannel().getCode());
-        paymentReq.setPay_amt(detail.getActualPrice().setScale(2, RoundingMode.HALF_UP).toString());
-        paymentReq.setGoods_title(detail.getOrderName());
-        paymentReq.setGoods_desc(detail.getOrderDesc());
-
-        DeviceInfo deviceInfo = new DeviceInfo();
-        deviceInfo.setDevice_ip(payReq.getIpAddress());
-
-        paymentReq.setDevice_info(deviceInfo);
-        //异步通知地址
-        paymentReq.setNotify_url(HuifuConfiguration.getHuifuProperties().getNotifyUrl());
-
-        if (PayChannelEnum.alipay_lite.equals(payReq.getPayChannel())) {
-            Map<String, Object> expend = new HashMap<>();
-            expend.put("buyer_id", payReq.getBuyerId());
-            paymentReq.setExpend(expend);
+        OpenEnum openType = OpenEnum.valueOf(paymentProperties.getOpenType());
+        Payment payment = new Payment(openType, payReq.getPayChannel());
+        payment.setPaymentNo(paymentNo.toString());
+        payment.setOrderNo(payReq.getOrderNo());
+        payment.setOrderTitle(detail.getOrderName());
+        payment.setOrderDesc(detail.getOrderDesc());
+
+        //封装订单详情
+        List<OrderDetil> orderDetils = new ArrayList<>();
+        for (UserOrderDetailVo orderDetailVo : detail.getOrderDetailList()) {
+            orderDetils.add(new OrderDetil(orderDetailVo.getId().toString(), orderDetailVo.getGoodName(), 1, orderDetailVo.getActualPrice().toString()));
         }
-        if (PayChannelEnum.wx_lite.equals(payReq.getPayChannel())) {
-            Map<String, Object> expend = new HashMap<>();
-            expend.put("open_id", payReq.getOpenId());
-            paymentReq.setExpend(expend);
+        payment.setOrderDetils(orderDetils);
+        payment.setPayAmt(detail.getActualPrice().setScale(2, RoundingMode.HALF_UP).toString());
+        payment.setDescription(payReq.getReason());
+
+        if (OpenEnum.ADAPAY.equals(openType)) {
+            //创建分账对象
+            DivMember div_member = new DivMember();
+            div_member.setMember_id("0");
+            div_member.setAmount(detail.getActualPrice().setScale(2, RoundingMode.HALF_UP).toString());
+            div_member.setFee_flag("Y");
+            List<DivMember> div_members = Arrays.asList(div_member);
+            payment.setDivMembers(div_members);
+
+            //前端设备信息
+            DeviceInfo deviceInfo = new DeviceInfo();
+            deviceInfo.setDevice_ip(payReq.getIpAddress());
+            payment.setDeviceInfo(deviceInfo);
+
+            if (PayChannelEnum.wx_lite.equals(payReq.getPayChannel())) {
+                Map<String, Object> expend = new HashMap<>();
+                expend.put("open_id", payReq.getOpenId());
+                payment.setExpend(expend);
+            }
         }
 
         //付款请求
-        HttpResponseResult<Map<String, Object>> responseResult = paymentSdk.executePayment(paymentReq);
-        if (responseResult.getStatus()) {
+        BaseResult<Payment> paymentResBaseResult = paymentClient.executePayment(payment);
+        if (paymentResBaseResult.getStatus()) {
             orderPayRes.setPay_amt(detail.getActualPrice().setScale(2, RoundingMode.HALF_UP).toString());
-            String pay_info = ((JSONObject) responseResult.getData().get("expend")).getString("pay_info");
+            String pay_info = paymentResBaseResult.getData().getPayInfo();
             orderPayRes.setPay_info(pay_info);
             orderPayRes.setPayChannel(payReq.getPayChannel());
 
             //入订单付款表
-            insertOrderPayment(responseResult, payReq, adapayNo);
+            insertOrderPayment(paymentResBaseResult.getData());
             //修改订单状态
             userOrderService.updateStatusByOrderNo(payReq.getOrderNo(), OrderStatusEnum.PAYING.getCode());
             return HttpResponseResult.succeed(orderPayRes);
         } else {
             //入订单付款表,同时修改订单状态
-            userOrderService.doOrderCancel(detail, OrderStatusEnum.FAIL, responseResult.getMsg());
-            return HttpResponseResult.failed(responseResult.getMsg());
+            userOrderService.doOrderCancel(detail, OrderStatusEnum.FAIL, paymentResBaseResult.getMsg());
+            return HttpResponseResult.failed(paymentResBaseResult.getMsg());
         }
     }
 }

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

@@ -5,24 +5,24 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundBill;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundBillVo;
 import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundPaymentSearch;
-import com.yonge.cooleshow.biz.dal.dao.UserOrderRefundPaymentDao;
+import com.yonge.cooleshow.biz.dal.dao.UserOrderRefundBillDao;
 import com.yonge.cooleshow.biz.dal.service.UserOrderRefundPaymentService;
 
 
 @Service
-public class UserOrderRefundPaymentServiceImpl extends ServiceImpl<UserOrderRefundPaymentDao, UserOrderRefundPayment> implements UserOrderRefundPaymentService {
+public class UserOrderRefundPaymentServiceImpl extends ServiceImpl<UserOrderRefundBillDao, UserOrderRefundBill> implements UserOrderRefundPaymentService {
     private final static Logger log = LoggerFactory.getLogger(UserOrderRefundPaymentServiceImpl.class);
 
 	@Override
-    public UserOrderRefundPaymentVo detail(Long id) {
+    public UserOrderRefundBillVo detail(Long id) {
         return baseMapper.detail(id);
     }
     
      @Override
-    public IPage<UserOrderRefundPaymentVo> selectPage(IPage<UserOrderRefundPaymentVo> page, UserOrderRefundPaymentSearch query){
+    public IPage<UserOrderRefundBillVo> selectPage(IPage<UserOrderRefundBillVo> page, UserOrderRefundPaymentSearch query){
         return page.setRecords(baseMapper.selectPage(page, query));
     }
 	

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 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.biz.dal.dao.UserOrderRefundDao;
@@ -21,6 +22,11 @@ import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.service.IdGeneratorService;
+import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.payment.base.model.Payment;
+import com.yonge.toolset.payment.base.model.RefundBill;
+import com.yonge.toolset.payment.core.service.PaymentClient;
 import com.yonge.toolset.utils.string.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -33,9 +39,6 @@ import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
-import static java.util.stream.Collectors.joining;
-
-
 @Service
 public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao, UserOrderRefund> implements UserOrderRefundService {
     @Autowired
@@ -46,6 +49,12 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
     private UserOrderDetailService orderDetailService;
     @Autowired
     private CourseGroupService courseGroupService;
+    @Autowired
+    private IdGeneratorService idGeneratorService;
+    @Autowired
+    private PaymentClient paymentClient;
+    @Autowired
+    private UserOrderRefundPaymentService refundPaymentService;
 
     //验证是否可以退款,获取退款金额信息
     private static final Map<GoodTypeEnum, Function<OrderRefundReq, HttpResponseResult<RefundCreateRes>>> refundCreate = new HashMap<>();
@@ -124,8 +133,9 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
         String join = StringUtil.join(detilIds, ",");
 
         UserOrderRefund orderRefunds = new UserOrderRefund();
-        orderRefunds.setUserId(refundReq.getUserId());
-        orderRefunds.setOrderId(refundReq.getOrderId());
+        orderRefunds.setUserId(detail.getUserId());
+        orderRefunds.setOrderId(detail.getId());
+        orderRefunds.setOrderNo(detail.getOrderNo());
         orderRefunds.setOredrDetilIds(join);
         orderRefunds.setStatus(AuthStatusEnum.DOING);
         orderRefunds.setApplyAmount(actualPrice);
@@ -146,14 +156,14 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public HttpResponseResult<Boolean> doAuth(AuthOperaReq authOperaReq, SysUser user) {
+    public HttpResponseResult<RefundBill> doAuth(AuthOperaReq authOperaReq, SysUser user) {
         UserOrderRefund orderRefund = baseMapper.selectById(authOperaReq.getId());
         if (!AuthStatusEnum.DOING.equals(orderRefund.getStatus())) {
             return HttpResponseResult.failed("退款单已审核");
         }
         String oredrDetilIds = orderRefund.getOredrDetilIds();
         if (StringUtil.isEmpty(oredrDetilIds)) {
-            return HttpResponseResult.succeed(true);
+            return HttpResponseResult.succeed();
         }
 
         orderRefund.setStatus(authOperaReq.getPass() ? AuthStatusEnum.PASS : AuthStatusEnum.UNPASS);
@@ -164,8 +174,8 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
         updateById(orderRefund);
 
         if (authOperaReq.getPass()) {
-            //通过调用
-
+            //通过调用退款接口
+            return doOrderRefund(orderRefund);
         } else {
             List<String> detilIds = Arrays.asList(oredrDetilIds.split(","));
             for (String id : detilIds) {
@@ -180,7 +190,25 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
                 }
             }
         }
-        return HttpResponseResult.succeed(true);
+        return HttpResponseResult.succeed();
     }
 
+    private HttpResponseResult<RefundBill> doOrderRefund(UserOrderRefund orderRefund) {
+        UserOrderPayment payment = orderPaymentService.getOne(Wrappers.<UserOrderPayment>lambdaQuery()
+                .eq(UserOrderPayment::getOrderNo, orderRefund.getOrderNo())
+                .eq(UserOrderPayment::getStatus, TradeStatusEnum.succeeded)
+        );
+
+        //单号生成
+        Long billNo = idGeneratorService.generatorId("billNo");
+
+        RefundBill refundBill = new RefundBill(payment.getOpenType(), payment.getPayChannel());
+        refundBill.setId(payment.getTransNo());
+        refundBill.setRefundNo(billNo.toString());
+        refundBill.setRefundAmt(orderRefund.getActualAmount());
+        refundBill.setReason(orderRefund.getReason());
+
+        BaseResult<RefundBill> refundBillBaseResult = paymentClient.refundPayment(refundBill);
+        return HttpResponseResult.status(refundBillBaseResult);
+    }
 }

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

@@ -11,7 +11,6 @@ import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
-import com.yonge.cooleshow.biz.dal.sdk.PaymentSdk;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
@@ -19,6 +18,10 @@ import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.cooleshow.common.service.IdGeneratorService;
+import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.payment.base.model.Payment;
+import com.yonge.toolset.payment.core.props.PaymentProperties;
+import com.yonge.toolset.payment.core.service.PaymentClient;
 import com.yonge.toolset.utils.string.StringUtil;
 import org.apache.commons.beanutils.BeanUtils;
 import org.redisson.api.RedissonClient;
@@ -52,9 +55,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     @Autowired
     private UserOrderPaymentService orderPaymentService;
     @Autowired
-    private UserOrderRefundService orderRefundsService;
-    @Autowired
-    private PaymentSdk paymentSdk;
+    private PaymentClient paymentClient;
     @Autowired
     private IdGeneratorService idGeneratorService;
     @Autowired
@@ -177,29 +178,24 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         }
 
         if (!StringUtil.isEmpty(detail.getTransNo())) {
-            try {
-                Map<String, Object> resMap = paymentSdk.queryPayment(detail.getTransNo());
-                //支付成功
-                if (TradeStatusEnum.succeeded.getCode().equals(resMap.get("status").toString())) {
-                    orderSuccess(detail);
-                    return HttpResponseResult.failed("订单已经交易完成");
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-                log.error("轮询处理支付中订单异常,异常参数: {}", JSONObject.toJSONString(payReq));
-                return HttpResponseResult.failed("取消订单失败");
+            Payment param = new Payment(detail.getOpenType(), detail.getPayChannel());
+            param.setId(detail.getTransNo());
+            param.setPaymentNo(detail.getPaymentNo());
+            BaseResult<Payment> res = paymentClient.queryPayment(param);
+            //支付成功
+            if (res.getStatus() && TradeStatusEnum.succeeded.getCode().equals(res.getData().getStatus())) {
+                orderSuccess(detail);
+                return HttpResponseResult.failed("订单已经交易完成");
             }
+            //关闭订单付款单
+            orderPaymentService.closePayment(payReq.getOrderNo(), StringUtil.isEmpty(payReq.getReason()) ? "用户取消订单" : payReq.getReason());
         }
         //关闭订单
         doOrderCancel(detail, OrderStatusEnum.CLOSE, StringUtil.isEmpty(payReq.getReason()) ? "用户取消订单" : payReq.getReason());
-        //关闭订单付款单
-        orderPaymentService.closePayment(payReq.getOrderNo(), StringUtil.isEmpty(payReq.getReason()) ? "用户取消订单" : payReq.getReason());
         return HttpResponseResult.succeed(true);
-
     }
 
 
-
     @Override
     public void setSuccessStatus() {
         OrderSearch query = new OrderSearch();
@@ -251,6 +247,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<UserOrder> executeOrder(OrderReq orderReq) throws Exception {
+        long start = System.currentTimeMillis();
         log.info("订单[创建订单] Req:{}", JSONObject.toJSONString(orderReq));
         //订单号生成
         Long orderNo = idGeneratorService.generatorId("userOrder");
@@ -261,6 +258,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             if (Objects.isNull(createFunction)) {
                 return HttpResponseResult.failed("订单商品信息获取失败");
             }
+
+
             info.setOrderNo(Long.toString(orderNo));
             info.setUserId(orderReq.getUserId());
             HttpResponseResult<OrderCreateRes> createResult = createFunction.apply(info);
@@ -290,6 +289,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                 afterFunction.accept(orderDetailVo);
             }
         }
+        log.info("下单请求 start is {} end is {}", start, System.currentTimeMillis());
         return HttpResponseResult.succeed(orderVo);
     }
 
@@ -306,7 +306,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                 && !OrderStatusEnum.PAYING.equals(detail.getStatus())) {
             return HttpResponseResult.failed("订单状态异常");
         }
-        return doOrderPayWaitPay(payReq, detail);
+        return doOrderPay(payReq, detail);
     }
 
     @Override
@@ -320,7 +320,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void orderCallback(String data, String type) {
+    public void adapayCallback(String data, String type) {
         JSONObject hfRes = JSONObject.parseObject(data);
         if (type.equals("payment.succeeded")) {//支付成功
             paymentSucceededHandle(hfRes);
@@ -341,7 +341,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      * @updateTime 2022/4/27 15:09
      */
     private void paymentSucceededHandle(JSONObject hfRes) {
-        UserOrderPayment orderPayment = orderPaymentService.detailByAdapayNo(hfRes.getString("order_no"));
+        UserOrderPayment orderPayment = orderPaymentService.detailByPaymentNo(hfRes.getString("order_no"));
         if (null == orderPayment) {
             return;
         }
@@ -417,25 +417,25 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             return;
         }
         if (!StringUtil.isEmpty(detail.getTransNo())) {
-            try {
-                Map<String, Object> resMap = paymentSdk.queryPayment(detail.getTransNo());
-                //支付成功
-                if (TradeStatusEnum.succeeded.getCode().equals(resMap.get("status").toString())
-                        && (OrderStatusEnum.WAIT_PAY.equals(detail.getStatus())
-                        || OrderStatusEnum.PAYING.equals(detail.getStatus()))) {
-                    orderSuccess(detail);
-                    return;
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
+            Payment param = new Payment(detail.getOpenType(), detail.getPayChannel());
+            param.setId(detail.getTransNo());
+            param.setPaymentNo(detail.getPaymentNo());
+            BaseResult<Payment> res = paymentClient.queryPayment(param);
+            //支付成功
+            if (res.getStatus() && TradeStatusEnum.succeeded.getCode().equals(res.getData().getStatus())
+                    && (OrderStatusEnum.WAIT_PAY.equals(detail.getStatus()) || OrderStatusEnum.PAYING.equals(detail.getStatus()))
+            ) {
+                orderSuccess(detail);
                 return;
             }
         }
         //关闭订单
         doOrderCancel(detail, OrderStatusEnum.CLOSE, "订单超时");
+        //关闭订单付款单
+        orderPaymentService.closePayment(orderNo, "订单超时");
     }
 
-    private HttpResponseResult<OrderPayRes> doOrderPayWaitPay(OrderPayReq payReq, UserOrderVo detail) {
+    private HttpResponseResult<OrderPayRes> doOrderPay(OrderPayReq payReq, UserOrderVo detail) throws Exception {
         UserOrderPayment orderPayment = orderPaymentService.detailByOrderNo(payReq.getOrderNo(), payReq.getPayChannel(), TradeStatusEnum.pending);
         //当前渠道已经有创建支付请求
         if (null != orderPayment && !StringUtil.isEmpty(orderPayment.getPayInfo())) {

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

@@ -76,12 +76,11 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
     public HttpResponseResult<WithdrawalInfoRes> getWithdrawalInfo(Long userId) {
         WithdrawalInfoRes withdrawalInfoRes = new WithdrawalInfoRes();
         UserBankCardVo defaultBank = bankCardDao.getDefaultBankByUserId(userId);
-        if (null == defaultBank) {
-            return HttpResponseResult.failed("用户未绑定银行卡");
+        if (null != defaultBank) {
+            defaultBank.setPhone(ValueUtil.fuzzyMobile(defaultBank.getPhone()));
+            defaultBank.setBankCard(ValueUtil.fuzzyBankCard(defaultBank.getBankCard()));
+            withdrawalInfoRes.setUserBankCard(defaultBank);
         }
-        defaultBank.setPhone(ValueUtil.fuzzyMobile(defaultBank.getPhone()));
-        defaultBank.setBankCard(ValueUtil.fuzzyBankCard(defaultBank.getBankCard()));
-        withdrawalInfoRes.setUserBankCard(defaultBank);
         //获取平台提现手续费
         BigDecimal withdrawalServiceFee = getWithdrawalServiceFee();
         withdrawalInfoRes.setWithdrawalServiceFee(withdrawalServiceFee);

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

@@ -60,7 +60,7 @@ public class VideoLessonEvaluateServiceImpl extends ServiceImpl<VideoLessonEvalu
         Long teacherId = videoLessonPurchaseRecordDao.selectTeacherByDetail(videoId);
 
         //校验用户是否已购该课或未本课老师
-        if (userId != teacherId && !studentIdList.contains(userId)) {
+        if (!(userId.equals(teacherId)) && !studentIdList.contains(userId)) {
             throw new RuntimeException("未购买该课程无法参与讨论");
         }
 
@@ -69,7 +69,7 @@ public class VideoLessonEvaluateServiceImpl extends ServiceImpl<VideoLessonEvalu
 //            evaluate.setIsTeacher(YesOrNoEnum.YES);
 //        }
         //当前用户为课程创建者  是:老师  否:学生
-        if (teacherId==userId){
+        if (teacherId == userId) {
             evaluate.setIsTeacher(YesOrNoEnum.YES);
         }
 
@@ -83,6 +83,6 @@ public class VideoLessonEvaluateServiceImpl extends ServiceImpl<VideoLessonEvalu
      * @Date: 2022/4/11
      */
     public IPage<VideoLessonEvaluateVo> selectEvaluate(IPage<VideoLessonEvaluateVo> page, VideoLessonEvaluateSearch search) {
-        return page.setRecords(baseMapper.selectEvaluate(page,search));
+        return page.setRecords(baseMapper.selectEvaluate(page, search));
     }
 }

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.*;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoGroupSearch;
@@ -9,10 +10,14 @@ import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupService;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -21,7 +26,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -46,6 +53,10 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
     private VideoLessonAuthRecordDao recordDao;
     @Autowired
     private TeacherDao teacherDao;
+    @Autowired
+    private SysMessageService sysMessageService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
 
     public VideoLessonGroupDao getDao() {
         return videoLessonGroupDao;
@@ -105,6 +116,29 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
         recordDao.delete(Wrappers.<VideoLessonAuthRecord>lambdaQuery()
                 .eq(VideoLessonAuthRecord::getVideoGroupId, examineVo.getId())
                 .eq(VideoLessonAuthRecord::getAuditStatus, AuthStatusEnum.DOING));
+
+        //推送
+        VideoLessonGroup lessonGroup = baseMapper.selectById(examineVo.getId());
+        String status = examineVo.getAuditStatus();
+        Map<Long,String> receivers = new HashMap<>();
+        SysUser teacher = sysUserFeignService.queryUserById(lessonGroup.getTeacherId());
+        receivers.put(lessonGroup.getTeacherId(), teacher.getPhone());
+        if (status.equals("PASS")) {
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIDEO_SHEET_AUTH_PASS,
+                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(),lessonGroup.getLessonName());
+            }catch (Exception e){
+                log.warn("视频课审核失败,{}",e.getMessage());
+            }
+        } else {
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIDEO_SHEET_AUTH_UNPASS,
+                        receivers, null, 0, null, ClientEnum.TEACHER.getCode(),lessonGroup.getLessonName(),examineVo.getRemarks());
+            }catch (Exception e){
+                log.warn("视频课审核失败,{}",e.getMessage());
+            }
+        }
+
     }
 
     /**
@@ -134,7 +168,7 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
         Long subjectId = Long.valueOf(lessonGroup.getLessonSubject());
         List<Subject> subjectList = teacherDao.querySubject(sysUser.getId());
         List<Long> longList = subjectList.stream().map(Subject::getId).collect(Collectors.toList());
-        if (!longList.contains(subjectId)){
+        if (!longList.contains(subjectId)) {
             throw new BizException("该声部无法选择");
         }
 
@@ -297,7 +331,7 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
      * @Author: cy
      * @Date: 2022/5/7
      */
-    public CountVideoGroupVo countVideoGroup(){
+    public CountVideoGroupVo countVideoGroup() {
         CountVideoGroupVo countVideoGroup = baseMapper.countVideoGroup();
         countVideoGroup.setVideoLessonList(baseMapper.selectVideoLesson());
         return countVideoGroup;

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

@@ -90,12 +90,12 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
         }
 
         //校验课程是否购买
-//        VideoLessonPurchaseRecord isAlreadyBuy = videoLessonPurchaseRecordDao.selectOne(Wrappers.<VideoLessonPurchaseRecord>lambdaQuery()
-//                .eq(VideoLessonPurchaseRecord::getStudentId, studentId)
-//                .eq(VideoLessonPurchaseRecord::getVideoLessonGroupId, groupId));
-//        if (!ObjectUtil.isEmpty(isAlreadyBuy)) {
-//            throw new BizException("已购买过该课程");
-//        }
+        VideoLessonPurchaseRecord isAlreadyBuy = videoLessonPurchaseRecordDao.selectOne(Wrappers.<VideoLessonPurchaseRecord>lambdaQuery()
+                .eq(VideoLessonPurchaseRecord::getStudentId, studentId)
+                .eq(VideoLessonPurchaseRecord::getVideoLessonGroupId, groupId));
+        if (!ObjectUtil.isEmpty(isAlreadyBuy)) {
+            throw new BizException("已购买过该课程,或存在该课程未完成订单");
+        }
 
         purchaseRecord.setOrderNo(orderNo);
         purchaseRecord.setStudentId(studentId);
@@ -232,8 +232,8 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
         try {
             String url = sysMessageService.selectConfigUrl(MessageTypeEnum.VIDEO_BUY.getCode());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIDEO_BUY,
-                    studentReceivers, null, 0, null, ClientEnum.STUDENT.getCode(),
-                    teacher.getUsername(), lessonName, url);
+                    studentReceivers, null, 0, url, ClientEnum.STUDENT.getCode(),
+                    teacher.getUsername(), lessonName );
             log.info("send success {}", MessageTypeEnum.VIDEO_BUY);
         } catch (Exception e) {
             log.error("send fail {}", MessageTypeEnum.VIDEO_BUY);

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

@@ -90,15 +90,17 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
         Map<Long, String> receivers = new HashMap<>();
         receivers.put(userId, phone);
         try {
+            String url = sysMessageService.selectConfigUrl(MessageTypeEnum.VIP_EXPIRE_THIRTY_DAY.getCode());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIP_EXPIRE_THIRTY_DAY,
-                    receivers, null, 0, null, ClientEnum.TEACHER.getCode(), MessageTypeEnum.VIP_EXPIRE_THIRTY_DAY.getUrl());
+                    receivers, null, 0,  url, ClientEnum.TEACHER.getCode());
         } catch (Exception e) {
             log.error("会员到期3天极光消息推送异常,userId={}", userId);
         }
 
         try {
+            String url = sysMessageService.selectConfigUrl(MessageTypeEnum.SMS_VIP_EXPIRE_THIRTY_DAY.getCode());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_VIP_EXPIRE_THIRTY_DAY,
-                    receivers, null, 0, null, ClientEnum.TEACHER.getCode(), MessageTypeEnum.SMS_VIP_EXPIRE_THIRTY_DAY.getUrl());
+                    receivers, null, 0, url, ClientEnum.TEACHER.getCode() );
         } catch (Exception e) {
             log.error("会员到期3天短信消息推送异常,userId={}", userId);
         }
@@ -109,15 +111,17 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
         Map<Long, String> receivers = new HashMap<>();
         receivers.put(userId, phone);
         try {
+            String url = sysMessageService.selectConfigUrl(MessageTypeEnum.VIP_EXPIRE.getCode());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIP_EXPIRE,
-                    receivers, null, 0, null, ClientEnum.TEACHER.getCode(), MessageTypeEnum.VIP_EXPIRE.getUrl());
+                    receivers, null, 0, url, ClientEnum.TEACHER.getCode());
         } catch (Exception e) {
             log.error("会员到期3天极光消息推送异常,userId={}", userId);
         }
 
         try {
+            String url = sysMessageService.selectConfigUrl(MessageTypeEnum.SMS_VIP_EXPIRE.getCode());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_VIP_EXPIRE,
-                    receivers, null, 0, null, ClientEnum.TEACHER.getCode(), MessageTypeEnum.SMS_VIP_EXPIRE.getUrl());
+                    receivers, null, 0, url, ClientEnum.TEACHER.getCode());
         } catch (Exception e) {
             log.error("会员到期3天短信消息推送异常,userId={}", userId);
         }

+ 40 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/DistributedLock.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.biz.dal.support;
 
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.exception.BizException;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
@@ -74,6 +76,43 @@ public class DistributedLock {
     }
 
     /**
+     * 分布式锁-同步
+     *
+     * @param lockName lockKey
+     * @param callable 任务
+     * @param timeout  超时时间
+     * @param unit     超时时间单位
+     * @return Future 异步任务
+     */
+    public <T> T runIfLockCanGet(final String lockName, Callable<T> callable, final long timeout, TimeUnit unit) {
+        RLock lock = redissonClient.getLock(lockName);
+        if (Objects.isNull(lock)) {
+            log.info("callIfLockCanGet lock is null lockName : {}", lockName);
+            return null;
+        }
+        ExecutorService executor = Executors.newCachedThreadPool();
+        try {
+            if (lock.tryLock(0, timeout, unit)) {
+                log.info("callIfLockCanGet lock lockName : {} time is {}", lockName, System.currentTimeMillis());
+                Future<T> submit = executor.submit(callable);
+                return submit.get();
+            } else {
+                return null;
+            }
+        } catch (BizException e) {
+            throw e;
+        } catch (ExecutionException e) {
+            throw new BizException(e.getCause().getMessage());
+        } catch (Exception e) {
+            log.error("callIfLockCanGet error lockKey {}", lockName);
+            throw new RuntimeException("任务执行异常");
+        } finally {
+            executor.shutdown();
+            unlock(lock);
+        }
+    }
+
+    /**
      * 分布式锁-异步
      *
      * @param lockName lockKey
@@ -91,6 +130,7 @@ public class DistributedLock {
         ExecutorService executor = Executors.newCachedThreadPool();
         try {
             if (lock.tryLock(0, timeout, unit)) {
+                log.info("callIfLockCanGet lock lockName : {} time is {}", lockName, System.currentTimeMillis());
                 return executor.submit(callable);
             } else {
                 return null;

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/HttpHelper.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.biz.dal.support;
 
-import com.yonge.cooleshow.biz.dal.config.IMProperties;
+import com.yonge.cooleshow.biz.dal.props.IMProperties;
 import io.rong.util.CodeUtil;
 import io.rong.util.GsonUtil;
 import org.apache.commons.lang3.StringUtils;

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetVo.java

@@ -29,6 +29,9 @@ public class MusicSheetVo extends MusicSheet {
     @ApiModelProperty("收藏 0:否,1:是")
     private YesOrNoEnum favorite;
 
+    @ApiModelProperty("是否购买/VIP(0:否,1:是) ")
+    private YesOrNoEnum play;
+
     public String getAddName() {
         return addName;
     }
@@ -68,4 +71,12 @@ public class MusicSheetVo extends MusicSheet {
     public void setFavorite(YesOrNoEnum favorite) {
         this.favorite = favorite;
     }
+
+    public YesOrNoEnum getPlay() {
+        return play;
+    }
+
+    public void setPlay(YesOrNoEnum play) {
+        this.play = play;
+    }
 }

+ 73 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFens.java

@@ -0,0 +1,73 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/12
+ */
+public class MyFens extends BaseEntity {
+    @ApiModelProperty("昵称")
+    private String userId;
+    @ApiModelProperty("昵称")
+    private String userName;
+    @ApiModelProperty(value = "真实姓名")
+    private String realName;
+    @ApiModelProperty("头像地址")
+    private String avatar;
+    @ApiModelProperty("声部")
+    private String subjectName;
+    @ApiModelProperty(value = "性别 0女 1男")
+    private GenderEnum gender;
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public GenderEnum getGender() {
+        return gender;
+    }
+
+    public void setGender(GenderEnum gender) {
+        this.gender = gender;
+    }
+}

+ 134 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFollow.java

@@ -0,0 +1,134 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.enums.GenderEnum;
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/12
+ */
+public class MyFollow extends BaseEntity {
+    @ApiModelProperty("昵称")
+    private String userId;
+    @ApiModelProperty("昵称")
+    private String userName;
+    @ApiModelProperty(value = "真实姓名")
+    private String realName;
+    @ApiModelProperty("头像地址")
+    private String avatar;
+    @ApiModelProperty(value = "性别 0女 1男")
+    private GenderEnum gender;
+
+    @ApiModelProperty("星级")
+    private Double starGrade;
+    @ApiModelProperty("粉丝数")
+    private Integer fansNum;
+    @ApiModelProperty("已上课时数")
+    private Integer expTime;
+    @ApiModelProperty("是否在直播")
+    private Integer liveFlag;
+
+    @ApiModelProperty("音乐人(0:否 1:是)")
+    private Integer musicianFlag;
+    @ApiModelProperty("老师入驻(0:否 1:是)")
+    private Integer entryFlag;
+    @ApiModelProperty("专业技能")
+    private String subjectName;
+
+    public Integer getEntryFlag() {
+        return entryFlag;
+    }
+
+    public void setEntryFlag(Integer entryFlag) {
+        this.entryFlag = entryFlag;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public GenderEnum getGender() {
+        return gender;
+    }
+
+    public void setGender(GenderEnum gender) {
+        this.gender = gender;
+    }
+
+    public Double getStarGrade() {
+        return starGrade;
+    }
+
+    public void setStarGrade(Double starGrade) {
+        this.starGrade = starGrade;
+    }
+
+    public Integer getFansNum() {
+        return fansNum;
+    }
+
+    public void setFansNum(Integer fansNum) {
+        this.fansNum = fansNum;
+    }
+
+    public Integer getExpTime() {
+        return expTime;
+    }
+
+    public void setExpTime(Integer expTime) {
+        this.expTime = expTime;
+    }
+
+    public Integer getLiveFlag() {
+        return liveFlag;
+    }
+
+    public void setLiveFlag(Integer liveFlag) {
+        this.liveFlag = liveFlag;
+    }
+
+    public Integer getMusicianFlag() {
+        return musicianFlag;
+    }
+
+    public void setMusicianFlag(Integer musicianFlag) {
+        this.musicianFlag = musicianFlag;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+}

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

@@ -26,9 +26,9 @@ public class StudentHomePage implements Serializable {
         private Long teacherId;
         @ApiModelProperty(value = "老师姓名")
         private String teacherName;
-        private String realName;
         @ApiModelProperty(value = "老师头像")
         private String avatar;
+        private String realName;
 
         @ApiModelProperty(value = "课程id")
         private Long courseId;

+ 24 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundBillVo.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundBill;
+import io.swagger.annotations.ApiModel;
+import org.apache.commons.beanutils.BeanUtils;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-05-09 17:14:30
+ */
+@ApiModel(value = "UserOrderRefundBillVo对象", description = "退款单表查询视图对象")
+public class UserOrderRefundBillVo extends UserOrderRefundBill {
+	private static final long serialVersionUID = 1L;
+    
+    public UserOrderRefundBillVo buildVo(UserOrderRefundBill userOrderRefundBill){
+        try {
+            BeanUtils.copyProperties(this, userOrderRefundBill);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return this;
+    }
+
+}

+ 0 - 24
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundPaymentVo.java

@@ -1,24 +0,0 @@
-package com.yonge.cooleshow.biz.dal.vo;
-
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment;
-import io.swagger.annotations.ApiModel;
-import org.apache.commons.beanutils.BeanUtils;
-
-/**
- * @Author: liweifan
- * @Data: 2022-05-09 17:14:30
- */
-@ApiModel(value = "UserOrderRefundPaymentVo对象", description = "退款单表查询视图对象")
-public class UserOrderRefundPaymentVo extends UserOrderRefundPayment{
-	private static final long serialVersionUID = 1L;
-    
-    public UserOrderRefundPaymentVo buildVo(UserOrderRefundPayment userOrderRefundPayment){
-        try {
-            BeanUtils.copyProperties(this,userOrderRefundPayment);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return this;
-    }
-
-}

+ 30 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderVo.java

@@ -2,8 +2,8 @@ package com.yonge.cooleshow.biz.dal.vo;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
-import com.yonge.cooleshow.biz.dal.enums.PayChannelEnum;
+import com.yonge.toolset.payment.base.enums.OpenEnum;
+import com.yonge.toolset.payment.base.enums.PayChannelEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -19,16 +19,20 @@ public class UserOrderVo extends UserOrder {
 	private static final long serialVersionUID = 1L;
 	@ApiModelProperty("订单详情 ")
 	private List<UserOrderDetailVo> orderDetailList;
-	@ApiModelProperty("交易流水号 ")
+	@ApiModelProperty("服务提供方: ORIGINAL 微信支付宝 ADAPAY 汇付")
+	private OpenEnum openType;
+	@ApiModelProperty("支付渠道:  alipay 支付宝  wx_lite 微信 ")
+	private PayChannelEnum payChannel;
+	@ApiModelProperty("三方交易流水号 ")
 	private String transNo;
-	@ApiModelProperty("汇付收取的服务费 ")
+	@ApiModelProperty("付款订单号 ")
+	private String paymentNo;
+	@ApiModelProperty("收取的服务费 ")
 	private BigDecimal feeAmt;
 	@ApiModelProperty("用户昵称")
 	private String username;
 	@ApiModelProperty(value = "手机号")
 	private String phone;
-	@ApiModelProperty("支付渠道:  alipay 支付宝  wx_lite 微信 ")
-	private PayChannelEnum payChannel;
 
 	public List<UserOrderDetailVo> getOrderDetailList() {
 		return orderDetailList;
@@ -38,6 +42,22 @@ public class UserOrderVo extends UserOrder {
 		this.orderDetailList = orderDetailList;
 	}
 
+	public OpenEnum getOpenType() {
+		return openType;
+	}
+
+	public void setOpenType(OpenEnum openType) {
+		this.openType = openType;
+	}
+
+	public PayChannelEnum getPayChannel() {
+		return payChannel;
+	}
+
+	public void setPayChannel(PayChannelEnum payChannel) {
+		this.payChannel = payChannel;
+	}
+
 	public String getTransNo() {
 		return transNo;
 	}
@@ -70,11 +90,11 @@ public class UserOrderVo extends UserOrder {
 		this.phone = phone;
 	}
 
-	public PayChannelEnum getPayChannel() {
-		return payChannel;
+	public String getPaymentNo() {
+		return paymentNo;
 	}
 
-	public void setPayChannel(PayChannelEnum payChannel) {
-		this.payChannel = payChannel;
+	public void setPaymentNo(String paymentNo) {
+		this.paymentNo = paymentNo;
 	}
 }

+ 24 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/WeekVo.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import java.io.Serializable;
+
+public class WeekVo implements Serializable {
+    private String startTime;
+    private String endTime;
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+}

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/OrderPayRes.java

@@ -1,6 +1,6 @@
 package com.yonge.cooleshow.biz.dal.vo.res;
 
-import com.yonge.cooleshow.biz.dal.enums.PayChannelEnum;
+import com.yonge.toolset.payment.base.enums.PayChannelEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -15,6 +15,7 @@ public class OrderPayRes {
     @ApiModelProperty("pay_info")
     private String pay_info;
 
+
     @ApiModelProperty(value = "支付渠道:  alipay 支付宝  wx_lite 微信 ")
     private PayChannelEnum payChannel;
 

+ 0 - 3
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml

@@ -154,9 +154,6 @@
         ,sch.id_ as studentHomeworkId
         ,sch.student_id_ as studentId
         ,cs.teacher_id_ as teacherId
-        ,cs.id_ as courseGroupId
-        ,ch.create_time_ as decorateTime
-        ,cs.type_ as courseType
         ,cs.type_ as courseType
         ,cs.class_date_ as classDate
         ,cs.start_time_ as startTime

+ 21 - 4
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -145,6 +145,7 @@
         <if test="param.subjectId != null">
             AND b.subject_id_ = #{param.subjectId}
         </if>
+        order by start_time_
     </select>
 
     <select id="queryTeacherPracticeCourse" resultType="com.yonge.cooleshow.biz.dal.vo.MyCourseVo">
@@ -192,6 +193,7 @@
         <if test="param.studentName !=null and param.studentName !=''">
             AND u.username_ LIKE CONCAT('%', #{param.studentName}, '%')
         </if>
+        ORDER BY cs.start_time_
     </select>
 
     <select id="countTeacherNoDecorateHomework" resultType="java.lang.Integer">
@@ -332,7 +334,7 @@
     <select id="queryCourseScheduleStudent" resultType="java.lang.String"
             parameterType="com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch">
         SELECT class_date_ FROM course_schedule
-        WHERE id_ IN (SELECT course_id_ FROM course_schedule_student_payment WHERE user_id_ = #{studentId} AND course_type_ = 'PRACTICE')
+        WHERE id_ IN (SELECT course_id_ FROM course_schedule_student_payment WHERE user_id_ = #{studentId})
         <![CDATA[ AND class_date_  >= #{startDate} ]]>
         <![CDATA[ AND class_date_  <= #{endDate} ]]>
     </select>
@@ -477,7 +479,7 @@
     </insert>
 
     <update id="updateLock" parameterType="java.util.List">
-        UPDATE course_schedule SET lock_ = 0 WHERE id_ IN
+        UPDATE course_schedule SET lock_ = 0,status_='ING' WHERE id_ IN
         <foreach collection="list" item="item" open="(" separator="," close=")">
             #{item}
         </foreach>
@@ -688,5 +690,20 @@
         <![CDATA[ AND class_date_ <= #{param.endDate} ]]>
         group by class_date_
     </select>
-
-</mapper>
+    <select id="selectPrice" resultType="java.math.BigDecimal">
+        SELECT p.subject_price_
+        FROM teacher_free_time t
+        LEFT JOIN teacher_subject_price p ON t.id_=p.teacher_free_time_id
+        WHERE t.teacher_id_=#{teacherId}
+        AND p.subject_id_=#{subjectId}
+        AND t.default_flag_=1
+    </select>
+    <select id="selectSchedule" resultType="com.yonge.cooleshow.biz.dal.entity.CourseSchedule"
+            parameterType="java.lang.Integer">
+        SELECT * FROM course_schedule
+        WHERE id_ IN (
+            SELECT course_id_ FROM course_schedule_student_payment
+            WHERE user_id_=(SELECT user_id_ FROM course_schedule_student_payment WHERE course_id_=#{courseId} AND course_type_='PRACTICE')
+        )
+    </select>
+</mapper>

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

@@ -154,8 +154,7 @@
         LEFT JOIN course_schedule s ON t.course_schedule_id_=s.id_
         LEFT JOIN course_group g ON t.course_group_id_=g.id_
         LEFT JOIN `subject` sb ON g.subject_id_=sb.id_
-        WHERE t.student_id_=#{studentId}
-        AND t.course_schedule_id_=#{courseScheduleId}
+        WHERE t.course_schedule_id_=#{courseScheduleId}
         AND t.course_group_id_=#{courseGroupId}
         AND t.course_group_type_=#{courseGroupType}
     </select>

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

@@ -98,7 +98,7 @@
 		<if test="timeType != null and timeType == 'YEAR'">
 			group by t.sys_day_ym_
 		</if>
-		order by t.sys_day_ desc
+		order by t.sys_day_
 	</select>
 
 	<select id="totalStudent" resultType="com.yonge.cooleshow.biz.dal.vo.res.HomeTotalStudent">
@@ -236,6 +236,6 @@
 		<if test="timeType != null and timeType == 'YEAR'">
 			group by t.sys_day_ym_
 		</if>
-		order by t.sys_day_ desc
+		order by t.sys_day_
 	</select>
 </mapper>

+ 10 - 4
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -146,11 +146,12 @@
             <if test="param.id != null">
                 <if test="param.type == 2">
                     and amr.album_id_ = #{param.id}
-                    order by amr.create_time_
+                    order by amr.create_time_ desc
                 </if>
                 <if test="param.type == 1">
                     and t.id_ not in(select amr2.music_sheet_id_  from album_music_relate amr2
                         where amr2.album_id_ = #{param.id})
+                    order by t.id_ desc
                 </if>
             </if>
         </where>
@@ -240,10 +241,17 @@
         where find_in_set(s.id_,t.music_subject_)  and s.del_flag_ = 0) as subjectNames
         <if test="param.studentId != null">
             ,if(mf.id_ is not null,1,0) as favorite
+            ,case when mspr.id_ is not null then 1
+                when t.charge_type_ = 'FREE' then 1
+                else 0 end as play
         </if>
         from music_sheet t
         left join sys_user su on t.create_by_ = su.id_
         <if test="param.studentId != null">
+            left join music_sheet_purchase_record mspr
+                on mspr.music_sheet_id_ = t.id_
+                and mspr.student_id_ = #{param.studentId}
+                and order_status_ = 'PAID'
             left join music_favorite mf on t.id_ = mf.music_sheet_id_ and mf.user_id_ = #{param.studentId}
         </if>
         <where>
@@ -337,9 +345,7 @@
         from music_sheet_purchase_record mspr
         left join music_sheet ms on mspr.music_sheet_id_ = ms.id_
         <where>
-            <if test="param.orderStatus != null">
-                and mspr.order_status_ = #{param.orderStatus}
-            </if>
+            mspr.order_status_ = 'PAID'
             <if test="param.idAndName != null and param.idAndName != ''">
                 and (ms.id_ like concat('%',#{param.idAndName} ,'%')
                     or ms.music_sheet_name_ like concat('%',#{param.idAndName},'%'))

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

@@ -114,4 +114,30 @@
             where c1.student_id_ = #{userId} and find_in_set(t.id_,c.lesson_subject_)
         )
     </select>
+
+    <select id="queryMyFollow" resultType="com.yonge.cooleshow.biz.dal.vo.MyFollow">
+        SELECT
+            s.teacher_id_ AS userId,
+            u.avatar_ AS avatar,
+            u.username_ AS userName,
+            u.real_name_ AS realName,
+            u.gender_ AS gender,
+
+            t.star_grade_ AS starGrade,
+            t.fans_num_ AS fansNum,
+            t.live_flag_ AS liveFlag,
+            t.exp_time_ AS expTime,
+
+            tr.musician_flag_ AS musicianFlag,
+            tr.entry_flag_ AS entryFlag,
+            (SELECT group_concat(name_) FROM `subject` WHERE find_in_set(id_,tr.subject_id_)) AS subjectName
+        FROM student_star s
+        LEFT JOIN sys_user u ON s.teacher_id_ = u.id_
+        LEFT JOIN teacher_total t ON s.teacher_id_ = t.user_id_
+        LEFT JOIN teacher tr ON s.teacher_id_ = tr.user_id_
+        WHERE s.student_id_ = #{studentId}
+    </select>
+    <delete id="unfollow" parameterType="java.util.Map">
+        DELETE FROM student_star WHERE teacher_id_=#{param.teacherId} AND student_id_=#{param.studentId}
+    </delete>
 </mapper>

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

@@ -55,7 +55,7 @@
             <if test="null != param.search and '' != param.search">
                 AND (
                     t.user_id_ LIKE CONCAT('%', #{param.search}, '%') or
-                    u.username_ LIKE CONCAT('%', #{param.search}, '%') or
+                    u.real_name_ LIKE CONCAT('%', #{param.search}, '%') or
                     u.phone_ LIKE CONCAT('%', #{param.search}, '%')
                 )
             </if>

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

@@ -50,7 +50,7 @@
             <if test="null != param.search and '' != param.search">
                 AND (
                 t.user_id_ LIKE CONCAT('%', #{param.search}, '%') or
-                u.username_ LIKE CONCAT('%', #{param.search}, '%') or
+                u.real_name_ LIKE CONCAT('%', #{param.search}, '%') or
                 u.phone_ LIKE CONCAT('%', #{param.search}, '%')
                 )
             </if>

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

@@ -153,4 +153,18 @@
             select 1 from video_lesson_group c where c.teacher_id_ = #{userId} and find_in_set(t.id_,c.lesson_subject_)
         )
     </select>
+
+    <select id="queryMyFans" resultType="com.yonge.cooleshow.biz.dal.vo.MyFens">
+        SELECT
+            s.student_id_ AS userId,
+            u.avatar_ AS avatar,
+            u.username_ AS userName,
+            u.real_name_ AS realName,
+            u.gender_ AS gender,
+            (SELECT group_concat(name_) FROM `subject` WHERE find_in_set(id_,sr.subject_id_)) AS subjectName
+        FROM student_star s
+        LEFT JOIN sys_user u ON s.student_id_ = u.id_
+        LEFT JOIN student sr ON s.student_id_ = sr.user_id_
+        WHERE s.teacher_id_ =#{teacherId}
+    </select>
 </mapper>

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

@@ -136,6 +136,6 @@
         <if test="timeType != null and timeType == 'YEAR'">
             group by t.sys_day_ym_
         </if>
-        order by t.sys_day_ymd_ desc
+        order by t.sys_day_ymd_
     </select>
 </mapper>

+ 15 - 5
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -45,7 +45,10 @@
     <select id="detailById" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
             <include refid="baseColumns"/>,
+            p.open_type_ as openType,
+            p.pay_channel_ as payChannel,
             p.trans_no_ as transNo,
+            p.payment_no_ as paymentNo,
             p.fee_amt_ as feeAmt,
             u.username_ as username,
             u.phone_ as phone
@@ -57,7 +60,10 @@
     <select id="detailByOrderNo" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
             <include refid="baseColumns"/>,
+            p.open_type_ as openType,
+            p.pay_channel_ as payChannel,
             p.trans_no_ as transNo,
+            p.payment_no_ as paymentNo,
             p.fee_amt_ as feeAmt,
             u.username_ as username,
             u.phone_ as phone
@@ -73,8 +79,10 @@
     <select id="detailApp" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
             <include refid="baseColumns"/>,
+            p.open_type_ as openType,
+            p.pay_channel_ as payChannel,
             p.trans_no_ as transNo,
-            p.pay_channel_ as payChannel
+            p.payment_no_ as paymentNo
         FROM user_order t
         left join user_order_payment p on t.order_no_ = p.order_no_ and (p.status_ = 'pending' or p.status_ = 'succeeded')
         where t.user_id_ = #{param.userId}
@@ -86,13 +94,13 @@
         </if>
     </select>
 
-
-
-
     <sql id="selectSql">
         SELECT
             <include refid="baseColumns"/>,
+            p.open_type_ as openType,
+            p.pay_channel_ as payChannel,
             p.trans_no_ as transNo,
+            p.payment_no_ as paymentNo,
             p.fee_amt_ as feeAmt,
             u.username_ as username,
             u.phone_ as phone
@@ -165,8 +173,10 @@
     <select id="getPendingOrder" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
             <include refid="baseColumns"/>,
+            p.open_type_ as openType,
+            p.pay_channel_ as payChannel,
             p.trans_no_ as transNo,
-            p.pay_channel_ as payChannel
+            p.payment_no_ as paymentNo
         FROM user_order t
         left join user_order_payment p on t.order_no_ = p.order_no_ and (p.status_ = 'pending' or p.status_ = 'succeeded')
         where t.status_ in ('WAIT_PAY','PAYING')

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

@@ -4,7 +4,7 @@
     <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserOrderPayment">
         <result column="id_" property="id" />
         <result column="order_no_" property="orderNo" />
-        <result column="adapay_no_" property="adapayNo" />
+        <result column="payment_no_" property="paymentNo" />
         <result column="trans_no_" property="transNo" />
         <result column="pay_channel_" property="payChannel" />
         <result column="pay_amt_" property="payAmt" />
@@ -24,7 +24,7 @@
     <sql id="baseColumns">
          t.id_ as id
         , t.order_no_ as orderNo
-        , t.adapay_no_ as adapayNo
+        , t.payment_no_ as paymentNo
         , t.trans_no_ as transNo
         , t.pay_channel_ as payChannel
         , t.pay_amt_ as payAmt

+ 6 - 6
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundPaymentMapper.xml → cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundBillMapper.xml

@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
-<mapper namespace="com.yonge.cooleshow.biz.dal.dao.UserOrderRefundPaymentDao">
-    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment">
+<mapper namespace="com.yonge.cooleshow.biz.dal.dao.UserOrderRefundBillDao">
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserOrderRefundBill">
         <result column="id_" property="id" />
         <result column="refund_id_" property="refundId" />
-        <result column="adapay_no_" property="adapayNo" />
+        <result column="bill_no_" property="billNo" />
         <result column="trans_no_" property="transNo" />
         <result column="refund_amt_" property="refundAmt" />
         <result column="back_refund_amt_" property="backRefundAmt" />
@@ -19,7 +19,7 @@
     <sql id="baseColumns">
          t.id_ as id
         , t.refund_id_ as refundId
-        , t.adapay_no_ as adapayNo
+        , t.bill_no_ as billNo
         , t.trans_no_ as transNo
         , t.refund_amt_ as refundAmt
         , t.back_refund_amt_ as backRefundAmt
@@ -30,14 +30,14 @@
         , t.update_time_ as updateTime
         </sql>
 
-    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo">
+    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderRefundBillVo">
         SELECT
         <include refid="baseColumns"/>
         FROM user_order_refund_payment t
         where t.id_ = #{id}
     </select>
 
-    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo">
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderRefundBillVo">
         SELECT
         <include refid="baseColumns" />
         FROM user_order_refund_payment t

+ 2 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundDao.xml → cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundMapper.xml

@@ -5,6 +5,7 @@
         <result column="id_" property="id" />
         <result column="user_id_" property="userId" />
         <result column="order_id_" property="orderId" />
+        <result column="order_no_" property="orderNo" />
         <result column="oredr_detil_ids_" property="oredrDetilIds" />
         <result column="status_" property="status" />
         <result column="apply_amount_" property="applyAmount" />
@@ -21,6 +22,7 @@
          t.id_ as id
         , t.user_id_ as userId
         , t.order_id_ as orderId
+        , t.order_no_ as orderNo
         , t.oredr_detil_ids_ as oredrDetilIds
         , t.status_ as status
         , t.apply_amount_ as applyAmount

+ 10 - 8
cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupDetailMapper.xml

@@ -64,14 +64,16 @@
 	</select>
 	<select id="selectPageStudent" resultType="com.yonge.cooleshow.biz.dal.vo.VideoLessonPurchaseStudent">
 		SELECT
-		id_ AS userId,
-		real_name_ AS realName,
-		<include refid="userDetail"/>
-		FROM sys_user
-		WHERE id_ IN
-		(SELECT student_id_
-		FROM video_lesson_purchase_record
-		WHERE video_lesson_group_id_ = #{param.videoLessonGroupId})
+			u.id_ AS userId,
+			u.real_name_ AS realName,
+			u.username_ AS username,
+			u.avatar_ AS avatar,
+			u.gender_ AS gender,
+			o.pay_time_ AS createTime
+		FROM video_lesson_purchase_record r
+		LEFT JOIN sys_user u ON r.student_id_=u.id_
+		LEFT JOIN user_order o ON r.order_no_=o.order_no_
+		WHERE r.video_lesson_group_id_ = #{param.videoLessonGroupId}
 	</select>
 	<select id="selectPageAuth" resultType="com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupDetailVo">
 			SELECT

+ 3 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml

@@ -110,6 +110,9 @@
 			<if test="param.teacherId !=null">
 				AND g.teacher_id_ = #{param.teacherId}
 			</if>
+			<if	test="param.lessonSubject != null">
+				AND g.lesson_subject_ = #{param.lessonSubject}
+			</if>
 		</where>
 	</select>
 	<select id="selectStudentPage" resultType="com.yonge.cooleshow.biz.dal.vo.VideoLessonStudentDetailVo">

+ 6 - 2
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/StudentApplication.java

@@ -16,8 +16,12 @@ import org.springframework.context.annotation.Configuration;
 @SpringBootApplication
 @EnableDiscoveryClient
 @EnableFeignClients("com.yonge.cooleshow")
-@MapperScan("com.yonge.cooleshow.biz.dal.dao")
-@ComponentScan(basePackages = { "com.yonge.cooleshow.student", "com.yonge.cooleshow.auth", "com.yonge.cooleshow.biz", "com.yonge.cooleshow.common", "com.yonge.cooleshow.common.security", "com.yonge.toolset.log", "com.yonge.toolset.thirdparty" })
+@MapperScan(basePackages = {"com.yonge.cooleshow.biz.dal.dao", "com.yonge.toolset.payment.core.dao"})
+@ComponentScan(basePackages = {
+        "com.yonge.cooleshow.student", "com.yonge.cooleshow.auth", "com.yonge.cooleshow.biz",
+        "com.yonge.cooleshow.common", "com.yonge.cooleshow.common.security",
+        "com.yonge.toolset.log", "com.yonge.toolset.thirdparty", "com.yonge.toolset.payment"
+})
 @Configuration
 @EnableSwagger2Doc
 public class StudentApplication {

+ 47 - 40
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/PaymentController.java

@@ -1,15 +1,22 @@
 package com.yonge.cooleshow.student.controller;
 
-import com.alipay.api.response.AlipaySystemOauthTokenResponse;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.huifu.adapay.core.AdapayCore;
 import com.huifu.adapay.core.util.AdapaySign;
 import com.huifu.adapay.core.util.StringUtil;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.sdk.PaymentSdk;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
+import com.yonge.cooleshow.biz.dal.service.UserOrderPaymentService;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.result.BaseResult;
+import com.yonge.toolset.payment.base.enums.OpenEnum;
+import com.yonge.toolset.payment.base.model.OpenAuth;
+import com.yonge.toolset.payment.base.model.Payment;
+import com.yonge.toolset.payment.core.props.PaymentProperties;
+import com.yonge.toolset.payment.core.service.PaymentClient;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
@@ -19,7 +26,6 @@ import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -32,63 +38,64 @@ import java.util.Map;
 public class PaymentController extends BaseController {
     private final static Logger log = LoggerFactory.getLogger(PaymentController.class);
     @Autowired
-    private PaymentSdk paymentSdk;
+    private UserOrderPaymentService paymentService;
     @Autowired
     private UserOrderService userOrderService;
     @Autowired
     private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private PaymentClient paymentClient;
+    @Autowired
+    private PaymentProperties paymentProperties;
 
     @ApiOperation(value = "查询付款单")
     @GetMapping("/queryPayment")
-    public HttpResponseResult<Map<String, Object>> queryPayment(String paymentId) throws Exception {
-        return HttpResponseResult.succeed(paymentSdk.queryPayment(paymentId));
-    }
-
-    @ApiOperation(value = "微信支付获取openid")
-    @GetMapping("/getOpenId")
-    public HttpResponseResult<Map<String, String>> getOpenId(String js_code) {
-        SysUser user = sysUserFeignService.queryUserInfo();
-        if (user == null || null == user.getId()) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
+    public HttpResponseResult<Payment> queryPayment(String paymentNo) throws Exception {
+        UserOrderPayment userOrderPayment = paymentService.getOne(Wrappers.<UserOrderPayment>lambdaQuery()
+                .eq(UserOrderPayment::getPaymentNo, paymentNo)
+        );
+        if (null == userOrderPayment) {
+            return HttpResponseResult.succeed();
         }
-        HttpResponseResult<Map<String, String>> responseResult = paymentSdk.getOpenId(js_code);
-        /*if (responseResult.getStatus()) {
-            Map<String, String> data = responseResult.getData();
-            //绑定到用户表
-            user.setWxOpenid(data.get("openid"));
-            log.info("绑定用户openid,param is {}", JSONObject.toJSONString(user));
-            sysUserFeignService.bindOpenId(user);
-        }*/
-        return responseResult;
+        Payment param = new Payment(userOrderPayment.getOpenType(), userOrderPayment.getPayChannel());
+        param.setId(userOrderPayment.getTransNo());
+        param.setPaymentNo(userOrderPayment.getPaymentNo());
+        BaseResult<Payment> paymentBaseResult = paymentClient.queryPayment(param);
+        return HttpResponseResult.status(paymentBaseResult);
     }
 
-    @ApiOperation(value = "支付宝支付获取access_token(授权令牌)和user_id(用户支付宝 ID)")
-    @GetMapping("/getAliToken")
-    public HttpResponseResult<AlipaySystemOauthTokenResponse> getAliToken(String authorization_code) {
+    @ApiOperation(value = "通过用户给的授权码获取三方支付授权信息")
+    @GetMapping("/getOpenId")
+    public HttpResponseResult<Map<String, Object>> getOpenId(OpenAuth openAuth) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        HttpResponseResult<AlipaySystemOauthTokenResponse> aliToken = paymentSdk.getAliToken(authorization_code);
-        /*if (responseResult.getStatus()) {
-            Map<String, String> data = responseResult.getData();
-            //绑定到用户表
-            user.setWxOpenid(data.get("openid"));
-            log.info("绑定用户openid,param is {}", JSONObject.toJSONString(user));
-            sysUserFeignService.bindOpenId(user);
-        }*/
-        return aliToken;
+        OpenEnum openType = OpenEnum.valueOf(paymentProperties.getOpenType());
+        openAuth.setOpenType(openType);
+        BaseResult<Map<String, Object>> res = paymentClient.getOpenAuthMsg(openAuth);
+        return HttpResponseResult.status(res);
     }
 
     /***
-     * 汇付回调
-     * 问题:1、成功失败需要回执什么信息 2、回调url地址是否需要加入白名单
+     * 支付回调
      * @author liweifan
      * @param: request
      * @updateTime 2022/3/11 18:35
      */
-    @PostMapping("/callback")
-    public void callback(HttpServletRequest request) {
+    @PostMapping("/callback/{openType}/{payChannel}/{payMethod}")
+    public void callback(
+            @PathVariable("openType") String openType,
+            @PathVariable("payChannel") String payChannel,
+            @PathVariable("payMethod") String payMethod,
+            HttpServletRequest request
+    ) {
+        if (OpenEnum.ADAPAY.getCode().equals(openType)) {
+            adapayCallbackHandle(request);
+        }
+    }
+
+    private void adapayCallbackHandle(HttpServletRequest request) {
         try {
             //验签传参data
             String data = request.getParameter("data");
@@ -107,7 +114,7 @@ public class PaymentController extends BaseController {
             boolean checkSign = AdapaySign.verifySign(data, sign, publicKey);
             if (checkSign) {
                 log.info("验签成功");
-                userOrderService.orderCallback(data, type);
+                userOrderService.adapayCallback(data, type);
             }
         } catch (Exception e) {
             e.printStackTrace();

+ 35 - 3
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java

@@ -1,15 +1,19 @@
 package com.yonge.cooleshow.student.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.entity.Subject;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.MyFens;
+import com.yonge.cooleshow.biz.dal.vo.MyFollow;
 import com.yonge.cooleshow.biz.dal.vo.StudentHomeVo;
 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.base.page.QueryInfo;
 import com.yonge.toolset.utils.string.StringUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
@@ -18,6 +22,7 @@ import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 
 import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/student")
@@ -71,4 +76,31 @@ public class StudentController extends BaseController {
         }
         return succeed(studentService.querySubjectItem(user.getId()));
     }
+
+    @ApiOperation(value = "我的关注")
+    @PostMapping(value = "/queryMyFollow")
+    public HttpResponseResult<PageInfo<MyFollow>> queryMyFollow(@RequestBody QueryInfo query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        IPage<MyFollow> pages = studentService.queryMyFollow(PageUtil.getPage(query), sysUser.getId());
+        return succeed(PageUtil.pageInfo(pages));
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "teacherId", dataType = "Long", value = "老师id"),
+    })
+    @ApiOperation(value = "取消关注")
+    @PostMapping(value = "/unfollow")
+    public HttpResponseResult<Object> unfollow(@RequestBody Map<String, Long> map) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || sysUser.getId() == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        map.put("studentId", sysUser.getId());
+        studentService.unfollow(map);
+        return succeed();
+    }
 }

+ 6 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentCourseScheduleController.java

@@ -50,6 +50,12 @@ public class StudentCourseScheduleController extends BaseController {
     @Autowired
     private AppVersionInfoService appVersionInfoService;
 
+    @ApiOperation("学生端-查询房间配置")
+    @GetMapping("/selectRoomConfig")
+    public HttpResponseResult<Object> selectRoomConfig() {
+        return succeed(courseScheduleService.selectRoomConfig());
+    }
+
     @ApiOperation("学生端-我的-我的课程-陪练课")
     @PostMapping("/queryStudentPracticeCourse")
     public HttpResponseResult<PageInfo<MyCourseVo>> queryStudentPracticeCourse(@RequestBody MyCourseSearch search) {

Some files were not shown because too many files changed in this diff