Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
liweifan 3 năm trước cách đây
mục cha
commit
32c59f4951
18 tập tin đã thay đổi với 468 bổ sung21 xóa
  1. 15 8
      cooleshow-cms/src/main/resources/config/mybatis/SysNewsTypeMapper.xml
  2. 1 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/domain/OrderParam.java
  3. 56 8
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseGroupController.java
  4. 30 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  5. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/SmsCodeController.java
  6. 43 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/AudioTypeConverter.java
  7. 45 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/ChargeTypeConverter.java
  8. 44 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/YesOrNoConverter.java
  9. 172 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/MusicSheetExport.java
  10. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  11. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java
  12. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  13. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  14. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  15. 23 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  16. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SmsCodeServiceImpl.java
  17. 1 1
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SmsCodeController.java
  18. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SmsCodeController.java

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

@@ -106,23 +106,30 @@
 	</sql>
 
 	<select id="queryAppPage" resultMap="SysNewsTypeDto">
-		SELECT snt.id_ as sntId
+		select a.*,sni.* from (
+		SELECT distinct snt.id_ as sntId
 		,snt.name_ as name,
 		snt.parent_id_ as parentId,
 		snt.order_ as sntOrder,
 		snt.del_flag_ as sntDelFlag,
 		snt.create_time_ as createTime,
 		snt.update_time_ as updateTime,
-		snt.url_ as url,
-		sni.*
+		snt.url_ as url
 		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},'%'))
