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>