Explorar o código

Merge branch 'master' into mall_pay

liujunchi %!s(int64=3) %!d(string=hai) anos
pai
achega
f8a0aa8816
Modificáronse 100 ficheiros con 2365 adicións e 1591 borrados
  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. 4 8
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/AdminApplication.java
  10. 4 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseHomeworkController.java
  11. 3 2
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HomeController.java
  12. 10 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java
  13. 12 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  14. 7 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicTagController.java
  15. 4 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/SubjectController.java
  16. 64 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundController.java
  17. 0 86
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundsController.java
  18. 3 8
      cooleshow-user/user-biz/pom.xml
  19. 0 48
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/config/HuifuConfiguration.java
  20. 9 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  21. 36 16
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentDao.java
  22. 24 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java
  23. 30 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundBillDao.java
  24. 38 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundDao.java
  25. 0 30
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundsDao.java
  26. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserWithdrawalCallbackDao.java
  27. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundBillDto.java
  28. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundDto.java
  29. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/AuthOperaReq.java
  30. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderPayReq.java
  31. 29 15
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderRefundReq.java
  32. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TotalReq.java
  33. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserOrderRefundPaymentSearch.java
  34. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserOrderRefundSearch.java
  35. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/VideoLessonGroupSearch.java
  36. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Subject.java
  37. 43 31
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderPayment.java
  38. 71 57
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefund.java
  39. 146 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefundBill.java
  40. 390 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserWithdrawalCallback.java
  41. 11 21
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  42. 0 152
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/props/HuifuProperties.java
  43. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/props/IMProperties.java
  44. 0 256
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/PaymentSdk.java
  45. 0 73
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/req/PaymentConfirmParam.java
  46. 0 168
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/req/PaymentReq.java
  47. 7 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java
  48. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  49. 2 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/HomeService.java
  50. 23 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentService.java
  51. 9 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java
  52. 4 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderPaymentService.java
  53. 29 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundPaymentService.java
  54. 50 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundService.java
  55. 0 38
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundsService.java
  56. 1 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java
  57. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalCallbackService.java
  58. 0 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalService.java
  59. 7 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  60. 15 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java
  61. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseRepliedServiceImpl.java
  62. 124 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  63. 13 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/HomeServiceImpl.java
  64. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupMemberServiceImpl.java
  65. 31 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  66. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  67. 5 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthEntryRecordServiceImpl.java
  68. 3 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAuthMusicianRecordServiceImpl.java
  69. 45 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherFreeTimeServiceImpl.java
  70. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  71. 6 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserAccountServiceImpl.java
  72. 88 73
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java
  73. 29 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundPaymentServiceImpl.java
  74. 214 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundServiceImpl.java
  75. 0 88
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundsServiceImpl.java
  76. 34 74
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  77. 18 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalCallbackServiceImpl.java
  78. 4 15
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserWithdrawalServiceImpl.java
  79. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonEvaluateServiceImpl.java
  80. 36 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupServiceImpl.java
  81. 8 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonPurchaseRecordServiceImpl.java
  82. 8 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java
  83. 40 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/DistributedLock.java
  84. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/support/HttpHelper.java
  85. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetVo.java
  86. 63 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFens.java
  87. 124 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MyFollow.java
  88. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomePage.java
  89. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherLiveCourseInfoVo.java
  90. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundBillVo.java
  91. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundVo.java
  92. 0 14
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundsVo.java
  93. 23 13
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderVo.java
  94. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/WeekVo.java
  95. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/OrderPayRes.java
  96. 0 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/RefundCreateRes.java
  97. 0 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml
  98. 22 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  99. 1 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRepliedMapper.xml
  100. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/HomeMapper.xml

+ 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);
     }
 }

+ 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();

+ 3 - 2
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HomeController.java

@@ -51,13 +51,14 @@ public class HomeController extends BaseController {
 
     @ApiOperation(value = "首页曲目点播数据")
     @PostMapping("/musicSheet")
+    @PreAuthorize("@pcs.hasPermissions('home/musicSheet')")
     public HttpResponseResult<HomeMusicSheetVo> musicSheet() {
         return succeed(musicSheetService.getMusicSheetHome());
     }
 
     @ApiImplicitParams({
-            @ApiImplicitParam(name = "year", dataType = "Integer", value = "年"),
-            @ApiImplicitParam(name = "month", dataType = "Integer", value = "月"),
+            @ApiImplicitParam(name = "dateTime", dataType = "String", value = "如果查询年数据 yyyy   如果查询月数据 yyyy-mm"),
+            @ApiImplicitParam(name = "timeType", dataType = "String", value = " 时间类型 MONTH月度  YEAR年度"),
             @ApiImplicitParam(name = "type", dataType = "String", value = "类型  PRACTICE陪练课  LIVE直播课"),
     })
     @ApiOperation(value = "获取首页课程数据")

+ 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) {

+ 12 - 1
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,12 +146,13 @@ 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) {
             return failed("用户信息获取失败");
         }
-
+        query.setAuditStatus(AuthStatusEnum.PASS);
         IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(musicSheetVoIPage));
     }
@@ -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));

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

@@ -0,0 +1,64 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+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;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import com.yonge.cooleshow.biz.dal.service.UserOrderRefundService;
+
+@RestController
+@RequestMapping("/userOrderRefunds")
+@Api(value = "用户退款表", tags = "用户退款表")
+public class UserOrderRefundController extends BaseController {
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private UserOrderRefundService userOrderRefundService;
+
+	/**
+     * 查询单条
+     */
+    @GetMapping("/detail/{id}")
+    @ApiOperation(value = "详情", notes = "传入id")
+	@PreAuthorize("@pcs.hasPermissions('userOrderRefunds/detail')")
+	public HttpResponseResult<UserOrderRefundVo> detail(@PathVariable("id") Long id) {
+    	return succeed(userOrderRefundService.detail(id));
+	}
+    
+    /**
+     * 查询分页
+     */
+    @PostMapping("/page")
+    @ApiOperation(value = "查询分页", notes = "传入orderRefundsSearch")
+	@PreAuthorize("@pcs.hasPermissions('userOrderRefunds/page')")
+	public HttpResponseResult<PageInfo<UserOrderRefundVo>> page(@RequestBody UserOrderRefundSearch query) {
+		IPage<UserOrderRefundVo> pages = userOrderRefundService.selectPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(pages));
+	}
+
+	@PostMapping("/doAuth")
+	@ApiOperation(value = "审核", notes = "传入authOperaReq")
+	@PreAuthorize("@pcs.hasPermissions('userOrderRefunds/doAuth')")
+	public HttpResponseResult<RefundBill> doAuth(@Valid @RequestBody AuthOperaReq authOperaReq) throws Exception {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (user == null || null == user.getId()) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		return userOrderRefundService.doAuth(authOperaReq, user);
+	}
+}

+ 0 - 86
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundsController.java

