彭雪彬
2025-10-21 919acbd3e8148ffc5dfabc6d6468fa90f868a3cc
邀请新用户记录添加
8 files added
529 ■■■■■ changed files
oying-system/src/main/java/com/oying/modules/system/domain/Invitations.java 71 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/system/domain/dto/InvitationsQueryCriteria.java 57 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/system/domain/dto/InvitationsVo.java 27 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/system/mapper/InvitationsMapper.java 22 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/system/rest/InvitationsController.java 87 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/system/service/InvitationsService.java 63 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/system/service/impl/InvitationsServiceImpl.java 126 ●●●●● patch | view | raw | blame | history
oying-system/src/main/resources/mapper/system/InvitationsMapper.xml 76 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/system/domain/Invitations.java
New file
@@ -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));
    }
}
oying-system/src/main/java/com/oying/modules/system/domain/dto/InvitationsQueryCriteria.java
New file
@@ -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;
}
oying-system/src/main/java/com/oying/modules/system/domain/dto/InvitationsVo.java
New file
@@ -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;
}
oying-system/src/main/java/com/oying/modules/system/mapper/InvitationsMapper.java
New file
@@ -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);
}
oying-system/src/main/java/com/oying/modules/system/rest/InvitationsController.java
New file
@@ -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);
    }
}
oying-system/src/main/java/com/oying/modules/system/service/InvitationsService.java
New file
@@ -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);
}
oying-system/src/main/java/com/oying/modules/system/service/impl/InvitationsServiceImpl.java
New file
@@ -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;
    }
}
oying-system/src/main/resources/mapper/system/InvitationsMapper.xml
New file
@@ -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>