小程序,h5接口
This commit is contained in:
parent
26e499e80f
commit
da14a18bf0
@ -58,6 +58,9 @@ spring:
|
||||
wall:
|
||||
config:
|
||||
multi-statement-allow: true
|
||||
wechat:
|
||||
appId: wxb74d6d2504dba5cf
|
||||
secret: e9f0819eaafdaf8f7fe4f697f4af02f5
|
||||
tenant:
|
||||
database:
|
||||
#mysql 用于连接数据库服务器以生成数据库,URL 不指定数据库
|
||||
|
@ -47,6 +47,17 @@ public class SysUser extends BaseEntity
|
||||
@Excel(name = "手机号码")
|
||||
private String phonenumber;
|
||||
|
||||
/** 验证码 */
|
||||
private String code;
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(String code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
/** 用户性别 */
|
||||
@Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
|
||||
private String sex;
|
||||
|
@ -75,6 +75,24 @@ public class LoginUser implements UserDetails
|
||||
* 用户信息
|
||||
*/
|
||||
private SysUser user;
|
||||
/**
|
||||
*
|
||||
* 微信用户openId
|
||||
*/
|
||||
private String openid;
|
||||
|
||||
|
||||
public String getOpenid() {
|
||||
return openid;
|
||||
}
|
||||
|
||||
public void setOpenid(String openid) {
|
||||
this.openid = openid;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public Long getUserId()
|
||||
{
|
||||
|
@ -14,6 +14,11 @@
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 通用工具-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
@ -26,6 +31,10 @@
|
||||
<artifactId>ruoyi-system</artifactId>
|
||||
<version>3.8.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-framework</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
|
@ -0,0 +1,36 @@
|
||||
package com.ruoyi.h5.controller;
|
||||
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.crm.system.domain.Business;
|
||||
import com.ruoyi.crm.system.service.IBusinessService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
/**
|
||||
* H5商机Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2024-02-29
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/h5/business")
|
||||
public class H5BusinessController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private IBusinessService businessService;
|
||||
|
||||
/**
|
||||
* 查询商机列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(Business business)
|
||||
{
|
||||
startPage();
|
||||
List<Business> list = businessService.selectBusinessList(business);
|
||||
return getDataTable(list);
|
||||
}
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
package com.ruoyi.h5.controller;
|
||||
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.crm.domain.CrmCustomer;
|
||||
import com.ruoyi.crm.domain.enums.CustomerFolder;
|
||||
import com.ruoyi.crm.service.ICrmCustomerService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* 线索管理Controller
|
||||
*
|
||||
* @author devjd
|
||||
* @date 2022-01-12
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/h5/clues")
|
||||
public class H5CluesController extends BaseController{
|
||||
|
||||
@Autowired
|
||||
private ICrmCustomerService cluesService;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查询我的线索列表
|
||||
*/
|
||||
@GetMapping("/person-list")
|
||||
public TableDataInfo personList(CrmCustomer crmCustomer)
|
||||
{
|
||||
startPage();
|
||||
crmCustomer.setStatus(CustomerFolder.CLUES.getCode());
|
||||
crmCustomer.setOwner(getUsername());
|
||||
List<CrmCustomer> list = cluesService.selectCrmCustomerList(crmCustomer);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询线索列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(CrmCustomer crmCustomer)
|
||||
{
|
||||
startPage();
|
||||
crmCustomer.setStatus(CustomerFolder.CLUES.getCode());
|
||||
List<CrmCustomer> list = cluesService.selectCrmCustomerList(crmCustomer);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增线索
|
||||
*/
|
||||
@Log(title = "线索", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@RequestBody CrmCustomer crmCustomer)
|
||||
{
|
||||
if (crmCustomer.getCode() == null){
|
||||
//uuid生成客户编号
|
||||
crmCustomer.setCode("zy_"+ UUID.randomUUID().toString().replace("-","").substring(0,12));
|
||||
}
|
||||
crmCustomer.setStatus(CustomerFolder.CLUES.getCode());
|
||||
crmCustomer.setCreateBy(getUsername());
|
||||
crmCustomer.setOwner(getUsername());
|
||||
return toAjax(cluesService.insertCrmCustomer(crmCustomer));
|
||||
}
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
package com.ruoyi.h5.controller;
|
||||
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.crm.domain.CrmCustomer;
|
||||
import com.ruoyi.crm.domain.enums.CustomerFolder;
|
||||
import com.ruoyi.crm.service.ICrmCustomerService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* H5客户Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2022-01-12
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/h5/customer")
|
||||
public class H5CustomerController extends BaseController {
|
||||
@Autowired
|
||||
private ICrmCustomerService crmCustomerService;
|
||||
/**
|
||||
* 查询我的客户列表
|
||||
*/
|
||||
@GetMapping("/person-list")
|
||||
public TableDataInfo personList(CrmCustomer crmCustomer)
|
||||
{
|
||||
startPage();
|
||||
crmCustomer.setStatus(CustomerFolder.CUSTOMER.getCode());
|
||||
crmCustomer.setOwner(getUsername());
|
||||
List<CrmCustomer> list = crmCustomerService.selectCrmCustomerList(crmCustomer);
|
||||
return getDataTable(list);
|
||||
}
|
||||
/**
|
||||
* 查询客户列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(CrmCustomer crmCustomer)
|
||||
{
|
||||
startPage();
|
||||
crmCustomer.setStatus(CustomerFolder.CUSTOMER.getCode());
|
||||
List<CrmCustomer> list = crmCustomerService.selectCrmCustomerList(crmCustomer);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增客户
|
||||
*/
|
||||
@Log(title = "客户", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@RequestBody CrmCustomer crmCustomer)
|
||||
{
|
||||
crmCustomer.setStatus(CustomerFolder.CUSTOMER.getCode());
|
||||
crmCustomer.setOwner(getUsername());
|
||||
crmCustomer.setCreateBy(getUsername());
|
||||
LocalDate currentDate = LocalDate.now();
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
|
||||
String formattedDate = currentDate.format(formatter);
|
||||
//根据当前时间生成客户编号
|
||||
crmCustomer.setCode("zy_"+formattedDate+ UUID.randomUUID().toString().replace("-","").substring(0,6));
|
||||
return toAjax(crmCustomerService.insertCrmCustomer(crmCustomer));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package com.ruoyi.h5.controller;
|
||||
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.crm.domain.CrmOrder;
|
||||
import com.ruoyi.crm.service.ICrmOrderService;
|
||||
import com.ruoyi.crm.service.ICustomerOderService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* H5订单Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2022-01-18
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/h5/order")
|
||||
public class H5OrderController extends BaseController
|
||||
{
|
||||
@Autowired
|
||||
private ICrmOrderService crmOrderService;
|
||||
|
||||
@Autowired
|
||||
private ICustomerOderService customerOderService;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查询订单列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(CrmOrder crmOrder)
|
||||
{
|
||||
startPage();
|
||||
List<CrmOrder> list = crmOrderService.selectCrmOrderList(crmOrder);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询订单列表
|
||||
*/
|
||||
@GetMapping("/person-list")
|
||||
public TableDataInfo personList(CrmOrder crmOrder)
|
||||
{
|
||||
startPage();
|
||||
crmOrder.setOwner(getUsername());
|
||||
List<CrmOrder> list = crmOrderService.selectCrmOrderList(crmOrder);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package com.ruoyi.h5.controller;
|
||||
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.h5.service.WxUserService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
/**
|
||||
* 微信登录
|
||||
*
|
||||
* @author devjd
|
||||
* @date 2022-01-12
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/h5/login")
|
||||
public class WxLoginController {
|
||||
|
||||
// @Autowired
|
||||
// private TokenService tokenService;
|
||||
|
||||
@Autowired
|
||||
private WxUserService wxUserService;
|
||||
|
||||
/**
|
||||
* 微信小程序登录
|
||||
*
|
||||
* @param
|
||||
* @return 结果
|
||||
*/
|
||||
@PostMapping("/wxLogin")
|
||||
public AjaxResult wxLogin(@RequestBody Map<String,String> map)
|
||||
{
|
||||
String code = map.get("code");
|
||||
return AjaxResult.success(wxUserService.getSessionId(code));
|
||||
}
|
||||
|
||||
/**
|
||||
* h5登录
|
||||
*
|
||||
* @param
|
||||
* @return 结果
|
||||
*/
|
||||
@PostMapping("/h5Login")
|
||||
public AjaxResult h5Login(@RequestBody Map<String,String> map)
|
||||
{
|
||||
String phonenumber = map.get("phonenumber");
|
||||
String password = map.get("password");
|
||||
String code = map.get("code");
|
||||
return AjaxResult.success(wxUserService.getH5(phonenumber,password,code));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
package com.ruoyi.h5.domain;
|
||||
|
||||
public class RedisKey {
|
||||
public static final String WX_SESSION_ID = "wx_session_id_";
|
||||
public static final String H5_SESSION_ID = "h5_session_id_";
|
||||
public static final String ACCESS_TOKEN = "access_token_";
|
||||
public static final String TOKEN = "token_";
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package com.ruoyi.h5.service;
|
||||
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
|
||||
/**
|
||||
* 微信登录接口
|
||||
**/
|
||||
|
||||
public interface WxUserService {
|
||||
String getSessionId(String code);
|
||||
|
||||
String getH5(String phonenumber,String password,String code);
|
||||
|
||||
}
|
@ -0,0 +1,90 @@
|
||||
package com.ruoyi.h5.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.core.domain.model.LoginUser;
|
||||
import com.ruoyi.common.utils.http.HttpUtils;
|
||||
import com.ruoyi.framework.web.service.TokenService;
|
||||
import com.ruoyi.h5.domain.RedisKey;
|
||||
import com.ruoyi.h5.service.WxUserService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class WxUserServiceImpl implements WxUserService {
|
||||
@Value("${wechat.appId}")
|
||||
private String appId;
|
||||
|
||||
@Value("${wechat.secret}")
|
||||
private String secret;
|
||||
;
|
||||
|
||||
@Autowired
|
||||
public TokenService tokenService;
|
||||
|
||||
@Autowired
|
||||
public RedisTemplate<String, String> redisTemplate;
|
||||
|
||||
|
||||
@Override
|
||||
public String getSessionId(String code) {
|
||||
String url ="https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code";
|
||||
String replace = url.replace("{0}", appId).replace("{1}", secret).replace("{2}",code);
|
||||
String res = HttpUtils.sendGet(replace);
|
||||
JSONObject jsonObject = JSON.parseObject(res);
|
||||
String openid =(String)jsonObject.get("openid");
|
||||
// 生成一个唯一的key,用于存储openid
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
// 将openid存入Redis,并设置过期时间为2小时
|
||||
redisTemplate.opsForValue().set(RedisKey.WX_SESSION_ID + uuid, openid, 2, TimeUnit.HOURS);
|
||||
//设置登录用户信息
|
||||
LoginUser loginUser = new LoginUser();
|
||||
loginUser.setOpenid(openid);
|
||||
//默认租户为zy_tenant
|
||||
loginUser.setTenant("zy_tenant");
|
||||
loginUser.setUserId(1L);
|
||||
//默认用户名
|
||||
SysUser sysUser = new SysUser();
|
||||
sysUser.setUserName("1");
|
||||
loginUser.setUser(sysUser);
|
||||
//根据openid获取token
|
||||
return tokenService.createToken(loginUser);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getH5(String phonenumber, String password, String code) {
|
||||
|
||||
if (phonenumber.isEmpty() || password.isEmpty() || code.isEmpty()) {
|
||||
log.error("获取user accesstoken失败");
|
||||
return null;
|
||||
} else {
|
||||
// 生成一个唯一的key,用于存储phonenumber
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
// 将phonenumber存入Redis,并设置过期时间为2小时
|
||||
redisTemplate.opsForValue().set(RedisKey.H5_SESSION_ID + uuid, phonenumber, 2, TimeUnit.HOURS);
|
||||
//设置登录用户信息
|
||||
LoginUser loginUser = new LoginUser();
|
||||
//默认租户为zy_tenant
|
||||
loginUser.setTenant("zy_tenant");
|
||||
loginUser.setUserId(1L);
|
||||
SysUser sysUser = new SysUser();
|
||||
sysUser.setUserName("1");
|
||||
sysUser.setPhonenumber(phonenumber);
|
||||
sysUser.setPassword(password);
|
||||
sysUser.setCode(code);
|
||||
loginUser.setUser(sysUser);
|
||||
//根据openid获取token
|
||||
return tokenService.createToken(loginUser);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -97,7 +97,9 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
|
||||
// 过滤请求
|
||||
.authorizeRequests()
|
||||
// 对于登录login 注册register 验证码captchaImage 允许匿名访问
|
||||
.antMatchers("/login", "/register", "/captchaImage","/intelligentForm/selectDynamicDataById","/intelligentForm/collectData").anonymous()
|
||||
.antMatchers("/login", "/register", "/captchaImage",
|
||||
"/intelligentForm/selectDynamicDataById","/intelligentForm/collectData",
|
||||
"/h5/login/wxLogin","/h5/login/h5Login").anonymous()
|
||||
.antMatchers(
|
||||
HttpMethod.GET,
|
||||
"/",
|
||||
|
@ -49,9 +49,11 @@ public class TenantInterceptor implements HandlerInterceptor {
|
||||
log.info("&&&&&&&&&&&&&&&& 租户拦截 &&&&&&&&&&&&&&&&");
|
||||
Pattern pattern = Pattern.compile("^/profile.*");
|
||||
Pattern patterns = Pattern.compile("^/intelligentForm.*");
|
||||
Pattern patternByWx = Pattern.compile("^/h5/login.*");
|
||||
Matcher matcher = pattern.matcher(url);
|
||||
Matcher matchers = patterns.matcher(url);
|
||||
if (matcher.find() || matchers.find()){
|
||||
Matcher matcherByWx = patternByWx.matcher(url);
|
||||
if (matcher.find() || matchers.find() || matcherByWx.find()){
|
||||
//使用正则表达式过滤以"/profile","/intelligentForm"开头的请求路径,直接放行
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user