dcs 1 月之前
父节点
当前提交
271291e611

+ 46 - 0
virgo.core/src/main/java/com/bosshand/virgo/core/controller/InviteQrController.java

@@ -0,0 +1,46 @@
+package com.bosshand.virgo.core.controller;
+
+import com.bosshand.virgo.core.model.Invite;
+import com.bosshand.virgo.core.model.MgrUser;
+import com.bosshand.virgo.core.response.Response;
+import com.bosshand.virgo.core.service.InviteQrService;
+import com.bosshand.virgo.core.utils.ContextUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping({"inviteQr"})
+@Api(tags = {"邀请码"})
+public class InviteQrController {
+
+    @Autowired
+    InviteQrService inviteQrService;
+
+    @ApiOperation("获取邀请码")
+    @RequestMapping(value = "", method = RequestMethod.GET)
+    public Response get() {
+        return Response.ok(inviteQrService.get());
+    }
+
+    @ApiOperation("分页获取邀请人列表")
+    @RequestMapping(value = "/{currPage}/{pageSize}", method = RequestMethod.GET)
+    public Response list(@PathVariable int currPage, @PathVariable int pageSize) {
+        MgrUser user = ContextUtils.getCurrentUser();
+        int totalCount = inviteQrService.getTotalCount(user.getId());
+        List<Invite> dataList = inviteQrService.getLimit(user.getId(), currPage, pageSize);
+        Map<String, Object> result = new HashMap<>();
+        result.put("dataList", dataList);
+        result.put("totalCount", totalCount);
+        return Response.ok(result);
+    }
+
+}

+ 18 - 0
virgo.core/src/main/java/com/bosshand/virgo/core/dao/InviteDao.java

@@ -0,0 +1,18 @@
+package com.bosshand.virgo.core.dao;
+
+import com.bosshand.virgo.core.model.Invite;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface InviteDao {
+
+    int insert(Invite invite);
+
+    int getTotalCount(long userId);
+
+    List<Invite> getLimit(@Param("userId") long userId, @Param("currIndex") int currIndex, @Param("pageSize") int pageSize);
+
+}

+ 15 - 0
virgo.core/src/main/java/com/bosshand/virgo/core/dao/InviteQrDao.java

@@ -0,0 +1,15 @@
+package com.bosshand.virgo.core.dao;
+
+import com.bosshand.virgo.core.model.InviteQr;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface InviteQrDao {
+
+    InviteQr getUser(long userId);
+
+    InviteQr getContent(String content);
+
+    int insert(InviteQr inviteQr);
+
+}

+ 81 - 0
virgo.core/src/main/java/com/bosshand/virgo/core/model/Invite.java

