瀏覽代碼

登录相关

huangxiao 1 周之前
父節點
當前提交
20dbc56835

+ 1 - 1
src/main/java/net/mingsoft/config/ShiroConfig.java

@@ -34,7 +34,7 @@ import net.mingsoft.basic.strategy.ManagerModelStrategy;
 import net.mingsoft.people.filter.PeopleLoginFilter;
 import net.mingsoft.people.realm.PeopleAuthRealm;
 import net.mingsoft.people.realm.PeopleLoginMD5CredentialsMatcher;
-import net.mingsoft.tf.wx.WxCustomUserNamePasswordToken;
+import net.mingsoft.tf.wx.dto.WxCustomUserNamePasswordToken;
 import org.apache.shiro.authc.AuthenticationInfo;
 import org.apache.shiro.authc.AuthenticationToken;
 import org.apache.shiro.authc.Authenticator;

+ 12 - 1
src/main/java/net/mingsoft/tf/biz/IExhibitionBiz.java

@@ -3,14 +3,25 @@ package net.mingsoft.tf.biz;
 import net.mingsoft.base.biz.IBaseBiz;
 import net.mingsoft.tf.entity.ExhibitionEntity;
 
+import java.time.LocalDateTime;
 
 /**
  * 展会业务
+ *
  * @author 阿白
  * 创建日期:2025年10月23日 下午6:41:34<br/>
  * 历史修订:<br/>
  */
 public interface IExhibitionBiz extends IBaseBiz<ExhibitionEntity> {
+    /**
+     * 查到离时间最近的展会
+     */
+    ExhibitionEntity recently(LocalDateTime time);
 
-
+    /**
+     * 查到离现在最近的展会
+     */
+    default ExhibitionEntity recently() {
+        return recently(LocalDateTime.now());
+    }
 }

+ 18 - 1
src/main/java/net/mingsoft/tf/biz/IExhibitorBiz.java

@@ -3,14 +3,31 @@ package net.mingsoft.tf.biz;
 import net.mingsoft.base.biz.IBaseBiz;
 import net.mingsoft.tf.entity.ExhibitorEntity;
 
-
 /**
  * 展商业务
+ *
  * @author 阿白
  * 创建日期:2025年10月23日 下午6:41:34<br/>
  * 历史修订:<br/>
  */
 public interface IExhibitorBiz extends IBaseBiz<ExhibitorEntity> {
+    /**
+     * 查到用户的展商邀请
+     *
+     * @param user       用户
+     * @param exhibition 展会
+     */
+    ExhibitorEntity query(String user, String exhibition);
 
+    /**
+     * 创建展商邀请码
+     */
+    String invitationCode();
 
+    /**
+     * 根据邀请码查展商
+     *
+     * @param invitationCode 邀请码
+     */
+    ExhibitorEntity queryByInvitationCode(String invitationCode);
 }

+ 41 - 0
src/main/java/net/mingsoft/tf/biz/IPeopleExhibitorBiz.java

@@ -0,0 +1,41 @@
+package net.mingsoft.tf.biz;
+
+import net.mingsoft.base.biz.IBaseBiz;
+import net.mingsoft.tf.dao.IPeopleExhibitorDao;
+import net.mingsoft.tf.entity.PeopleExhibitorEntity;
+
+/**
+ * 用户关联展商业务
+ *
+ * @author 阿白
+ * 创建日期:2025年10月23日 下午6:41:34<br/>
+ * 历史修订:<br/>
+ */
+public interface IPeopleExhibitorBiz extends IBaseBiz<PeopleExhibitorEntity> {
+    /**
+     * 加入邀请
+     *
+     * @param user 用户
+     * @param code 邀请码
+     */
+    void join(String user, String code);
+
+    IPeopleExhibitorDao getDao();
+
+    /**
+     * 保存游客
+     * <p>
+     * 如果已经存在,就查询
+     */
+    PeopleExhibitorEntity saveGuest(String openid);
+
+    /**
+     * 删除游客
+     */
+    void deleteGuest(String openid);
+
+    /**
+     * 修改游客
+     */
+    void updateGuest(String openid, String icon, String nickName);
+}

