Browse Source

提交微信小程序授权代码

pull/381/head
wanjing 8 months ago
parent
commit
b04da3addb
22 changed files with 833 additions and 14 deletions
  1. +60
    -0
      tuoheng-common/tuoheng-common-core/src/main/java/com/tuoheng/common/core/config/common/CommonConfig.java
  2. +24
    -0
      tuoheng-service/tuoheng-admin/sql/sql_change_v1.3.6.sql
  3. +35
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/controller/WxController.java
  4. +11
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/dao/UserAuthorizeMapper.java
  5. +10
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/User.java
  6. +40
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/UserAuthorize.java
  7. +20
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/dto/TemplateMinDto.java
  8. +46
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/wx/WxMessageRequest.java
  9. +23
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/AuthorizeStatusEnum.java
  10. +23
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/SubscribeTimesEnum.java
  11. +39
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/UserAuthorizeEnum.java
  12. +51
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/WeiXinRequestEnum.java
  13. +39
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/param/WxSendMessageParam.java
  14. +26
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/IWxService.java
  15. +274
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/impl/WxServiceImpl.java
  16. +49
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/utils/GetOpenIdUtil.java
  17. +9
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/resources/application-dev.yml
  18. +9
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/resources/application-local.yml
  19. +9
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/resources/application-prod.yml
  20. +9
    -14
      tuoheng-service/tuoheng-miniprogram/src/main/resources/application-test.yml
  21. +10
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/resources/mapper/UserAuthorizeMapper.xml
  22. +17
    -0
      tuoheng-service/tuoheng-miniprogram/src/test/java/com/tuoheng/miniprogram/utils/GetOpenIdUtilTest.java

+ 60
- 0
tuoheng-common/tuoheng-common-core/src/main/java/com/tuoheng/common/core/config/common/CommonConfig.java View File

@@ -48,6 +48,26 @@ public class CommonConfig {
*/
public static String airportURL;

/**
* 小程序url
*/
public static String wechatURL;

/**
* 小程序 appId
*/
public static String appId;

/**
* 小程序 appSecret
*/
public static String appSecret;

/**
* 主题id
*/
public static String templateId;

/**
* 图片域名赋值
*
@@ -125,4 +145,44 @@ public class CommonConfig {
airportURL = url;
}

/**
* 小程序url
*
* @param url
*/
@Value("${tuoheng.wechat-url}")
public void wechatURL(String url) {
wechatURL = url;
}

/**
* 小程序 appId赋值
*
* @param id 小程序 appId
*/
@Value("${wx.appId}")
public void setAppId(String id) {
appId = id;
}

/**
* 小程序 appSecret赋值
*
* @param secret 小程序 appSecret
*/
@Value("${wx.appSecret}")
public void setAppSecret(String secret) {
appSecret = secret;
}

/**
* 小程序 templateId赋值
*
* @param tempId
*/
@Value("${wx.templateId}")
public void setTemplateId(String tempId) {
templateId = tempId;
}

}

+ 24
- 0
tuoheng-service/tuoheng-admin/sql/sql_change_v1.3.6.sql View File

@@ -0,0 +1,24 @@
-- 2024-12-03 14:30
-- v1.3.6

use tuoheng_freeway;

-- 用户授权表
create table th_user_authorize
(
id varchar(36) not null comment 'ID' primary key,
user_id varchar(36) null comment '用户id',
open_id varchar(150) default '' not null comment '授权openid',
access_token varchar(500) default '' null comment 'accesstoken值',
create_user varchar(36) default '0' null comment '添加人',
union_id varchar(150) null comment '唯一标识',
create_time datetime null comment '创建时间',
update_user varchar(36) default '0' null comment '更新人',
update_time datetime null comment '更新时间',
mark tinyint unsigned default '1' not null comment '有效标识'
)
comment '用户授权表';

-- 用户表
alter table tuoheng_freeway.th_user add authorize tinyint(1) default 1 not null comment '授权标识:1未授权 2授权' after status;
alter table tuoheng_freeway.th_user add subscribe_times tinyint(1) default 1 not null comment '订阅次数 1:订阅一次 2非一次订阅' after authorize;

