liujc 1 년 전
부모
커밋
70dbce4d47
35개의 변경된 파일675개의 추가작업 그리고 616개의 파일을 삭제
  1. 8 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java
  2. 5 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java
  3. 15 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java
  4. 1 11
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/SysMessageController.java
  5. 3 18
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java
  6. 19 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/SendTenantAlbumMessageTask.java
  7. 15 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java
  8. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/JumpUrlDto.java
  9. 4 136
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysMessage.java
  10. 4 103
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysMessageConfig.java
  11. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  12. 13 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/UserTenantAlbumRecordMapper.java
  13. 18 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/SysMusicCompareRecordQueryInfo.java
  14. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentService.java
  15. 2 37
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysMessageService.java
  16. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserService.java
  17. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantActivationCodeService.java
  18. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserTenantAlbumRecordService.java
  19. 39 23
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java
  20. 29 15
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  21. 7 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java
  22. 39 18
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java
  23. 28 146
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMessageServiceImpl.java
  24. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysUserServiceImpl.java
  25. 68 30
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java
  26. 56 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumServiceImpl.java
  27. 69 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserTenantAlbumRecordServiceImpl.java
  28. 51 30
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java
  29. 50 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UserTenantAlbumRecordWrapper.java
  30. 2 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMessageMapper.xml
  31. 61 10
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml
  32. 13 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserTenantAlbumRecordMapper.xml
  33. 1 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenClient.java
  34. 7 5
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java
  35. 2 1
      toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/message/provider/JiguangPushPlugin.java

+ 8 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/AdminFeignService.java

@@ -195,4 +195,12 @@ public interface AdminFeignService {
      */
     @GetMapping("/task/sendPlatformAuditMessage")
     HttpResponseResult<Object> sendPlatformAuditMessage();
+
+    /**
+     * 机构学生训练教材过期
+     */
+    @GetMapping("/task/sendTenantAlbumMessage")
+    HttpResponseResult<Object> sendTenantAlbumMessage();
+
+
 }

+ 5 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/AdminFeignServiceFallback.java

@@ -188,6 +188,11 @@ public class AdminFeignServiceFallback implements AdminFeignService {
     }
 
     @Override
+    public HttpResponseResult<Object> sendTenantAlbumMessage() {
+        return null;
+    }
+
+    @Override
     public ImUserInfo register(String userId, String clientType, String username, String avatar) {
         return null;
     }

+ 15 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java

@@ -75,6 +75,9 @@ public class TaskController extends BaseController {
     @Autowired
     private ImGroupService imGroupService;
 
+    @Autowired
+    private UserTenantAlbumRecordService userTenantAlbumRecordService;
+
     /***
      * 轮询用户订单
      * @author liweifan
@@ -231,4 +234,16 @@ public class TaskController extends BaseController {
     }
 
 
+    /**
+     * 机构学生训练教材过期
+     */
+    @GetMapping("/sendTenantAlbumMessage")
+    public HttpResponseResult<Object> sendTenantAlbumMessage() {
+
+        // 群发消息定时
+        userTenantAlbumRecordService.sendTenantAlbumMessage();
+
+        return HttpResponseResult.succeed();
+    }
+
 }

+ 1 - 11
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/SysMessageController.java

@@ -2,7 +2,6 @@ package com.yonge.cooleshow.student.controller;
 
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.dao.AppVersionInfoDao;
 import com.yonge.cooleshow.biz.dal.dto.search.SysMessageQueryInfo;
 import com.yonge.cooleshow.biz.dal.entity.SysMessage;
 import com.yonge.cooleshow.biz.dal.enums.MessageSendMode;
