Parcourir la source

老师/学生会员记录

liujunchi il y a 2 ans
Parent
commit
3cd2983216
14 fichiers modifiés avec 441 ajouts et 14 suppressions
  1. 42 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentController.java
  2. 41 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java
  3. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VipCardRecordDao.java
  4. 68 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/VipSubmitReq.java
  5. 83 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/VipRecordSearch.java
  6. 49 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VipCardRecord.java
  7. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  8. 11 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MemberPriceSettingsService.java
  9. 15 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardRecordService.java
  10. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRewardServiceImpl.java
  11. 39 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java
  12. 20 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java
  13. 26 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VipRecordVo.java
  14. 34 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VipCardRecordMapper.xml

+ 42 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/StudentController.java

@@ -6,11 +6,22 @@ import java.util.Date;
 import java.util.List;
 
 import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.VipSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.VipRecordSearch;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.MemberPriceSettingsService;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.service.TeacherService;
+import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
+import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
+import com.yonge.cooleshow.biz.dal.vo.VipRecordVo;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.utils.date.DateUtil;
 import com.yonge.toolset.utils.excel.POIUtil;
@@ -35,6 +46,17 @@ public class StudentController extends BaseController {
     @Autowired
     private StudentService studentService;
 
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private MemberPriceSettingsService memberPriceSettingsService;
+
+    @Autowired
+    private VipCardRecordService vipCardRecordService;
+
+
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入id")
     @ApiImplicitParams({
@@ -90,4 +112,24 @@ public class StudentController extends BaseController {
         }
     }
 
+    @PostMapping("/addVip")
+    @ApiOperation(value = "添加会员")
+    @PreAuthorize("@pcs.hasPermissions('student/addVip')")
+    public HttpResponseResult<Boolean> addVip(@Valid @RequestBody VipSubmitReq vipSubmitReq) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(memberPriceSettingsService.addVip(vipSubmitReq, ClientEnum.STUDENT, sysUser));
+    }
+
+
+    @PostMapping("/vipRecord")
+    @ApiOperation(value = "会员记录")
+    @PreAuthorize("@pcs.hasPermissions('student/vipRecord')")
+    public HttpResponseResult<PageInfo<VipRecordVo>> vipRecord(@Valid @RequestBody VipRecordSearch recordSearch) {
+
+        recordSearch.setClient(ClientEnum.STUDENT);
+        return succeed(vipCardRecordService.vipRecord(recordSearch));
+    }
 }

+ 41 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java

@@ -1,5 +1,14 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.VipSubmitReq;
+import com.yonge.cooleshow.biz.dal.dto.search.VipRecordSearch;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.MemberPriceSettingsService;
+import com.yonge.cooleshow.biz.dal.service.UserAccountService;
+import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
+import com.yonge.cooleshow.biz.dal.vo.VipRecordVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -47,8 +56,17 @@ import com.yonge.toolset.utils.excel.POIUtil;
 public class TeacherController extends BaseController {
 
     @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
     private TeacherService teacherService;
 
+    @Autowired
+    private MemberPriceSettingsService memberPriceSettingsService;
+
+
+    @Autowired
+    private VipCardRecordService vipCardRecordService;
+
     /**
      * 查询单条
      */
@@ -129,4 +147,27 @@ public class TeacherController extends BaseController {
             }
         }
     }
+
+    @PostMapping("/addVip")
+    @ApiOperation(value = "添加会员")
+    @PreAuthorize("@pcs.hasPermissions('teacher/addVip')")
+    public HttpResponseResult<Boolean> addVip(@Valid @RequestBody VipSubmitReq vipSubmitReq) {
+
+
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null  || sysUser.getId() == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(memberPriceSettingsService.addVip(vipSubmitReq, ClientEnum.TEACHER,sysUser));
+    }
+
+
+    @PostMapping("/vipRecord")
+    @ApiOperation(value = "会员记录")
+    @PreAuthorize("@pcs.hasPermissions('teacher/vipRecord')")
+    public HttpResponseResult<PageInfo<VipRecordVo>> vipRecord(@Valid @RequestBody VipRecordSearch recordSearch) {
+
+        recordSearch.setClient(ClientEnum.TEACHER);
+        return succeed(vipCardRecordService.vipRecord(recordSearch));
+    }
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VipCardRecordDao.java