+			and (sni.title_ like concat('%',#{search},'%') or snt.name_ like concat('%',#{search},'%'))
 		</if>
 		ORDER BY snt.order_ , sni.order_
-		<include refid="global.limit" />
+		<include refid="global.limit"/>
+		) a
+
+		left join sys_news_information sni on sni.sub_type_ = a.sntId
+		where sni.del_flag_ = 0 and sni.status_ = 1
+
+		ORDER BY a.sntOrder , sni.order_
+
 	</select>
 
 	<resultMap type="com.yonge.cooleshow.cms.dto.SysNewsTypeDto" id="SysNewsTypeDto">
@@ -163,14 +170,14 @@
 	</resultMap>
 
 	<select id="queryAppCount" resultType="int">
-		SELECT count(1)
+		select count(1) from (
+		SELECT snt.id_
 		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" />
+		group by snt.id_ ) a
 	</select>
 </mapper>

+ 1 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/domain/OrderParam.java

@@ -16,7 +16,7 @@ public class OrderParam {
     private Long couponId;
     @ApiModelProperty("使用的积分数")
     private Integer useIntegration;
-    @ApiModelProperty("支付方式")
+    @ApiModelProperty("支付方式 :0->未支付;1->支付宝;2->微信")
     private Integer payType;
     @ApiModelProperty("被选中的购物车商品ID")
     private List<Long> cartIds;

+ 56 - 8
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/CourseGroupController.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.yonge.cooleshow.biz.dal.dto.search.CourseGroupDetailSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.CourseGroupSearch;
+import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
@@ -11,10 +12,13 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * @Author: cy
  * @Date: 2022/5/19
@@ -27,51 +31,95 @@ public class CourseGroupController extends BaseController {
     @Autowired
     private CourseGroupService courseGroupService;
 
-    @ApiOperation(value = "课程组管理-陪练课")
+    @ApiOperation(value = "课程组管理-陪练课",notes = "{\n" +
+            "    \"subjectId\":20,\n" +
+            "    \"search\":\"师\",\n" +
+            "    \"status\":\"ING\"\n" +
+            "}")
     @PostMapping(value = "/practice")
     public HttpResponseResult<PageInfo<CourseGroupPracticeVo>> selectPracticeGroup(@RequestBody CourseGroupSearch search) {
         return succeed(PageUtil.pageInfo(courseGroupService.selectPracticeGroup(PageUtil.getPage(search), search)));
     }
 
-    @ApiOperation(value = "课程组管理-陪练课-详情")
+    @ApiOperation(value = "课程组管理-陪练课-详情",notes = "{\n" +
+            "    \"courseGroupId\": 140,\n" +
+            "    \"teacherSign\": 0,\n" +
+            "    \"studentSign\": 0,\n" +
+            "    \"search\": \"游\",\n" +
+            "    \"status\": \"COMPLETE\",\n" +
+            "    \"salaryStatus\": \"NOT_START\",\n" +
+            "    \"startTime\": \"2022-05-21 08:00:00\",\n" +
+            "    \"endTime\": \"\"\n" +
+            "}")
     @PostMapping(value = "/practice/detail")
     public HttpResponseResult<PageInfo<CourseGroupPracticeDetailVo>> selectPracticeGroupDetail(@Validated @RequestBody CourseGroupDetailSearch search) {
         return succeed(PageUtil.pageInfo(courseGroupService.selectPracticeGroupDetail(PageUtil.getPage(search), search)));
     }
 
-    @ApiOperation(value = "课程组管理-直播课")
+    @ApiOperation(value = "课程组管理-直播课",notes = "{\n" +
+            "    \"subjectId\":73,\n" +
+            "    \"search\":\"夏\",\n" +
+            "    \"status\":\"ING\"\n" +
+            "}")
     @PostMapping(value = "/live")
     public HttpResponseResult<PageInfo<CourseGroupLiveVo>> selectLiveGroup(@RequestBody CourseGroupSearch search) {
         return succeed(PageUtil.pageInfo(courseGroupService.selectLiveGroup(PageUtil.getPage(search), search)));
     }
 
-    @ApiOperation(value = "课程组管理-直播课-购买学员")
+    @ApiOperation(value = "课程组管理-直播课-购买学员",notes = "{\n" +
+            "    \"groupId\":140,\n" +
+            "    \"search\":\"游\",\n" +
+            "    \"orderNo\":\"22051615250800001\"\n" +
+            "}")
     @PostMapping(value = "/live/studentPayment")
     public HttpResponseResult<PageInfo<CourseSchedulePaymentVo>> selectLiveGroupStudent(@RequestBody CourseGroupSearch search) {
         return succeed(PageUtil.pageInfo(courseGroupService.selectLiveGroupStudent(PageUtil.getPage(search), search)));
     }
 
-    @ApiOperation(value = "课程组管理-直播课-教学计划")
+    @ApiOperation(value = "课程组管理-直播课-教学计划",notes = "{\n" +
+            "    \"groupId\":140,\n" +
+            "    \"courseId\":\"391\",\n" +
+            "    \"salaryStatus\":\"NOT_START\",\n" +
+            "    \"startTime\":\"2022-05-20 08:00:00\",\n" +
+            "    \"endTime\":null\n" +
+            "}")
     @PostMapping(value = "/live/plan")
     public HttpResponseResult<PageInfo<CourseSchedulePlanVo>> selectLiveGroupPlan(@RequestBody CourseGroupSearch search) {
         return succeed(PageUtil.pageInfo(courseGroupService.selectLiveGroupPlan(PageUtil.getPage(search), search)));
     }
 
-    @ApiOperation(value = "课程组管理-视频课")
+    @ApiOperation(value = "课程组管理-视频课",notes = "{\n" +
+            "    \"subjectId\":21,\n" +
+            "    \"search\":\"老\"\n" +
+            "}")
     @PostMapping(value = "/video")
     public HttpResponseResult<PageInfo<CourseGroupVideoVo>> selectVideoGroup(@RequestBody CourseGroupSearch search) {
         return succeed(PageUtil.pageInfo(courseGroupService.selectVideoGroup(PageUtil.getPage(search), search)));
     }
 
-    @ApiOperation(value = "课程组管理-视频课-购买学员")
+    @ApiOperation(value = "课程组管理-视频课-购买学员",notes = "{\n" +
+            "    \"groupId\":51,\n" +
+            "    \"orderNo\":\"22050720002900001\",\n" +
+            "    \"search\":\"1\",\n" +
+            "    \"startTime\":\"2022-05-07 20:00:29\",\n" +
+            "    \"endTime\":null\n" +
+            "}")
     @PostMapping(value = "/video/studentPayment")
     public HttpResponseResult<PageInfo<CourseGroupStudentVo>> selectVideoGroupStudent(@RequestBody CourseGroupSearch search) {
         return succeed(PageUtil.pageInfo(courseGroupService.selectVideoGroupStudent(PageUtil.getPage(search), search)));
     }
 
-    @ApiOperation(value = "课程组管理-视频课-教学计划")
+    @ApiOperation(value = "课程组管理-视频课-教学计划",notes = "{\n" +
+            "    \"groupId\":18\n" +
+            "}")
     @PostMapping(value = "/video/plan")
     public HttpResponseResult<PageInfo<VideoLessonGroupDetail>> selectVideoGroupPlan(@RequestBody CourseGroupSearch search) {
         return succeed(PageUtil.pageInfo(courseGroupService.selectVideoGroupPlan(PageUtil.getPage(search), search)));
     }
+
+    @ApiOperation(value = "课程组管理-直播课-课程信息")
+    @GetMapping(value = "/live/info")
+    public HttpResponseResult<CourseGroup> selectLiveGroupInfo(@NotNull Long groupId) {
+        return succeed(courseGroupService.selectLiveGroupInfo(groupId));
+    }
 }

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

@@ -5,6 +5,8 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
+import com.yonge.cooleshow.biz.dal.dto.MusicSheetExport;
+import com.yonge.cooleshow.biz.dal.dto.excel.UserWithdrawalExport;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetOrderSearch;
@@ -19,13 +21,19 @@ import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.utils.easyexcel.ErrMsg;
+import com.yonge.toolset.utils.easyexcel.ExcelDataReader;
+import com.yonge.toolset.utils.easyexcel.ExcelException;
+import com.yonge.toolset.utils.easyexcel.ExcelUtils;
 import com.yonge.toolset.utils.string.StringUtil;
 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.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
 import java.util.Date;
@@ -228,4 +236,26 @@ public class MusicSheetController extends BaseController {
         }
         return status(musicSheetService.sendBuyMessage(param.getTeacherId(),param.getStudentId(),param.getMusicSheetId()));
     }
+    /**
+     * 导入
+     */
+    @PostMapping("/importExcel")
+    @ApiOperation(value = "导入", notes = "传入file")
+    public HttpResponseResult<List<ErrMsg>> importExcel(@RequestParam("file") MultipartFile file) {
+        if (null == file) {
+            return HttpResponseResult.failed("请上传文件");
+        }
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        try {
+            ExcelDataReader<MusicSheetExport> reader = ExcelUtils.getReader(MusicSheetExport.class, file);
+            musicSheetService.importExcel(reader.getDataList(), user.getId());
+            return HttpResponseResult.succeed();
+        } catch (ExcelException e) {
+            return HttpResponseResult.failed(BizHttpStatus.IMPORT.getCode(), e.getErrMsgList(), BizHttpStatus.IMPORT.getMsg());
+        }
+    }
+
 }

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

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

