From 919acbd3e8148ffc5dfabc6d6468fa90f868a3cc Mon Sep 17 00:00:00 2001
From: 彭雪彬 <1724387007@qq.com>
Date: Tue, 21 Oct 2025 17:49:45 +0800
Subject: [PATCH] 邀请新用户记录添加
---
oying-system/src/main/java/com/oying/modules/system/service/InvitationsService.java | 63 +++++++
oying-system/src/main/java/com/oying/modules/system/mapper/InvitationsMapper.java | 22 ++
oying-system/src/main/java/com/oying/modules/system/rest/InvitationsController.java | 87 +++++++++
oying-system/src/main/resources/mapper/system/InvitationsMapper.xml | 76 ++++++++
oying-system/src/main/java/com/oying/modules/system/domain/dto/InvitationsQueryCriteria.java | 57 ++++++
oying-system/src/main/java/com/oying/modules/system/domain/Invitations.java | 71 +++++++
oying-system/src/main/java/com/oying/modules/system/domain/dto/InvitationsVo.java | 27 +++
oying-system/src/main/java/com/oying/modules/system/service/impl/InvitationsServiceImpl.java | 126 ++++++++++++++
8 files changed, 529 insertions(+), 0 deletions(-)
diff --git a/oying-system/src/main/java/com/oying/modules/system/domain/Invitations.java b/oying-system/src/main/java/com/oying/modules/system/domain/Invitations.java
new file mode 100644
index 0000000..6578abe
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/system/domain/Invitations.java
@@ -0,0 +1,71 @@
+package com.oying.modules.system.domain;
+
+import com.oying.base.BaseEntity;
+import lombok.Getter;
+import lombok.Setter;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.sql.Timestamp;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+* @description /
+* @author pxb
+* @date 2025-10-20
+**/
+@Getter
+@Setter
+@TableName("sys_invitations")
+public class Invitations extends BaseEntity implements Serializable {
+
+ @TableId(value = "invitations_id", type = IdType.AUTO)
+ @ApiModelProperty(value = "ID")
+ private Long invitationsId;
+
+ @ApiModelProperty(value = "邀请人ID")
+ private Long inviterId;
+
+ @ApiModelProperty(value = "邀请人电话")
+ private String inviterPhone;
+
+ @ApiModelProperty(value = "邀请人姓名")
+ private String inviterName;
+
+ @ApiModelProperty(value = "邀请人openid")
+ private String inviterOpenId;
+
+ @ApiModelProperty(value = "新用户openid")
+ private String newUserOpenId;
+
+ @ApiModelProperty(value = "新用户ID")
+ private Long newUserId;
+
+ @ApiModelProperty(value = "新用户姓名")
+ private String newUserName;
+
+ @ApiModelProperty(value = "新用户电话")
+ private String newUserPhone;
+
+ @ApiModelProperty(value = "记录类型(邀请新用户 YQ)")
+ private String type;
+
+ @ApiModelProperty(value = "用户类型(QS骑手邀请记录,YH买家用户邀请记录,MJ卖家)")
+ private String userType;
+
+ @ApiModelProperty(value = "1成功 0提交 2失败")
+ private String status;
+
+ @ApiModelProperty(value = "奖励数值")
+ private String rewardValue;
+
+ @ApiModelProperty(value = "奖励类型")
+ private String rewardType;
+
+ public void copy(Invitations source){
+ BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+ }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/system/domain/dto/InvitationsQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/system/domain/dto/InvitationsQueryCriteria.java
new file mode 100644
index 0000000..a30aecd
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/system/domain/dto/InvitationsQueryCriteria.java
@@ -0,0 +1,57 @@
+package com.oying.modules.system.domain.dto;
+
+import lombok.Data;
+import java.sql.Timestamp;
+import java.util.List;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author pxb
+* @date 2025-10-20
+**/
+@Data
+public class InvitationsQueryCriteria{
+
+ @ApiModelProperty(value = "页码", example = "1")
+ private Integer page = 1;
+
+ @ApiModelProperty(value = "每页数据量", example = "10")
+ private Integer size = 10;
+
+ @ApiModelProperty(value = "邀请人ID")
+ private Long inviterId;
+
+ @ApiModelProperty(value = "邀请人电话")
+ private String inviterPhone;
+
+ @ApiModelProperty(value = "邀请人姓名")
+ private String inviterName;
+
+ @ApiModelProperty(value = "邀请人openid")
+ private String inviterOpenId;
+
+ @ApiModelProperty(value = "新用户openid")
+ private String newUserOpenId;
+
+ @ApiModelProperty(value = "新用户ID")
+ private Long newUserId;
+
+ @ApiModelProperty(value = "新用户姓名")
+ private String newUserName;
+
+ @ApiModelProperty(value = "新用户电话")
+ private String newUserPhone;
+
+ @ApiModelProperty(value = "记录类型")
+ private String type;
+
+ @ApiModelProperty(value = "用户类型")
+ private String userType;
+
+ @ApiModelProperty(value = "1success 0pending 2failed")
+ private String status;
+
+ @ApiModelProperty(value = "奖励类型")
+ private String rewardType;
+ private List<Timestamp> createTime;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/system/domain/dto/InvitationsVo.java b/oying-system/src/main/java/com/oying/modules/system/domain/dto/InvitationsVo.java
new file mode 100644
index 0000000..f653846
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/system/domain/dto/InvitationsVo.java
@@ -0,0 +1,27 @@
+package com.oying.modules.system.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+* @description /
+* @author pxb
+* @date 2025-10-20
+**/
+@Getter
+@Setter
+public class InvitationsVo implements Serializable {
+
+ @ApiModelProperty(value = "邀请人ID")
+ private Long inviterId;
+
+ @ApiModelProperty(value = "新用户ID")
+ private Long newUserId;
+
+ @ApiModelProperty(value = "用户类型(QS骑手邀请记录,YH买家用户邀请记录)")
+ private String userType;
+
+}
diff --git a/oying-system/src/main/java/com/oying/modules/system/mapper/InvitationsMapper.java b/oying-system/src/main/java/com/oying/modules/system/mapper/InvitationsMapper.java
new file mode 100644
index 0000000..7ff07a5
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/system/mapper/InvitationsMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.system.mapper;
+
+import com.oying.modules.system.domain.Invitations;
+import com.oying.modules.system.domain.dto.InvitationsQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author pxb
+* @date 2025-10-20
+**/
+@Mapper
+public interface InvitationsMapper extends BaseMapper<Invitations> {
+
+ IPage<Invitations> findAll(@Param("criteria") InvitationsQueryCriteria criteria, Page<Object> page);
+
+ List<Invitations> findAll(@Param("criteria") InvitationsQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/system/rest/InvitationsController.java b/oying-system/src/main/java/com/oying/modules/system/rest/InvitationsController.java
new file mode 100644
index 0000000..ccc24b0
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/system/rest/InvitationsController.java
@@ -0,0 +1,87 @@
+package com.oying.modules.system.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.system.domain.Invitations;
+import com.oying.modules.system.domain.dto.InvitationsVo;
+import com.oying.modules.system.service.InvitationsService;
+import com.oying.modules.system.domain.dto.InvitationsQueryCriteria;
+import lombok.RequiredArgsConstructor;
+
+import java.util.List;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+ * @author pxb
+ * @date 2025-10-20
+ **/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "邀请新用户记录")
+@RequestMapping("/api/invitations")
+public class InvitationsController {
+
+ private final InvitationsService invitationsService;
+
+ @ApiOperation("导出数据")
+ @GetMapping(value = "/download")
+ // @PreAuthorize("@el.check('invitations:list')")
+ public void exportInvitations(HttpServletResponse response, InvitationsQueryCriteria criteria) throws IOException {
+ invitationsService.download(invitationsService.queryAll(criteria), response);
+ }
+
+ @GetMapping
+ @ApiOperation("查询邀请新用户记录")
+ // @PreAuthorize("@el.check('invitations:list')")
+ public ResponseEntity<PageResult<Invitations>> queryInvitations(InvitationsQueryCriteria criteria) {
+ Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+ return new ResponseEntity<>(invitationsService.queryAll(criteria, page), HttpStatus.OK);
+ }
+
+ // @PostMapping
+ // @Log("新增邀请新用户记录")
+ // @ApiOperation("新增邀请新用户记录")
+ // @PreAuthorize("@el.check('invitations:add')")
+ // public ResponseEntity<Object> createInvitations(@Validated @RequestBody Invitations resources){
+ // invitationsService.create(resources);
+ // return new ResponseEntity<>(HttpStatus.CREATED);
+ // }
+
+ // @PutMapping
+ // @Log("修改邀请新用户记录")
+ // @ApiOperation("修改邀请新用户记录")
+ // @PreAuthorize("@el.check('invitations:edit')")
+ // public ResponseEntity<Object> updateInvitations(@Validated @RequestBody Invitations resources) {
+ // invitationsService.update(resources);
+ // return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+ // }
+
+ @DeleteMapping
+ @Log("删除邀请新用户记录")
+ @ApiOperation("删除邀请新用户记录")
+ // @PreAuthorize("@el.check('invitations:del')")
+ public ResponseEntity<Object> deleteInvitations(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+ invitationsService.deleteAll(ids);
+ return new ResponseEntity<>(HttpStatus.OK);
+ }
+
+ @PostMapping("addInvitations")
+ @Log("新增邀请新用户记录")
+ @ApiOperation("新增邀请新用户记录")
+ // @PreAuthorize("@el.check('invitations:add')")
+ public ResponseEntity<Object> addInvitations(@RequestBody InvitationsVo invitationsVo) {
+ return new ResponseEntity<>(invitationsService.addInvitations(invitationsVo), HttpStatus.OK);
+ }
+
+}
diff --git a/oying-system/src/main/java/com/oying/modules/system/service/InvitationsService.java b/oying-system/src/main/java/com/oying/modules/system/service/InvitationsService.java
new file mode 100644
index 0000000..3980a38
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/system/service/InvitationsService.java
@@ -0,0 +1,63 @@
+package com.oying.modules.system.service;
+
+import com.oying.modules.system.domain.Invitations;
+import com.oying.modules.system.domain.dto.InvitationsQueryCriteria;
+import java.util.Map;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.modules.system.domain.dto.InvitationsVo;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author pxb
+* @date 2025-10-20
+**/
+public interface InvitationsService extends IService<Invitations> {
+
+ /**
+ * 查询数据分页
+ * @param criteria 条件
+ * @param page 分页参数
+ * @return PageResult
+ */
+ PageResult<Invitations> queryAll(InvitationsQueryCriteria criteria, Page<Object> page);
+
+ /**
+ * 查询所有数据不分页
+ * @param criteria 条件参数
+ * @return List<InvitationsDto>
+ */
+ List<Invitations> queryAll(InvitationsQueryCriteria criteria);
+
+ /**
+ * 创建
+ * @param resources /
+ */
+ void create(Invitations resources);
+
+ /**
+ * 编辑
+ * @param resources /
+ */
+ void update(Invitations resources);
+
+ /**
+ * 多选删除
+ * @param ids /
+ */
+ void deleteAll(List<Long> ids);
+
+ /**
+ * 导出数据
+ * @param all 待导出的数据
+ * @param response /
+ * @throws IOException /
+ */
+ void download(List<Invitations> all, HttpServletResponse response) throws IOException;
+
+ Object addInvitations(InvitationsVo invitationsVo);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/system/service/impl/InvitationsServiceImpl.java b/oying-system/src/main/java/com/oying/modules/system/service/impl/InvitationsServiceImpl.java
new file mode 100644
index 0000000..65dee21
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/system/service/impl/InvitationsServiceImpl.java
@@ -0,0 +1,126 @@
+package com.oying.modules.system.service.impl;
+
+import com.oying.modules.system.domain.Invitations;
+import com.oying.modules.system.domain.User;
+import com.oying.modules.system.domain.dto.InvitationsVo;
+import com.oying.modules.system.mapper.UserMapper;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.system.service.InvitationsService;
+import com.oying.modules.system.domain.dto.InvitationsQueryCriteria;
+import com.oying.modules.system.mapper.InvitationsMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+
+import com.oying.utils.PageResult;
+
+/**
+ * @author pxb
+ * @description 服务实现
+ * @date 2025-10-20
+ **/
+@Service
+@RequiredArgsConstructor
+public class InvitationsServiceImpl extends ServiceImpl<InvitationsMapper, Invitations> implements InvitationsService {
+
+ private final InvitationsMapper invitationsMapper;
+ private final UserMapper userMapper;
+
+ @Override
+ public PageResult<Invitations> queryAll(InvitationsQueryCriteria criteria, Page<Object> page) {
+ return PageUtil.toPage(invitationsMapper.findAll(criteria, page));
+ }
+
+ @Override
+ public List<Invitations> queryAll(InvitationsQueryCriteria criteria) {
+ return invitationsMapper.findAll(criteria);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void create(Invitations resources) {
+ invitationsMapper.insert(resources);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void update(Invitations resources) {
+ Invitations invitations = getById(resources.getInvitationsId());
+ invitations.copy(resources);
+ invitationsMapper.updateById(invitations);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void deleteAll(List<Long> ids) {
+ invitationsMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void download(List<Invitations> all, HttpServletResponse response) throws IOException {
+ List<Map<String, Object>> list = new ArrayList<>();
+ for (Invitations invitations : all) {
+ Map<String, Object> map = new LinkedHashMap<>();
+ map.put("邀请人ID", invitations.getInviterId());
+ map.put("邀请人电话", invitations.getInviterPhone());
+ map.put("邀请人姓名", invitations.getInviterName());
+ map.put("邀请人openid", invitations.getInviterOpenId());
+ map.put("新用户openid", invitations.getNewUserOpenId());
+ map.put("新用户ID", invitations.getNewUserId());
+ map.put("新用户姓名", invitations.getNewUserName());
+ map.put("新用户电话", invitations.getNewUserPhone());
+ map.put("记录类型", invitations.getType());
+ map.put("用户类型", invitations.getUserType());
+ map.put("1success 0pending 2failed", invitations.getStatus());
+ map.put("奖励数值", invitations.getRewardValue());
+ map.put("奖励类型", invitations.getRewardType());
+ map.put("创建者", invitations.getCreateBy());
+ map.put("更新者", invitations.getUpdateBy());
+ map.put("创建日期", invitations.getCreateTime());
+ map.put("更新时间", invitations.getUpdateTime());
+ list.add(map);
+ }
+ FileUtil.downloadExcel(list, response);
+ }
+
+ @Override
+ public Object addInvitations(InvitationsVo invitationsVo) {
+ // 判断是否为新用户
+ // 查询邀请人信息
+ User user = userMapper.selectById(invitationsVo.getInviterId());
+ Invitations invitations = new Invitations();
+ invitations.setInviterId(invitationsVo.getInviterId());
+ invitations.setInviterPhone(user.getUsername());
+ invitations.setInviterName(user.getNickName());
+ invitations.setInviterOpenId(user.getOpenid());
+ if(invitationsVo.getUserType().equals("QS")) {
+ invitations.setInviterOpenId(user.getRiderOpenId());
+ }
+ // 查询被邀请人的信息
+ User newUser = userMapper.selectById(invitationsVo.getNewUserId());
+ invitations.setNewUserOpenId(newUser.getOpenid());
+ if(invitationsVo.getUserType().equals("QS")) {
+ invitations.setNewUserOpenId(newUser.getRiderOpenId());
+ }
+ invitations.setNewUserId(invitationsVo.getNewUserId());
+ invitations.setNewUserName(newUser.getNickName());
+ invitations.setNewUserPhone(newUser.getUsername());
+ invitations.setUserType(invitationsVo.getUserType());
+ // 邀请
+ invitations.setType("YQ");
+ invitations.setStatus("1");
+ invitationsMapper.insert(invitations);
+ return invitations;
+ }
+
+}
diff --git a/oying-system/src/main/resources/mapper/system/InvitationsMapper.xml b/oying-system/src/main/resources/mapper/system/InvitationsMapper.xml
new file mode 100644
index 0000000..366bb54
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/system/InvitationsMapper.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.oying.modules.system.mapper.InvitationsMapper">
+ <resultMap id="BaseResultMap" type="com.oying.modules.system.domain.Invitations">
+ <id column="invitations_id" property="invitationsId"/>
+ <result column="inviter_id" property="inviterId"/>
+ <result column="inviter_phone" property="inviterPhone"/>
+ <result column="inviter_name" property="inviterName"/>
+ <result column="inviter_open_id" property="inviterOpenId"/>
+ <result column="new_user_open_id" property="newUserOpenId"/>
+ <result column="new_user_id" property="newUserId"/>
+ <result column="new_user_name" property="newUserName"/>
+ <result column="new_user_phone" property="newUserPhone"/>
+ <result column="type" property="type"/>
+ <result column="user_type" property="userType"/>
+ <result column="status" property="status"/>
+ <result column="reward_value" property="rewardValue"/>
+ <result column="reward_type" property="rewardType"/>
+ <result column="create_by" property="createBy"/>
+ <result column="update_by" property="updateBy"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_time" property="updateTime"/>
+ </resultMap>
+
+ <sql id="Base_Column_List">
+ invitations_id, inviter_id, inviter_phone, inviter_name, inviter_open_id, new_user_open_id, new_user_id, new_user_name, new_user_phone, type, user_type, status, reward_value, reward_type, create_by, update_by, create_time, update_time
+ </sql>
+
+ <select id="findAll" resultMap="BaseResultMap">
+ select
+ <include refid="Base_Column_List"/>
+ from sys_invitations
+ <where>
+ <if test="criteria.inviterId != null">
+ and inviter_id = #{criteria.inviterId}
+ </if>
+ <if test="criteria.inviterPhone != null">
+ and inviter_phone like concat('%',#{criteria.inviterPhone},'%')
+ </if>
+ <if test="criteria.inviterName != null">
+ and inviter_name like concat('%',#{criteria.inviterName},'%')
+ </if>
+ <if test="criteria.inviterOpenId != null">
+ and inviter_open_id = #{criteria.inviterOpenId}
+ </if>
+ <if test="criteria.newUserOpenId != null">
+ and new_user_open_id = #{criteria.newUserOpenId}
+ </if>
+ <if test="criteria.newUserId != null">
+ and new_user_id = #{criteria.newUserId}
+ </if>
+ <if test="criteria.newUserName != null">
+ and new_user_name like concat('%',#{criteria.newUserName},'%')
+ </if>
+ <if test="criteria.newUserPhone != null">
+ and new_user_phone like concat('%',#{criteria.newUserPhone},'%')
+ </if>
+ <if test="criteria.type != null">
+ and type = #{criteria.type}
+ </if>
+ <if test="criteria.userType != null">
+ and user_type = #{criteria.userType}
+ </if>
+ <if test="criteria.status != null">
+ and status = #{criteria.status}
+ </if>
+ <if test="criteria.rewardType != null">
+ and reward_type = #{criteria.rewardType}
+ </if>
+ <if test="criteria.createTime != null and criteria.createTime.size() > 0">
+ AND create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
+ </if>
+ </where>
+ order by invitations_id desc
+ </select>
+</mapper>
\ No newline at end of file
--
Gitblit v1.9.3