Pārlūkot izejas kodu

add:曲目购买

liujunchi 2 gadi atpakaļ
vecāks
revīzija
b19b2caaa1

+ 38 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/MusicSheetPayDto.java

@@ -0,0 +1,38 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+/**
+ * Description 曲目购买参数
+ *
+ * @author liujunchi
+ * @date 2022-04-21
+ */
+@ApiModel("曲目购买参数")
+public class MusicSheetPayDto {
+
+    @ApiModelProperty("曲目id")
+    private Long musicSheetId;
+
+    @ApiModelProperty("订单金额")
+    private BigDecimal actualPrice;
+
+    public Long getMusicSheetId() {
+        return musicSheetId;
+    }
+
+    public void setMusicSheetId(Long musicSheetId) {
+        this.musicSheetId = musicSheetId;
+    }
+
+    public BigDecimal getActualPrice() {
+        return actualPrice;
+    }
+
+    public void setActualPrice(BigDecimal actualPrice) {
+        this.actualPrice = actualPrice;
+    }
+}

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

@@ -4,11 +4,14 @@ 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.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.req.TeacherMusicSheetAuditReq;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 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;
 
 /**
  * MusicSheetService服务类
@@ -167,4 +170,18 @@ public interface MusicSheetService extends IService<MusicSheet> {
      */
     boolean saveMusicSheet(MusicSheetDto musicSheetDto,Long userId);
 
+    /**
+     * 曲目购买前的验证
+     *
+     * @param orderReqInfo 购买信息
+     * @return
+     */
+    HttpResponseResult<OrderCreateRes> buyMusicSheetCheck(OrderReq.OrderReqInfo orderReqInfo);
+
+    /**
+     * 曲目购买成功后的记录数据
+     *
+     * @param userOrderDetailVo
+     */
+    void buyMusicSheetSuccess(UserOrderDetailVo userOrderDetailVo);
 }

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

@@ -1,11 +1,15 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 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.MusicSheetPayDto;
+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.*;
 import com.yonge.cooleshow.biz.dal.entity.*;
@@ -13,6 +17,8 @@ import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.exception.BizException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -290,4 +296,44 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
             return this.saveOrUpdate(musicSheet);
         }
     }
+
+    @Override
+    public HttpResponseResult<OrderCreateRes> buyMusicSheetCheck(OrderReq.OrderReqInfo orderReqInfo) {
+
+        // todo 下单前的验证
+
+        MusicSheetPayDto musicSheetPayDto = JSON.parseObject(
+                JSON.toJSONString(orderReqInfo.getBizContent()), MusicSheetPayDto.class);
+
+        MusicSheet musicSheet = this.getById(musicSheetPayDto.getMusicSheetId());
+        OrderCreateRes orderCreateRes = new OrderCreateRes();
+        if (musicSheet == null) {
+            // todo
+        }
+
+
+        orderCreateRes.setRes(true);
+        orderCreateRes.setMerchId(musicSheet.getUserId());
+        orderCreateRes.setGoodType(orderCreateRes.getGoodType());
+        orderCreateRes.setBizId(musicSheet.getId());
+        orderCreateRes.setGoodNum(1);
+        orderCreateRes.setOriginalPrice(musicSheet.getMusicPrice());
+        orderCreateRes.setExpectPrice(musicSheet.getMusicPrice());
+        return  HttpResponseResult.succeed(orderCreateRes);
+
+    }
+
+    @Override
+    public void buyMusicSheetSuccess(UserOrderDetailVo userOrderDetailVo) {
+        MusicSheetPurchaseRecord musicSheetPurchaseRecord = new MusicSheetPurchaseRecord();
+        musicSheetPurchaseRecord.setMusicSheetId(userOrderDetailVo.getBizId());
+        musicSheetPurchaseRecord.setOrderNo(userOrderDetailVo.getOrderNo());
+        musicSheetPurchaseRecord.setPurchasePrice(userOrderDetailVo.getExpectPrice());
+        musicSheetPurchaseRecord.setPurchaseTime(new Date());
+        musicSheetPurchaseRecord.setTeacherId(userOrderDetailVo.getMerchId());
+        musicSheetPurchaseRecord.setOrderStatus(YesOrNoEnum.YES);
+        musicSheetPurchaseRecord.setStudentId(userOrderDetailVo.getUserId());
+        musicSheetPurchaseRecordService.save(musicSheetPurchaseRecord);
+
+    }
 }

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

@@ -60,6 +60,9 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     @Autowired
     private VideoLessonPurchaseRecordService recordService;
 
+    @Autowired
+    private MusicSheetService musicSheetService;
+
     //验证订单是否可以下单
     private static final Map<GoodTypeEnum, Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
     //插入订单后执行
@@ -76,11 +79,16 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         orderCreate.put(GoodTypeEnum.VIP, vipCardService::orderCreate);
         //直播课程购买
         orderCreate.put(GoodTypeEnum.LIVE, courseGroupService::buyLiveCourse);
+
         //陪练课购买
         orderCreate.put(GoodTypeEnum.PRACTICE, scheduleService::buyPracticeCourse);
         //视频课购买
         orderCreate.put(GoodTypeEnum.VIDEO, recordService::buyVideoCourse);
 
+        //曲目购买
+        orderCreate.put(GoodTypeEnum.MUSIC,musicSheetService::buyMusicSheetCheck);
+
+
         /**********订单生成后******************/
 
         /**********订单完成后******************/
@@ -88,11 +96,16 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         orderSuccess.put(GoodTypeEnum.VIP, vipCardService::orderSuccess);
         //直播课程购买
         orderSuccess.put(GoodTypeEnum.LIVE, courseGroupService::buyLiveCourseSuccess);
+
         //陪练课购买
         orderSuccess.put(GoodTypeEnum.PRACTICE, scheduleService::buyPracticeCourseSuccess);
         //视频课购买
         orderSuccess.put(GoodTypeEnum.VIDEO, recordService::buyVideoCourseSuccess);
 
+
+        //曲目购买
+        orderSuccess.put(GoodTypeEnum.MUSIC,musicSheetService::buyMusicSheetSuccess);
+
         /**********订单取消后******************/
         //陪练课购买
         orderCancel.put(GoodTypeEnum.PRACTICE, scheduleService::buyPracticeCourseFailed);

+ 26 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/CheckVo.java

@@ -0,0 +1,26 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description 检查功能返回
+ *
+ * @author liujunchi
+ * @date 2022-04-21
+ */
+@ApiModel("返回检查结果")
+public class CheckVo {
+
+    @ApiModelProperty("检查结果 1:是,0:否 ")
+    private YesOrNoEnum check;
+
+    public YesOrNoEnum getCheck() {
+        return check;
+    }
+
+    public void setCheck(YesOrNoEnum check) {
+        this.check = check;
+    }
+}

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

@@ -24,12 +24,23 @@ public class MusicSheetDetailVo extends MusicSheet {
     @ApiModelProperty("上传老师名称")
     private String userName;
 
+    @ApiModelProperty("上传用户头像")
+    private String userAvatar;
+
     @ApiModelProperty("标签名")
     private String musicTagNames;
 
     @ApiModelProperty("声部名")
     private String subjectNames;
 
+    public String getUserAvatar() {
+        return userAvatar;
+    }
+
+    public void setUserAvatar(String userAvatar) {
+        this.userAvatar = userAvatar;
+    }
+
     public String getMusicTagNames() {
         return musicTagNames;
     }

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

@@ -170,6 +170,7 @@
         ,msa.metronome_url_ as accompanimentMetronomeUrl
         ,msa.track_ as track
         ,su.username_ as userName
+        ,su.avatar_ as userAvatar
         ,(select group_concat(mt.name_) from music_tag mt
         where find_in_set(mt.id_,t.music_tag_) and mt.del_flag_ = 0) as musicTagNames
         ,(select group_concat(s.name_) from subject s

+ 44 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.student.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
@@ -9,18 +10,23 @@ import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.CheckVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
 import com.yonge.cooleshow.common.page.QueryInfo;
+import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
+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.web.bind.annotation.*;
 
+import javax.validation.Valid;
+
 /**
  * 曲谱表 web 控制层
  * @author yzp
@@ -138,4 +144,42 @@ public class MusicSheetController extends BaseController {
         return succeed(PageUtil.pageInfo(sheetVoIPage));
     }
 
+
+    /**
+     * 最近练习
+     */
+    @GetMapping("/realNameAuth/check")
+    @ApiOperation(value = "检查实名认证")
+    public HttpResponseResult<CheckVo> realNameAuthCheck() {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+
+        CheckVo checkVo = new CheckVo();
+        if (StringUtil.isEmpty(sysUser.getIdCardNo())) {
+            checkVo.setCheck(YesOrNoEnum.NO);
+        }  else {
+            checkVo.setCheck(YesOrNoEnum.YES);
+        }
+        return succeed(checkVo);
+    }
+
+
+    /**
+     * 实名认证
+     */
+    @PostMapping(value = "/realNameAuth" ,consumes="application/json", produces="application/json")
+    @ApiOperation(value = "实名认证", httpMethod="POST",consumes="application/json", produces="application/json")
+    public HttpResponseResult<IdcardInfoExtractor> realNameAuth(@Valid @RequestBody RealnameAuthReq realNameAuthDto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+
+        return sysUserFeignService.realNameAuth(realNameAuthDto);
+    }
+
+
+
 }