@@ -1,86 +0,0 @@
-package com.yonge.cooleshow.admin.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
-import com.yonge.cooleshow.common.controller.BaseController;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.utils.string.StringUtil;
-import io.swagger.annotations.*;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-
-import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderRefundsSearch;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
-import com.yonge.cooleshow.biz.dal.service.UserOrderRefundsService;
-
-@RestController
-@RequestMapping("/UserOrderRefunds")
-@Api(value = "用户退款表", tags = "用户退款表")
-public class UserOrderRefundsController extends BaseController {
-
-    @Autowired
-    private UserOrderRefundsService userOrderRefundsService;
-
-	/**
-     * 查询单条
-     */
-    @GetMapping("/detail/{id}")
-    @ApiOperation(value = "详情", notes = "传入id")
-    public HttpResponseResult<UserOrderRefundsVo> detail(@PathVariable("id") Long id) {
-    	return succeed(userOrderRefundsService.detail(id));
-	}
-    
-    /**
-     * 查询分页
-     */
-    @PostMapping("/page")
-    @ApiOperation(value = "查询分页", notes = "传入orderRefundsSearch")
-    public HttpResponseResult<PageInfo<UserOrderRefundsVo>> page(@RequestBody OrderRefundsSearch query) {
-		IPage<UserOrderRefundsVo> pages = userOrderRefundsService.selectPage(PageUtil.getPage(query), query);
-        return succeed(PageUtil.pageInfo(pages));
-	}
-    
-    /**
-	 * 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperation(value = "新增", notes = "传入orderRefunds")
-	public HttpResponseResult save(@Valid @RequestBody UserOrderRefunds userOrderRefunds) {
-    	return status(userOrderRefundsService.save(userOrderRefunds));
-	}
-    
-    /**
-	 * 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperation(value = "修改", notes = "传入orderRefunds")
-	public HttpResponseResult update(@Valid @RequestBody UserOrderRefunds userOrderRefunds) {
-        return status(userOrderRefundsService.updateById(userOrderRefunds));
-	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入orderRefunds")
-	public HttpResponseResult submit(@Valid @RequestBody UserOrderRefunds userOrderRefunds) {
-        return status(userOrderRefundsService.saveOrUpdate(userOrderRefunds));
-    }
-
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(userOrderRefundsService.removeByIds(StringUtil.toLongList(ids)));
-	}
-}

+ 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);
 }

+ 30 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundBillDao.java

@@ -0,0 +1,30 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+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.UserOrderRefundBill;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundBillVo;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundPaymentSearch;
+
+
+public interface UserOrderRefundBillDao extends BaseMapper<UserOrderRefundBill>{
+	/**
+	 * 查询详情
+     * @author liweifan
+     * @date 2022-05-09 17:14:30
+     * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo
+	 */
+	UserOrderRefundBillVo detail(@Param("id") Long id);
+
+	/**
+	 * 分页查询
+     * @author liweifan
+     * @date 2022-05-09 17:14:30
+     * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo
+	 */
+	List<UserOrderRefundBillVo> selectPage(@Param("page") IPage page, @Param("param") UserOrderRefundPaymentSearch userOrderRefundPayment);
+	
+}

+ 38 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundDao.java

@@ -0,0 +1,38 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
+import org.apache.ibatis.annotations.Param;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
+
+
+public interface UserOrderRefundDao extends BaseMapper<UserOrderRefund>{
+	/**
+	 * 查询详情
+     * @author liweifan
+     * @date 2022-05-09 17:14:30
+     * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo
+	 */
+	UserOrderRefundVo detail(@Param("id") Long id);
+
+	/**
+	 * 分页查询
+     * @author liweifan
+     * @date 2022-05-09 17:14:30
+     * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo
+	 */
+	List<UserOrderRefundVo> selectPage(@Param("page") IPage page, @Param("param") UserOrderRefundSearch userOrderRefund);
+	/***
+	 * 查询订单中,未退费的商品
+	 * @author liweifan
+	 * @param: bizId
+	 * @updateTime 2022/5/9 18:05
+	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.UserOrderDetail>
+	 */
+    List<UserOrderDetail> selectOrderRefundDetils(@Param("orderId") Long orderId);
+}

+ 0 - 30
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundsDao.java

@@ -1,30 +0,0 @@
-package com.yonge.cooleshow.biz.dal.dao;
-
-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.UserOrderRefunds;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderRefundsSearch;
-
-
-public interface UserOrderRefundsDao extends BaseMapper<UserOrderRefunds>{
-	/**
-	 * 查询详情
-     * @author liweifan
-     * @date 2022-03-30 13:53:51
-     * @return: com.yonge.cooleshow.biz.dal.vo.OrderRefundsVo
-	 */
-	UserOrderRefundsVo detail(@Param("id") Long id);
-
-	/**
-	 * 分页查询
-     * @author liweifan
-     * @date 2022-03-30 13:53:51
-     * @return: com.yonge.cooleshow.biz.dal.vo.OrderRefundsVo
-	 */
-	List<UserOrderRefundsVo> selectPage(@Param("page") IPage page, @Param("param") OrderRefundsSearch orderRefunds);
-	
-}

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

@@ -0,0 +1,7 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
+
+public interface UserWithdrawalCallbackDao extends BaseMapper<UserWithdrawalCallback> {
+}