+ 35
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/controller/WxController.java View File

@@ -0,0 +1,35 @@
package com.tuoheng.miniprogram.controller;

import com.tuoheng.common.core.utils.JsonResult;
import com.tuoheng.miniprogram.entity.wx.WxMessageRequest;
import com.tuoheng.miniprogram.service.IWxService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
* @Author ChengWang
* @Date 2023/6/23
*/
@RestController
@Slf4j
@RequestMapping("/weiXin")
public class WxController {

@Autowired
private IWxService iWxService;

//根据code获取openId
@GetMapping("/getOpenId/{code}")
public JsonResult getOpenId(@PathVariable("code") String code) {
log.info("进入获取openId接口");
return iWxService.openid(code);
}

@PostMapping("/send/message")
public JsonResult sendMessage(@RequestBody WxMessageRequest wxMessageRequest) {
log.info("进入发送消息接口,WxMessageRequest={}", wxMessageRequest);
return iWxService.sendMessage(wxMessageRequest);
}

}

+ 11
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/dao/UserAuthorizeMapper.java View File

@@ -0,0 +1,11 @@
package com.tuoheng.miniprogram.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tuoheng.miniprogram.entity.UserAuthorize;

/**
* @Author ChengWang
* @Date 2023/6/26
*/
public interface UserAuthorizeMapper extends BaseMapper<UserAuthorize> {
}

+ 10
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/User.java View File

@@ -233,4 +233,14 @@ public class User implements Serializable {
* 数据权限:1:查看所有部门数据;2:查看本部门及子部门;3:查看本部门数据;
*/
private Integer dataPermission;

/**
* 微信授权标识 1:未授权 2授权
*/
private Integer authorize;

/**
* 订阅次数 1:订阅一次 2非一次订阅
*/
private Integer subscribeTimes;
}

+ 40
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/UserAuthorize.java View File

@@ -0,0 +1,40 @@
package com.tuoheng.miniprogram.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.tuoheng.common.core.common.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
* @Author ChengWang
* @Date 2022/11/16
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("th_user_authorize")
public class UserAuthorize extends BaseEntity {
private static final long serialVersionUID = 1L;

/**
* 用户id
*/
private String userId;

/**
* 用户的openId
*/
private String openId;

/**
* 唯一标识
*/
private String unionId;

/**
* accessToken值(先不存)
*/
private String accessToken;

}

+ 20
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/dto/TemplateMinDto.java View File

@@ -0,0 +1,20 @@
package com.tuoheng.miniprogram.entity.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
* @Author ChengWang
* @Date 2023/6/23
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TemplateMinDto {

/**
* 填充信息
*/
private String value;
}

+ 46
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/wx/WxMessageRequest.java View File

@@ -0,0 +1,46 @@
package com.tuoheng.miniprogram.entity.wx;

import lombok.Data;

/**
* @Author ChengWang
* @Date 2023/6/26
*/
@Data
public class WxMessageRequest {

/**
* 任务id
*/
private String inspectionId;

/**
* 部门id
*/
private String deptId;

/**
* 问题id
*/
private String questionId;

/**
* 租户id
*/
private String tenantId;

/**
* 上报时间
*/
private String createTime;

/**
*问题标题
*/
private String questionName;

/**
* 问题描述
*/
private String questionDesc;
}

+ 23
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/AuthorizeStatusEnum.java View File

@@ -0,0 +1,23 @@
package com.tuoheng.miniprogram.enums;

import lombok.Getter;

/**
* 任务状态枚举
*/
public enum AuthorizeStatusEnum {
//1未授权 2授权
AUTHORIZE_DOWN(1,"未授权"),
AUTHORIZE_ON(2,"授权");

AuthorizeStatusEnum(int code, String description){
this.code = code;
this.description = description;
}

@Getter
private int code;

@Getter
private String description;
}

+ 23
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/SubscribeTimesEnum.java View File

@@ -0,0 +1,23 @@
package com.tuoheng.miniprogram.enums;

import lombok.Getter;