+ 43 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/AudioTypeConverter.java

@@ -0,0 +1,43 @@
+package com.yonge.cooleshow.biz.dal.convert;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.yonge.cooleshow.biz.dal.enums.AudioTypeEnum;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-20
+ */
+public class AudioTypeConverter implements Converter<AudioTypeEnum> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return AudioTypeEnum.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public AudioTypeEnum convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        try {
+            return AudioTypeEnum.valueOf(cellData.getStringValue().trim());
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @Override
+    public CellData convertToExcelData(AudioTypeEnum audioTypeEnum, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (null != audioTypeEnum) {
+            return new CellData(audioTypeEnum.getCode());
+        }
+        return new CellData("异常数据");
+    }
+}

+ 45 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/ChargeTypeConverter.java

@@ -0,0 +1,45 @@
+package com.yonge.cooleshow.biz.dal.convert;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.yonge.cooleshow.biz.dal.enums.AudioTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-20
+ */
+public class ChargeTypeConverter implements Converter<ChargeTypeEnum> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return AudioTypeEnum.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public ChargeTypeEnum convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
+        try {
+            return ChargeTypeEnum.valueOf(cellData.getStringValue().trim());
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @Override
+    public CellData convertToExcelData(ChargeTypeEnum yesOrNoEnum, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (null != yesOrNoEnum) {
+            return new CellData(yesOrNoEnum.getCode());
+        }
+        return new CellData("异常数据");
+    }
+}