@@ -4,7 +4,9 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.search.VipRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.MemberPriceSettings;
+import com.yonge.cooleshow.biz.dal.vo.VipRecordVo;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
 import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
@@ -48,4 +50,12 @@ public interface VipCardRecordDao extends BaseMapper<VipCardRecord> {
     List<VipCardRecordVo> selectExpireRecord();
 
 
+    /**
+     * 会员添加记录
+     *
+     * @param page
+     * @param param
+     * @return
+     */
+    IPage<VipRecordVo> selectVipRecord(@Param("page") IPage<VipRecordVo> page, @Param("param") VipRecordSearch param);
 }

+ 68 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/VipSubmitReq.java

@@ -0,0 +1,68 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-08-23
+ */
+@ApiModel("添加会员")
+public class VipSubmitReq {
+
+    @ApiModelProperty("时间数量")
+    @NotNull(message = "数量不能为空")
+    @Min(value = 1,message = "数量不能小于1")
+    private Integer times;
+
+    @ApiModelProperty("时间类型 DAY:天 MONTH:月 ,QUARTERLY : 季度 YEAR_HALF : 半年 YEAR:年")
+    @NotNull(message = "周期不能为空")
+    private PeriodEnum type;
+
+    @ApiModelProperty("原因")
+    @NotBlank(message = "原因不能为空")
+    private String reason;
+
+    @ApiModelProperty("用户id")
+    @NotNull(message = "用户id不能为空")
+    private Long  userId;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Integer getTimes() {
+        return times;
+    }
+
+    public void setTimes(Integer times) {
+        this.times = times;
+    }
+
+    public PeriodEnum getType() {
+        return type;
+    }
+
+    public void setType(PeriodEnum type) {
+        this.type = type;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+}

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

@@ -0,0 +1,83 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-08-23
+ */
+@ApiModel("会员记录查询")
+public class VipRecordSearch extends QueryInfo {
+
+    @ApiModelProperty("开始时间 yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty("结束时间 yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date endTime;
+
+    @ApiModelProperty("操作人")
+    private String search;
+
+    @ApiModelProperty("用户id")
+    @NotNull(message = "用户id不能为空")
+    private Long userId;
+
+    @ApiModelProperty("人员类型")
+    private ClientEnum client;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public ClientEnum getClient() {
+        return client;
+    }
+
+    public void setClient(ClientEnum client) {
+        this.client = client;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    @Override
+    public String getSearch() {
+        return search;
+    }
+
+    @Override
+    public void setSearch(String search) {
+        this.search = search;
+    }
+}

+ 49 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VipCardRecord.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -37,6 +38,14 @@ public class VipCardRecord implements Serializable {
 	@TableField(value = "vip_card_id_")
     private Long vipCardId;
 
+    @TableField(value = "times_")
+    @ApiModelProperty("添加时间数量")
+    private Integer times;
+
+    @TableField(value = "type_")
+    @ApiModelProperty("时间类型 DAY:天 MONTH:月 ,QUARTERLY : 季度 YEAR_HALF : 半年 YEAR:年")
+    private PeriodEnum type;
+
     @TableField(value = "client_type_")
     @ApiModelProperty("用户类型 学生:STUDENT 老师 :TEACHER")
     private ClientEnum clientType;
@@ -73,6 +82,46 @@ public class VipCardRecord implements Serializable {
     @TableField(value = "msg_status_")
     private Integer msgStatus;
 
+    @ApiModelProperty("创建人")
+    @TableField(value = "create_by_")
+    private Long createBy;
+
+    @ApiModelProperty("备注")
+    @TableField(value = "reason_")
+    private String reason;
+
+    public Long getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(Long createBy) {
+        this.createBy = createBy;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public Integer getTimes() {
+        return times;
+    }
+
+    public void setTimes(Integer times) {
+        this.times = times;
+    }
+
+    public PeriodEnum getType() {
+        return type;
+    }
+
+    public void setType(PeriodEnum type) {
+        this.type = type;
+    }
+
     public SourceTypeEnum getSourceType() {
         return sourceType;
     }

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

@@ -103,6 +103,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     PIANO_ROOM_ADJUST("琴房课调整"),
     PRACTICE_ADJUST("陪练课调整"),
     ACTIVITY_WIN("获奖消息"),
+    PLATFORM_ADD_VIP("会员赠送"),
 
     ;
 

+ 11 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MemberPriceSettingsService.java

@@ -3,6 +3,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.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.VipSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
@@ -66,7 +67,7 @@ public interface MemberPriceSettingsService extends IService<MemberPriceSettings
      * @param activityId 活动id
      * @return
      */
-    void activityReward(Long userId, ClientEnum client, ActivityReward activityReward, Long activityId);
+    void activityReward(Long userId, ClientEnum client, ActivityReward activityReward, Long activityId,String activityName);
 
     /**
      * 老师分享VIP 分润
@@ -76,5 +77,13 @@ public interface MemberPriceSettingsService extends IService<MemberPriceSettings
      * @return
      */
     ShareProfitVo shareVipProfit(SysUser sysUser, Long vipId);
-
+    /**
+     * 添加会员
+     *
+     * @param vipSubmitReq 会员信息
+     * @param client 类型
+     * @param sysUser
+     * @return
+     */
+    Boolean addVip(VipSubmitReq vipSubmitReq, ClientEnum client, SysUser sysUser);
 }

+ 15 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardRecordService.java

@@ -2,16 +2,21 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.dto.VipSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
+import com.yonge.cooleshow.biz.dal.dto.search.VipRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.VipRecordVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
 import com.yonge.cooleshow.biz.dal.dto.search.VipCardRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
 
 /**
  * 购买会员卡记录表 服务类
@@ -52,7 +57,9 @@ public interface VipCardRecordService extends IService<VipCardRecord> {
      * @param activityId 活动id
      * @return
      */
-    VipCardRecord buildVipCardRecordByOrderDetail(Long userId, ClientEnum client, ActivityReward activityReward, Long activityId);
+    VipCardRecord buildVipCardRecordByOrderDetail(Long userId, ClientEnum client, ActivityReward activityReward, Long activityId,String activityName);
+
+    VipCardRecord getVipCardRecord(Long userId, ClientEnum client, String orderNo, String subOrderNo, String periodType, Long memberPriceSettingsId, Integer timeNum, SourceTypeEnum sourceType, Long createBy, String reason);
 
     /**
      * 分页查询
@@ -69,5 +76,11 @@ public interface VipCardRecordService extends IService<VipCardRecord> {
      */
     void pollExpireMsg();
 
-
+    /**
+     * 会员添加记录
+     *
+     * @param recordSearch
+     * @return
+     */
+    PageInfo<VipRecordVo> vipRecord(VipRecordSearch recordSearch);
 }

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

@@ -202,7 +202,8 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
                     pianoRoomChangeRecord.setReason(activityPlan.getActivityName());
                     pianoRoomChangeRecordService.add(pianoRoomChangeRecord);
                 } else if (activityReward.getActivityReward().getRewardType().equals(RewardTypeEnum.VIP)) {
-                    memberPriceSettingsService.activityReward(userId, activityPlan.getActivityClient(), activityReward.getActivityReward(), activityId);
+                    memberPriceSettingsService.activityReward(userId, activityPlan.getActivityClient(),
+                                                              activityReward.getActivityReward(), activityId,activityPlan.getActivityName());
                 }
                 rewardNameList.add(activityReward.getActivityReward().getRewardName());
                 activityRewardIdList.add(activityReward.getActivityReward().getId());

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

@@ -2,12 +2,16 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 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.dto.VipSubmitReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 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.entity.VipCardRecord;
+import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
+import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
 
 import com.yonge.cooleshow.biz.dal.vo.ShareProfitVo;
@@ -47,10 +51,10 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
     private VipCardRecordService vipCardRecordService;
     @Autowired
     private SysMessageService sysMessageService;
-    @Autowired
-    private PlatformCashAccountRecordService platformCashAccountRecordService;
 
     @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
     private SysConfigService sysConfigService;
     @Override
     public MemberPriceSettingsVo detail(Long id) {
@@ -98,9 +102,9 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
 
 
     @Override
-    public void activityReward(Long userId, ClientEnum client, ActivityReward activityReward, Long activityId) {
+    public void activityReward(Long userId, ClientEnum client, ActivityReward activityReward, Long activityId,String activityName) {
 
-        VipCardRecord vipCardRecord = vipCardRecordService.buildVipCardRecordByOrderDetail(userId,client,activityReward,activityId);
+        VipCardRecord vipCardRecord = vipCardRecordService.buildVipCardRecordByOrderDetail(userId,client,activityReward,activityId,activityName);
 
         getUserVipInfoVo(vipCardRecord);
     }
@@ -164,6 +168,37 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
         return result;
     }
 
+    @Override
+    public Boolean addVip(VipSubmitReq vipSubmitReq, ClientEnum client, SysUser sysUser) {
+
+        VipCardRecord vipCardRecord = vipCardRecordService.getVipCardRecord(vipSubmitReq.getUserId(), client, null, null, vipSubmitReq.getType().toString(),
+                            null, vipSubmitReq.getTimes(),SourceTypeEnum.PLATFORM, sysUser.getId(), vipSubmitReq.getReason());
+
+        getUserVipInfoVo(vipCardRecord);
+
+        // 发消息
+        sendAddVipMessage(vipSubmitReq.getUserId(),client,vipSubmitReq.getTimes(),vipSubmitReq.getType(),vipSubmitReq.getReason());
+
+        return true;
+    }
+
+    private void sendAddVipMessage(Long userId, 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);
+        } catch (Exception e) {
+            log.error("会员赠送消息发送失败 : {}",e.getMessage());
+        }
+    }
+
     private UserVipInfoVo getVipInfo(ClientEnum userType, Long userId) {
 
         UserVipInfoVo userVipInfoVo = new UserVipInfoVo();

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

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 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.enums.ClientEnum;
@@ -11,6 +12,8 @@ import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -100,18 +103,19 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
         }
 
         return getVipCardRecord(orderDetailVo.getUserId(),orderDetailVo.getOrderClient(),orderDetailVo.getOrderNo(),
-                                orderDetailVo.getSubOrderNo(),periodType,detail.getId(),timeNum,SourceTypeEnum.ORDER);
+                                orderDetailVo.getSubOrderNo(),periodType,detail.getId(),timeNum,SourceTypeEnum.ORDER,orderDetailVo.getUserId(),"会员购买");
     }
 
     @Override