@@ -0,0 +1,81 @@
+package com.bosshand.virgo.core.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.util.Date;
+
+/**
+ * 邀请码用户
+ */
+public class Invite {
+
+    private int id;
+
+    /**
+     * 用户
+     */
+    private long userId;
+
+    /**
+     * 邀请码用户
+     */
+    private long inviteUserId;
+
+    private String userName;
+
+    private String userPortrait;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(long userId) {
+        this.userId = userId;
+    }
+
+    public long getInviteUserId() {
+        return inviteUserId;
+    }
+
+    public void setInviteUserId(long inviteUserId) {
+        this.inviteUserId = inviteUserId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getUserPortrait() {
+        return userPortrait;
+    }
+
+    public void setUserPortrait(String userPortrait) {
+        this.userPortrait = userPortrait;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 57 - 0
virgo.core/src/main/java/com/bosshand/virgo/core/model/InviteQr.java

@@ -0,0 +1,57 @@
+package com.bosshand.virgo.core.model;
+
+/**
+ * 邀请码
+ */
+public class InviteQr {
+
+    private int id;
+
+    private String content;
+
+    private int state;
+
+    private String url;
+
+    private long userId;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public int getState() {
+        return state;
+    }
+
+    public void setState(int state) {
+        this.state = state;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(long userId) {
+        this.userId = userId;
+    }
+}

+ 11 - 0
virgo.core/src/main/java/com/bosshand/virgo/core/model/MgrUser.java

@@ -63,6 +63,9 @@ public class MgrUser implements BaseModel {
 	
 	private String roles;
 
+	// DTO-邀请码content
+	private String qrContent;
+
 	public long getId() {
 		return id;
 	}
@@ -286,4 +289,12 @@ public class MgrUser implements BaseModel {
 	public void setRoles(String roles) {
 		this.roles = roles;
 	}
+
+	public String getQrContent() {
+		return qrContent;
+	}
+
+	public void setQrContent(String qrContent) {
+		this.qrContent = qrContent;
+	}
 }

+ 76 - 0
virgo.core/src/main/java/com/bosshand/virgo/core/service/InviteQrService.java

@@ -0,0 +1,76 @@
+package com.bosshand.virgo.core.service;
+
+import com.bosshand.virgo.core.dao.InviteDao;
+import com.bosshand.virgo.core.dao.InviteQrDao;
+import com.bosshand.virgo.core.model.Invite;
+import com.bosshand.virgo.core.model.InviteQr;
+import com.bosshand.virgo.core.model.MgrUser;
+import com.bosshand.virgo.core.utils.ContextUtils;
+import com.bosshand.virgo.core.utils.QRCodeUtil;
+import com.bosshand.virgo.exception.ServiceException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+@Service
+public class InviteQrService {
+
+    @Autowired
+    InviteQrDao inviteQrDao;
+
+    @Autowired
+    InviteDao inviteDao;
+
+    public Map<String, Object> get() {
+
+        MgrUser user = ContextUtils.getCurrentUser();
+
+        long userId = user.getId();
+
+        String content = null;
+
+        InviteQr inviteQr = inviteQrDao.getUser(userId);
+
+        String st = "https://www.waywish.com/workark/index.html#/loginRegister/login";
+
+        if (inviteQr != null) {
+            content = inviteQr.getContent();
+        } else {
+            InviteQr qr = new InviteQr();
+            qr.setUserId(userId);
+            String randomString = UUID.randomUUID().toString().replaceAll("-", "");
+            qr.setContent(randomString);
+            content = randomString;
+            qr.setUrl(st);
+            inviteQrDao.insert(qr);
+        }
+
+        String result = null;
+        try {
+            byte[] qrCodeBytes = QRCodeUtil.getQRCodeBytes(st + "?content=" + content);
+            result = "data:image/png;base64," + Base64.getEncoder().encodeToString(qrCodeBytes);
+        } catch (Exception e) {
+            throw new ServiceException("generate qr fail.");
+        }
+
+        Map<String, Object> map = new HashMap<>();
+        int number = inviteDao.getTotalCount(userId);
+        map.put("inviteNumber", number);
+        map.put("content", content);
+        map.put("url", st + "?content=" + content);
+        map.put("qrCodeBase64", result);
+        return map;
+
+    }
+
+    public int getTotalCount(long userId) {
+        return inviteDao.getTotalCount(userId);
+    }
+
+    public List<Invite> getLimit(long userId, int currPage, int pageSize) {
+        int currIndex = (currPage - 1) * pageSize;
+        return inviteDao.getLimit(userId, currIndex, pageSize);
+    }
+
+}

+ 23 - 0
virgo.core/src/main/java/com/bosshand/virgo/core/service/MgrUserService.java

@@ -42,8 +42,27 @@ public class MgrUserService {
 	@Autowired
 	private MgrResourceDao mgrResourceDao;
 
+	@Autowired
+	private InviteDao inviteDao;
+
+	@Autowired
+	private InviteQrDao inviteQrDao;
+
 	static Logger log = LoggerFactory.getLogger(MgrUserService.class);
 
+	/**
+	 * 保存邀请码用户记录
+	 */
+	public void saveInvite(long userId, String content) {
+		InviteQr inviteQr = inviteQrDao.getContent(content);
+		if (inviteQr != null) {
+			Invite invite = new Invite();
+			invite.setUserId(inviteQr.getUserId());
+			invite.setInviteUserId(userId);
+			inviteDao.insert(invite);
+		}
+	}
+
 	/**
 	 * 获取token调用凭证
 	 */
@@ -142,6 +161,10 @@ public class MgrUserService {
 
 		this.addChatUser(String.valueOf(user.getId()),user.getName());
 		this.addWorkarkChatUser(String.valueOf(user.getId()),user.getName());
+
+		if (user.getQrContent() != null) {
+			this.saveInvite(user.getId(), user.getQrContent());
+		}
 	}
 
 	public void wxRegister(MgrUser user) {

+ 13 - 0
virgo.core/src/main/java/com/bosshand/virgo/core/shiro/LoginUserDto.java

@@ -27,6 +27,11 @@ public class LoginUserDto {
      */
     private String pCode;
 
+    /**
+     * 邀请码content字符
+     */
+    private String qrContent;
+
     public String getPhone() {
         return phone;
     }
@@ -66,4 +71,12 @@ public class LoginUserDto {
     public void setPassword(String password) {
         this.password = password;
     }
+
+    public String getQrContent() {
+        return qrContent;
+    }
+
+    public void setQrContent(String qrContent) {
+        this.qrContent = qrContent;
+    }
 }

+ 1 - 0
virgo.core/src/main/java/com/bosshand/virgo/core/shiro/VirgoAuthenticationFilter.java

@@ -131,6 +131,7 @@ public class VirgoAuthenticationFilter extends AuthenticatingFilter {
 				MgrUser u = new MgrUser();
 				u.setPhone(dto.getPhone());
 				u.setName(CodeCache.DefaultUserName);
+				u.setQrContent(dto.getQrContent());
 				mgrUserService.register(u);
 				phone = dto.getPhone();
 			}

+ 30 - 0
virgo.core/src/main/resources/mapper/InviteMapper.xml

@@ -0,0 +1,30 @@
+<?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.bosshand.virgo.core.dao.InviteDao">
+
+    <resultMap type="com.bosshand.virgo.core.model.Invite" id="result">
+        <id column="id" property="id"/>
+        <result column="userId" property="userId"/>
+        <result column="inviteUserId" property="inviteUserId"/>
+        <result column="createTime" property="createTime"/>
+        <result column="userName" property="userName"/>
+        <result column="userPortrait" property="userPortrait"/>
+    </resultMap>
+
+    <insert id="insert" parameterType="com.bosshand.virgo.core.model.Invite" useGeneratedKeys="true" keyProperty="id">
+        INSERT INTO invite(userId, inviteUserId, createTime) VALUES (#{userId}, #{inviteUserId}, now())
+    </insert>
+
+    <select id="getTotalCount" parameterType="com.bosshand.virgo.core.model.Invite" resultType="Integer">
+        SELECT count(*) FROM invite where userId = #{userId}
+    </select>
+
+    <sql id="query">
+        select a.*, b.name as userName, b.portrait as userPortrait from invite a left join mgr_user b on a.inviteUserId = b.id
+    </sql>
+
+    <select id="getLimit" resultMap="result">
+        <include refid="query"/> where a.userId = #{userId} order by a.createTime desc limit #{currIndex} , #{pageSize}
+    </select>
+
+</mapper>

+ 25 - 0
virgo.core/src/main/resources/mapper/InviteQrMapper.xml

@@ -0,0 +1,25 @@
+<?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.bosshand.virgo.core.dao.InviteQrDao">
+
+    <resultMap type="com.bosshand.virgo.core.model.InviteQr" id="result">
+        <id column="id" property="id"/>
+        <result column="content" property="content"/>
+        <result column="state" property="state"/>
+        <result column="url" property="url"/>
+        <result column="userId" property="userId"/>
+    </resultMap>
+
+    <select id="getUser" resultMap="result">
+        select * from invite_qr where userId = #{userId}
+    </select>
+
+    <select id="getContent" resultMap="result">
+        select * from invite_qr where content = #{content}
+    </select>
+
+    <insert id="insert" parameterType="com.bosshand.virgo.core.model.InviteQr" useGeneratedKeys="true" keyProperty="id">
+        INSERT INTO invite_qr(content, state, url, userId) VALUES (#{content}, #{state}, #{url}, #{userId})
+    </insert>
+
+</mapper>