/**
* 任务状态枚举
*/
public enum SubscribeTimesEnum {
//1未授权 2授权
SUBSCRIBE_TIMES_ONE(1,"订阅一次"),
SUBSCRIBE_TIMES_NO_ONE(2,"非一次订阅");

SubscribeTimesEnum(int code, String description){
this.code = code;
this.description = description;
}

@Getter
private int code;

@Getter
private String description;
}

+ 39
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/UserAuthorizeEnum.java View File

@@ -0,0 +1,39 @@
package com.tuoheng.miniprogram.enums;

public enum UserAuthorizeEnum {

UNAUTHORIZED(10001, "用户未授权"),
OPEN_ID_IS_NULL(10002, "openId为空");

/**
* 标识码
*/
private Integer code;

/**
* 描述
*/
private String msg;

UserAuthorizeEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}

public Integer getCode() {
return code;
}

public void setCode(Integer code) {
this.code = code;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

}

+ 51
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/WeiXinRequestEnum.java View File

@@ -0,0 +1,51 @@
package com.tuoheng.miniprogram.enums;

/**
* 获取子部门列表返回码
* 模块代码:20(部门管理)
* 接口代码:06 (获取子部门列表)
*
* @author wanjing
* @team tuoheng
* @date 2022-11-22
*/
public enum WeiXinRequestEnum {

INSPECTION_ID_IS_NULL(120010, "任务id为空"),
DEPT_ID_IS_NULL(120011, "问题id为空"),
TENANT_ID_NOT_EXIST(120012, "租户id为空"),
CREATE_TIME_IS_NULL(120013, "上报时间为空"),
INSPECTION_NAME_NOT_EXIST(120014, "问题标题不存在"),
QUESTION_DESC_NOT_EXIST(120015, "问题标题不存在");
/**
* 错误码
*/
private int code;

/**
* 错误信息
*/
private String msg;

WeiXinRequestEnum(int code, String msg){
this.code = code;
this.msg = msg;
}

public int getCode() {
return code;
}

public void setCode(int code) {
this.code = code;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

}

+ 39
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/param/WxSendMessageParam.java View File

@@ -0,0 +1,39 @@
package com.tuoheng.miniprogram.param;

import com.tuoheng.miniprogram.entity.dto.TemplateMinDto;
import lombok.Data;

import java.util.Map;

/**
* @Author ChengWang
* @Date 2023/6/23
*/
@Data
public class WxSendMessageParam {

/**
* 接收者openId
*/
private String touser;

/**
* 订阅模板id
*/
private String template_id;

/**
* 点击模板卡片跳转页面
*/
private String page;

/**
* 跳转小程序类型 developer为开发版;trial为体验版;formal为正式版;默认为正式版
*/
//private String miniprogram_state;

/**
* 填充信息
*/
private Map<String, TemplateMinDto> data;
}

+ 26
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/IWxService.java View File

@@ -0,0 +1,26 @@
package com.tuoheng.miniprogram.service;

import com.tuoheng.common.core.utils.JsonResult;
import com.tuoheng.miniprogram.entity.wx.WxMessageRequest;

/**
* @Author ChengWang
* @Date 2023/6/23
*/
public interface IWxService {

/**
* 根据code获取openId
* @param code
* @return
*/
JsonResult openid(String code);

/**
* 发送消息
* @param wxMessageRequest
* @return
*/
JsonResult sendMessage(WxMessageRequest wxMessageRequest);

}

+ 274
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/impl/WxServiceImpl.java View File

@@ -0,0 +1,274 @@
package com.tuoheng.miniprogram.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.tuoheng.common.core.config.common.CommonConfig;
import com.tuoheng.common.core.utils.DateUtils;
import com.tuoheng.common.core.utils.JsonResult;
import com.tuoheng.common.core.utils.StringUtils;
import com.tuoheng.miniprogram.dao.UserAuthorizeMapper;
import com.tuoheng.miniprogram.dao.UserMapper;
import com.tuoheng.miniprogram.entity.User;
import com.tuoheng.miniprogram.entity.UserAuthorize;
import com.tuoheng.miniprogram.entity.dto.TemplateMinDto;
import com.tuoheng.miniprogram.entity.wx.WxMessageRequest;
import com.tuoheng.miniprogram.enums.*;
import com.tuoheng.miniprogram.param.WxSendMessageParam;
import com.tuoheng.miniprogram.service.IWxService;
import com.tuoheng.miniprogram.utils.CurrentUserUtil;
import com.tuoheng.miniprogram.utils.GetOpenIdUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
* @Author ChengWang
* @Date 2023/6/23
*/
@Service
@Slf4j
public class WxServiceImpl implements IWxService {

@Autowired
private UserAuthorizeMapper userAuthorizeMapper;

@Autowired
private UserMapper userMapper;

private static String accessToken;

private static long expiresTime;


/**
* 根据code获取openId
*
* @param code
* @return
*/
@Override
public JsonResult openid(String code) {
String userId = CurrentUserUtil.getUserId();
String openidResult = GetOpenIdUtil.getopenid(code, CommonConfig.appId, CommonConfig.appSecret);
if (null != JSONObject.parseObject(openidResult).getInteger("errcode") ||
StringUtils.isNotEmpty(JSONObject.parseObject(openidResult).getString("errmsg"))) {
return JsonResult.error(JSONObject.parseObject(openidResult).getInteger("errcode").intValue(),
JSONObject.parseObject(openidResult).getString("errmsg"));
}
String openid = JSONObject.parseObject(openidResult).getString("openid");
if (StringUtils.isEmpty(openid)) {
log.error("获取openid失败:", openidResult);
return JsonResult.error("获取openid失败");
}
//根据当前登录用户id查询授权表是否存在一条授权数据
UserAuthorize beforeUserAuthorize = userAuthorizeMapper.selectOne(Wrappers.<UserAuthorize>lambdaQuery()
.eq(UserAuthorize::getUserId, userId)
.eq(UserAuthorize::getMark, MarkEnum.VALID.getCode()));
if (ObjectUtil.isNull(beforeUserAuthorize)) {
UserAuthorize userAuthorize = new UserAuthorize();
if (StringUtils.isNotEmpty(openid)) {
//查询出来openId数据入库
userAuthorize.setOpenId(openid);
}
userAuthorize.setUserId(userId);
userAuthorize.setCreateTime(DateUtils.now());
if (StringUtils.isNotEmpty(userId)) {
userAuthorize.setCreateUser(userId);
}
int result = userAuthorizeMapper.insert(userAuthorize);

if (result <= 0) {
return JsonResult.error("授权数据入库失败");
}
}
//关联登录用户,已经做过授权 修改授权标识
User user = CurrentUserUtil.getUserInfo();
if (ObjectUtil.isEmpty(user)) {
return JsonResult.error(UserCodeEnum.USER_IS_NULL.getCode(), UserCodeEnum.USER_IS_NULL.getMsg());
}
user.setAuthorize(AuthorizeStatusEnum.AUTHORIZE_ON.getCode());
user.setUpdateTime(DateUtils.now());
user.setUpdateUser(userId);
int count = userMapper.updateById(user);
if (count <= 0) {
return JsonResult.error("用户授权标识更新失败");
}
return JsonResult.success();
}

/**
* 获取access_code值
*
* @return
*/
public String getAccessToken() {
//判断accessToken是否已经过期,如果国企需要重新获取
if (accessToken == null || expiresTime < System.currentTimeMillis()) {
RestTemplate restTemplate = new RestTemplate();
Map<String, String> params = new HashMap<>(2);
params.put("APPID", CommonConfig.appId);
params.put("APPSECRET", CommonConfig.appSecret);
ResponseEntity<String> responseEntity = restTemplate.getForEntity("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={APPSECRET}", String.class, params);
String body = responseEntity.getBody();
JSONObject object = JSON.parseObject(body);
Integer errcode = object.getInteger("errcode");
if (errcode != null && errcode != 0) {
String errmsg = object.getString("errmsg");
log.info("请求accessToken失败,返回码:" + errcode + "错误信息:" + errmsg);
throw new RuntimeException("请求获取accessToken失败");
}
//缓存accessToken
accessToken = object.getString("access_token");
log.info("获取的accessToken的值:" + accessToken);
//设置accessToken的失效时间
Long expires_in = object.getLong("expires_in");
//失效时间 = 当前时间+有效期(提前一分钟,也可以不提前)
expiresTime = System.currentTimeMillis() + (expires_in - 60) * 1000;
}

return accessToken;
}

/**
* 发送消息
*
* @param wxMessageRequest
* @return
*/
@Override
public JsonResult sendMessage(WxMessageRequest wxMessageRequest) {
wxMessageRequest.setQuestionDesc("发现疑似问题待处理,请及时查看。");
JsonResult result = this.check(wxMessageRequest);
if (result.getCode() != 0) {
//正常返回,信息提示
return JsonResult.success(result.getCode(), result.getMsg());
}
List<User> userList = (List<User>) result.getData();
boolean isSend = false;
//对用户进行遍历推送消息
for (User user : userList) {
String userId = user.getId();
if (user.getAuthorize() == AuthorizeStatusEnum.AUTHORIZE_DOWN.getCode()) {
//本次结束,进入下次循环
continue;
}
if (user.getAuthorize() == AuthorizeStatusEnum.AUTHORIZE_ON.getCode()
&& user.getSubscribeTimes() == SubscribeTimesEnum.SUBSCRIBE_TIMES_NO_ONE.getCode()) {
continue;
}
//获取当前登录openId
UserAuthorize userAuthorize = userAuthorizeMapper.selectOne(Wrappers.<UserAuthorize>lambdaQuery()
.eq(UserAuthorize::getUserId, userId)
.eq(UserAuthorize::getMark, MarkEnum.VALID.getCode()));
//授权数据校验
JsonResult jsonResult = this.getUserAuthorize(userAuthorize);
if (jsonResult.getCode() != 0) {
continue;
}
String openId = userAuthorize.getOpenId();
RestTemplate restTemplate = new RestTemplate();
//发送消息订阅
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + getAccessToken();
WxSendMessageParam param = new WxSendMessageParam();
param.setPage("/package_question/pages/taskList/taskList");
//param.setMiniprogram_state("formal");
param.setTouser(openId);
param.setTemplate_id(CommonConfig.templateId);
Map<String, TemplateMinDto> data = new HashMap<>(3);
//消息模板{{time12.DATA}} {{thing4.DATA}} {{thing13.DATA}} 时间格式一定是这样的2022-01-13 02:31:36
ResponseEntity<String> responseEntity = null;
try {
data.put("time12", new TemplateMinDto(wxMessageRequest.getCreateTime()));
data.put("thing4", new TemplateMinDto(wxMessageRequest.getQuestionName()));
data.put("thing13", new TemplateMinDto(wxMessageRequest.getQuestionDesc()));
param.setData(data);

responseEntity = restTemplate.postForEntity(url, param, String.class);
String messageBody = responseEntity.getBody();
Integer errcode = JSONObject.parseObject(messageBody).getInteger("errcode").intValue();
if (errcode != null && errcode == 0) {
//修改用户订阅次数
user.setSubscribeTimes(SubscribeTimesEnum.SUBSCRIBE_TIMES_NO_ONE.getCode());
int count = userMapper.updateById(user);
if (count <= 0) {
throw new RuntimeException("更新用户订阅次数失败");
}
} else if (errcode != null && errcode != 0) {
String errmsg = JSONObject.parseObject(messageBody).getString("errmsg");
log.info("请求accessToken失败,返回码:" + errcode.intValue() + "错误信息:" + errmsg);
//return JsonResult.error(errcode.intValue(),errmsg);
}
JSONObject jsonObject = JSON.parseObject(messageBody);
if (Objects.nonNull(jsonObject)) {
log.info("openId:" + openId + "发送消息返回内容:" + jsonObject.toJSONString());
}
isSend = true;
} catch (RestClientException e) {
log.info("openId:" + openId + "发送消息异常报错:" + e);
e.printStackTrace();
}

}

return JsonResult.success(isSend);

}

/**
* 校验权限数据
*
* @param userAuthorize
* @return
*/
private JsonResult getUserAuthorize(UserAuthorize userAuthorize) {
if (ObjectUtil.isNull(userAuthorize)) {
return JsonResult.error(UserAuthorizeEnum.UNAUTHORIZED.getCode(), UserAuthorizeEnum.UNAUTHORIZED.getMsg());
}
if (StringUtils.isEmpty(userAuthorize.getOpenId())) {
return JsonResult.error(UserAuthorizeEnum.OPEN_ID_IS_NULL.getCode(), UserAuthorizeEnum.OPEN_ID_IS_NULL.getMsg());
}
return JsonResult.success();
}

private JsonResult check(WxMessageRequest wxMessageRequest) {
//传参校验
if (StringUtils.isEmpty(wxMessageRequest.getTenantId())) {
return JsonResult.error(WeiXinRequestEnum.TENANT_ID_NOT_EXIST.getCode(), WeiXinRequestEnum.TENANT_ID_NOT_EXIST.getMsg());
}
if (StringUtils.isEmpty(wxMessageRequest.getInspectionId())) {
return JsonResult.error(WeiXinRequestEnum.INSPECTION_ID_IS_NULL.getCode(), WeiXinRequestEnum.INSPECTION_ID_IS_NULL.getMsg());
}
if (StringUtils.isEmpty(wxMessageRequest.getDeptId())) {
return JsonResult.error(WeiXinRequestEnum.DEPT_ID_IS_NULL.getCode(), WeiXinRequestEnum.DEPT_ID_IS_NULL.getMsg());
}
if (StringUtils.isEmpty(wxMessageRequest.getCreateTime())) {
return JsonResult.error(WeiXinRequestEnum.CREATE_TIME_IS_NULL.getCode(), WeiXinRequestEnum.CREATE_TIME_IS_NULL.getMsg());
}
if (StringUtils.isEmpty(wxMessageRequest.getQuestionName())) {
return JsonResult.error(WeiXinRequestEnum.INSPECTION_NAME_NOT_EXIST.getCode(), WeiXinRequestEnum.INSPECTION_NAME_NOT_EXIST.getMsg());
}
if (StringUtils.isEmpty(wxMessageRequest.getQuestionDesc())) {
return JsonResult.error(WeiXinRequestEnum.QUESTION_DESC_NOT_EXIST.getCode(), WeiXinRequestEnum.QUESTION_DESC_NOT_EXIST.getMsg());
}
//根据租户id查询用户列表
List<User> users = userMapper.selectList(Wrappers.<User>lambdaQuery()
.eq(User::getMark, MarkEnum.VALID.getCode())
.eq(User::getDeptId, wxMessageRequest.getDeptId())
.eq(User::getStatus, 1));
if (CollectionUtil.isEmpty(users) || users.size() == 0) {
return JsonResult.error("此部门下没有用户");
}
return JsonResult.success(users);
}
}

+ 49
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/utils/GetOpenIdUtil.java View File

@@ -0,0 +1,49 @@
package com.tuoheng.miniprogram.utils;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

/**
* 微信登陆工具类
*/
public class GetOpenIdUtil {

public static String getopenid(String code, String appid, String secret) {
BufferedReader in = null;
//appid和secret是开发者分别是小程序ID和小程序密钥,开发者通过微信公众平台-》设置-》开发设置就可以直接获取,
String url = "https://api.weixin.qq.com/sns/jscode2session?appid="
+ appid + "&secret=" + secret + "&js_code=" + code + "&grant_type=authorization_code";
try {
URL weChatUrl = new URL(url);
// 打开和URL之间的连接
URLConnection connection = weChatUrl.openConnection();
// 设置通用的请求属性
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
// 建立实际的连接
connection.connect();
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = in.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}

+ 9
- 0
tuoheng-service/tuoheng-miniprogram/src/main/resources/application-dev.yml View File

@@ -81,6 +81,8 @@ tuoheng:
pilot-url: http://192.168.11.11:7011/pilot/web/
#airport配置地址
airport-url: http://192.168.11.22:9060
#小程序配置地址
wechat-url: http://192.168.11.11:9119
# 文件配置
uploads:
#上传的服务器上的映射文件夹
@@ -89,6 +91,13 @@ tuoheng:
staticAccessPath: /**
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/

#小程序
wx:
appId: wxfa4ec86caec22034
appSecret: dd8411aaa8fcfb251518d5021adb059d
templateId: tOewJK9MXIbfXovwCb72KLpCdBp1spL6pQ2F3LTQkSI

xxl:
enable: true
job:

+ 9
- 0
tuoheng-service/tuoheng-miniprogram/src/main/resources/application-local.yml View File

@@ -81,6 +81,8 @@ tuoheng:
pilot-url: http://192.168.11.11:7011/pilot/web/
#airport配置地址
airport-url: http://192.168.11.22:9060
#小程序配置地址
wechat-url: http://192.168.11.11:9119
# 文件配置
uploads:
#上传的服务器上的映射文件夹
@@ -89,6 +91,13 @@ tuoheng:
staticAccessPath: /**
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/

#小程序
wx:
appId: wxfa4ec86caec22034
appSecret: dd8411aaa8fcfb251518d5021adb059d
templateId: tOewJK9MXIbfXovwCb72KLpCdBp1spL6pQ2F3LTQkSI

xxl:
enable: true
job:

+ 9
- 0
tuoheng-service/tuoheng-miniprogram/src/main/resources/application-prod.yml View File

@@ -81,6 +81,8 @@ tuoheng:
pilot-url: http://192.168.11.11:7011/pilot/web/
#airport配置地址
airport-url: https://airport.t-aaron.com/airport/admin
#小程序配置地址
wechat-url: https://freeway-miniprogram.t-aaron.com
# 文件配置
uploads:
#上传的服务器上的映射文件夹
@@ -89,6 +91,13 @@ tuoheng:
staticAccessPath: /**
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/

#小程序
wx:
appId: wxfa4ec86caec22034
appSecret: dd8411aaa8fcfb251518d5021adb059d
templateId: tOewJK9MXIbfXovwCb72KLpCdBp1spL6pQ2F3LTQkSI

## 配置feign熔断
#feign:
# circuitbreaker:

+ 9
- 14
tuoheng-service/tuoheng-miniprogram/src/main/resources/application-test.yml View File

@@ -81,6 +81,8 @@ tuoheng:
pilot-url: http://192.168.11.11:7011/pilot/web/
#airport配置地址
airport-url: https://airport-test.t-aaron.com/airport/admin
#小程序配置地址
wechat-url: https://freeway-miniprogram-test.t-aaron.com
# 文件配置
uploads:
#上传的服务器上的映射文件夹
@@ -89,20 +91,13 @@ tuoheng:
staticAccessPath: /**
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/
xxl:
enable: true
job:
admin:
addresses: http://172.15.1.11:8110/xxl-job-admin
accessToken: tuoheng
executor:
appname: xxl-job-executor-freeway-miniprogram
address:
ip:
# 多个后台,端口号不能相同
port: 9991
logpath: /data/java/logs/xxl-job/jobhandler
logretentiondays: 15

#小程序
wx:
appId: wxfa4ec86caec22034
appSecret: dd8411aaa8fcfb251518d5021adb059d
templateId: tOewJK9MXIbfXovwCb72KLpCdBp1spL6pQ2F3LTQkSI

## 配置feign熔断
#feign:
# circuitbreaker:

+ 10
- 0
tuoheng-service/tuoheng-miniprogram/src/main/resources/mapper/UserAuthorizeMapper.xml View File

@@ -0,0 +1,10 @@
<?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.tuoheng.miniprogram.dao.UserAuthorizeMapper">




</mapper>

+ 17
- 0
tuoheng-service/tuoheng-miniprogram/src/test/java/com/tuoheng/miniprogram/utils/GetOpenIdUtilTest.java View File

@@ -0,0 +1,17 @@
package com.tuoheng.miniprogram.utils;

import com.alibaba.fastjson.JSONObject;

public class GetOpenIdUtilTest {

public static void main(String[] args) {
System.out.println("start");
String openidJson = GetOpenIdUtil.getopenid("061pTj0w3j6DaZ23141w3X12aP0pTj04", "wxd0f247d7272ca1b7", "541002e33cd4b011d4c13954ed34efdb");
System.out.println("openid:" + openidJson);
JSONObject jsonObject = JSONObject.parseObject(openidJson);
String openid = jsonObject.getString("openid");
System.out.println("openid:" + openid);
System.out.println("end");
}

}

Loading…
Cancel
Save