@@ -19,12 +18,7 @@ import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -35,13 +29,9 @@ public class SysMessageController extends BaseController {
 
 	@Autowired
 	private SysMessageService sysMessageService;
-
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
 
-	@Autowired
-	private AppVersionInfoDao appVersionInfoDao;
-
 	@ApiOperation("获取所有消息列表")
 	@PostMapping(value = "list")
 	public HttpResponseResult<PageInfo<SysMessage>> list(@RequestBody SysMessageQueryInfo queryInfo){

+ 3 - 18
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java

@@ -53,9 +53,7 @@ import java.io.File;
 import java.text.MessageFormat;
 import java.text.ParsePosition;
 import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 
 @Slf4j
@@ -160,27 +158,14 @@ public class TenantActivationCodeController extends BaseController {
     public HttpResponseResult<Boolean> sendCancel(@RequestParam("id") Long id) {
         TenantInfo tenantInfo = getTenantInfo();
         TenantActivationCode activationCode = tenantActivationCodeService.getById(id);
-        if (activationCode == null || !tenantInfo.getId().equals(activationCode.getTenantId())) {
-            throw new BizException("激活码不存在");
-        }
-        boolean update = tenantActivationCodeService.lambdaUpdate()
-                .set(TenantActivationCode::getSendStatus, EActivationCode.WAIT)
-                .set(TenantActivationCode::getActivationPhone, "")
-                .eq(TenantActivationCode::getId, id)
-                .eq(TenantActivationCode::getActivationStatus, false)
-                .eq(TenantActivationCode::getSendStatus, EActivationCode.SEND)
-                .update();
-        if (!update) {
-            throw new BizException("激活码已经激活");
-        }
+        tenantActivationCodeService.sendCancel(tenantInfo, activationCode);
         return succeed();
     }
 
     @ApiOperation(value = "批量激活码发放取消", notes = "传入 激活码的ID")
     @PostMapping("/batchSendCancel")
     public HttpResponseResult<Boolean> batchSendCancel(@RequestParam("ids") String ids) {
-        TenantInfo tenantInfo = getTenantInfo();
-        tenantActivationCodeService.batchSendCancel(tenantInfo, ids);
+        tenantActivationCodeService.batchSendCancel(getTenantInfo(), ids);
         return succeed();
     }
 

+ 19 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/SendTenantAlbumMessageTask.java

@@ -0,0 +1,19 @@
+package com.yonge.cooleshow.task.jobs;
+
+import com.yonge.cooleshow.api.feign.AdminFeignService;
+import com.yonge.cooleshow.task.core.BaseTask;
+import com.yonge.cooleshow.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SendTenantAlbumMessageTask extends BaseTask {
+
+    @Autowired
+    private AdminFeignService adminFeignService;
+
+    @Override
+    public void execute() throws TaskException {
+        Object o = adminFeignService.sendTenantAlbumMessage();
+    }
+}

+ 15 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/task/TaskController.java

@@ -90,6 +90,9 @@ public class TaskController extends BaseController {
     @Autowired
     private LiveRoomService liveRoomService;
 
+    @Autowired
+    private UserTenantAlbumRecordService userTenantAlbumRecordService;
+
     /***
      * 轮询用户订单
      * @author liweifan
@@ -247,4 +250,16 @@ public class TaskController extends BaseController {
 
         }
     }
+
+    /**
+     * 机构学生训练教材过期
+     */
+    @GetMapping("/sendTenantAlbumMessage")
+    public HttpResponseResult<Object> sendTenantAlbumMessage() {
+
+        // 群发消息定时
+        userTenantAlbumRecordService.sendTenantAlbumMessage();
+
+        return HttpResponseResult.succeed();
+    }
 }

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

@@ -25,6 +25,17 @@ public class JumpUrlDto {
     @ApiModelProperty("其它参数")
     private String params ="";
 
+    @ApiModelProperty("客户端")
+    private String clientType ="";
+
+    public String getClientType() {
+        return clientType;
+    }
+
+    public void setClientType(String clientType) {
+        this.clientType = clientType;
+    }
+
     public String getAction() {
         return action;
     }

+ 4 - 136
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysMessage.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.entity;
 
 import io.swagger.annotations.ApiModelProperty;
 
+import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import com.yonge.cooleshow.biz.dal.enums.MessageSendMode;
@@ -11,6 +12,7 @@ import com.yonge.cooleshow.common.entity.BaseEntity;
 /**
  * 对应数据库表(sys_message):
  */
+@Data
 public class SysMessage extends BaseEntity {
 
 	/** 主键 */
@@ -75,13 +77,8 @@ public class SysMessage extends BaseEntity {
 	@ApiModelProperty(value = "极光推送客户端标识",required = false)
 	private String clientId;
 
-	public String getClientId() {
-		return clientId;
-	}
-
-	public void setClientId(String clientId) {
-		this.clientId = clientId;
-	}
+	@ApiModelProperty(value = "图标",required = false)
+	private String img;
 
 	public SysMessage() {
 	}
@@ -94,137 +91,8 @@ public class SysMessage extends BaseEntity {
 		this.userId = userId;
 		this.memo = memo;
 	}
-
-	public void setId(Long id){
-		this.id = id;
-	}
-	
-	public Long getId(){
-		return this.id;
-	}
-			
-	public void setTitle(String title){
-		this.title = title;
-	}
-	
-	public String getTitle(){
-		return this.title;
-	}
-			
-	public void setContent(String content){
-		this.content = content;
-	}
-	
-	public String getContent(){
-		return this.content;
-	}
-			
-	public void setReceiver(String receiver){
-		this.receiver = receiver;
-	}
-	
-	public String getReceiver(){
-		return this.receiver;
-	}
-			
-	public void setSendTime(java.util.Date sendTime){
-		this.sendTime = sendTime;
-	}
-	
-	public java.util.Date getSendTime(){
-		return this.sendTime;
-	}
-			
-	public void setErrorMsg(String errorMsg){
-		this.errorMsg = errorMsg;
-	}
-	
-	public String getErrorMsg(){
-		return this.errorMsg;
-	}
-			
-	public void setCreateOn(java.util.Date createOn){
-		this.createOn = createOn;
-	}
-	
-	public java.util.Date getCreateOn(){
-		return this.createOn;
-	}
-			
-	public void setModifyOn(java.util.Date modifyOn){
-		this.modifyOn = modifyOn;
-	}
-	
-	public java.util.Date getModifyOn(){
-		return this.modifyOn;
-	}
-			
-	public void setUserId(Long userId){
-		this.userId = userId;
-	}
-	
-	public Long getUserId(){
-		return this.userId;
-	}
-			
-	public void setMemo(String memo){
-		this.memo = memo;
-	}
-	
-	public String getMemo(){
-		return this.memo;
-	}
-
-	public MessageSendMode getType() {
-		return type;
-	}
-
-	public void setType(MessageSendMode type) {
-		this.type = type;
-	}
-
-	public SendStatusEnum getStatus() {
-		return status;
-	}
-
-	public void setStatus(SendStatusEnum status) {
-		this.status = status;
-	}
-
-	public Integer getReadStatus() {
-		return readStatus;
-	}
-
-	public void setReadStatus(Integer readStatus) {
-		this.readStatus = readStatus;
-	}
-
-	public String getGroup() {
-		return group;
-	}
-
-	public void setGroup(String group) {
-		this.group = group;
-	}
-
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);
 	}
-
-	public Long getMessageConfigId() {
-		return messageConfigId;
-	}
-
-	public void setMessageConfigId(Long messageConfigId) {
-		this.messageConfigId = messageConfigId;
-	}
-
-	public String getSubType() {
-		return subType;
-	}
-
-	public void setSubType(String subType) {
-		this.subType = subType;
-	}
 }

+ 4 - 103
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysMessageConfig.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.entity;
 
 import com.yonge.cooleshow.biz.dal.enums.MessageIconTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
@@ -9,6 +10,7 @@ import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 /**
  * 对应数据库表(sys_message_config):
  */
+@Data
 public class SysMessageConfig {
 
 	/**  */
@@ -48,112 +50,11 @@ public class SysMessageConfig {
 	@ApiModelProperty("h5跳转链接")
 	private String actionUrl;
 
-	public String getAction() {
-		return action;
-	}
-
-	public void setAction(String action) {
-		this.action = action;
-	}
-
-	public String getPageTag() {
-		return pageTag;
-	}
-
-	public void setPageTag(String pageTag) {
-		this.pageTag = pageTag;
-	}
-
-	public String getParams() {
-		return params;
-	}
-
-	public void setParams(String params) {
-		this.params = params;
-	}
-
-	public String getActionUrl() {
-		return actionUrl;
-	}
-
-	public void setActionUrl(String actionUrl) {
-		this.actionUrl = actionUrl;
-	}
-
-	public Integer getSendFlag() {
-		return sendFlag;
-	}
-
-	public void setSendFlag(Integer sendFlag) {
-		this.sendFlag = sendFlag;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public Long getId() {
-		return this.id;
-	}
-
-	public MessageTypeEnum getMessageType() {
-		return messageType;
-	}
-
-	public void setMessageType(MessageTypeEnum messageType) {
-		this.messageType = messageType;
-	}
-
-	public void setContent(String content) {
-		this.content = content;
-	}
-
-	public String getContent() {
-		return this.content;
-	}
-
-	public void setDescription(String description) {
-		this.description = description;
-	}
-
-	public String getDescription() {
-		return this.description;
-	}
-
-	public void setModifyOn(java.util.Date modifyOn) {
-		this.modifyOn = modifyOn;
-	}
-
-	public java.util.Date getModifyOn() {
-		return this.modifyOn;
-	}
-
-	public void setUrl(String url) {
-		this.url = url;
-	}
-
-	public String getUrl() {
-		return this.url;
-	}
-
-	public String getGroup() {
-		return group;
-	}
-
-	public void setGroup(String group) {
-		this.group = group;
-	}
+	@ApiModelProperty("图标")
+	private String icon;
 
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);
 	}
-
-	public MessageIconTypeEnum getSubType() {
-		return subType;
-	}
-
-	public void setSubType(MessageIconTypeEnum subType) {
-		this.subType = subType;
-	}
 }

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

@@ -121,6 +121,15 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
 
     // 平台审核提醒
     PLATFORM_AUDIT_UNBIND("平台审核提醒"),
+    TENANT_VIP_BUY("开通平台会员"),
+    TENANT_VIP_EXPIRE("平台会员到期"),
+    TENANT_PLATFORM_ADD_VIP("后台添加平台会员"),
+    TENANT_ALBUM_BUY("购买训练教程"),
+    TENANT_ALBUM_EXPIRE("训练教程到期"),
+    TENANT_SEND_CODE("发放激活码"),
+    TENANT_CODE_SENDCANCEL("激活码被撤回"),
+    TENANT_MUSIC_BUY("购买曲目"),
+    TENANT_STUDENT_CHANGE("机构变更"),
     ;
 
     MessageTypeEnum(String msg) {

+ 13 - 9
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/UserTenantAlbumRecordMapper.java

@@ -5,6 +5,7 @@ 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.TenantAlbum;
+import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
@@ -18,17 +19,20 @@ import com.yonge.cooleshow.biz.dal.wrapper.UserTenantAlbumRecordWrapper;
 @Repository
 public interface UserTenantAlbumRecordMapper extends BaseMapper<UserTenantAlbumRecord> {
 
-	/**
-	 * 分页查询
-	 * @param page IPage<UserTenantAlbumRecordWrapper.UserTenantAlbumRecord>
-	 * @param param UserTenantAlbumRecordWrapper.UserTenantAlbumRecordQuery
-	 * @return List<UserTenantAlbumRecordWrapper.UserTenantAlbumRecord>
-	 */
-	List<TenantAlbumWrapper.TenantAlbum> selectPage(@Param("page") IPage<UserTenantAlbumRecord> page, @Param("param") UserTenantAlbumRecordWrapper.UserTenantAlbumRecordQuery param);
+    /**
+     * 分页查询
+     *
+     * @param page  IPage<UserTenantAlbumRecordWrapper.UserTenantAlbumRecord>
+     * @param param UserTenantAlbumRecordWrapper.UserTenantAlbumRecordQuery
+     * @return List<UserTenantAlbumRecordWrapper.UserTenantAlbumRecord>
+     */
+    List<TenantAlbumWrapper.TenantAlbum> selectPage(@Param("page") IPage<UserTenantAlbumRecord> page, @Param("param") UserTenantAlbumRecordWrapper.UserTenantAlbumRecordQuery param);
 
-	List<Long> selectTenantIds(@Param("id") Long id);
+    List<Long> selectTenantIds(@Param("id") Long id);
 
-	List<TenantAlbum> selectTenantAlbumInfo(@Param("tenantIds") List<Long> tenantIds);
+    List<TenantAlbum> selectTenantAlbumInfo(@Param("tenantIds") List<Long> tenantIds);
 
     Long ifBuy(@Param("tenantAlbumId") Long tenantAlbumId, @Param("studentId") Long studentId);
+
+    List<UserTenantAlbumRecordWrapper.UserTenantAlbumRecord> selectTemporaryRecord();
 }

+ 18 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/SysMusicCompareRecordQueryInfo.java

@@ -49,6 +49,24 @@ public class SysMusicCompareRecordQueryInfo {
         @ApiModelProperty(name = "机构编号")
         private Long tenantId;
 
+        @ApiModelProperty(name = "最小训练总时长")
+        private Integer minTrainTimes;
+
+        @ApiModelProperty(name = "最大训练总时长")
+        private Integer maxTrainTimes;
+
+        @ApiModelProperty(name = "最小训练天数")
+        private Integer minTrainDays;
+
+        @ApiModelProperty(name = "最大训练天数")
+        private Integer maxTrainDays;
+
+        @ApiModelProperty(name = "最小平均训练时长")
+        private Integer minAvgTrainTimes;
+
+        @ApiModelProperty(name = "最大平均训练时长")
+        private Integer maxAvgTrainTimes;
+
         @ApiModelProperty(name = "排序字段")
         private String sortField = "trainTimes";
 

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

@@ -130,4 +130,6 @@ public interface StudentService extends IService<Student> {
      */
     void updateTenant(Student student, Long toTenantId);
 
+    void sendStudentTenantChange(Student student, Long toTenantId);
+
 }

+ 2 - 37
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysMessageService.java

@@ -16,24 +16,6 @@ import com.yonge.toolset.mybatis.service.BaseService;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext.MessageSender;
 
 public interface SysMessageService extends BaseService<Long, SysMessage> {
-	
-	public PageInfo<SysMessageDto> queryListPage(QueryInfo queryInfo);
-
-	/**
-	 * 修改消息对象
-	 * @param message
-	 * @return
-	 */
-	public int updateMessage(SysMessage message);
-
-	/**
-	 * 推送站内消息
-	 * @param userIds
-	 * @param messageType
-	 * @return
-	 */
-	boolean batchSeoMessage(Set<Long> userIds, MessageTypeEnum messageType,String memo, Object... args);
-
 	/**
 	 * 发送消息
 	 * @param messageSender 消息发送者
@@ -54,19 +36,6 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 
 
 	/**
-	 * 推送极光自定义消息
-	 * @param messageType 消息类型
-	 * @param receivers 消息接收者(Key:用户编号  value:消息接收对象)
-	 * @param triggerTime 触发时间
-	 * @param readStatus 阅读状态(0-未读  1-已读)
-	 * @param url 超链接地址
-	 * @param args 参数
-	 * @return
-	 */
-	public void batchPushMessage(MessageTypeEnum messageType, Map<Long, String> receivers, Date triggerTime,
-			Integer readStatus, String url,String jpushType,String sound,String channelId, Object... args);
-
-	/**
 	 * 发送消息
 	 * @param messageSender 消息发送者
 	 * @param userId 用户编号
@@ -101,12 +70,6 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	 */
 	public String getSendedVerificationCode(MessageTypeEnum type, String mobileNOOrEmailAddr);
 
-	/**
-	 * 删除已有的key
-	 * @param type
-	 * @param mobileNOOrEmailAddr
-	 */
-	public void delSendedVerificationCode(MessageTypeEnum type, String mobileNOOrEmailAddr);
 
 	/**
 	 * 查询消息未读条数
@@ -132,4 +95,6 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	public List<SysMessage> queryUserInRecentMinList(String mobile, int recentMin, MessageSendMode type);
 
 	String selectConfigUrl(String messageType,Object ...param);
+
+	String selectConfigUrlJumpType(String messageType, String jumpType, Object... param);
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserService.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 
 import java.util.List;
@@ -10,6 +11,8 @@ import java.util.Map;
 
 public interface SysUserService{
 
+    SysUserMapper getDao();
+
     Long getUserId();
 
     SysUser getUser();

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

@@ -9,8 +9,10 @@ import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper;
 import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 机构激活码
@@ -55,6 +57,8 @@ public interface TenantActivationCodeService extends IService<TenantActivationCo
     void sendActivationCode(Long tenantId, Long tenantAlbumPurchaseId, List<String> activationCodeList,
                             List<Long> studentIdList);
 
+    void sendCancelActivationCodeMessage(Map<Long, String> receivers, String tenantName);
+
     void active(String activationCode, Long studentId);
 
 
@@ -81,6 +85,9 @@ public interface TenantActivationCodeService extends IService<TenantActivationCo
 
     void resend(String code, Long userId, Long tenantId, Long tenantAlbumPurchaseId);
 
+    @Transactional(rollbackFor = Exception.class)
+    void sendCancel(TenantInfo tenantInfo, TenantActivationCode activationCode);
+
     void batchSendCancel(TenantInfo tenantInfo, String ids);
 
     void batchResend(TenantInfo tenantInfo, Long tenantAlbumPurchaseId, List<String> activationCodeList, List<Long> studentIdList);

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

@@ -2,6 +2,7 @@ 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.entity.TenantAlbum;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.UserTenantAlbumRecordWrapper;
@@ -71,4 +72,11 @@ public interface UserTenantAlbumRecordService extends IService<UserTenantAlbumRe
     List<Long> getUseAlbumIdsByUserId(Long userId,ClientEnum clientType);
 
     TenantAlbumWrapper.TenantAlbum detailAlbum(String albumId);
+
+    /**
+     * 训练教程过期通知
+     */
+    void sendTenantAlbumMessage();
+
+    UserTenantAlbumRecord getNewestByTenantAlbumId(Long tenantAlbumId, Long userId, ClientEnum client);
 }

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

@@ -221,7 +221,7 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
         getUserVipInfoVo(vipCardRecord);
 
         // 发消息
-        sendAddVipMessage(vipSubmitReq.getUserId(),client,vipSubmitReq.getTimes(),vipSubmitReq.getType(),vipSubmitReq.getReason());
+        sendAddVipMessage(vipSubmitReq.getUserId(),sysUser.getPhone(),client,vipSubmitReq.getTimes(),vipSubmitReq.getType(),vipSubmitReq.getReason());
 
         return true;
     }
@@ -296,18 +296,22 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
 
     }
 
-    private void sendAddVipMessage(Long userId, ClientEnum client, Integer times, PeriodEnum type, String reason) {
+    private void sendAddVipMessage(Long userId,String phone, ClientEnum client, Integer times, PeriodEnum type, String reason) {
         try {
-            SysUser user = sysUserFeignService.queryUserById(userId);
-
-            if (user == null) {
-                return;
-            }
-
             Map<Long, String> receivers = new HashMap<>();
-            receivers.put(userId, user.getPhone());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PLATFORM_ADD_VIP,
-                                               receivers, null, 0, null, client.getCode(), times,type.getMsg(),reason);
+            receivers.put(userId, phone);
+            Student student = studentService.getById(userId);
+            if (client.equals(ClientEnum.STUDENT) && student != null && student.getTenantId() != null && student.getTenantId() >0) {
+                try {
+                    sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TENANT_PLATFORM_ADD_VIP,
+                            receivers, null, 0, null, ClientEnum.TENANT_STUDENT.getCode(), times +type.getMsg(), reason);
+                } catch (Exception e) {
+                    log.error("会员赠送消息发送失败", e);
+                }
+            } else {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PLATFORM_ADD_VIP,
+                        receivers, null, 0, null, client.getCode(), times, type.getMsg(), reason);
+            }
         } catch (Exception e) {
             log.error("会员赠送消息发送失败 : {}",e.getMessage());
         }
@@ -339,21 +343,33 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
 
 
     // 发送会员购买消息推送
-    private void authSend(Long userId, String phone, String param1,ClientEnum clientEnum) {
+    private void authSend(Long userId,String phone, String param1,ClientEnum clientEnum) {
         Map<Long, String> receivers = new HashMap<>();
         receivers.put(userId, phone);
-        try {
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIP_BUY_SUCCESS,
-                    receivers, null, 0, null, clientEnum.getCode(), param1);
-        } catch (Exception e) {
-            log.error("会员购买极光消息推送异常,userId={}", userId);
-        }
 
-        try {
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_VIP_BUY_SUCCESS,
-                    receivers, null, 0, null, clientEnum.getCode(), param1);
-        } catch (Exception e) {
-            log.error("会员购买短信消息推送异常,userId={}", userId);
+        // 判断是否是机构学生 机构学生推送走另一个
+        Student student = studentService.getById(userId);
+        if (clientEnum.equals(ClientEnum.STUDENT) && student != null && student.getTenantId() != null && student.getTenantId() >0) {
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TENANT_VIP_BUY,
+                        receivers, null, 0, null, ClientEnum.TENANT_STUDENT.getCode(),param1);
+            } catch (Exception e) {
+                log.error("会员购买极光消息推送异常,userId={}", userId);
+            }
+        } else {
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIP_BUY_SUCCESS,
+                        receivers, null, 0, null, clientEnum.getCode(), param1);
+            } catch (Exception e) {
+                log.error("会员购买极光消息推送异常,userId={}", userId);
+            }
+
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SMS_VIP_BUY_SUCCESS,
+                        receivers, null, 0, null, clientEnum.getCode(), param1);
+            } catch (Exception e) {
+                log.error("会员购买短信消息推送异常,userId={}", userId);
+            }
         }
 
     }

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