+ 44 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/convert/YesOrNoConverter.java

@@ -0,0 +1,44 @@
+package com.yonge.cooleshow.biz.dal.convert;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.yonge.cooleshow.biz.dal.enums.AudioTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-20
+ */
+public class YesOrNoConverter implements Converter<YesOrNoEnum> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return AudioTypeEnum.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public YesOrNoEnum convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        try {
+            return YesOrNoEnum.valueOf(cellData.getStringValue().trim());
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @Override
+    public CellData convertToExcelData(YesOrNoEnum yesOrNoEnum, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (null != yesOrNoEnum) {
+            return new CellData(yesOrNoEnum.getCode());
+        }
+        return new CellData("异常数据");
+    }
+}

+ 172 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/MusicSheetExport.java

@@ -0,0 +1,172 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.yonge.cooleshow.biz.dal.convert.AudioTypeConverter;
+import com.yonge.cooleshow.biz.dal.convert.ChargeTypeConverter;
+import com.yonge.cooleshow.biz.dal.convert.YesOrNoConverter;
+import com.yonge.cooleshow.biz.dal.enums.AudioTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-20
+ */
+@ApiModel("曲目导入格式")
+public class MusicSheetExport {
+
+    @ExcelProperty(value = "曲目名称", index = 1)
+    private String musicSheetName;  //曲谱名称
+
+
+    @ApiModelProperty(value = "曲目音频类型 MP3:mp3, MIDI:midi,")
+    @ExcelProperty(value = "播放类型",converter = AudioTypeConverter.class)
+    private AudioTypeEnum audioType;
+
+
+    @ApiModelProperty(value = "mp3类型 MP3:mp3, MP3_METRONOME:MP3_METRONOME,")
+    @ExcelProperty(value = "是否含节拍器", index = 0)
+    private AudioTypeEnum mp3Type;
+
+
+
+    @ApiModelProperty(value = "XML文件存储路径")
+    @ExcelProperty(value = "XML文件地址", index = 0)
+    private String xmlFileUrl;  //XML文件存储路径
+
+
+    @ApiModelProperty(value = "midi路径")
+    @ExcelProperty(value = "伴奏文件地址", index = 0)
+    private String midiUrl;  //XML文件存储路径
+
+
+
+    @ApiModelProperty(value = "曲谱标签(多个标签用逗号分隔)")
+    @ExcelProperty(value = "曲目标签", index = 0)
+    private String musicTags;  //曲谱标签(多个标签用逗号分隔)
+
+
+    @ExcelProperty(value = "可用声部", index = 0)
+    private String musicSubjects;  //曲谱声部(适用的乐器,可能是多个,用逗号分隔)
+
+    @ExcelProperty(value = "音乐人", index = 0)
+    private String composer;  //作曲人
+
+
+    @ExcelProperty(value = "指法是否展示",converter = YesOrNoConverter.class)
+    @ApiModelProperty(value = "是否展示指法(0:否;1:是)")
+    private YesOrNoEnum showFingering;  //是否展示指法(0:否;1:是)
+
+    @ExcelProperty(value = "是否评测",converter = YesOrNoConverter.class)
+    @ApiModelProperty(value = "是否可以评测(0:否;1:是)")
+    private YesOrNoEnum canEvaluate;  //是否可以评测(0:否;1:是)
+
+    @ExcelProperty(value = "收费方式",converter = ChargeTypeConverter.class)
+    @ApiModelProperty(value = "收费类型(FREE:免费;VIP:会员;CHARGE:单曲收费)")
+    private ChargeTypeEnum chargeType;  //收费类型(0:免费;1:会员;2:单曲收费)
+
+
+    @ExcelProperty(value = "MP3原音", index = 0)
+    @ApiModelProperty(value = "MP3原声音频文件URL")
+    private String audioFileUrls;  //MP3原声音频文件URL
+
+    public String getMusicSheetName() {
+        return musicSheetName;
+    }
+
+    public void setMusicSheetName(String musicSheetName) {
+        this.musicSheetName = musicSheetName;
+    }
+
+    public AudioTypeEnum getAudioType() {
+        return audioType;
+    }
+
+    public void setAudioType(AudioTypeEnum audioType) {
+        this.audioType = audioType;
+    }
+
+    public AudioTypeEnum getMp3Type() {
+        return mp3Type;
+    }
+
+    public void setMp3Type(AudioTypeEnum mp3Type) {
+        this.mp3Type = mp3Type;
+    }
+
+    public String getXmlFileUrl() {
+        return xmlFileUrl;
+    }
+
+    public void setXmlFileUrl(String xmlFileUrl) {
+        this.xmlFileUrl = xmlFileUrl;
+    }
+
+    public String getMidiUrl() {
+        return midiUrl;
+    }
+
+    public void setMidiUrl(String midiUrl) {
+        this.midiUrl = midiUrl;
+    }
+
+    public String getMusicTags() {
+        return musicTags;
+    }
+
+    public void setMusicTags(String musicTags) {
+        this.musicTags = musicTags;
+    }
+
+    public String getMusicSubjects() {
+        return musicSubjects;
+    }
+
+    public void setMusicSubjects(String musicSubjects) {
+        this.musicSubjects = musicSubjects;
+    }
+
+    public String getComposer() {
+        return composer;
+    }
+
+    public void setComposer(String composer) {
+        this.composer = composer;
+    }
+
+    public YesOrNoEnum getShowFingering() {
+        return showFingering;
+    }
+
+    public void setShowFingering(YesOrNoEnum showFingering) {
+        this.showFingering = showFingering;
+    }
+
+    public YesOrNoEnum getCanEvaluate() {
+        return canEvaluate;
+    }
+
+    public void setCanEvaluate(YesOrNoEnum canEvaluate) {
+        this.canEvaluate = canEvaluate;
+    }
+
+    public ChargeTypeEnum getChargeType() {
+        return chargeType;
+    }
+
+    public void setChargeType(ChargeTypeEnum chargeType) {
+        this.chargeType = chargeType;
+    }
+
+    public String getAudioFileUrls() {
+        return audioFileUrls;
+    }
+
+    public void setAudioFileUrls(String audioFileUrls) {
+        this.audioFileUrls = audioFileUrls;
+    }
+}

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