-    public  VipCardRecord buildVipCardRecordByOrderDetail(Long userId,ClientEnum client, ActivityReward activityReward,Long activityId) {
+    public  VipCardRecord buildVipCardRecordByOrderDetail(Long userId,ClientEnum client, ActivityReward activityReward,Long activityId,String activityName) {
 
         return getVipCardRecord(userId,client,activityId.toString(),null,activityReward.getUnit().toString(),
-                                null,activityReward.getNum(),SourceTypeEnum.ACTIVITY);
+                                null,activityReward.getNum(),SourceTypeEnum.ACTIVITY,userId,activityName);
     }
 
-    private VipCardRecord getVipCardRecord(Long userId,ClientEnum client,String orderNo,String subOrderNo,
-                               String periodType,Long memberPriceSettingsId,Integer timeNum,SourceTypeEnum sourceType) {
+    @Override
+    public VipCardRecord getVipCardRecord(Long userId, ClientEnum client, String orderNo, String subOrderNo, String periodType,
+                                          Long memberPriceSettingsId, Integer timeNum, SourceTypeEnum sourceType, Long createBy, String reason) {
         //修改用户会员时长
         Date membershipEndTime = null;
         if (client.equals(ClientEnum.STUDENT)) {
@@ -138,6 +142,10 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
         vipCardRecord.setMsgStatus(0);
         vipCardRecord.setSourceType(sourceType);
         vipCardRecord.setClientType(client);
+        vipCardRecord.setTimes(timeNum);
+        vipCardRecord.setType(PeriodEnum.valueOf(periodType));
+        vipCardRecord.setCreateBy(createBy);
+        vipCardRecord.setReason(reason);
 
         if (null == membershipEndTime || membershipEndTime.before(new Date())) {
             //没有会员、会员已过期 会员卡生效时间为当前时间
@@ -206,6 +214,13 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 
     }
 
+    @Override
+    public PageInfo<VipRecordVo> vipRecord(VipRecordSearch recordSearch) {
+        return PageUtil.pageInfo(baseMapper.selectVipRecord(PageUtil.getPage(recordSearch),recordSearch));
+
+
+    }
+
     // 发送会员到期3天消息推送
     private void temporary3DaysSend(Long userId, String phone) {
         Map<Long, String> receivers = new HashMap<>();

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

@@ -0,0 +1,26 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-08-23
+ */
+@ApiModel("会员添加记录")
+public class VipRecordVo extends VipCardRecord {
+
+    @ApiModelProperty("操作人姓名")
+    private String operatorName;
+
+    public String getOperatorName() {
+        return operatorName;
+    }
+
+    public void setOperatorName(String operatorName) {
+        this.operatorName = operatorName;
+    }
+}

+ 34 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/VipCardRecordMapper.xml

@@ -13,6 +13,10 @@
 	        <result column="end_time_" property="endTime" />
             <result column="msg_status_" property="msgStatus" />
             <result column="source_type_" property="sourceType" />
+            <result column="type_" property="type" />
+            <result column="times_" property="times" />
+            <result column="create_by_" property="createBy" />
+            <result column="reason_" property="reason" />
 		</resultMap>
 
     <!-- 表字段 -->
@@ -29,6 +33,10 @@
         , t.msg_status_ as msgStatus
         ,t.client_type_ as clientType
         ,t.source_type_ as sourceType
+        ,t.type_ as type
+        ,t.times_ as times
+        ,t.create_by_ as createBy
+        ,t.reason_ as reason
         </sql>
 
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo">
@@ -83,4 +91,30 @@
         and msg_status_ in (0,1)
         order by end_time_ desc
     </select>
+
+	<select id="selectVipRecord" resultType="com.yonge.cooleshow.biz.dal.vo.VipRecordVo">
+        select
+        <include refid="baseColumns"/>,
+        u.username_ as operatorName
+        from vip_card_record t
+        left join sys_user u on t.create_by_ = u.id_
+      <where>
+          <if test="param.startTime != null">
+              and #{param.startTime} &lt;= t.create_time_
+          </if>
+          <if test="param.endTime != null">
+              and #{param.endTime} &gt;= t.create_time_
+          </if>
+          <if test="param.search != null and param.search != ''">
+              and u.username_ like concat( '%', #{param.search},'%')
+          </if>
+          <if test="param.client != null">
+              and t.client_type_ = #{param.client}
+          </if>
+          <if test="param.userId != null">
+              and t.user_id_ = #{param.userId}
+          </if>
+      </where>
+        order by  t.id_ desc
+    </select>
 </mapper>