@@ -1190,23 +1190,37 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
 
         }
         // 推送学生
-        Map<Long, String> studentReceivers = new HashMap<>();
-        studentReceivers.put(studentId, student.getPhone());
+        Map<Long, String> studentReceivers = new HashMap<>(1);
+        studentReceivers.put(studentId,student.getPhone());
 
+        try {
+            Student studentInfo = studentService.getById(studentId);
+            if (studentInfo != null && orderClient.equals(ClientEnum.STUDENT) &&
+                    studentInfo.getTenantId() != null && studentInfo.getTenantId() > 0 && orderType.equals(OrderTypeEnum.MUSIC)) {
+                try {
+                    sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TENANT_MUSIC_BUY,
+                            studentReceivers, null, 0, null, ClientEnum.TENANT_STUDENT.getCode(), name);
+                } catch (Exception e) {
+                    log.error("学生购买曲目推送失败,", e);
+                }
+            } else {
 
-        String url = sysMessageService.selectConfigUrl(messageType.getCode());
-
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
-                                           messageType, studentReceivers, null,
-                0, url, orderClient.getCode(), name);
-        // 推送学生
-        Map<Long, String> studentSMS = new HashMap<>();
-        studentSMS.put(studentId, student.getPhone());
-        // 推送短信
-        url = sysMessageService.selectConfigUrl(smsMessageType.getCode());
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, smsMessageType,
-                studentSMS, null, 0, url, null, name);
-
+                String url = sysMessageService.selectConfigUrl(messageType.getCode());
+
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
+                        messageType, studentReceivers, null,
+                        0, url, orderClient.getCode(), name);
+                // 推送学生
+                Map<Long, String> studentSMS = new HashMap<>();
+                studentSMS.put(studentId, student.getPhone());
+                // 推送短信
+                url = sysMessageService.selectConfigUrl(smsMessageType.getCode());
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, smsMessageType,
+                        studentSMS, null, 0, url, null, name);
+            }
+        } catch (Exception e) {
+            log.error("购买曲目消息推送失败,", e);
+        }
         return true;
     }
 

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