@@ -12,6 +12,15 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     STUDENT_BUY_TEACHER_MUSIC_SHEET("学员购买老师乐谱"),
     MUSIC_SHEET_AUTH_PASS("乐谱审核通过"),
     MUSIC_SHEET_AUTH_UNPASS("乐谱审核失败"),
+    SMS_VERIFY_CODE_LOGIN("SMS_VERIFY_CODE_LOGIN", "验证码登录"),
+    SMS_VERIFY_CODE_REGISTER("SMS_VERIFY_CODE_REGISTER", "验证码注册"),
+    SMS_VERIFY_CODE_UPDATE_PSW("SMS_VERIFY_CODE_UPDATE_PSW", "密码修改"),
+    SMS_VERIFY_CODE_BANK_CARD("SMS_VERIFY_CODE_BANK_CARD", "银行卡验证"),
+    SMS_VERIFY_CODE("SMS_VERIFY_CODE","验证码"),
+    KAPTCHA_SESSION_KEY("KAPTCHA_SESSION_KEY", "登录图形验证码"),
+    STUDENT_BUY_TEACHER_MUSIC_SHEET("STUDENT_BUY_TEACHER_MUSIC_SHEET","学员购买老师乐谱"),
+    MUSIC_SHEET_AUTH_PASS("MUSIC_SHEET_AUTH_PASS","乐谱审核通过"),
+    MUSIC_SHEET_AUTH_UNPASS("MUSIC_SHEET_AUTH_UNPASS","乐谱审核失败"),
 
     VIDEO_SHEET_AUTH_PASS("视频课审核通过"),
     VIDEO_SHEET_AUTH_UNPASS("视频课审核失败"),

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

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
 import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