+ 19 - 16
src/main/java/net/mingsoft/tf/biz/impl/ExhibitionBizImpl.java

@@ -1,34 +1,37 @@
 package net.mingsoft.tf.biz.impl;
 
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import net.mingsoft.base.biz.impl.BaseBizImpl;
 import net.mingsoft.base.dao.IBaseDao;
-import java.util.*;
-import net.mingsoft.tf.entity.ExhibitionEntity;
 import net.mingsoft.tf.biz.IExhibitionBiz;
 import net.mingsoft.tf.dao.IExhibitionDao;
+import net.mingsoft.tf.entity.ExhibitionEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
 
 /**
-* 展会管理持久化层
-* @author 阿白
-* 创建日期:2025年10月23日 下午6:41:34<br/>
-* 历史修订:<br/>
-*/
+ * 展会管理持久化层
+ *
+ * @author 阿白
+ * 创建日期:2025年10月23日 下午6:41:34<br/>
+ * 历史修订:<br/>
+ */
 @Service("tfexhibitionBizImpl")
-public class ExhibitionBizImpl extends BaseBizImpl<IExhibitionDao,ExhibitionEntity> implements IExhibitionBiz {
-
-
+public class ExhibitionBizImpl extends BaseBizImpl<IExhibitionDao, ExhibitionEntity> implements IExhibitionBiz {
     @Autowired
     private IExhibitionDao exhibitionDao;
 
-
     @Override
     protected IBaseDao getDao() {
-        // TODO Auto-generated method stub
         return exhibitionDao;
     }
 
-
-
+    @Override
+    public ExhibitionEntity recently(LocalDateTime time) {
+        return exhibitionDao.selectOne(new LambdaQueryWrapper<ExhibitionEntity>()
+                .ge(ExhibitionEntity::getActivityEnd, time)
+        );
+    }
 }

+ 34 - 14
src/main/java/net/mingsoft/tf/biz/impl/ExhibitorBizImpl.java

@@ -1,34 +1,54 @@
 package net.mingsoft.tf.biz.impl;
 
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import cn.hutool.core.util.RandomUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import net.mingsoft.base.biz.impl.BaseBizImpl;
 import net.mingsoft.base.dao.IBaseDao;
-import java.util.*;
-import net.mingsoft.tf.entity.ExhibitorEntity;
 import net.mingsoft.tf.biz.IExhibitorBiz;
 import net.mingsoft.tf.dao.IExhibitorDao;
+import net.mingsoft.tf.entity.ExhibitorEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
 /**
-* 展商管理持久化层
-* @author 阿白
-* 创建日期:2025年10月23日 下午6:41:34<br/>
-* 历史修订:<br/>
-*/
+ * 展商管理持久化层
+ *
+ * @author 阿白
+ * 创建日期:2025年10月23日 下午6:41:34<br/>
+ * 历史修订:<br/>
+ */
 @Service("tfexhibitorBizImpl")
-public class ExhibitorBizImpl extends BaseBizImpl<IExhibitorDao,ExhibitorEntity> implements IExhibitorBiz {
-
-
+public class ExhibitorBizImpl extends BaseBizImpl<IExhibitorDao, ExhibitorEntity> implements IExhibitorBiz {
     @Autowired
     private IExhibitorDao exhibitorDao;
 
-
     @Override
     protected IBaseDao getDao() {
-        // TODO Auto-generated method stub
         return exhibitorDao;
     }
 
+    @Override
+    public ExhibitorEntity query(String user, String exhibition) {
+        return exhibitorDao.selectOne(new LambdaQueryWrapper<>(ExhibitorEntity.class)
+                .eq(ExhibitorEntity::getExhibitorUser, user)
+                .eq(ExhibitorEntity::getExhibitorActivities, exhibition)
+        );
+    }
 
+    @Override
+    public String invitationCode() {
+        String code;
+        for (int i = 0; i <= 5; i++) {
+            code = RandomUtil.randomString(9);
+            if (queryByInvitationCode(code) == null) {
+                return code;
+            }
+        }
+        throw new RuntimeException("无法生成邀请码");
+    }
 
+    @Override
+    public ExhibitorEntity queryByInvitationCode(String invitationCode) {
+        return exhibitorDao.selectOne(new LambdaQueryWrapper<>(ExhibitorEntity.class).eq(ExhibitorEntity::getExhibitorCode, invitationCode));
+    }
 }

+ 83 - 0
src/main/java/net/mingsoft/tf/biz/impl/PeopleExhibitorBizImpl.java

@@ -0,0 +1,83 @@
+package net.mingsoft.tf.biz.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import net.mingsoft.base.biz.impl.BaseBizImpl;
+import net.mingsoft.tf.biz.IExhibitorBiz;
+import net.mingsoft.tf.biz.IPeopleExhibitorBiz;
+import net.mingsoft.tf.dao.IPeopleExhibitorDao;
+import net.mingsoft.tf.entity.ExhibitorEntity;
+import net.mingsoft.tf.entity.PeopleExhibitorEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Optional;
+
+/**
+ * 用户关联展商业务持久化层
+ *
+ * @author 阿白
+ * 创建日期:2025年10月23日 下午6:41:34<br/>
+ * 历史修订:<br/>
+ */
+@Service
+public class PeopleExhibitorBizImpl extends BaseBizImpl<IPeopleExhibitorDao, PeopleExhibitorEntity> implements IPeopleExhibitorBiz {
+    @Autowired
+    private IPeopleExhibitorDao peopleExhibitorDao;
+    @Autowired
+    private IExhibitorBiz exhibitorBiz;
+
+    @Override
+    public IPeopleExhibitorDao getDao() {
+        return peopleExhibitorDao;
+    }
+
+    @Override
+    public void join(String user, String code) {
+        Optional.ofNullable(exhibitorBiz.queryByInvitationCode(code))
+                .map(ExhibitorEntity::getExhibitorUser)
+                // 稳一手,自己不能邀请自己
+                .filter(exhibitorUser -> !StrUtil.equals(exhibitorUser, user))
+                // 判断是否已经邀请过
+                .filter(exhibitorUser -> peopleExhibitorDao.selectOne(new LambdaQueryWrapper<>(PeopleExhibitorEntity.class)
+                        .eq(PeopleExhibitorEntity::getPeople, user)
+                        .eq(PeopleExhibitorEntity::getExhibitor, exhibitorUser)) == null
+                )
+                .map(exhibitorUser -> {
+                    PeopleExhibitorEntity entity = new PeopleExhibitorEntity();
+                    entity.setExhibitor(exhibitorUser);
+                    entity.setPeople(user);
+                    entity.setCode(code);
+                    return entity;
+                })
+                .ifPresent(this::save);
+    }
+
+    @Override
+    public PeopleExhibitorEntity saveGuest(String openid) {
+        PeopleExhibitorEntity entity = peopleExhibitorDao.selectOne(new LambdaQueryWrapper<>(PeopleExhibitorEntity.class)
+                .eq(PeopleExhibitorEntity::getOpenId, openid));
+        if (entity != null) {
+            return entity;
+        }
+        PeopleExhibitorEntity newEntity = new PeopleExhibitorEntity();
+        newEntity.setOpenId(openid);
+        save(newEntity);
+        return newEntity;
+    }
+
+    @Override
+    public void deleteGuest(String openid) {
+        peopleExhibitorDao.delete(new LambdaQueryWrapper<>(PeopleExhibitorEntity.class)
+                .eq(PeopleExhibitorEntity::getOpenId, openid));
+    }
+
+    @Override
+    public void updateGuest(String openid, String icon, String nickName) {
+        PeopleExhibitorEntity newEntity = new PeopleExhibitorEntity();
+        newEntity.setIcon(icon);
+        newEntity.setNickName(nickName);
+        peopleExhibitorDao.update(newEntity, new LambdaQueryWrapper<>(PeopleExhibitorEntity.class)
+                .eq(PeopleExhibitorEntity::getOpenId, openid));
+    }
+}

+ 31 - 0
src/main/java/net/mingsoft/tf/dao/IPeopleExhibitorDao.java

@@ -0,0 +1,31 @@
+package net.mingsoft.tf.dao;
+
+import net.mingsoft.base.dao.IBaseDao;
+import net.mingsoft.tf.entity.PeopleExhibitorEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 用户关联展商持久层
+ *
+ * @author 阿白
+ * 创建日期:2025年10月23日 下午6:41:34<br/>
+ * 历史修订:<br/>
+ */
+public interface IPeopleExhibitorDao extends IBaseDao<PeopleExhibitorEntity> {
+    /**
+     * 汇总
+     *
+     * @param exhibitor 展商
+     */
+    Integer summary(String exhibitor);
+
+    /**
+     * 明细
+     *
+     * @param exhibitor 展商
+     * @param lastId    最后一条的用户ID
+     */
+    List<Map<String, Object>> details(String exhibitor, String lastId);
+}

+ 32 - 0
src/main/java/net/mingsoft/tf/dao/IPeopleExhibitorDao.xml

@@ -0,0 +1,32 @@
+<?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="net.mingsoft.tf.dao.IPeopleExhibitorDao">
+	<select id="summary">
+		select count(*)
+		from (select people, exhibitor
+			  from people_exhibitor where exhibitor=#{exhibitor}
+			  union
+			  select LINK_ID, INVITATION_USER_ID
+			  from mdiy_model_people_info
+			  where INVITATION_USER_ID is not null and INVITATION_USER_ID=#{exhibitor}
+			 ) as join_data
+	</select>
+	<select id="details">
+		select p.PEOPLE_ID,p.PU_REAL_NAME, p.PU_ICON, p.PU_NICKNAME,'type' type
+		from people_user p
+				 join (select people, exhibitor
+					   from people_exhibitor
+					   where exhibitor = #{exhibitor}
+					   union
+					   select LINK_ID, INVITATION_USER_ID
+					   from mdiy_model_people_info
+					   where INVITATION_USER_ID is not null
+						 and INVITATION_USER_ID = #{exhibitor}) as join_data
+					  on p.PEOPLE_ID = join_data.people
+		<where>
+		<if test="lastId != null and lastId != ''">p.PEOPLE_ID &lt; #{lastId}</if>
+		</where>
+		order by p.PEOPLE_ID desc
+		limit 20
+	</select>
+</mapper>

+ 26 - 0
src/main/java/net/mingsoft/tf/entity/PeopleExhibitorEntity.java

@@ -0,0 +1,26 @@
+package net.mingsoft.tf.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import net.mingsoft.base.entity.BaseEntity;
+
+/**
+ * 用户关联展商实体
+ *
+ * @author 阿白
+ * 创建日期:2025年10月23日 下午6:41:34<br/>
+ * 历史修订:<br/>
+ */
+@Data
+@TableName("people_exhibitor")
+@EqualsAndHashCode(callSuper = true)
+public class PeopleExhibitorEntity extends BaseEntity {
+    private String people;
+    private String exhibitor;
+    private String code;
+    private String openId;
+    private String icon;
+    private String nickName;
+
+}

+ 131 - 0
src/main/java/net/mingsoft/tf/wx/ExhibitorAction.java

@@ -0,0 +1,131 @@
+package net.mingsoft.tf.wx;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import net.mingsoft.base.entity.ResultData;
+import net.mingsoft.basic.bean.UploadConfigBean;
+import net.mingsoft.people.action.BaseAction;
+import net.mingsoft.people.action.people.FileAction;
+import net.mingsoft.people.util.PeopleUtil;
+import net.mingsoft.tf.biz.IExhibitionBiz;
+import net.mingsoft.tf.biz.IExhibitorBiz;
+import net.mingsoft.tf.biz.IPeopleExhibitorBiz;
+import net.mingsoft.tf.entity.ExhibitionEntity;
+import net.mingsoft.tf.entity.ExhibitorEntity;
+import net.mingsoft.tf.wx.dto.ExhibitorInfoResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+@Tag(name = "微信-展商")
+@RequestMapping("/people")
+@Controller
+public class ExhibitorAction extends BaseAction {
+    @Autowired
+    private FileAction fileAction;
+    @Autowired
+    private net.mingsoft.tf.action.ExhibitorAction exhibitorAction;
+    @Autowired
+    private IExhibitionBiz exhibitionBiz;
+    @Autowired
+    private IExhibitorBiz exhibitorBiz;
+    @Autowired
+    private IPeopleExhibitorBiz peopleExhibitorBiz;
+
+    @Operation(summary = "微信-关联邀请关系")
+    @Parameters({
+            @Parameter(name = "code", description = "邀请码", required = true, in = ParameterIn.QUERY)
+    })
+    @GetMapping(value = "/joinInvitation")
+    @ResponseBody
+    public ResultData joinInvitation(String code) {
+        Optional.ofNullable(code).ifPresent(c -> peopleExhibitorBiz.join(PeopleUtil.getPeopleBean().getPeopleId(), c));
+        return ResultData.build().success();
+    }
+
+    @Operation(summary = "微信-邀请的用户汇总")
+    @GetMapping(value = "/invitation/summary")
+    @ResponseBody
+    public ResultData invitationSummary() {
+        Map<String, Object> map = new HashMap<>();
+        // 总人数
+        Integer summary = peopleExhibitorBiz.getDao().summary(PeopleUtil.getPeopleBean().getPeopleId());
+        map.put("total", summary);
+        map.put("register", summary);
+        // TODO 已到场
+        map.put("arrived", null);
+        return ResultData.build().success(map);
+    }
+
+    @Operation(summary = "微信-邀请的用户明细")
+    @Parameters({
+            @Parameter(name = "lastId", description = "当前页最后一个用户ID", required = true, in = ParameterIn.QUERY)
+    })
+    @GetMapping(value = "/invitation/details")
+    @ResponseBody
+    public ResultData invitationDetails(String lastId) {
+        // TODO 这里的状态怎么计算?
+        return Optional.ofNullable(peopleExhibitorBiz.getDao().details(PeopleUtil.getPeopleBean().getPeopleId(), lastId))
+                .map(ResultData.build()::success)
+                .orElseGet(ResultData.build()::success);
+    }
+
+    @Operation(summary = "微信-生成入场二维码")
+    @GetMapping(value = "/qrcode")
+    @ResponseBody
+    public ResultData qrcode() {
+        // TODO
+        return null;
+    }
+
+    @Operation(summary = "微信-展商-上传LOGO")
+    @PostMapping(value = "/upload/logo")
+    @ResponseBody
+    public ResultData logo(@Parameter(hidden = true) UploadConfigBean bean, HttpServletRequest req, HttpServletResponse res) throws IOException {
+        bean.setUploadPath(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMM")));
+        return fileAction.upload(bean, req, res);
+    }
+
+    @Operation(summary = "微信-展商-申请")
+    @PostMapping(value = "/exhibitor/create")
+    @ResponseBody
+    public ResultData exhibitorCreate(@RequestBody ExhibitorEntity exhibitor) {
+        String userId = PeopleUtil.getPeopleBean().getPeopleId();
+        ExhibitionEntity exhibition = exhibitionBiz.recently();
+        if (exhibition == null) {
+            return ResultData.build().error("没有展会活动,无法申请");
+        }
+        if (exhibitorBiz.query(userId, exhibition.getId()) != null) {
+            return ResultData.build().error("已经申请,不需重新申请");
+        }
+        exhibitor.setExhibitorUser(userId);
+        exhibitor.setExhibitorActivities(exhibition.getId());
+        exhibitor.setExhibitorCode(exhibitorBiz.invitationCode());
+        return exhibitorAction.save(exhibitor);
+    }
+
+    @Operation(summary = "微信-展商-详情")
+    @GetMapping(value = "/exhibitor/info")
+    @ResponseBody
+    public ResultData exhibitorInfo() {
+        return Optional.ofNullable(exhibitionBiz.recently())
+                .map(exhibition -> {
+                    ExhibitorEntity entity = exhibitorBiz.query(PeopleUtil.getPeopleBean().getPeopleId(), exhibition.getId());
+                    return entity != null ? new ExhibitorInfoResponse(entity, exhibition) : null;
+                })
+                .map(ResultData.build()::success)
+                .orElseGet(ResultData.build()::success);
+    }
+}

+ 32 - 81
src/main/java/net/mingsoft/tf/wx/WxPeopleAction.java

@@ -13,42 +13,38 @@ import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import net.mingsoft.base.entity.ResultData;
 import net.mingsoft.base.exception.BusinessException;
-import net.mingsoft.basic.bean.UploadConfigBean;
 import net.mingsoft.mdiy.action.web.DictAction;
 import net.mingsoft.mdiy.biz.IModelBiz;
 import net.mingsoft.mdiy.biz.IModelDataBiz;
 import net.mingsoft.mdiy.entity.DictEntity;
 import net.mingsoft.mdiy.entity.ModelEntity;
 import net.mingsoft.people.action.BaseAction;
-import net.mingsoft.people.action.people.FileAction;
 import net.mingsoft.people.action.people.PeopleUserAction;
 import net.mingsoft.people.action.web.PeopleAction;
 import net.mingsoft.people.biz.IPeopleBiz;
 import net.mingsoft.people.entity.PeopleEntity;
-import net.mingsoft.people.util.PeopleUtil;
-import net.mingsoft.tf.action.ExhibitorAction;
-import net.mingsoft.tf.entity.ExhibitorEntity;
+import net.mingsoft.tf.biz.IExhibitorBiz;
+import net.mingsoft.tf.biz.IPeopleExhibitorBiz;
+import net.mingsoft.tf.entity.PeopleExhibitorEntity;
+import net.mingsoft.tf.wx.dto.WxCustomUserNamePasswordToken;
+import net.mingsoft.tf.wx.dto.WxRegisterRequest;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.subject.Subject;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ExtendedModelMap;
 import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.*;
 
-import java.io.IOException;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
 
-@Tag(name = "前端-微信-会员模块接口")
+@Tag(name = "微信-会员模块接口")
 @Controller
+@RequestMapping("/wx")
 public class WxPeopleAction extends BaseAction {
     @Autowired
     private IPeopleBiz peopleBiz;
@@ -63,15 +59,19 @@ public class WxPeopleAction extends BaseAction {
     @Autowired
     private DictAction dictAction;
     @Autowired
-    private FileAction fileAction;
+    private IExhibitorBiz exhibitorBiz;
     @Autowired
-    private ExhibitorAction exhibitorAction;
+    private IPeopleExhibitorBiz peopleExhibitorBiz;
+    @Value("${wx.appid}")
+    private String appid;
+    @Value("${wx.secret}")
+    private String secret;
 
     @Operation(summary = "微信-获得电话号码")
     @Parameters({
             @Parameter(name = "code", description = "code", required = true, in = ParameterIn.QUERY)
     })
-    @GetMapping(value = "/wx/phone")
+    @GetMapping(value = "/phone")
     @ResponseBody
     public ResultData wxGetPhone(String code) {
         // TODO
@@ -82,11 +82,11 @@ public class WxPeopleAction extends BaseAction {
     @Parameters({
             @Parameter(name = "code", description = "code", required = true, in = ParameterIn.QUERY)
     })
-    @GetMapping(value = "/wx/login")
+    @GetMapping(value = "/login")
     @ResponseBody
     public ResultData wxCheckLogin(String code, HttpServletRequest request, HttpServletResponse response) {
         return Optional.ofNullable(code)
-                .map(c -> "https://api.weixin.qq.com/sns/jscode2session?appid=wx0a115eb69d6e9359&secret=d906c8ca51acfd61e13dd61b62364050&js_code=" + c + "&grant_type=authorization_code")
+                .map(c -> "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + c + "&grant_type=authorization_code")
                 .map(HttpUtil::get)
                 .map(JSONObject::new)
                 .map(json -> json.getStr("openid"))
@@ -99,6 +99,12 @@ public class WxPeopleAction extends BaseAction {
                         ResultData login = executeLogin(openid, request, response);
                         if (login.isSuccess()) {
                             map.putAll(login.getData(Map.class));
+                            map.put("guest", false);
+                        } else {
+                            PeopleExhibitorEntity entity = peopleExhibitorBiz.saveGuest(openid);
+                            map.put("puIcon", entity.getIcon());
+                            map.put("puNickname", entity.getNickName());
+                            map.put("guest", true);
                         }
                     }
                     return ResultData.build().success(map);
@@ -107,7 +113,7 @@ public class WxPeopleAction extends BaseAction {
     }
 
     @Operation(summary = "微信-字典查询")
-    @GetMapping(value = "/wx/dictionary")
+    @GetMapping(value = "/dictionary")
     @ResponseBody
     public ResultData dictionary(String type, HttpServletRequest request, HttpServletResponse response) {
         DictEntity dict = new DictEntity();
@@ -131,27 +137,26 @@ public class WxPeopleAction extends BaseAction {
             @Parameter(name = "channel", description = "了解渠道", required = true, in = ParameterIn.QUERY),
             @Parameter(name = "purpose", description = "参观目的", required = true, in = ParameterIn.QUERY),
     })
-    @PostMapping(value = "/wx/register")
+    @PostMapping(value = "/register")
     @ResponseBody
     public ResultData wxRegister(@RequestBody WxRegisterRequest people, String modelId, HttpServletRequest request, HttpServletResponse response) {
         people.setPeoplePassword(RandomUtil.randomString(8));
         ResultData register = peopleAction.register(people, request, response);
         if (register.isSuccess()) {
+            peopleExhibitorBiz.deleteGuest(people.getPeopleName());
             PeopleEntity user = this.peopleBiz.getEntityByUserName(people.getPeopleName());
             String linkId = user.getId();
             ModelMap modelData = new ExtendedModelMap();
             modelData.put("companyName", people.getCompanyName());
             modelData.put("position", people.getPosition());
-            modelData.put("invitationCode", people.getInvitationCode());
             modelData.put("channel", people.getChannel());
             modelData.put("purpose", people.getPurpose());
             modelData.put("linkId", linkId);
-            // TODO 根据邀请码查出用户ID
-            modelData.put("invitation_user_id", "根据邀请码查出用户ID");
+            // 关联邀请
+            peopleExhibitorBiz.join(linkId, people.getInvitationCode());
             ModelEntity model = modelBiz.getById(modelId);
-            // 转换成小写
-            CaseInsensitiveMap<String, Object> map = new CaseInsensitiveMap<>(modelData);
-            modelDataBiz.spliceInsertSql(model, map);
+            // 保存扩展表数据
+            modelDataBiz.spliceInsertSql(model, new CaseInsensitiveMap<>(modelData));
             return executeLogin(people.getPeopleName(), request, response);
         }
         return register;
@@ -175,58 +180,4 @@ public class WxPeopleAction extends BaseAction {
         return ResultData.build().error(
                 this.getResString("err.error", this.getResString("people.no.exist")));
     }
-
-    @Operation(summary = "微信-邀请的用户汇总")
-    @GetMapping(value = "/people/invitation/summary")
-    @ResponseBody
-    public ResultData invitationSummary() {
-        // TODO
-        return null;
-    }
-
-    @Operation(summary = "微信-邀请的用户明细")
-    @GetMapping(value = "/people/invitation/details")
-    @ResponseBody
-    public ResultData invitationDetails() {
-        // TODO
-        return null;
-    }
-
-    @Operation(summary = "微信-生成入场二维码")
-    @GetMapping(value = "/people/qrcode")
-    @ResponseBody
-    public ResultData qrcode() {
-        // TODO
-        return null;
-    }
-
-    @Operation(summary = "微信-展商-上传LOGO")
-    @PostMapping(value = "/people/upload/logo")
-    @ResponseBody
-    public ResultData logo(@Parameter(hidden = true) UploadConfigBean bean, HttpServletRequest req, HttpServletResponse res) throws IOException {
-        bean.setUploadPath(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMM")));
-        return fileAction.upload(bean, req, res);
-    }
-
-    @Operation(summary = "微信-展商-申请")
-    @PostMapping(value = "/people/exhibitor/create")
-    @ResponseBody
-    public ResultData exhibitorCreate(@RequestBody ExhibitorEntity exhibitor) {
-        exhibitor.setExhibitorUser(PeopleUtil.getPeopleBean().getPeopleId());
-        // TODO 查到最新的展会
-        exhibitor.setExhibitorActivities("");
-        // TODO  检查一下是否会重复
-        exhibitor.setExhibitorCode(RandomUtil.randomString(9));
-        return exhibitorAction.save(exhibitor);
-    }
-
-    @Operation(summary = "微信-展商-详情")
-    @GetMapping(value = "/people/exhibitor/info")
-    @ResponseBody
-    public ResultData exhibitorInfo() {
-        // TODO 查出当前用户最新的一条
-        ExhibitorEntity exhibitor = new ExhibitorEntity();
-        exhibitor.setId("");
-        return exhibitorAction.get(exhibitor);
-    }
-}
+}

+ 19 - 0
src/main/java/net/mingsoft/tf/wx/dto/ExhibitorInfoResponse.java

@@ -0,0 +1,19 @@
+package net.mingsoft.tf.wx.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import net.mingsoft.tf.entity.ExhibitionEntity;
+import net.mingsoft.tf.entity.ExhibitorEntity;
+
+@Data
+@AllArgsConstructor
+public class ExhibitorInfoResponse {
+    /**
+     * 参展商
+     */
+    private ExhibitorEntity exhibitor;
+    /**
+     * 展会
+     */
+    private ExhibitionEntity exhibition;
+}

+ 1 - 1
src/main/java/net/mingsoft/tf/wx/WxCustomUserNamePasswordToken.java → src/main/java/net/mingsoft/tf/wx/dto/WxCustomUserNamePasswordToken.java

@@ -1,4 +1,4 @@
-package net.mingsoft.tf.wx;
+package net.mingsoft.tf.wx.dto;
 
 import net.mingsoft.basic.realm.CustomUserNamePasswordToken;
 

+ 1 - 1
src/main/java/net/mingsoft/tf/wx/WxRegisterRequest.java → src/main/java/net/mingsoft/tf/wx/dto/WxRegisterRequest.java

@@ -1,4 +1,4 @@
-package net.mingsoft.tf.wx;
+package net.mingsoft.tf.wx.dto;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;

+ 4 - 1
src/main/resources/application-dev.yml

@@ -5,4 +5,7 @@ spring:
     password:
     filters: wall,mergeStat
     type: com.alibaba.druid.pool.DruidDataSource
-spring.main.allow-bean-definition-overriding: true
+spring.main.allow-bean-definition-overriding: true
+
+wx.appid: wx0a115eb69d6e9359
+wx.secret: d906c8ca51acfd61e13dd61b62364050&