@@ -339,15 +339,12 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
             serviceFeeAmount = actualPrice;
         }
 
-        // 平台学生 发送推送
-        if(checkSendMessage(userPaymentOrder.getUserId(),userPaymentOrder.getOrderClient())) {
-            // 消息通知
-            CompletableFuture.runAsync(() -> {
-                        musicSheetService.sendBuyMessage(userPaymentOrder.getMerchId(), userPaymentOrder.getUserId(),
-                                userPaymentOrder.getBizId(), userPaymentOrder.getOrderClient(), userPaymentOrder.getOrderType());
-                    }
-            );
-        }
+        // 消息通知
+        CompletableFuture.runAsync(() -> {
+                    musicSheetService.sendBuyMessage(userPaymentOrder.getMerchId(), userPaymentOrder.getUserId(),
+                            userPaymentOrder.getBizId(), userPaymentOrder.getOrderClient(), userPaymentOrder.getOrderType());
+                }
+        );
 
 
         saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
@@ -752,7 +749,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         //服务费  原价的平台服务费 ,减去优惠券金额
         BigDecimal serviceFeeAmount = userPaymentOrder.getActualPrice();
 
-        memberPriceSettingsService.orderSuccess(userPaymentOrder,checkSendMessage(userPaymentOrder.getUserId(),userPaymentOrder.getOrderClient()));
+        memberPriceSettingsService.orderSuccess(userPaymentOrder);
 
         saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
     }

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

@@ -6,39 +6,25 @@ 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.api.feign.dto.ImUserInfo;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.config.CustomerServiceConfig;
-import com.yonge.cooleshow.biz.dal.dao.EmployeeDao;
-import com.yonge.cooleshow.biz.dal.dao.StudentDao;
-import com.yonge.cooleshow.biz.dal.dao.SubjectDao;
-import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
-import com.yonge.cooleshow.biz.dal.dao.UserBindingTeacherDao;
+import com.yonge.cooleshow.biz.dal.dao.*;
 import com.yonge.cooleshow.biz.dal.dto.search.QueryMyFollowSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
-import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
-import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumPurchaseMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumRefMapper;
-import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
-import com.yonge.cooleshow.biz.dal.service.ImGroupService;
-import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
-import com.yonge.cooleshow.biz.dal.service.StudentService;
-import com.yonge.cooleshow.biz.dal.service.StudentTotalService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.service.im.ImGroupCoreService;
-import com.yonge.cooleshow.biz.dal.service.SysConfigService;
-import com.yonge.cooleshow.biz.dal.service.TeacherService;
-import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
-import com.yonge.cooleshow.biz.dal.service.UserTenantAlbumRecordService;
 import com.yonge.cooleshow.biz.dal.vo.MyFollow;
 import com.yonge.cooleshow.biz.dal.vo.StudentHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
@@ -52,6 +38,7 @@ import com.yonge.cooleshow.common.enums.UserLockFlag;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.PageUtil;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 import com.yonge.toolset.utils.string.ValueUtil;
@@ -67,7 +54,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.text.MessageFormat;
-import java.text.ParseException;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -121,6 +107,10 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
     @Autowired
     private CustomerServiceConfig customerServiceConfig;
 
+
+    @Autowired
+    private SysMessageService sysMessageService;
+
     @Override
     public StudentDao getDao() {
         return baseMapper;
@@ -571,6 +561,35 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
         this.lambdaUpdate().set(Student::getTenantId, toTenantId)
                 .eq(Student::getUserId, student.getUserId())
                 .update();
+
+        sendStudentTenantChange(student,toTenantId);
+    }
+
+    @Override
+    public void sendStudentTenantChange(Student student, Long toTenantId) {
+        if (student.getTenantId() == null || student.getTenantId() == -1) {
+            return;
+        }
+        SysUser sysUser = sysUserFeignService.queryUserById(student.getUserId());
+        if (sysUser == null) {
+            return;
+        }
+        TenantInfo tenantInfo = tenantInfoService.getById(student.getTenantId());
+        if (tenantInfo == null) {
+            return;
+        }
+        TenantInfo newTenantInfo = tenantInfoService.getById(toTenantId);
+        if (newTenantInfo == null) {
+            return;
+        }
+        Map<Long, String> receivers = new HashMap<>();
+        receivers.put(student.getUserId(), sysUser.getPhone());
+        try {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TENANT_STUDENT_CHANGE,
+                    receivers, null, 0, null, ClientEnum.TENANT_STUDENT.getCode(),tenantInfo.getName(),newTenantInfo.getName());
+        } catch (Exception e) {
+            log.error("学生机构变更极光消息推送异常,", e);
+        }
     }
 
     private Boolean updateStudent(StudentWrapper.Student studentInfo) {
@@ -615,6 +634,8 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
                 studentIds.add(student.getUserId());
                 imUserFriendService.saveUserFriend(teacher.getUserId(), studentIds);
             }
+
+            sendStudentTenantChange(student,newTenantId);
         }
 
 

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

@@ -1,52 +1,38 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Random;
-import java.util.Set;
-import java.util.stream.Collectors;
-
 import com.alibaba.fastjson.JSON;
-import com.yonge.cooleshow.biz.dal.dto.JumpUrlDto;
-import com.yonge.toolset.base.string.MessageFormatter;
-import com.yonge.toolset.mybatis.service.impl.BaseServiceImpl;
-
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.dao.SysConfigDao;
 import com.yonge.cooleshow.biz.dal.dao.SysMessageDao;
-import com.yonge.cooleshow.biz.dal.dto.SysMessageDto;
+import com.yonge.cooleshow.biz.dal.dto.JumpUrlDto;
 import com.yonge.cooleshow.biz.dal.entity.SysMessage;
 import com.yonge.cooleshow.biz.dal.entity.SysMessageConfig;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.MessageSendMode;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.SendStatusEnum;
 import com.yonge.cooleshow.biz.dal.service.SysMessageConfigService;
 import com.yonge.cooleshow.biz.dal.service.SysMessageService;
-import com.yonge.toolset.mybatis.dal.BaseDAO;
 import com.yonge.cooleshow.common.entity.Mapper;
-import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.cooleshow.common.redis.service.RedisCache;
+import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.string.MessageFormatter;
+import com.yonge.toolset.mybatis.dal.BaseDAO;
+import com.yonge.toolset.mybatis.service.impl.BaseServiceImpl;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext.MessageSender;
-import com.yonge.toolset.utils.collection.MapUtil;
-
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.*;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
 @Service
 public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> implements SysMessageService {
 
@@ -61,8 +47,6 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
 	@Autowired
-	private SysConfigDao sysConfigDao;
-	@Autowired
 	private RedisCache<String, Object> redisCache;
 	// 验证码有效期
 	public static final int CODE_EXPIRE = 60 * 10;
@@ -86,26 +70,6 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		return sysMessageDao;
 	}
 
-	@Override
-	public PageInfo<SysMessageDto> queryListPage(QueryInfo queryInfo) {
-		PageInfo<SysMessageDto> pageInfo = new PageInfo<SysMessageDto>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-
-		List<SysMessageDto> dataList = null;
-		int count = this.findCount(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = sysMessageDao.queryListPage(params);
-		}
-		if (count == 0) {
-			dataList = new ArrayList<SysMessageDto>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
-	}
-
 	/**
 	 * 添加消息
 	 * @param subject 消息主题
@@ -164,52 +128,6 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		return sysMessageDao.batchInsert(messages);
 	}
 
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public int updateMessage(SysMessage message) {
-		return sysMessageDao.update(message);
-	}
-
-	@Override
-	public boolean batchSeoMessage(Set<Long> userIds, MessageTypeEnum messageType,String memo, Object... args) {
-		if(userIds != null){
-			userIds.removeAll(Collections.singleton(null));
-		}
-		if (userIds == null || userIds.size() == 0) {
-			LOGGER.error("接收地址不能为空");
-			return false;
-		}
-		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(messageType.getCode());
-		if (messageConfig == null) {
-			throw new BizException("消息类型错误");
-		}else if(messageConfig.getSendFlag() == null || messageConfig.getSendFlag() == 0){
-			return true;
-		}
-		Date date = new Date();
-		SendStatusEnum status = SendStatusEnum.SUCCESSED;
-		String content = MessageFormatter.arrayFormat(messageConfig.getContent(), args);
-		SysMessage message = null;
-
-		List<SysMessage> messages = new ArrayList<>();
-		for (Long userId : userIds) {
-			message = new SysMessage();
-			message.setUserId(userId);
-			message.setContent(content);
-			message.setCreateOn(date);
-			message.setModifyOn(date);
-			message.setReceiver(userId.toString());
-			message.setSendTime(date);
-			message.setStatus(status);
-			message.setType(MessageSendMode.SEO);
-			message.setTitle(messageConfig.getDescription());
-			message.setReadStatus(0);
-			message.setMemo(memo);
-			message.setGroup(messageConfig.getGroup());
-			messages.add(message);
-		}
-		sysMessageDao.batchInsert(messages);
-		return true;
-	}
 
 	@Override
 	public void batchSendMessage(MessageSender messageSender, MessageTypeEnum type, Map<Long, String> receivers, Date triggerTime, Integer readStatus,
@@ -220,7 +138,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 			return;
 		}
 		if (StringUtils.isEmpty(url)) {
-			url = selectConfigUrl(type.getCode());
+			url = selectConfigUrlJumpType(type.getCode(),jpushType);
 		}
 
 		String[] tos;
@@ -271,6 +189,9 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		} else if (messageSender.getSendMode().equals("EMAIL")) {
 			mode = MessageSendMode.EMAIL;
 		}
+        if (ClientEnum.TENANT_STUDENT.getCode().equals(jpushType)) {
+            jpushType = ClientEnum.STUDENT.getCode();
+        }
 		addMessage(receivers, messageConfig.getDescription(), MessageFormatter.arrayFormat(messageConfig.getContent(), args), triggerTime, mode, status, errorMsg, readStatus,
 				url, messageConfig.getGroup(),jpushType,messageConfig.getId());
 	}
@@ -334,45 +255,6 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	}
 
 	@Override
-	public void batchPushMessage(MessageTypeEnum type, Map<Long, String> receivers, Date triggerTime, Integer readStatus,
-			String url,String jpushType,String sound,String channelId, Object... args) {
-		if (receivers == null || receivers.size() == 0) {
-			throw new BizException("接收地址不能为空");
-		}
-		String[] tos = receivers.values().toArray(new String[receivers.size()]);
-		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(type.getCode());
-		if (messageConfig == null) {
-			throw new BizException("消息类型错误");
-		}else if(messageConfig.getSendFlag() == null || messageConfig.getSendFlag() == 0){
-			return;
-		}
-		Date date = new Date();
-		SendStatusEnum status = SendStatusEnum.WAIT;
-		String errorMsg = null;
-		// 立即发送
-		if (triggerTime == null || date.after(triggerTime)) {
-			status = SendStatusEnum.SENDING;
-			try {
-				if (isSendRemoteMessage(MessageSender.JIGUANG)) {
-					errorMsg = messageSenderPluginContext.batchSend(MessageSender.JIGUANG, messageConfig.getDescription(),
-														 MessageFormatter.arrayFormat(messageConfig.getContent(), args), tos, url,jpushType,sound,channelId);
-					if (StringUtils.isEmpty(errorMsg)) {
-						status = SendStatusEnum.SUCCESSED;
-					}  else {
-						status = SendStatusEnum.FAILED;
-					}
-				}
-			} catch (Exception e) {
-				status = SendStatusEnum.FAILED;
-				errorMsg = e.getMessage();
-				LOGGER.warn("消息发送失败", e);
-			}
-		}
-		addMessage(receivers, messageConfig.getDescription(), MessageFormatter.arrayFormat(messageConfig.getContent(), args), triggerTime, MessageSendMode.PUSH, status, errorMsg, readStatus,
-				url, messageConfig.getGroup(),jpushType,messageConfig.getId());
-	}
-
-	@Override
 	public void sendMessage(MessageSender messageSender, Long userId, String title, String content, String receiver, Date triggerTime, Integer readStatus, String url, String group,String jpushType) {
 		LOGGER.info("batchSendMessage {}, userId {}, receivers {} ", messageSender, userId, receiver);
 		if (StringUtils.isBlank(receiver)) {
@@ -444,14 +326,6 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	}
 
 	@Override
-	public void delSendedVerificationCode(MessageTypeEnum type, String mobileNOOrEmailAddr) {
-		String key = getVerificationCodeCacheKey(type, mobileNOOrEmailAddr);
-		if (StringUtils.isNotBlank(key)) {
-			redisCache.delete(key);
-		}
-	}
-
-	@Override
 	public List<Mapper> queryCountOfUnread(MessageSendMode type, Long userId, String jpushType) {
 		return sysMessageDao.queryCountOfUnread(type, userId, jpushType);
 
@@ -503,6 +377,11 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 	@Override
 	public String selectConfigUrl(String messageType,Object ...param) {
+        return selectConfigUrlJumpType(messageType,null,param);
+    }
+
+	@Override
+    public String selectConfigUrlJumpType(String messageType,String jumpType,Object ...param) {
 		SysMessageConfig sysMessageConfig = sysMessageConfigService.queryByType(messageType);
 		if (sysMessageConfig == null) {
 			throw new BizException("消息类型错误");
@@ -522,6 +401,9 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		jumpUrlDto.setUrl(sysMessageConfig.getActionUrl());
 		jumpUrlDto.setPageTag(sysMessageConfig.getPageTag());
 		jumpUrlDto.setParams(sysMessageConfig.getParams());
+        if (StringUtils.isNotBlank(jumpType) && ClientEnum.TENANT_STUDENT.getCode().equals(jumpType)) {
+            jumpUrlDto.setClientType("TENANT");
+        }
 		return JSON.toJSONString(jumpUrlDto);
 	}
 }

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

@@ -37,6 +37,12 @@ public class SysUserServiceImpl implements SysUserService {
 
     @Resource
     private SysUserContractRecordService sysUserContractRecordService;
+
+    @Override
+    public SysUserMapper getDao() {
+        return sysUserMapper;
+    }
+
     @Override
     public Long getUserId() {
         return Optional.ofNullable(sysUserFeignService.queryUserInfo()).

+ 68 - 30
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantActivationCodeServiceImpl.java

@@ -1,30 +1,21 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.alipay.api.domain.NextUrl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.google.common.collect.Lists;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.biz.dal.dao.StudentDao;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
-import com.yonge.cooleshow.biz.dal.entity.Student;
-import com.yonge.cooleshow.biz.dal.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.entity.TenantActivationCode;
-import com.yonge.cooleshow.biz.dal.entity.TenantAlbumPurchase;
-import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
-import com.yonge.cooleshow.biz.dal.entity.UserTenantAlbumRecord;
+import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
-import com.yonge.cooleshow.biz.dal.enums.im.EImSendStatus;
-import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantActivationCodeMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumPurchaseMapper;
 import com.yonge.cooleshow.biz.dal.mapper.UserTenantAlbumRecordMapper;
-import com.yonge.cooleshow.biz.dal.service.TenantActivationCodeService;
-import com.yonge.cooleshow.biz.dal.service.TenantAlbumService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantActivationCodeWrapper;
@@ -33,6 +24,7 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.EActivationCode;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.mybatis.support.PageUtil;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
@@ -46,7 +38,6 @@ import java.util.*;
 import java.util.function.Function;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * 机构激活码
@@ -60,7 +51,7 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
     private StudentDao studentDao;
 
     @Autowired
-    private SysUserMapper sysUserMapper;
+    private SysUserService sysUserService;
 
     @Autowired
     private TenantAlbumPurchaseMapper tenantAlbumPurchaseMapper;
@@ -69,7 +60,10 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
     private UserTenantAlbumRecordMapper userTenantAlbumRecordMapper;
 
     @Autowired
-    private TenantAlbumService tenantAlbumService;
+    private TenantInfoService tenantInfoService;
+
+    @Autowired
+    private SysMessageService sysMessageService;
 
     private static final String PHONE_REG = "^1\\d{10}$";
 
@@ -156,7 +150,7 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         }
 
         List<Long> studentIds = students.stream().map(Student::getUserId).collect(Collectors.toList());
-        Map<Long, String> idPhoneMap = sysUserMapper.selectBatchIds(studentIds).stream()
+        Map<Long, String> idPhoneMap = sysUserService.getDao().selectBatchIds(studentIds).stream()
                 .collect(Collectors.toMap(SysUser::getId, SysUser::getPhone));
 
         for (int i = 0; i < studentIds.size(); i++) {
@@ -171,6 +165,31 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
                 throw new BizException("激活码已被激活:" + tenantActivationCodes.get(i).getActivationCode());
             }
         }
+        if (idPhoneMap.size() >0) {
+            idPhoneMap.forEach(this::sendActivationCodeMessage);
+        }
+    }
+
+    private void sendActivationCodeMessage(Long userId,String phone) {
+
+        Map<Long, String> receivers = new HashMap<>(1);
+        receivers.put(userId, phone);
+        try {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TENANT_SEND_CODE,
+                    receivers, null, 0, null, ClientEnum.TENANT_STUDENT.getCode());
+        } catch (Exception e) {
+            log.error("机构发放激活码推送异常", e);
+        }
+    }
+
+    @Override
+    public void sendCancelActivationCodeMessage(Map<Long, String> receivers, String tenantName) {
+        try {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TENANT_CODE_SENDCANCEL,
+                    receivers, null, 0, null, ClientEnum.TENANT_STUDENT.getCode(),tenantName);
+        } catch (Exception e) {
+            log.error("机构发放激活码推送异常", e);
+        }
     }
 
     @Override
@@ -191,7 +210,7 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         if (code == null) {
             throw new BizException("激活码不存在");
         }
-        SysUser sysUser = sysUserMapper.selectById(studentId);
+        SysUser sysUser = sysUserService.getDao().selectById(studentId);
         if (Boolean.TRUE.equals(code.getActivationStatus()) || (EActivationCode.SEND.equals(code.getSendStatus()) &&
                 !sysUser.getPhone().equals(code.getActivationPhone()))) {
             throw new BizException("激活码已经被使用");
@@ -243,7 +262,7 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
         if(code == null || !code.getTenantId().equals(tenantId)) {
             throw new BizException("激活码不存在");
         }
-        SysUser sysUser = sysUserMapper.selectById(student.getUserId());
+        SysUser sysUser = sysUserService.getDao().selectById(student.getUserId());
         if(!sysUser.getPhone().equals(code.getActivationPhone())) {
             // 该激活码未指定为当前学生使用
             throw new BizException("激活码不存在");
@@ -299,16 +318,41 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
             throw new BizException("激活码已经被使用");
         }
 
-        SysUser sysUser = sysUserMapper.selectById(userId);
+        SysUser sysUser = sysUserService.getDao().selectById(userId);
         if (sysUser == null) {
             throw new BizException("用户不存在");
         }
         one.setActivationPhone(sysUser.getPhone());
         this.updateById(one);
+        TenantInfo tenantInfo = tenantInfoService.getById(tenantId);
+        Map<Long, String> receivers = new HashMap<>(1);
+        receivers.put(userId, sysUser.getPhone());
+        this.sendCancelActivationCodeMessage(receivers,tenantInfo.getName());
+        this.sendActivationCodeMessage(userId,sysUser.getPhone());
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
+    public void sendCancel(TenantInfo tenantInfo, TenantActivationCode activationCode) {
+        boolean update = this.lambdaUpdate()
+                .set(TenantActivationCode::getSendStatus, EActivationCode.WAIT)
+                .set(TenantActivationCode::getActivationPhone, "")
+                .eq(TenantActivationCode::getId, activationCode.getId())
+                .eq(TenantActivationCode::getActivationStatus, false)
+                .eq(TenantActivationCode::getSendStatus, EActivationCode.SEND)
+                .update();
+        if (!update) {
+            throw new BizException("激活码已经激活");
+        }
+        com.yonge.cooleshow.auth.api.entity.SysUser sysUser = sysUserService.findUserByPhone(activationCode.getActivationPhone());
+        if (sysUser != null) {
+            Map<Long, String> receivers = new HashMap<>(1);
+            receivers.put(sysUser.getId(), activationCode.getActivationPhone());
+            this.sendCancelActivationCodeMessage(receivers,tenantInfo.getName());
+        }
+    }
+    @Transactional(rollbackFor = Exception.class)
+    @Override
     public void batchSendCancel(TenantInfo tenantInfo, String ids) {
         List<Long> idList = Arrays.stream(ids.split(",")).map(Long::valueOf).distinct().collect(Collectors.toList());
         Collection<TenantActivationCode> tenantActivationCodes = this.listByIds(idList);
@@ -322,15 +366,9 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
             throw new BizException("无可撤回的激活码");
         }
 
-        this.lambdaUpdate()
-                .set(TenantActivationCode::getSendStatus, EActivationCode.WAIT)
-                .set(TenantActivationCode::getActivationPhone, "")
-                .in(TenantActivationCode::getId, idList)
-                .eq(TenantActivationCode::getActivationStatus, false)
-                .eq(TenantActivationCode::getSendStatus, EActivationCode.SEND)
-                .eq(TenantActivationCode::getTenantId,tenantInfo.getId())
-                .update();
-
+        for (TenantActivationCode code : tenantActivationCodes) {
+            this.sendCancel(tenantInfo, code);
+        }
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -357,7 +395,7 @@ public class TenantActivationCodeServiceImpl extends ServiceImpl<TenantActivatio
             throw new BizException("可发激活码的数量小于学生的数量");
         }
 
-        List<SysUser> sysUsers = sysUserMapper.selectBatchIds(studentIdList);
+        List<SysUser> sysUsers = sysUserService.getDao().selectBatchIds(studentIdList);
         Map<Long, String> mapPhoneById = sysUsers.stream().collect(Collectors.toMap(SysUser::getId, SysUser::getPhone));
 
         List<TenantActivationCode> updates = new ArrayList<>();

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

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
@@ -18,6 +19,8 @@ import com.yonge.cooleshow.common.enums.PostStatusEnum;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.util.StringUtil;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import com.yonge.toolset.utils.date.DateUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
@@ -76,7 +80,14 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
     @Autowired
     private TenantAccountRecordService tenantAccountRecordService;
 
+    @Autowired
+    private SysMessageService sysMessageService;
+
+    @Autowired
+    private TenantAlbumService tenantAlbumService;
 
+    @Autowired
+    private UserTenantAlbumRecordService userTenantAlbumRecordService;
     /**
      * 查询详情
      *
@@ -291,6 +302,7 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
             case STUDENT: {
                 tenantActivationCodeService.addUserTenantAlbumRecord(userOrderDetailVo.getUserId(),userOrderDetailVo);
 
+                sendMsg(userOrderDetailVo);
                 break;
             }
 
@@ -344,6 +356,50 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
         }
     }
 
+    private void sendMsg(UserOrderDetailVo userOrderDetailVo) {
+        try {
+            SysUser user = sysUserFeignService.queryUserById(userOrderDetailVo.getUserId());
+
+            if (user == null) {
+                return;
+            }
+            Long userId = userOrderDetailVo.getUserId();
+
+            // 查询机构专辑信息
+            TenantAlbum tenantAlbum = tenantAlbumService.getById(userOrderDetailVo.getBizId());
+            if (tenantAlbum == null) {
+                return;
+            }
+
+            // 查询学生当前机构有效时间
+            UserTenantAlbumRecord albumRecord = userTenantAlbumRecordService
+                    .getNewestByTenantAlbumId(tenantAlbum.getId(), userId, userOrderDetailVo.getOrderClient());
+            if (albumRecord == null) {
+                return;
+            }
+            String dateStr = DateUtil.format(albumRecord.getEndTime(), DateUtil.DEFAULT_PATTERN);
+
+
+            Map<Long, String> receivers = new HashMap<>();
+            receivers.put(userId, user.getPhone());
+
+            if (userOrderDetailVo.getOrderClient().equals(ClientEnum.STUDENT)) {
+                Student student = studentService.getById(userId);
+                if (student.getTenantId() != null && student.getTenantId() >0) {
+                    try {
+                        String url = sysMessageService.selectConfigUrlJumpType(MessageTypeEnum.TENANT_ALBUM_BUY.getCode(),ClientEnum.TENANT_STUDENT.getCode(),userOrderDetailVo.getOrderNo());
+                        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TENANT_ALBUM_BUY,
+                                receivers, null, 0, url, ClientEnum.TENANT_STUDENT.getCode(),tenantAlbum.getName(),dateStr);
+                    } catch (Exception e) {
+                        log.error("机构学生购买训练教材", e);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("机构学生购买训练教材 : {}",e.getMessage());
+        }
+    }
+
 
     @Transactional(rollbackFor = Exception.class)
     @Override

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

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.biz.dal.dao.StudentDao;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumPurchaseMapper;
@@ -21,6 +22,7 @@ import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.mybatis.support.PageUtil;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import com.yonge.toolset.utils.obj.ObjectUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -33,6 +35,7 @@ import com.yonge.cooleshow.biz.dal.mapper.UserTenantAlbumRecordMapper;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -84,12 +87,15 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
     @Autowired
     private TenantAlbumMapper tenantAlbumMapper;
 
-	/**
+    @Autowired
+    private SysMessageService sysMessageService;
+
+    /**
      * 查询详情
      * @param id 详情ID
      * @return UserTenantAlbumRecord
      */
-	@Override
+    @Override
     public UserTenantAlbumRecord detail(Long id) {
         
         return baseMapper.selectById(id);
@@ -185,15 +191,15 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
         }
         return page.setRecords(list);
     }
-	
+
     /**
      * 添加
      * @param userTenantAlbumRecord UserTenantAlbumRecordWrapper.UserTenantAlbumRecord
      * @return Boolean
      */
     @Override
-    public Boolean add(UserTenantAlbumRecordWrapper.UserTenantAlbumRecord userTenantAlbumRecord) {    	
-        
+    public Boolean add(UserTenantAlbumRecordWrapper.UserTenantAlbumRecord userTenantAlbumRecord) {
+
         return this.save(JSON.parseObject(userTenantAlbumRecord.jsonString(), UserTenantAlbumRecord.class));
     }
 
@@ -414,4 +420,62 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
         album.setSalePrice(salePrice);
         return album;
     }
+
+    @Override
+    public void sendTenantAlbumMessage() {
+        List<UserTenantAlbumRecordWrapper.UserTenantAlbumRecord> userTenantAlbumRecords = baseMapper.selectTemporaryRecord();
+        if (CollectionUtils.isEmpty(userTenantAlbumRecords)) {
+            return;
+        }
+        //标识
+        Map<Long, Long> temporaryFlagMap = new HashMap<>();
+        for (UserTenantAlbumRecordWrapper.UserTenantAlbumRecord record : userTenantAlbumRecords) {
+            if (null != temporaryFlagMap.get(record.getUserId())) {
+                continue;
+            }
+            temporaryFlagMap.put(record.getUserId(), record.getUserId());
+            //发送消息
+            CompletableFuture.runAsync(() -> temporarySend(record.getUserId(), record.getTenantAlbumId()));
+            UserTenantAlbumRecord userTenantAlbumRecord = new UserTenantAlbumRecord();
+            userTenantAlbumRecord.setMsgStatus(true);
+            userTenantAlbumRecord.setUpdateTime(new Date());
+            userTenantAlbumRecord.setId(record.getId());
+
+            baseMapper.updateById(userTenantAlbumRecord);
+        }
+    }
+
+    @Override
+    public UserTenantAlbumRecord getNewestByTenantAlbumId(Long tenantAlbumId, Long userId, ClientEnum client) {
+
+        return this.lambdaQuery()
+                .eq(UserTenantAlbumRecord::getTenantAlbumId, tenantAlbumId)
+                .eq(UserTenantAlbumRecord::getUserId, userId)
+                .eq(UserTenantAlbumRecord::getClientType, client)
+                .ge(UserTenantAlbumRecord::getEndTime, new Date())
+                .orderByDesc(UserTenantAlbumRecord::getEndTime)
+                .last("limit 1")
+                .one();
+    }
+
+
+    private void temporarySend(Long userId,Long tenantAlbumId) {
+        SysUser sysUser = sysUserFeignService.queryUserById(userId);
+        if (null == sysUser) {
+            return;
+        }
+        TenantAlbum tenantAlbum = tenantAlbumService.getById(tenantAlbumId);
+        if (tenantAlbum == null) {
+            return;
+        }
+        Map<Long, String> receivers = new HashMap<>();
+        receivers.put(userId, sysUser.getPhone());
+
+        try {
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TENANT_ALBUM_EXPIRE,
+                    receivers, null, 0, null, ClientEnum.TENANT_STUDENT.getCode(),tenantAlbum.getName());
+        } catch (Exception e) {
+            log.error("机构学生训练教材过期", e);
+        }
+    }
 }

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

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.biz.dal.dao.MemberPriceSettingsDao;
 import com.yonge.cooleshow.biz.dal.dto.search.VipRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.entity.MemberPriceSettings;