+ 24 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundBillDto.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+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 = "UserOrderRefundPaymentDto对象", description = "退款单表数据传输对象")
+public class UserOrderRefundBillDto extends UserOrderRefundBill {
+	private static final long serialVersionUID = 1L;
+    
+    public UserOrderRefundBillDto buildDto(UserOrderRefundBill userOrderRefundBill){
+        try {
+            BeanUtils.copyProperties(this, userOrderRefundBill);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return this;
+    }
+
+}

+ 24 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundDto.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
+import io.swagger.annotations.ApiModel;
+import org.apache.commons.beanutils.BeanUtils;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-05-09 17:14:30
+ */
+@ApiModel(value = "UserOrderRefundDto对象", description = "退款申请表数据传输对象")
+public class UserOrderRefundDto extends UserOrderRefund{
+	private static final long serialVersionUID = 1L;
+    
+    public UserOrderRefundDto buildDto(UserOrderRefund userOrderRefund){
+        try {
+            BeanUtils.copyProperties(this,userOrderRefund);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return this;
+    }
+
+}

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

@@ -14,8 +14,8 @@ import javax.validation.constraints.NotNull;
  */
 @ApiModel(value = "AuthOperaReq", description = "审核操作对象")
 public class AuthOperaReq {
-    @NotNull(message = "审核单id不能为空")
-    @ApiModelProperty(value = "审核单id", required = true)
+    @NotNull(message = "id不能为空")
+    @ApiModelProperty(value = "id", required = true)
     private Long id;
     @NotNull(message = "请说明审核是否通过")
     @ApiModelProperty(value = "审核是否通过", required = true)

+ 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;
 

+ 29 - 15
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderRefundReq.java

@@ -1,9 +1,11 @@
 package com.yonge.cooleshow.biz.dal.dto.req;
 
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
-import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * 退款请求
@@ -13,31 +15,35 @@ import javax.validation.constraints.NotBlank;
  */
 @ApiModel(value = "OrderRefundReq对象", description = "退款请求")
 public class OrderRefundReq {
-    @NotBlank(message = "订单号不能为空")
-    @ApiModelProperty(value = "订单号 ", required = true)
-    private String orderNo;
-    @NotBlank(message = "详情id不能为空")
-    @ApiModelProperty(value = "订单详情id ", required = true)
-    private Long orderDetilId;
+
+    @ApiModelProperty("订单ID ")
+    @NotNull(message = "订单id不能为空")
+    private Long orderId;
+
+    @ApiModelProperty("订单详情ids ")
+    private List<Long> oredrDetilIds;
+
     @ApiModelProperty(value = "退款说明 ")
     private String reason;
 
     private Long userId;
 
-    public String getOrderNo() {
-        return orderNo;
+    private UserOrderDetailVo oredrDetil;
+
+    public Long getOrderId() {
+        return orderId;
     }
 
-    public void setOrderNo(String orderNo) {
-        this.orderNo = orderNo;
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
     }
 
-    public Long getOrderDetilId() {
-        return orderDetilId;
+    public List<Long> getOredrDetilIds() {
+        return oredrDetilIds;
     }
 
-    public void setOrderDetilId(Long orderDetilId) {
-        this.orderDetilId = orderDetilId;
+    public void setOredrDetilIds(List<Long> oredrDetilIds) {
+        this.oredrDetilIds = oredrDetilIds;
     }
 
     public String getReason() {
@@ -55,4 +61,12 @@ public class OrderRefundReq {
     public void setUserId(Long userId) {
         this.userId = userId;
     }
+
+    public UserOrderDetailVo getOredrDetil() {
+        return oredrDetil;
+    }
+
+    public void setOredrDetil(UserOrderDetailVo oredrDetil) {
+        this.oredrDetil = oredrDetil;
+    }
 }

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TotalReq.java

@@ -109,7 +109,7 @@ public class TotalReq {
                 } else {
                     paramDate = LocalDate.of(Integer.parseInt(dateTime), 1, 1);
                 }
-                lastDay = LocalDateTime.of(paramDate.with(TemporalAdjusters.firstDayOfYear()), LocalTime.MAX);
+                lastDay = LocalDateTime.of(paramDate.with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
             } else {
                 LocalDate paramDate;
                 if (StringUtil.isEmpty(dateTime)) {
@@ -118,7 +118,7 @@ public class TotalReq {
                     String[] classDateSp = dateTime.split("-");
                     paramDate = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
                 }
-                lastDay = LocalDateTime.of(paramDate.with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MAX);
+                lastDay = LocalDateTime.of(paramDate.with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
             }
             return lastDay;
         }

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

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-05-09 17:14:30
+ */
+@ApiModel(value = "UserOrderRefundPaymentSearch对象", description = "退款单表查询对象")
+public class UserOrderRefundPaymentSearch extends QueryInfo {
+	private static final long serialVersionUID = 1L;
+
+}

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderRefundsSearch.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserOrderRefundSearch.java

@@ -5,10 +5,10 @@ import io.swagger.annotations.ApiModel;
 
 /**
  * @Author: liweifan
- * @Data: 2022-03-30 13:53:51
+ * @Data: 2022-05-09 17:14:30
  */
-@ApiModel(value = "OrderRefundsSearch对象", description = "用户退款表查询对象")
-public class OrderRefundsSearch extends QueryInfo{
+@ApiModel(value = "UserOrderRefundSearch对象", description = "退款申请表查询对象")
+public class UserOrderRefundSearch extends QueryInfo {
 	private static final long serialVersionUID = 1L;
 
 }

+ 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;
     }

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.entity;
 
 import io.swagger.annotations.ApiModelProperty;
 
+import java.io.Serializable;
 import java.util.List;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -9,7 +10,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
 /**
  * 对应数据库表(subject):
  */
-public class Subject {
+public class Subject implements Serializable {
 
 	/**  */
 	private Long id;

+ 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;
-    }
 }

+ 71 - 57
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefunds.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefund.java

@@ -10,83 +10,90 @@ import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
 import java.util.Date;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
+
 import java.math.BigDecimal;
 
 /**
- * 用户退款表
+ * 退款申请
  */
-@TableName("user_order_refunds")
-@ApiModel(value = "UserOrderRefunds对象", description = "用户退款表")
-public class UserOrderRefunds implements Serializable {
-	private static final long serialVersionUID = 1L;
+@TableName("user_order_refund")
+@ApiModel(value = "UserOrderRefund对象", description = "退款申请表")
+public class UserOrderRefund implements Serializable {
+    private static final long serialVersionUID = 1L;
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
-	@TableField(value = "user_id_")
+    @ApiModelProperty("用户id ")
+    @TableField(value = "user_id_")
     private Long userId;
-    @ApiModelProperty("订单号 ")
-	@TableField(value = "order_no_")
+    @ApiModelProperty("订单id")
+    @TableField(value = "order_id_")
+    private Long orderId;
+    @ApiModelProperty("订单号")
+    @TableField(value = "order_no_")
     private String orderNo;
-    @ApiModelProperty("订单详情id ")
-    @TableField(value = "order_detil_id_")
-    private Long orderDetilId;
-    @ApiModelProperty("状态 DOING、审核中 PASS、通过 UNPASS、不通过")
-	@TableField(value = "status_")
+    @ApiModelProperty("订单详情id(多个详情,分割) ")
+    @TableField(value = "oredr_detil_ids_")
+    private String oredrDetilIds;
+    @ApiModelProperty("状态 DOING、审核中 PASS、通过 UNPASS、不通过 ")
+    @TableField(value = "status_")
     private AuthStatusEnum status;
     @ApiModelProperty("申请退费金额 ")
-	@TableField(value = "apply_amount_")
+    @TableField(value = "apply_amount_")
     private BigDecimal applyAmount;
     @ApiModelProperty("实际退费金额 ")
-	@TableField(value = "actual_amount_")
+    @TableField(value = "actual_amount_")
     private BigDecimal actualAmount;
     @ApiModelProperty("退款描述 ")
-	@TableField(value = "reason_")
+    @TableField(value = "reason_")
     private String reason;
-    @ApiModelProperty("操作人 ")
-	@TableField(value = "operate_user_id_")
-    private Long operateUserId;
-	@TableField(value = "create_time_")
+    @ApiModelProperty("审核人 ")
+    @TableField(value = "operate_id_")
+    private Long operateId;
+    @ApiModelProperty("审核描述 ")
+    @TableField(value = "operate_reason_")
+    private String operateReason;
+    @TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
-	@TableField(value = "update_time_")
+    @TableField(value = "update_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
-	@TableField(value = "remark_")
-    private String remark;
 
-	public Long getId() {
+    public Long getId() {
         return id;
     }
 
     public void setId(Long id) {
         this.id = id;
     }
-    
-	public Long getUserId() {
+
+    public Long getUserId() {
         return userId;
     }
 
     public void setUserId(Long userId) {
         this.userId = userId;
     }
-    
-	public String getOrderNo() {
-        return orderNo;
+
+    public Long getOrderId() {
+        return orderId;
     }
 
-    public void setOrderNo(String orderNo) {
-        this.orderNo = orderNo;
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
     }
 
-    public Long getOrderDetilId() {
-        return orderDetilId;
+    public String getOredrDetilIds() {
+        return oredrDetilIds;
     }
 
-    public void setOrderDetilId(Long orderDetilId) {
-        this.orderDetilId = orderDetilId;
+    public void setOredrDetilIds(String oredrDetilIds) {
+        this.oredrDetilIds = oredrDetilIds;
     }
 
     public AuthStatusEnum getStatus() {
@@ -96,8 +103,8 @@ public class UserOrderRefunds implements Serializable {
     public void setStatus(AuthStatusEnum status) {
         this.status = status;
     }
-    
-	public BigDecimal getApplyAmount() {
+
+    public BigDecimal getApplyAmount() {
         return applyAmount;
     }
 
@@ -105,52 +112,59 @@ public class UserOrderRefunds implements Serializable {
         this.applyAmount = applyAmount;
     }
 
-	public BigDecimal getActualAmount() {
+    public BigDecimal getActualAmount() {
         return actualAmount;
     }
 
     public void setActualAmount(BigDecimal actualAmount) {
         this.actualAmount = actualAmount;
     }
-    
-	public String getReason() {
+
+    public String getReason() {
         return reason;
     }
 
     public void setReason(String reason) {
         this.reason = reason;
     }
-    
-	public Long getOperateUserId() {
-        return operateUserId;
+
+    public Long getOperateId() {
+        return operateId;
+    }
+
+    public void setOperateId(Long operateId) {
+        this.operateId = operateId;
     }
 
-    public void setOperateUserId(Long operateUserId) {
-        this.operateUserId = operateUserId;
+    public String getOperateReason() {
+        return operateReason;
     }
-    
-	public Date getCreateTime() {
+
+    public void setOperateReason(String operateReason) {
+        this.operateReason = operateReason;
+    }
+
+    public Date getCreateTime() {
         return createTime;
     }
 
     public void setCreateTime(Date createTime) {
         this.createTime = createTime;
     }
-    
-	public Date getUpdateTime() {
+
+    public Date getUpdateTime() {
         return updateTime;
     }
 
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
-    
-	public String getRemark() {
-        return remark;
+
+    public String getOrderNo() {
+        return orderNo;
     }
 
-    public void setRemark(String remark) {
-        this.remark = remark;
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
     }
-    
 }

+ 146 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefundBill.java

@@ -0,0 +1,146 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.math.BigDecimal;
+
+/**
+ * 退款单表
+ */
+@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 = "bill_no_")
+    private String billNo;
+    @ApiModelProperty("交易流水号(支付对象id) ")
+	@TableField(value = "trans_no_")
+    private String transNo;
+    @ApiModelProperty("交易金额 ")
+	@TableField(value = "refund_amt_")
+    private BigDecimal refundAmt;
+    @ApiModelProperty("回调交易金额 ")
+	@TableField(value = "back_refund_amt_")
+    private BigDecimal backRefundAmt;
+    @ApiModelProperty("收取的服务费 ")
+	@TableField(value = "fee_amt_")
+    private BigDecimal feeAmt;
+    @ApiModelProperty("交易状态 pending 交易处理中 succeeded 交易成功 failed 交易失败 close 交易关闭 ")
+	@TableField(value = "status_")
+    private String status;
+    @ApiModelProperty("失败信息 ")
+	@TableField(value = "pay_fail_msg_")
+    private String payFailMsg;
+	@TableField(value = "create_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date createTime;
+	@TableField(value = "update_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date updateTime;
+
+	public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    
+	public String getRefundId() {
+        return refundId;
+    }
+
+    public void setRefundId(String refundId) {
+        this.refundId = refundId;
+    }
+
+    public String getBillNo() {
+        return billNo;
+    }
+
+    public void setBillNo(String billNo) {
+        this.billNo = billNo;
+    }
+
+    public String getTransNo() {
+        return transNo;
+    }
+
+    public void setTransNo(String transNo) {
+        this.transNo = transNo;
+    }
+    
+	public BigDecimal getRefundAmt() {
+        return refundAmt;
+    }
+
+    public void setRefundAmt(BigDecimal refundAmt) {
+        this.refundAmt = refundAmt;
+    }
+    
+	public BigDecimal getBackRefundAmt() {
+        return backRefundAmt;
+    }
+
+    public void setBackRefundAmt(BigDecimal backRefundAmt) {
+        this.backRefundAmt = backRefundAmt;
+    }
+    
+	public BigDecimal getFeeAmt() {
+        return feeAmt;
+    }
+
+    public void setFeeAmt(BigDecimal feeAmt) {
+        this.feeAmt = feeAmt;
+    }
+    
+	public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+    
+	public String getPayFailMsg() {
+        return payFailMsg;
+    }
+
+    public void setPayFailMsg(String payFailMsg) {
+        this.payFailMsg = payFailMsg;
+    }
+    
+	public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+    
+	public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+    
+}

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

@@ -0,0 +1,390 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+ * @Description: 提现回调
+ * @Author: cy
+ * @Date: 2022/5/10
+ */
+@ApiModel(value = "user_withdrawal_callback-提现回调表")
+public class UserWithdrawalCallback extends BaseEntity {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键id")
+    private Long id;
+
+    @TableField("order_no_")
+    @ApiModelProperty(value = "众薪平台唯一订单号")
+    private String orderNo;
+
+    @TableField("out_member_no_")
+    @ApiModelProperty(value = "商户号")
+    private String outMemberNo;
+
+    @TableField("outer_order_no_")
+    @ApiModelProperty(value = "商户唯一订单号")
+    private String outerOrderNo;
+
+    @TableField("additional_charge_")
+    @ApiModelProperty(value = "个人附加费(单位为:分)")
+    private Integer additionalCharge;
+
+    @TableField("actual_amount_")
+    @ApiModelProperty(value = "实发金额(单位为:分,范围:1~10000000000)")
+    private Integer actualAmount;
+
+    @TableField("company_charge_")
+    @ApiModelProperty(value = "企业附加费(单位为:分)")
+    private Integer companyCharge;
+
+    @TableField("company_service_fee_")
+    @ApiModelProperty(value = "公司服务费汇总=企业个税+企业附加费+企业服务费(单位为:分)")
+    private Integer companyServiceFee;
+
+    @TableField("company_tax_")
+    @ApiModelProperty(value = "企业承担个税(单位为:分)")
+    private Integer companyTax;
+
+    @TableField("service_charge_")
+    @ApiModelProperty(value = "企业服务费(单位为:分)")
+    private Integer serviceCharge;
+
+    @TableField("tax_fee_")
+    @ApiModelProperty(value = "个人承担个税(单位为:分)")
+    private Integer taxFee;
+
+    @TableField("person_service_fee_")
+    @ApiModelProperty(value = "个人服务费汇总=个人个税+个人附加费(单位为:分)")
+    private Integer personServiceFee;
+
+    @TableField("predict_amount_")
+    @ApiModelProperty(value = "应发金额(单位为:分,范围:1~10000000000)")
+    private Integer predictAmount;
+
+    @TableField("salary_type_")
+    @ApiModelProperty(value = "发放类型(0:个人经营所得)")
+    private String salaryType;
+
+    @TableField("status_")
+    @ApiModelProperty(value = "交易状态(0:交易中;1:交易成功;2:交易失败)")
+    private String status;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField("end_time_")
+    @ApiModelProperty(value = "完成时间")
+    private Date endTime;
+
+    @TableField("error_code_")
+    @ApiModelProperty(value = "支付失败时返回")
+    private String errorCode;
+
+    @TableField("error_msg_")
+    @ApiModelProperty(value = "支付失败时返回")
+    private String errorMsg;
+
+    @TableField("mobile_")
+    @ApiModelProperty(value = "收款方电话")
+    private String mobile;
+
+    @TableField("certificate_no_")
+    @ApiModelProperty(value = "收款方身份证号")
+    private String certificateNo;
+
+    @TableField("name_")
+    @ApiModelProperty(value = "收款方姓名(银行预留姓名等)")
+    private String name;
+
+    @TableField("card_attribute_")
+    @ApiModelProperty(value = "卡属性:(C:对私)")
+    private String cardAttribute;
+
+    @TableField("card_type_")
+    @ApiModelProperty(value = "卡类型:DC借记卡")
+    private String cardType;
+
+    @TableField("pay_account_")
+    @ApiModelProperty(value = "收款方账号(银行卡号/支付宝账号/open_id)以实际业务为准")
+    private String payAccount;
+
+    @TableField("pay_type_")
+    @ApiModelProperty(value = "支付类型(1:银行卡,2:支付宝,4:微信)以实际业务为准")
+    private String payType;
+
+    @TableField("project_name_")
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    @TableField("remark_")
+    @ApiModelProperty(value = "备注(扩展字段)只针对测试环境:只要参数合规都会返回交易成功,如果想要模拟交易失败,该字段值中含有“失败”二字即会失败。")
+    private String remark;
+
+    @TableField("service_")
+    @ApiModelProperty(value = "接口名称: bpotop.zx.pay.order")
+    private String service;
+
+    @TableField("sign_type_")
+    @ApiModelProperty(value = "签名类型:RSA")
+    private String signType;
+
+    @TableField("notify_url_")
+    @ApiModelProperty(value = "回调地址")
+    private String notifyUrl;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public String getOutMemberNo() {
+        return outMemberNo;
+    }
+
+    public void setOutMemberNo(String outMemberNo) {
+        this.outMemberNo = outMemberNo;
+    }
+
+    public String getOuterOrderNo() {
+        return outerOrderNo;
+    }
+
+    public void setOuterOrderNo(String outerOrderNo) {
+        this.outerOrderNo = outerOrderNo;
+    }
+
+    public Integer getAdditionalCharge() {
+        return additionalCharge;
+    }
+
+    public void setAdditionalCharge(Integer additionalCharge) {
+        this.additionalCharge = additionalCharge;
+    }
+
+    public Integer getActualAmount() {
+        return actualAmount;
+    }
+
+    public void setActualAmount(Integer actualAmount) {
+        this.actualAmount = actualAmount;
+    }
+
+    public Integer getCompanyCharge() {
+        return companyCharge;
+    }
+
+    public void setCompanyCharge(Integer companyCharge) {
+        this.companyCharge = companyCharge;
+    }
+
+    public Integer getCompanyServiceFee() {
+        return companyServiceFee;
+    }
+
+    public void setCompanyServiceFee(Integer companyServiceFee) {
+        this.companyServiceFee = companyServiceFee;
+    }
+
+    public Integer getCompanyTax() {
+        return companyTax;
+    }
+
+    public void setCompanyTax(Integer companyTax) {
+        this.companyTax = companyTax;
+    }
+
+    public Integer getServiceCharge() {
+        return serviceCharge;
+    }
+
+    public void setServiceCharge(Integer serviceCharge) {
+        this.serviceCharge = serviceCharge;
+    }
+
+    public Integer getTaxFee() {
+        return taxFee;
+    }
+
+    public void setTaxFee(Integer taxFee) {
+        this.taxFee = taxFee;
+    }
+
+    public Integer getPersonServiceFee() {
+        return personServiceFee;
+    }
+
+    public void setPersonServiceFee(Integer personServiceFee) {
+        this.personServiceFee = personServiceFee;
+    }
+
+    public Integer getPredictAmount() {
+        return predictAmount;
+    }
+
+    public void setPredictAmount(Integer predictAmount) {
+        this.predictAmount = predictAmount;
+    }
+
+    public String getSalaryType() {
+        return salaryType;
+    }
+
+    public void setSalaryType(String salaryType) {
+        this.salaryType = salaryType;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getErrorCode() {
+        return errorCode;
+    }
+
+    public void setErrorCode(String errorCode) {
+        this.errorCode = errorCode;
+    }
+
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    public String getCertificateNo() {
+        return certificateNo;
+    }
+
+    public void setCertificateNo(String certificateNo) {
+        this.certificateNo = certificateNo;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCardAttribute() {
+        return cardAttribute;
+    }
+
+    public void setCardAttribute(String cardAttribute) {
+        this.cardAttribute = cardAttribute;
+    }
+
+    public String getCardType() {
+        return cardType;
+    }
+
+    public void setCardType(String cardType) {
+        this.cardType = cardType;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPayType() {
+        return payType;
+    }
+
+    public void setPayType(String payType) {
+        this.payType = payType;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getService() {
+        return service;
+    }
+
+    public void setService(String service) {
+        this.service = service;
+    }
+
+    public String getSignType() {
+        return signType;
+    }
+
+    public void setSignType(String signType) {
+        this.signType = signType;
+    }
+
+    public String getNotifyUrl() {
+        return notifyUrl;
+    }
+
+    public void setNotifyUrl(String notifyUrl) {
+        this.notifyUrl = notifyUrl;
+    }
+}

+ 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;
-    }
-}

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

@@ -12,6 +12,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentCourseSearch
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
 import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes;
@@ -153,24 +154,24 @@ public interface CourseGroupService extends IService<CourseGroup> {
     HttpResponseResult<RefundCreateRes> refundCreate(OrderRefundReq refundReq);
     /***
      * 直播课退款单-创建后
-     * @param: refundReq
+     * @param: userOrderRefund
      * @updateTime 2022/5/9 15:11
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes>
      */
-    void refundAfter(UserOrderRefundsVo userOrderRefundsVo);
+    void refundAfter(UserOrderDetailVo userOrderDetailVo);
     /***
      * 直播课退款单-退款成功
-     * @param: refundReq
+     * @param: userOrderRefund
      * @updateTime 2022/5/9 15:11
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes>
      */
-    void refundSuccess(UserOrderRefundsVo userOrderRefundsVo);
+    void refundSuccess(UserOrderDetailVo userOrderDetailVo);
     /***
      * 直播课退款单-退款失败
-     * @param: refundReq
+     * @param: userOrderRefund
      * @updateTime 2022/5/9 15:11
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes>
      */
-    void refundCancel(UserOrderRefundsVo userOrderRefundsVo);
+    void refundCancel(UserOrderDetailVo userOrderDetailVo);
 }
 

+ 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();
 }
 

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

@@ -21,7 +21,6 @@ public interface HomeService {
      * @return: com.yonge.cooleshow.biz.dal.vo.HomeTotalVo
      */
     HomeUserToDoNum getUserToDoNum();
-
     /***
      * 统计老师数据
      * @author liweifan
@@ -45,9 +44,9 @@ public interface HomeService {
      * <p>已完成  已完成课程
      *
      * @param param 传入参数
-     *              <p> - year 年
-     *              <p> - month 月
+     *              <p> - dateTime  如果查询年数据 yyyy   如果查询月数据 yyyy-mm
      *              <p> - type 类型  PRACTICE陪练课  LIVE直播课
+     *              <p> - timeType 时间类型 MONTH、月度 YEAR
      */
     CourseHomeVo queryCourseHomeData(Map<String, Object> param);
 }

+ 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;
+
 }

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

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

+ 50 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundService.java

@@ -0,0 +1,50 @@
+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.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
+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;
+
+/**
+ * 用户退款表 服务类
+ * @author liweifan
+ * @date 2022-03-30
+ */
+public interface UserOrderRefundService extends IService<UserOrderRefund>  {
+	/**
+     * 查询详情
+     * @author liweifan
+ 	 * @date 2022-03-30
+     */
+	UserOrderRefundVo detail(Long id);
+
+    /**
+     * 分页查询
+     * @author liweifan
+ 	 * @date 2022-03-30
+     */
+    IPage<UserOrderRefundVo> selectPage(IPage<UserOrderRefundVo> page, UserOrderRefundSearch query);
+	/***
+	 * 订单退款
+	 * @author liweifan
+	 * @param: payReq
+	 * @updateTime 2022/4/21 19:39
+	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
+	 */
+	HttpResponseResult<Boolean> orderRefund(OrderRefundReq refundReq);
+	/***
+	 * 审批退款申请
+	 * @author liweifan
+	 * @param: authOperaReq
+	 * @param: user
+	 * @updateTime 2022/5/9 16:25
+	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
+	 */
+    HttpResponseResult<RefundBill> doAuth(AuthOperaReq authOperaReq, SysUser user);
+}

+ 0 - 38
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundsService.java

@@ -1,38 +0,0 @@
-package com.yonge.cooleshow.biz.dal.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderRefundsSearch;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
-
-/**
- * 用户退款表 服务类
- * @author liweifan
- * @date 2022-03-30
- */
-public interface UserOrderRefundsService extends IService<UserOrderRefunds>  {
-	/**
-     * 查询详情
-     * @author liweifan
- 	 * @date 2022-03-30
-     */
-	UserOrderRefundsVo detail(Long id);
-
-    /**
-     * 分页查询
-     * @author liweifan
- 	 * @date 2022-03-30
-     */
-    IPage<UserOrderRefundsVo> selectPage(IPage<UserOrderRefundsVo> page, OrderRefundsSearch query);
-	/***
-	 * 订单退款
-	 * @author liweifan
-	 * @param: refundReq
-	 * @updateTime 2022/5/9 14:29
-	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
-	 */
-	HttpResponseResult<Boolean> orderRefund(OrderRefundReq refundReq);
-}

+ 1 - 10
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);
 
     /***
      * 轮询用户订单
@@ -117,15 +117,6 @@ public interface UserOrderService extends IService<UserOrder> {
     HttpResponseResult<Boolean> orderCancel(OrderPayReq payReq);
 
     /***
-     * 订单退款
-     * @author liweifan
-     * @param: payReq
-     * @updateTime 2022/4/21 19:39
-     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
-     */
-    HttpResponseResult<Boolean> orderRefund(OrderRefundReq refundReq);
-
-    /***
      * 取消订单(未判断付款单状态)
      * @author liweifan
      * @param: userOrder

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

@@ -0,0 +1,8 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
+
+public interface UserWithdrawalCallbackService extends IService<UserWithdrawalCallback> {
+    void insertCallback(UserWithdrawalCallback callback);
+}

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

@@ -68,11 +68,4 @@ public interface UserWithdrawalService extends IService<UserWithdrawal>  {
 	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.util.List<com.yonge.toolset.utils.easyexcel.ErrMsg>>
 	 */
     void importExcel(List<ExcelDataReaderProperty<UserWithdrawalExport>> dataList, Long userId);
-
-	/**
-	 * @Description: 提现成功回调
-	 * @Author: cy
-	 * @Date: 2022/5/9
-	 */
-	void withdrawSuccess(Map<String, Object> withdrawRecord);
 }

+ 7 - 8
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
@@ -839,23 +839,22 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     @Override
     public HttpResponseResult<RefundCreateRes> refundCreate(OrderRefundReq refundReq) {
         RefundCreateRes refundCreateRes = new RefundCreateRes();
-        refundCreateRes.setRes(true);
         refundCreateRes.setActualPrice(BigDecimal.ZERO);
         return HttpResponseResult.succeed(refundCreateRes);
     }
 
     @Override
-    public void refundAfter(UserOrderRefundsVo userOrderRefundsVo) {
+    public void refundAfter(UserOrderDetailVo userOrderDetailVo) {
 
     }
 
     @Override
-    public void refundSuccess(UserOrderRefundsVo userOrderRefundsVo) {
+    public void refundSuccess(UserOrderDetailVo userOrderDetailVo) {
 
     }
 
     @Override
-    public void refundCancel(UserOrderRefundsVo userOrderRefundsVo) {
+    public void refundCancel(UserOrderDetailVo userOrderDetailVo) {
 
     }
 

+ 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);

+ 124 - 9
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,6 +877,24 @@ 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());
@@ -990,7 +1042,52 @@ 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("时间不正确");
+        }
+
+        //校验课程是否存在
+        CourseSchedule schedule = baseMapper.selectOne(Wrappers.<CourseSchedule>lambdaQuery()
+                .eq(CourseSchedule::getId, courseId)
+                .eq(CourseSchedule::getLock, 1)
+                .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 +1184,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 +1197,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 +1254,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 +1266,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;
+    }
 }

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

@@ -18,10 +18,7 @@ import org.springframework.stereotype.Service;
 
 import java.time.LocalDate;
 import java.time.temporal.TemporalAdjusters;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -121,18 +118,21 @@ public class HomeServiceImpl implements HomeService {
      * <p>已完成  已完成课程
      *
      * @param param 传入参数
-     *              <p> - year 年
-     *              <p> - month 月
+     *              <p> - dateTime  如果查询年数据 yyyy   如果查询月数据 yyyy-mm
      *              <p> - type 类型  PRACTICE陪练课  LIVE直播课
+     *              <p> - timeType 时间类型 MONTH、月度 YEAR
      */
     public CourseHomeVo queryCourseHomeData(Map<String, Object> param) {
         CourseScheduleEnum.existCourseType(WrapperUtil.toStr(param, "type"), "课程类型参数错误");
-        Integer year = WrapperUtil.toInt(param, "year", "年份不能为空!");
-        Integer monthParam = WrapperUtil.toInt(param, "month");
-        //按月查询true  年查询false
-        boolean isYear = monthParam == 0;
-        int month = isYear ? 1 : monthParam;
-
+        String dateTimeStr = WrapperUtil.toStr(param, "dateTime", "查询时间不能为空!");
+        String timeType = WrapperUtil.toStr(param, "timeType", "查询时间不类型不能为空!");
+        //按年查询true  按月查询false
+        boolean isYear = timeType.equals("YEAR");
+        //获取年
+        String[] split = dateTimeStr.split("-");
+        int year = Integer.parseInt(split[0]);
+        //获取月
+        int month = isYear ? 1 : Integer.parseInt(split[1]);
         LocalDate firstDate;
         LocalDate endDate;
         CourseHomeVo result = new CourseHomeVo();
@@ -193,6 +193,7 @@ public class HomeServiceImpl implements HomeService {
         result.setTotalDoneCount(reduceFunc.apply(CourseHomeVo.CourseHomeInfoVo::getDoneCount));
         result.setTotalUndoneCount(reduceFunc.apply(CourseHomeVo.CourseHomeInfoVo::getUndoneCount));
         result.setTotalCount(result.getTotalDoneCount() + result.getTotalUndoneCount());
+        result.getCourseHomeInfoList().sort(Comparator.comparing(CourseHomeVo.CourseHomeInfoVo::getDate));
         return result;
     }
 

+ 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);

+ 31 - 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
@@ -267,6 +284,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
             musicSheet.setAuditStatus(param.getAuthStatus());
             musicSheet.setUpdateBy(userId);
             musicSheet.setUpdateTime(new Date());
+            if (AuthStatusEnum.PASS.getCode().equals(param.getAuthStatus().getCode())) {
+                musicSheet.setState(YesOrNoEnum.YES);
+            }
             flag =  this.updateById(musicSheet);
         }
 
@@ -449,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());
         }
     }
 }

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

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.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.UserOrderRefundBillDao;
+import com.yonge.cooleshow.biz.dal.service.UserOrderRefundPaymentService;
+
+
+@Service
+public class UserOrderRefundPaymentServiceImpl extends ServiceImpl<UserOrderRefundBillDao, UserOrderRefundBill> implements UserOrderRefundPaymentService {
+    private final static Logger log = LoggerFactory.getLogger(UserOrderRefundPaymentServiceImpl.class);
+
+	@Override
+    public UserOrderRefundBillVo detail(Long id) {
+        return baseMapper.detail(id);
+    }
+    
+     @Override
+    public IPage<UserOrderRefundBillVo> selectPage(IPage<UserOrderRefundBillVo> page, UserOrderRefundPaymentSearch query){
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+	
+}

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

@@ -0,0 +1,214 @@
+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;
+import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.TradeStatusEnum;
+import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
+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;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+@Service
+public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao, UserOrderRefund> implements UserOrderRefundService {
+    @Autowired
+    private UserOrderService orderService;
+    @Autowired
+    private UserOrderPaymentService orderPaymentService;
+    @Autowired
+    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<>();
+    //插入退款后执行
+    private static final Map<GoodTypeEnum, Consumer<UserOrderDetailVo>> refundAfter = new HashMap<>();
+    //退款完成后执行
+    private static final Map<GoodTypeEnum, Consumer<UserOrderDetailVo>> refundSuccess = new HashMap<>();
+    //退款未通过后执行
+    private static final Map<GoodTypeEnum, Consumer<UserOrderDetailVo>> refundCancel = new HashMap<>();
+
+    @PostConstruct
+    private void init() {
+        /**********退费单生成前******************/
+        //直播课退费
+        refundCreate.put(GoodTypeEnum.LIVE, courseGroupService::refundCreate);
+
+        refundSuccess.put(GoodTypeEnum.LIVE, courseGroupService::refundSuccess);
+    }
+
+    @Override
+    public UserOrderRefundVo detail(Long id) {
+        UserOrderRefundVo detail = baseMapper.detail(id);
+        return detail;
+    }
+
+    @Override
+    public IPage<UserOrderRefundVo> selectPage(IPage<UserOrderRefundVo> page, UserOrderRefundSearch query) {
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResponseResult<Boolean> orderRefund(OrderRefundReq refundReq) {
+        UserOrderVo detail = orderService.detail(refundReq.getOrderId());
+        if (null == detail || CollectionUtils.isEmpty(detail.getOrderDetailList())) {
+            return HttpResponseResult.failed("未找到订单信息");
+        }
+        if (!OrderStatusEnum.PAID.equals(detail.getStatus())) {
+            return HttpResponseResult.failed("订单状态异常");
+        }
+        if (StringUtil.isEmpty(detail.getTransNo())) {
+            return HttpResponseResult.failed("未找到订单付款信息");
+        }
+        UserOrderPayment orderPayment = orderPaymentService.detailByTransNo(detail.getTransNo());
+        if (null == orderPayment || !TradeStatusEnum.succeeded.equals(orderPayment.getStatus())) {
+            return HttpResponseResult.failed("订单付款状态异常");
+        }
+        if (CollectionUtils.isEmpty(refundReq.getOredrDetilIds())) {
+            //查询订单下未退款的所有详情订单
+            List<UserOrderDetail> orderDetails = baseMapper.selectOrderRefundDetils(refundReq.getOrderId());
+
+            refundReq.setOredrDetilIds(orderDetails.stream().map(UserOrderDetail::getId).collect(Collectors.toList()));
+        }
+        //退款的详情id
+        List<Long> detilIds = new ArrayList<>();
+        //退款金额
+        BigDecimal actualPrice = BigDecimal.ZERO;
+        for (UserOrderDetailVo vo : detail.getOrderDetailList()) {
+            List<Long> collect = refundReq.getOredrDetilIds().stream().filter(o -> o.equals(vo.getId())).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(collect)) {
+
+                Function<OrderRefundReq, HttpResponseResult<RefundCreateRes>> refundCreateFunction = refundCreate.get(vo.getGoodType());
+                if (Objects.isNull(refundCreateFunction)) {
+                    refundReq.setOredrDetil(vo);
+                    HttpResponseResult<RefundCreateRes> apply = refundCreateFunction.apply(refundReq);
+                    if (apply.getStatus()) {
+                        detilIds.add(vo.getId());
+                        actualPrice.add(apply.getData().getActualPrice());
+                    }
+                } else {
+                    detilIds.add(vo.getId());
+                    actualPrice.add(vo.getActualPrice());
+                }
+            }
+        }
+        String join = StringUtil.join(detilIds, ",");
+
+        UserOrderRefund orderRefunds = new UserOrderRefund();
+        orderRefunds.setUserId(detail.getUserId());
+        orderRefunds.setOrderId(detail.getId());
+        orderRefunds.setOrderNo(detail.getOrderNo());
+        orderRefunds.setOredrDetilIds(join);
+        orderRefunds.setStatus(AuthStatusEnum.DOING);
+        orderRefunds.setApplyAmount(actualPrice);
+        orderRefunds.setReason(refundReq.getReason());
+        save(orderRefunds);
+
+        for (UserOrderDetailVo vo : detail.getOrderDetailList()) {
+            List<Long> collect = refundReq.getOredrDetilIds().stream().filter(o -> o.equals(vo.getId())).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(collect)) {
+                Consumer<UserOrderDetailVo> refundAfterConsumer = refundAfter.get(vo.getGoodType());
+                if (Objects.isNull(refundAfterConsumer)) {
+                    refundAfterConsumer.accept(vo);
+                }
+            }
+        }
+        return HttpResponseResult.succeed(true);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    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();
+        }
+
+        orderRefund.setStatus(authOperaReq.getPass() ? AuthStatusEnum.PASS : AuthStatusEnum.UNPASS);
+        orderRefund.setActualAmount(orderRefund.getApplyAmount());
+        orderRefund.setOperateId(user.getId());
+        orderRefund.setOperateReason(authOperaReq.getReason());
+        orderRefund.setUpdateTime(new Date());
+        updateById(orderRefund);
+
+        if (authOperaReq.getPass()) {
+            //通过调用退款接口
+            return doOrderRefund(orderRefund);
+        } else {
+            List<String> detilIds = Arrays.asList(oredrDetilIds.split(","));
+            for (String id : detilIds) {
+                UserOrderDetailVo detail = orderDetailService.detail(Long.parseLong(id));
+                if (null == detail) {
+                    continue;
+                }
+                //调用业务方法
+                Consumer<UserOrderDetailVo> refundCancelConsumer = refundCancel.get(detail.getGoodType());
+                if (Objects.isNull(refundCancelConsumer)) {
+                    refundCancelConsumer.accept(detail);
+                }
+            }
+        }
+        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);
+    }
+}

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

@@ -1,88 +0,0 @@
-package com.yonge.cooleshow.biz.dal.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
-import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
-import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
-import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
-import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
-import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
-import com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderRefundsSearch;
-import com.yonge.cooleshow.biz.dal.dao.UserOrderRefundsDao;
-import com.yonge.cooleshow.biz.dal.service.UserOrderRefundsService;
-
-import javax.annotation.PostConstruct;
-import java.sql.Wrapper;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.function.Consumer;
-import java.util.function.Function;
-
-
-@Service
-public class UserOrderRefundsServiceImpl extends ServiceImpl<UserOrderRefundsDao, UserOrderRefunds> implements UserOrderRefundsService {
-    @Autowired
-    private CourseGroupService courseGroupService;
-
-    //验证是否可以退款,获取退款金额信息
-    private static final Map<GoodTypeEnum, Function<OrderRefundReq, HttpResponseResult<RefundCreateRes>>> refundCreate = new HashMap<>();
-    //插入退款后执行
-    private static final Map<GoodTypeEnum, Consumer<UserOrderRefundsVo>> refundAfter = new HashMap<>();
-    //退款完成后执行
-    private static final Map<GoodTypeEnum, Consumer<UserOrderRefundsVo>> refundSuccess = new HashMap<>();
-    //退款未通过后执行
-    private static final Map<GoodTypeEnum, Consumer<UserOrderRefundsVo>> refundCancel = new HashMap<>();
-
-    @PostConstruct
-    private void init() {
-        /**********退费单生成前******************/
-        //直播课退费
-        refundCreate.put(GoodTypeEnum.LIVE, courseGroupService::refundCreate);
-
-        refundAfter.put(GoodTypeEnum.LIVE, courseGroupService::refundAfter);
-
-        refundSuccess.put(GoodTypeEnum.LIVE, courseGroupService::refundSuccess);
-
-        refundCancel.put(GoodTypeEnum.LIVE, courseGroupService::refundCancel);
-    }
-
-	@Override
-    public UserOrderRefundsVo detail(Long id) {
-        UserOrderRefundsVo detail = baseMapper.detail(id);
-        return detail;
-    }
-    
-     @Override
-    public IPage<UserOrderRefundsVo> selectPage(IPage<UserOrderRefundsVo> page, OrderRefundsSearch query){
-        return page.setRecords(baseMapper.selectPage(page, query));
-    }
-
-    @Override
-    public HttpResponseResult<Boolean> orderRefund(OrderRefundReq refundReq) {
-        UserOrderRefunds old = baseMapper.selectOne(Wrappers.<UserOrderRefunds>lambdaQuery()
-                .eq(UserOrderRefunds::getUserId, refundReq.getUserId())
-                .eq(UserOrderRefunds::getOrderNo, refundReq.getOrderNo())
-                .eq(UserOrderRefunds::getOrderDetilId, refundReq.getOrderDetilId()));
-        if(null != old){
-            return HttpResponseResult.failed("已存在退款记录");
-        }
-        UserOrderRefunds orderRefunds = new UserOrderRefunds();
-        orderRefunds.setUserId(refundReq.getUserId());
-        orderRefunds.setOrderNo(refundReq.getOrderNo());
-        orderRefunds.setOrderDetilId(refundReq.getOrderDetilId());
-        orderRefunds.setReason(refundReq.getReason());
-        orderRefunds.setStatus(AuthStatusEnum.DOING);
-
-        return null;
-    }
-
-}

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

@@ -2,11 +2,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 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.biz.dal.config.HuifuConfiguration;
-import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.support.DistributedLock;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
@@ -15,9 +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.sdk.req.DeviceInfo;
-import com.yonge.cooleshow.biz.dal.sdk.req.PaymentReq;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
@@ -25,25 +18,26 @@ 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;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.dao.UserOrderDao;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.PostConstruct;
-import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.util.*;
-import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
 import java.util.function.Function;
@@ -61,9 +55,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     @Autowired
     private UserOrderPaymentService orderPaymentService;
     @Autowired
-    private UserOrderRefundsService orderRefundsService;
-    @Autowired
-    private PaymentSdk paymentSdk;
+    private PaymentClient paymentClient;
     @Autowired
     private IdGeneratorService idGeneratorService;
     @Autowired
@@ -76,6 +68,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     private MusicSheetService musicSheetService;
     @Autowired
     private RedissonClient redissonClient;
+    @Autowired
+    private PaymentProperties paymentProperties;
 
     //验证订单是否可以下单,获取订单金额信息
     private static final Map<GoodTypeEnum, Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
@@ -186,58 +180,22 @@ 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());
+            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
-    @Transactional(rollbackFor = Exception.class)
-    public HttpResponseResult<Boolean> orderRefund(OrderRefundReq refundReq) {
-        UserOrderVo detail = detail(refundReq.getOrderNo(), refundReq.getUserId());
-        if (null == detail || CollectionUtils.isEmpty(detail.getOrderDetailList())) {
-            return HttpResponseResult.failed("未找到订单信息");
-        }
-        if (!OrderStatusEnum.PAID.equals(detail.getStatus())) {
-            return HttpResponseResult.failed("订单状态异常");
-        }
-        UserOrderDetailVo orderDetail = null;
-        for (UserOrderDetailVo vo : detail.getOrderDetailList()) {
-            if(vo.getId().equals(refundReq.getOrderDetilId())){
-                orderDetail = vo;
-            }
-        }
-
-        if (null == orderDetail) {
-            return HttpResponseResult.failed("未找到订单信息");
-        }
-
-        if (StringUtil.isEmpty(detail.getTransNo())) {
-            return HttpResponseResult.failed("未找到订单付款信息");
-        }
-        UserOrderPayment orderPayment = orderPaymentService.detailByTransNo(detail.getTransNo());
-        if (null == orderPayment || !TradeStatusEnum.succeeded.equals(orderPayment.getStatus())) {
-            return HttpResponseResult.failed("订单付款状态异常");
-        }
-        //发起退款申请
-        return orderRefundsService.orderRefund(refundReq);
-    }
 
     @Override
     public void setSuccessStatus() {
@@ -290,6 +248,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");
@@ -300,6 +259,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);
@@ -329,6 +290,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);
     }
 
@@ -345,7 +307,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
@@ -359,7 +321,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);
@@ -380,7 +342,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;
         }
@@ -456,25 +418,24 @@ 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());
+            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())) {
@@ -604,7 +565,6 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      * @updateTime 2022/3/31 16:49
      * @return: java.math.BigDecimal
      */
-
     private String getGoodUrlByType(GoodTypeEnum goodTypeEnum) {
         String configValue = "";
         if (GoodTypeEnum.VIP.equals(goodTypeEnum)) {

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

@@ -0,0 +1,18 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.dao.UserWithdrawalCallbackDao;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
+import com.yonge.cooleshow.biz.dal.service.UserWithdrawalCallbackService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserWithdrawalCallbackServiceImpl extends ServiceImpl<UserWithdrawalCallbackDao, UserWithdrawalCallback> implements UserWithdrawalCallbackService {
+    private final static Logger log = LoggerFactory.getLogger(UserWithdrawalCallbackServiceImpl.class);
+
+    public void insertCallback(UserWithdrawalCallback callback) {
+        baseMapper.insert(callback);
+    }
+}

+ 4 - 15
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);
@@ -278,14 +277,4 @@ public class UserWithdrawalServiceImpl extends ServiceImpl<UserWithdrawalDao, Us
         }
         return subtract;
     }
-
-    /**
-     * @Description: 提现成功回调
-     * @Author: cy
-     * @Date: 2022/5/9
-     */
-    @Override
-    public void withdrawSuccess(Map<String, Object> withdrawRecord) {
-        baseMapper.withdrawSuccess(withdrawRecord);
-    }
 }

+ 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;
+    }
 }

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

@@ -0,0 +1,63 @@
+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(value = "性别 0女 1男")
+    private GenderEnum gender;
+
+    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;
+    }
+}

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

@@ -0,0 +1,124 @@
+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("专业技能")
+    private String 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;
+    }
+
+    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;

+ 22 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherLiveCourseInfoVo.java

@@ -20,6 +20,12 @@ public class TeacherLiveCourseInfoVo implements Serializable {
     @ApiModelProperty(value = "名称")
     private String courseGroupName;
 
+    @ApiModelProperty(value = "课程id")
+    private Long courseId;
+
+    @ApiModelProperty(value = "课堂编号")
+    private Integer classNum;
+
     @ApiModelProperty(value = "声部名称")
     private String subjectName;
 
@@ -114,4 +120,20 @@ public class TeacherLiveCourseInfoVo implements Serializable {
     public void setImGroupId(String imGroupId) {
         this.imGroupId = imGroupId;
     }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public Integer getClassNum() {
+        return classNum;
+    }
+
+    public void setClassNum(Integer classNum) {
+        this.classNum = classNum;
+    }
 }

+ 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;
+    }
+
+}

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

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

+ 0 - 14
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundsVo.java

@@ -1,14 +0,0 @@
-package com.yonge.cooleshow.biz.dal.vo;
-
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
-import io.swagger.annotations.ApiModel;
-
-/**
- * @Author: liweifan
- * @Data: 2022-03-30 13:53:51
- */
-@ApiModel(value = "UserOrderRefundsVo对象", description = "用户退款表查询视图对象")
-public class UserOrderRefundsVo extends UserOrderRefunds {
-	private static final long serialVersionUID = 1L;
-
-}

+ 23 - 13
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,18 @@ public class UserOrderVo extends UserOrder {
 	private static final long serialVersionUID = 1L;
 	@ApiModelProperty("订单详情 ")
 	private List<UserOrderDetailVo> orderDetailList;
+	@ApiModelProperty("服务提供方: ORIGINAL 微信支付宝 ADAPAY 汇付")
+	private OpenEnum openType;
+	@ApiModelProperty("支付渠道:  alipay 支付宝  wx_lite 微信 ")
+	private PayChannelEnum payChannel;
 	@ApiModelProperty("交易流水号 ")
 	private String transNo;
-	@ApiModelProperty("汇付收取的服务费 ")
+	@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 +40,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;
 	}
@@ -69,12 +87,4 @@ public class UserOrderVo extends UserOrder {
 	public void setPhone(String phone) {
 		this.phone = phone;
 	}
-
-	public PayChannelEnum getPayChannel() {
-		return payChannel;
-	}
-
-	public void setPayChannel(PayChannelEnum payChannel) {
-		this.payChannel = payChannel;
-	}
 }

+ 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 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/RefundCreateRes.java

@@ -12,8 +12,6 @@ import java.math.BigDecimal;
  */
 @ApiModel(value = "OrderCheckRes", description = "退款创建业务返回对象")
 public class RefundCreateRes {
-    @ApiModelProperty("验证结果(必填)")
-    private Boolean res;
     @ApiModelProperty("实际价格(必填)")
     private BigDecimal actualPrice;
 
@@ -22,14 +20,6 @@ public class RefundCreateRes {
     @ApiModelProperty(value = "冗余字段,用于传递参数用")
     private Object bizParam;
 
-    public Boolean getRes() {
-        return res;
-    }
-
-    public void setRes(Boolean res) {
-        this.res = res;
-    }
-
     public BigDecimal getActualPrice() {
         return actualPrice;
     }

+ 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

+ 22 - 3
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -122,6 +122,8 @@
         select
         b.id_ as courseGroupId,
         b.name_ as courseGroupName,
+        a.id_ as courseId,
+        a.class_num_ as classNum,
         s.name_ as subjectName,
         a.start_time_ as startTime,
         a.end_time_ as endTime,
@@ -143,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">
@@ -190,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">
@@ -330,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>
@@ -686,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>

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio