Browse Source

add:曲目消息推送

liujunchi 2 years ago
parent
commit
a39ce7e277

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

@@ -16,10 +16,7 @@ import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.service.MusicTagService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
-import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
-import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
-import com.yonge.cooleshow.biz.dal.vo.StudentMusicSheetOrderVo;
-import com.yonge.cooleshow.biz.dal.vo.TeacherMusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
@@ -210,4 +207,17 @@ public class MusicSheetController extends BaseController {
         }
         return status(musicSheetService.audit(param,sysUser.getId()));
     }
+
+
+
+
+    @PostMapping(value = "/buySendMessage", consumes="application/json", produces="application/json")
+    @ApiOperation(value = "发送学生购买老师曲目信息", httpMethod="POST", consumes="application/json", produces="application/json")
+    public HttpResponseResult<Boolean> buySendMessage(@Valid @RequestBody MusicSheetStudentByMessage param) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+        return status(musicSheetService.sendBuyMessage(param.getTeacherId(),param.getStudentId(),param.getMusicSheetId()));
+    }
 }

+ 42 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ClientEnum.java

@@ -0,0 +1,42 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-28
+ */
+public enum ClientEnum implements BaseEnum<String,ClientEnum> {
+    TEACHER("TEACHER", "老师端"),
+    STUDENT("STUDENT", "学生端"),
+    SYSTEM("SYSTEM", "平台端"),
+
+    ;
+    @EnumValue
+    private String code;
+    private String msg;
+
+    ClientEnum(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

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

@@ -5,6 +5,9 @@ import com.yonge.cooleshow.common.enums.BaseEnum;
 public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     SMS_VERIFY_CODE_LOGIN("SMS_VERIFY_CODE_LOGIN", "验证码登录"),
     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","乐谱审核失败"),
     ;
 
     MessageTypeEnum(String code, String msg) {

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

@@ -186,6 +186,15 @@ public interface MusicSheetService extends IService<MusicSheet> {
     void buyMusicSheetSuccess(UserOrderDetailVo userOrderDetailVo);
 
     /**
+     * 发送学生购买曲目消息
+     *
+     * @param teacherId 老师id
+     * @param studentId 学生id
+     * @param musicSheetId 曲目id
+     */
+    boolean sendBuyMessage(Long teacherId, Long studentId, Long musicSheetId);
+
+    /**
      * 订单生产后,创建记录
      *
      * @param userOrderDetailVo

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

@@ -1,7 +1,6 @@
 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.client.SysUserFeignService;
@@ -23,6 +22,8 @@ import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.exception.BizException;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import com.yonge.toolset.utils.string.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -33,10 +34,7 @@ import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -78,6 +76,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
     private SysUserFeignService sysUserFeignService;
 
     @Autowired
+    private SysMessageService sysMessageService;
+
+    @Autowired
     private UserAccountService userAccountService;
 
     public MusicSheetDao getDao() {
@@ -261,14 +262,27 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
             throw  new BizException("曲目已经过审批");
         }
 
+        boolean flag = false;
         if (musicSheetAuthRecordService.audit(param,userId)) {
             musicSheet.setAuditStatus(param.getAuthStatus());
             musicSheet.setUpdateBy(userId);
             musicSheet.setUpdateTime(new Date());
-            return this.updateById(musicSheet);
-        } else {
-            return false;
+            flag =  this.updateById(musicSheet);
+        }
+
+        // 发送审核通知
+        Map<Long,String> receivers = new HashMap<>();
+        SysUser teacher = sysUserFeignService.queryUserById(musicSheet.getUserId());
+        receivers.put(musicSheet.getUserId(), teacher.getPhone());
+        if (AuthStatusEnum.PASS.getCode().equals(param.getAuthStatus().getCode())) {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,MessageTypeEnum.MUSIC_SHEET_AUTH_PASS,
+                                               receivers,null,0,null,ClientEnum.TEACHER.getCode(),musicSheet.getMusicSheetName());
+        } else if (AuthStatusEnum.UNPASS.getCode().equals(param.getAuthStatus().getCode())){
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,MessageTypeEnum.MUSIC_SHEET_AUTH_UNPASS,
+                                               receivers,null,0,null,ClientEnum.TEACHER.getCode(),musicSheet.getMusicSheetName(),param.getRemark());
         }
+
+        return flag;
     }
 
     @Override
@@ -380,8 +394,50 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
         BigDecimal serviceFeeAmount = actualPrice.multiply(serviceFee).setScale(2, RoundingMode.HALF_UP);
 
         // 保存购买记录
+        addMusicSheetPurchaseRecord(userOrderDetailVo, actualPrice, serviceFeeAmount);
+
+        // 加入账户
+        addTeacherAccount(userOrderDetailVo, actualPrice, serviceFeeAmount, userOrderDetailVo.getBizId());
+
+        // 消息通知
+        sendBuyMessage(userOrderDetailVo.getMerchId(),userOrderDetailVo.getUserId(),userOrderDetailVo.getBizId());
+    }
+
+    /**
+     * 发送购买消息通知
+     *
+     * @param teacherId 老师id
+     * @param studentId 学生id
+     * @param musicSheetId 曲目id
+     */
+    @Override
+    public boolean sendBuyMessage(Long teacherId, Long studentId, Long musicSheetId) {
+        SysUser teacher = sysUserFeignService.queryUserById(teacherId);
+        SysUser student = sysUserFeignService.queryUserById(studentId);
+        if (StringUtil.isEmpty(teacher.getPhone())) {
+            log.warn("teacher id {} name {} 手机号不存在,消息推送失败",teacher.getId(),teacher.getUsername());
+        }
+        Map<Long,String> receivers = new HashMap<>();
+        receivers.put(teacherId, teacher.getPhone());
+
+        MusicSheet musicSheet = this.getById(musicSheetId);
+
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
+                                           MessageTypeEnum.STUDENT_BUY_TEACHER_MUSIC_SHEET, receivers, null, 
+                                           0, null,ClientEnum.TEACHER.getCode(),student.getUsername(),musicSheet.getMusicSheetName());
+        return true;
+    }
+
+    /**
+     * 保存购买记录
+     *
+     * @param userOrderDetailVo 订单信息
+     * @param actualPrice  付款价格
+     * @param serviceFeeAmount 服务费
+     */
+    private void addMusicSheetPurchaseRecord(UserOrderDetailVo userOrderDetailVo, BigDecimal actualPrice, BigDecimal serviceFeeAmount) {
         MusicSheetPurchaseRecord musicSheetPurchaseRecord = musicSheetPurchaseRecordService
-                .checkPurchase(userOrderDetailVo.getUserId(),userOrderDetailVo.getBizId());
+                .checkPurchase(userOrderDetailVo.getUserId(), userOrderDetailVo.getBizId());
         if (musicSheetPurchaseRecord == null) {
             musicSheetPurchaseRecord = new MusicSheetPurchaseRecord();
         }
@@ -395,8 +451,18 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
         musicSheetPurchaseRecord.setOrderStatus(OrderStatusEnum.PAID);
         musicSheetPurchaseRecord.setStudentId(userOrderDetailVo.getUserId());
         musicSheetPurchaseRecordService.save(musicSheetPurchaseRecord);
+    }
 
-        // 加入账户
+    /**
+     * 添加金额到老师账户
+     *
+     * @param userOrderDetailVo 订单信息
+     * @param actualPrice 付款价格
+     * @param serviceFeeAmount 服务费
+     * @param musicSheetId 曲目id
+     */
+    private void addTeacherAccount(UserOrderDetailVo userOrderDetailVo, BigDecimal actualPrice, BigDecimal serviceFeeAmount,
+                                   Long musicSheetId) {
         UserAccountRecordDto userAccountRecordDto = new UserAccountRecordDto();
         userAccountRecordDto.setUserId(userOrderDetailVo.getMerchId());
         userAccountRecordDto.setFrozenType(FrozenTypeEnum.NONE);
@@ -404,7 +470,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
         userAccountRecordDto.setTransAmount(actualPrice.subtract(serviceFeeAmount).setScale(2, RoundingMode.HALF_UP));
         userAccountRecordDto.setInOrOut(InOrOutEnum.IN);
         userAccountRecordDto.setBizType(AccountBizTypeEnum.MUSIC);
-        userAccountRecordDto.setBizId(musicSheetPurchaseRecord.getMusicSheetId());
+        userAccountRecordDto.setBizId(musicSheetId);
         userAccountRecordDto.setBizName(userOrderDetailVo.getGoodName());
         userAccountRecordDto.setOrderNo(userOrderDetailVo.getOrderNo());
         userAccountService.accountChange(userAccountRecordDto);

+ 47 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetStudentByMessage.java

@@ -0,0 +1,47 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-28
+ */
+@ApiModel("学生购买曲目发送消息")
+public class MusicSheetStudentByMessage {
+
+    @ApiModelProperty("学生id")
+    private Long studentId;
+
+    @ApiModelProperty("老师id")
+    private Long teacherId;
+
+    @ApiModelProperty("曲目id")
+    private Long musicSheetId;
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public Long getMusicSheetId() {
+        return musicSheetId;
+    }
+
+    public void setMusicSheetId(Long musicSheetId) {
+        this.musicSheetId = musicSheetId;
+    }
+}