+import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
@@ -25,6 +26,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.VipCardRecordSearch;
 import com.yonge.cooleshow.biz.dal.dao.VipCardRecordDao;
 
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
 
 
 @Service
@@ -184,7 +186,9 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
             }
             temporaryFlagMap.put(record.getUserId(), record.getUserId());
             //发送消息
-            temporary3DaysSend(record.getUserId(), record.getPhone());
+            CompletableFuture.runAsync(() -> {
+                temporary3DaysSend(record.getUserId(), record.getPhone(),record.getClientType());
+            });
             record.setMsgStatus(1);
             record.setUpdateTime(new Date());
 
@@ -203,7 +207,10 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
             }
             expireFlagMap.put(record.getUserId(), record.getUserId());
             //发送消息
-            expireSend(record.getUserId(), record.getPhone(),record.getClientType());
+            //发送消息
+            CompletableFuture.runAsync(() -> {
+                expireSend(record.getUserId(),record.getPhone(), record.getClientType());
+            });
             record.setMsgStatus(2);
             record.setUpdateTime(new Date());
 
@@ -222,44 +229,58 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
     }
 
     // 发送会员到期3天消息推送
-    private void temporary3DaysSend(Long userId, String phone) {
+    private void temporary3DaysSend(Long userId, String phone, ClientEnum clientType) {
         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, url, ClientEnum.STUDENT.getCode());
-        } catch (Exception e) {
-            log.error("会员到期3天极光消息推送异常,userId={}", userId);
-        }
+        // 判断是否是机构学生 机构学生推送走另一个
+        if (clientType.equals(ClientEnum.STUDENT)) {
+        } else {
+            try {
+                String url = sysMessageService.selectConfigUrl(MessageTypeEnum.VIP_EXPIRE_THIRTY_DAY.getCode());
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIP_EXPIRE_THIRTY_DAY,
+                        receivers, null, 0, url, ClientEnum.STUDENT.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.STUDENT.getCode(), url);
-        } 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.STUDENT.getCode(), url);
+            } catch (Exception e) {
+                log.error("会员到期3天短信消息推送异常,userId={}", userId);
+            }
         }
     }
 
     // 发送会员到期消息推送
-    private void expireSend(Long userId, String phone,ClientEnum userType) {
+    private void expireSend(Long userId,String phone,ClientEnum userType) {
         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, url, userType.getCode());
-        } catch (Exception e) {
-            log.error("会员到期3天极光消息推送异常,userId={}", userId);
-        }
+        Student student = studentService.getById(userId);
+        if (userType.equals(ClientEnum.STUDENT) && student != null  && student.getTenantId() != null && student.getTenantId() >0) {
+            try {
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TENANT_VIP_EXPIRE,
+                        receivers, null, 0, null, ClientEnum.TENANT_STUDENT.getCode());
+            } catch (Exception e) {
+                log.error("会员到期极光消息推送异常,userId={}", userId);
+            }
+        } else {
+            try {
+                String url = sysMessageService.selectConfigUrl(MessageTypeEnum.VIP_EXPIRE.getCode());
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.VIP_EXPIRE,
+                        receivers, null, 0, url, userType.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, userType.getCode(), url);
-        } 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, userType.getCode(), url);
+            } catch (Exception e) {
+                log.error("会员到期3天短信消息推送异常,userId={}", userId);
+            }
         }
     }
 }

+ 50 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UserTenantAlbumRecordWrapper.java

@@ -1,9 +1,16 @@
 package com.yonge.cooleshow.biz.dal.wrapper;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
 import java.util.Optional;
 
 import lombok.AllArgsConstructor;
@@ -52,19 +59,54 @@ public class UserTenantAlbumRecordWrapper {
         }
     }  
 