+import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
@@ -235,5 +236,12 @@ public interface CourseGroupService extends IService<CourseGroup> {
      * @return
      */
     IPage<VideoLessonGroupDetail> selectVideoGroupPlan(IPage<VideoLessonGroupDetail> page, CourseGroupSearch search);
+
+    /**
+     * 课程组管理-直播课-课程信息
+     * @param groupId
+     * @return
+     */
+    CourseGroup selectLiveGroupInfo(Long groupId);
 }
 

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
+import com.yonge.cooleshow.biz.dal.dto.MusicSheetExport;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
@@ -12,6 +13,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
+
+import java.util.List;
 
 /**
  * MusicSheetService服务类
@@ -223,4 +227,11 @@ public interface MusicSheetService extends IService<MusicSheet> {
      */
     HomeMusicSheetVo getMusicSheetHome();
 
+    /**
+     * 导入曲目
+     *
+     * @param dataList 导入信息
+     * @param userId 导入人id
+     */
+    void importExcel(List<ExcelDataReaderProperty<MusicSheetExport>> dataList, Long userId);
 }

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

@@ -945,6 +945,11 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         return baseMapper.selectVideoGroupPlan(page,search);
     }
 
+    @Override
+    public CourseGroup selectLiveGroupInfo(Long groupId) {
+        return baseMapper.selectById(groupId);
+    }
+
     /**
      * 定时将符合开售日期的未开售的直播课课程组修改为报名中状态
      */

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

@@ -1370,7 +1370,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         List<String> futureDaysNoVacation = futureDays.stream().filter(item -> !holiday.contains(item)).collect(Collectors.toList());
 
         //查询所有老师未开始、进行中的课程
-        List<String> statusList = Lists.newArrayList(CourseScheduleEnum.NOT_START.getCode(), CourseScheduleEnum.ING.getCode());
+//        List<String> statusList = Lists.newArrayList(CourseScheduleEnum.NOT_START.getCode(), CourseScheduleEnum.ING.getCode());
 
         List<Long> teacherIdList = new ArrayList<>();
         getAllTimeConfig(skipHoliday, futureDaysNoVacation, teacherIdList);//跳过节假日配置

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

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
+import com.yonge.cooleshow.biz.dal.dto.MusicSheetExport;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetPayDto;
 import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
@@ -23,6 +24,8 @@ import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import com.yonge.toolset.utils.easyexcel.ErrMsg;
+import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 import com.yonge.toolset.utils.string.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -579,6 +582,26 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
         return homeMusicSheetVo;
     }
 
+    @Override
+    public void importExcel(List<ExcelDataReaderProperty<MusicSheetExport>> dataList, Long userId) {
+
+        List<ErrMsg> errMsgList = new ArrayList<>();
+        dataList.sort(Comparator.comparingInt(ExcelDataReaderProperty::getRowIndex));
+        List<MusicSheetDto> userWithdrawalList = new ArrayList<>();
+
+        for (ExcelDataReaderProperty<MusicSheetExport> readerProperty : dataList) {
+            String errMsg = readerProperty.getErrorMessage();
+            if (!StringUtil.isEmpty(errMsg)) {
+                errMsgList.add(new ErrMsg(readerProperty.getRowIndex(), errMsg));
+                continue;
+            }
+            MusicSheetExport sheetExport = readerProperty.getClazz();
+            // sheetExport TODO 导入
+
+        }
+
+    }
+
     private SysUser getSysUser(Long userId) {
         return Optional.ofNullable(userId)
                        .map(sysUserFeignService::queryUserById)

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

@@ -64,6 +64,8 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 		} else if ("REGISTER".equals(type)) {
 			sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE_REGISTER, mobile,platform.getMsg());
 
+		} else if ("BANK".equals(type)){
+			sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE_BANK_CARD, mobile,platform.getMsg());
 		} else {
 			sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE, mobile,platform.getMsg());
 		}

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

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

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

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