+    @Data
 	@ApiModel(" UserTenantAlbumRecord-购买训练工具记录")
     public static class UserTenantAlbumRecord {
-        @ApiModelProperty("专辑名称")
-        private String albumName;
 
-        @ApiModelProperty("专辑介绍")
-        private String describe;
+        @ApiModelProperty("记录id")
+        private Long id;
+
+        @ApiModelProperty("用户id")
+        private Long userId;
+
+        @ApiModelProperty("手机号")
+        private String phone;
+
+        @ApiModelProperty("机构ID")
+        private Long tenantId;
+
+        @ApiModelProperty("机构专辑ID")
+        private Long tenantAlbumId;
+
+        @ApiModelProperty("订单号")
+        private String orderNo;
+
+        @ApiModelProperty("ORDER:订单")
+        private SourceTypeEnum sourceType;
+
+        @ApiModelProperty("购买人员类型 TEACHRE :老师端 STUDNET : 学生端")
+        private ClientEnum clientType;
+
+        @ApiModelProperty("订单详情号")
+        private String subOrderNo;
+
+        @ApiModelProperty("开始时间")
+        private Date startTime;
+
+        @ApiModelProperty("结束时间")
+        private Date endTime;
+
+        @ApiModelProperty("时间类型 DAY:天 MONTH:月,YEAR:年")
+        private String type;
+
+        @ApiModelProperty("添加时间数量")
+        private Integer times;
 
-        @ApiModelProperty("机构名称")
-        private String tenantName;
+        @ApiModelProperty("消息发送 0、未发送 1、已发送提前3天消息 2、已发送会员过期消息 暂时不用")
+        private Boolean msgStatus;
 
-        @ApiModelProperty("专辑封面")
-        private String coverImg;
+        @ApiModelProperty("备注")
+        private String reason;
 
         public String jsonString() {
             return JSON.toJSONString(this);

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

@@ -24,6 +24,7 @@
         <result column="read_status_" property="readStatus"/>
         <result column="group_" property="group"/>
         <result column="client_id_" property="clientId"/>
+        <result column="img" property="img"/>
     </resultMap>
     
     <resultMap type="com.yonge.cooleshow.biz.dal.dto.SysMessageDto" id="messageDto" extends="message">
@@ -174,7 +175,7 @@
 
 	<select id="queryPage" parameterType="map" resultMap="message">
 		select m.*,
-		smc.sub_type_
+		smc.sub_type_,smc.icon_ img
 		from sys_message m
 		left join sys_message_config smc on m.message_config_id_ = smc.id_
 		<include refid="queryCondition" />

+ 61 - 10
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -380,28 +380,79 @@
 			AND st.tenant_id_ = #{tenantId}
 		</if>
 		group by st.user_id_
+		<trim prefix="HAVING" suffixOverrides="AND" >
+			<if test="minTrainTimes != null">
+				trainTimes &gt;= #{minTrainTimes} AND
+			</if>
+			<if test="maxTrainTimes != null">
+				trainTimes &lt;= #{maxTrainTimes} AND
+			</if>
+			<if test="minTrainDays != null">
+				trainDays &gt;= #{minTrainDays} AND
+			</if>
+			<if test="maxTrainDays != null">
+				trainDays &lt;= #{maxTrainDays} AND
+			</if>
+			<if test="minAvgTrainTimes != null">
+				avgTrainTimes &gt;= #{minAvgTrainTimes} AND
+			</if>
+			<if test="maxAvgTrainTimes != null">
+				avgTrainTimes &lt;= #{maxAvgTrainTimes} AND
+			</if>
+		</trim>
 		ORDER BY ${sortField} ${sortType}
 		<include refid="global.limit"/>
 	</select>
 	<select id="countWeChatStudentTrainData" resultType="java.lang.Integer">
-		select COUNT(DISTINCT st.user_id_)
+		select COUNT(st.user_id_)
 		from student st
-		left join sys_user su ON st.user_id_ = su.id_
-		LEFT JOIN sys_music_compare_record smcr ON smcr.user_id_ = st.user_id_
+		left join
+		(select smcr.user_id_,
+		DATE_FORMAT(smcr.create_time_, '%Y-%m-%d') create_time_,
+		SUM(smcr.play_time_)                       playTime
+		from sys_music_compare_record smcr
 		<where>
-			<if test="clientId != null and clientId!= ''">
-				AND smcr.client_id_ = #{clientId}
+			<if test="startTime != null and startTime != ''">
+				AND smcr.create_time_ BETWEEN #{startTime} AND #{endTime}
 			</if>
 			<if test="tenantId != null">
 				AND smcr.tenant_id_ = #{tenantId}
 			</if>
-			<if test="startTime != null and startTime != ''">
-				AND smcr.create_time_ BETWEEN #{startTime} AND #{endTime}
-			</if>
-			<if test="search != null and search != ''">
-				AND su.username_ LIKE CONCAT('%',#{keyword},'%')
+			<if test="clientId != null and clientId!= ''">
+				AND smcr.client_id_ = #{clientId}
 			</if>
 		</where>
+		group by smcr.user_id_, DATE_FORMAT(create_time_, '%Y-%m-%d')) mprs ON mprs.user_id_ = st.user_id_
+		left join sys_user su ON st.user_id_ = su.id_
+		left join subject sb ON sb.id_ = st.subject_id_
+		where mprs.user_id_ = st.user_id_
+		<if test="search != null and search != ''">
+			AND su.username_ LIKE CONCAT('%',#{keyword},'%')
+		</if>
+		<if test="tenantId != null">
+			AND st.tenant_id_ = #{tenantId}
+		</if>
+		group by st.user_id_
+		<trim prefix="HAVING" suffixOverrides="AND" >
+			<if test="minTrainTimes != null">
+				trainTimes &gt;= #{minTrainTimes} AND
+			</if>
+			<if test="maxTrainTimes != null">
+				trainTimes &lt;= #{maxTrainTimes} AND
+			</if>
+			<if test="minTrainDays != null">
+				trainDays &gt;= #{minTrainDays} AND
+			</if>
+			<if test="maxTrainDays != null">
+				trainDays &lt;= #{maxTrainDays} AND
+			</if>
+			<if test="minAvgTrainTimes != null">
+				avgTrainTimes &gt;= #{minAvgTrainTimes} AND
+			</if>
+			<if test="maxAvgTrainTimes != null">
+				avgTrainTimes &lt;= #{maxAvgTrainTimes} AND
+			</if>
+		</trim>
 	</select>
 	<select id="wechatCompareRecordSum"
 			resultType="com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo$WechatCompareRecordSumDto">

+ 13 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserTenantAlbumRecordMapper.xml

@@ -75,4 +75,17 @@
 
     </select>
 
+    <select id="selectTemporaryRecord" resultType="com.yonge.cooleshow.biz.dal.wrapper.UserTenantAlbumRecordWrapper$UserTenantAlbumRecord">
+        select
+        <include refid="baseColumns"/>,
+        u.phone_ as phone
+        from (
+        select max(id_) as id_ from user_tenant_album_record group by user_id_
+        ) a
+        left join user_tenant_album_record t on a.id_ = t.id_
+        left join sys_user u on t.user_id_ = u.id_
+        where t.end_time_ &lt;= now()
+        and (msg_status_ = 0 or msg_status_ is null)
+        order by end_time_ desc
+    </select>
 </mapper>

+ 1 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/open/OpenClient.java

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.biz.dal.dto.MusicImgDto;
 import com.yonge.cooleshow.biz.dal.dto.search.MemberPriceSettingsSearch;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.SysConfig;
+import com.yonge.cooleshow.biz.dal.entity.TenantStaff;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
 import com.yonge.cooleshow.biz.dal.service.AppVersionInfoService;
 import com.yonge.cooleshow.biz.dal.service.LiveRoomService;

+ 7 - 5
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/TenantActivationCodeController.java

@@ -61,9 +61,9 @@ import java.io.File;
 import java.text.MessageFormat;
 import java.text.ParsePosition;
 import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 
 @Slf4j
@@ -185,14 +185,16 @@ public class TenantActivationCodeController extends BaseController {
         if (!update) {
             throw new BizException("激活码已经激活");
         }
+        Map<Long, String> receivers = new HashMap<>(1);
+        receivers.put(activationCode.getActivationUserId(), activationCode.getActivationUserId().toString());
+        tenantActivationCodeService.sendCancelActivationCodeMessage(receivers,tenantInfo.getName());
         return succeed();
     }
 
     @ApiOperation(value = "批量激活码发放取消", notes = "传入 激活码的ID")
     @PostMapping("/batchSendCancel")
     public HttpResponseResult<Boolean> batchSendCancel(@RequestParam("ids") String ids) {
-        TenantInfo tenantInfo = getTenantInfo();
-        tenantActivationCodeService.batchSendCancel(tenantInfo, ids);
+        tenantActivationCodeService.batchSendCancel(getTenantInfo(), ids);
         return succeed();
     }
 

+ 2 - 1
toolset/thirdparty-component/src/main/java/com/yonge/toolset/thirdparty/message/provider/JiguangPushPlugin.java

@@ -94,7 +94,7 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
 		android.put("extras", android_extras);
 
 		JSONObject android_intent = new JSONObject();// android额外参数
-		if ("STUDENT".equals(type)) {
+		if ("STUDENT".equals(type) || "TENANT_STUDENT".equals(type)) {
 			android_intent.put("url",
 							   "intent:#Intent;action=cn.jiguang.push.customAction;component=com.cooleshow.student/com.cooleshow.student.ui.main.MainActivity;end");
 		} else {
@@ -142,6 +142,7 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
 	private String push(String[] alias, String alert, String content, String url,String type,String sound,String channelId) {
 		String base64_auth_string = "";
 		switch (type){
+			case "TENANT_STUDENT":
 			case "STUDENT":
 				base64_auth_string = encryptBASE64(this.studentAppKey + ":" + this.studentMasterSecret);
 				break;