
9 changed files with 327 additions and 0 deletions
@ -0,0 +1,35 @@ |
|||||
|
package com.yxt.yyth.api.lpkcustomer; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableField; |
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
|
import io.swagger.annotations.ApiModel; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
import java.util.UUID; |
||||
|
|
||||
|
/** |
||||
|
* @author wangpengfei |
||||
|
* @date 2023/11/21 15:06 |
||||
|
*/ |
||||
|
@ApiModel(value = "客户信息", description = "客户信息") |
||||
|
@TableName("lpk_customer") |
||||
|
@Data |
||||
|
public class LpkCustomer { |
||||
|
private String id; |
||||
|
private String sid=UUID.randomUUID().toString(); |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") |
||||
|
private Date createTime; |
||||
|
private String remarks; |
||||
|
private String isEnable; |
||||
|
@TableField(value = "wx_mp_openid") |
||||
|
private String wxMpOpenid; |
||||
|
private String unionId; |
||||
|
private String mobile; |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") |
||||
|
private String bindDate; |
||||
|
private String realName; |
||||
|
private String nick; |
||||
|
private String photo; |
||||
|
} |
@ -0,0 +1,14 @@ |
|||||
|
package com.yxt.yyth.api.lpkcustomer; |
||||
|
|
||||
|
import com.yxt.common.core.dto.Dto; |
||||
|
import io.swagger.annotations.ApiModel; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
/** |
||||
|
* @author wangpengfei |
||||
|
* @date 2023/11/21 15:13 |
||||
|
*/ |
||||
|
@ApiModel(value = "客户信息 数据传输对象", description = "客户信息 数据传输对象") |
||||
|
@Data |
||||
|
public class LpkCustomerDto implements Dto { |
||||
|
} |
@ -0,0 +1,16 @@ |
|||||
|
package com.yxt.yyth.api.lpkcustomer; |
||||
|
|
||||
|
import com.yxt.common.core.query.Query; |
||||
|
import io.swagger.annotations.ApiModel; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
/** |
||||
|
* @author wangpengfei |
||||
|
* @date 2023/11/21 15:31 |
||||
|
*/ |
||||
|
@ApiModel(value = "客户信息 查询条件", description = "客户信息 查询条件") |
||||
|
@Data |
||||
|
public class LpkCustomerQuery implements Query { |
||||
|
private String realName; |
||||
|
private String mobile; |
||||
|
} |
@ -0,0 +1,22 @@ |
|||||
|
package com.yxt.yyth.api.lpkcustomer; |
||||
|
|
||||
|
import com.yxt.common.core.vo.Vo; |
||||
|
import io.swagger.annotations.ApiModel; |
||||
|
import lombok.Data; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
|
||||
|
/** |
||||
|
* @author wangpengfei |
||||
|
* @date 2023/11/21 15:12 |
||||
|
*/ |
||||
|
@Data |
||||
|
@ApiModel(value = "客户信息 视图数据对象", description = "客户信息 视图数据对象") |
||||
|
@NoArgsConstructor |
||||
|
public class LpkCustomerVo implements Vo { |
||||
|
private String sid; |
||||
|
private String mobile; |
||||
|
private String bindDate; |
||||
|
private String realName; |
||||
|
private String nick; |
||||
|
private String photo; |
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
package com.yxt.yyth.api.lpkcustomer; |
||||
|
|
||||
|
import com.yxt.common.core.dto.Dto; |
||||
|
import io.swagger.annotations.ApiModelProperty; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
public class WxBindMobileDto implements Dto { |
||||
|
|
||||
|
@ApiModelProperty(value = "手机号") |
||||
|
private String mobile; |
||||
|
@ApiModelProperty(value = "验证码") |
||||
|
private String code; |
||||
|
//微信id
|
||||
|
private String openid; |
||||
|
private String unionid; |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
package com.yxt.yyth.biz.lpkcustomer; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.baomidou.mybatisplus.core.toolkit.Constants; |
||||
|
import com.yxt.yyth.api.lpkcustomer.LpkCustomer; |
||||
|
import com.yxt.yyth.api.lpkcustomer.LpkCustomerVo; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.apache.ibatis.annotations.Param; |
||||
|
|
||||
|
/** |
||||
|
* @author wangpengfei |
||||
|
* @date 2023/11/21 15:03 |
||||
|
*/ |
||||
|
@Mapper |
||||
|
public interface LpkCustomerMapper extends BaseMapper<LpkCustomer> { |
||||
|
|
||||
|
IPage<LpkCustomerVo> customerListPage(IPage<LpkCustomer> page, @Param(Constants.WRAPPER) QueryWrapper<LpkCustomer> qw); |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
<?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.yxt.yyth.biz.lpkcustomer.LpkCustomerMapper"> |
||||
|
<!-- <where> ${ew.sqlSegment} </where>--> |
||||
|
<!-- ${ew.customSqlSegment} --> |
||||
|
|
||||
|
<select id="customerListPage" resultType="com.yxt.yyth.api.lpkcustomer.LpkCustomerVo"> |
||||
|
select |
||||
|
sid, |
||||
|
date_format(bindDate, '%Y-%m-%d') as bindDate, |
||||
|
realName, |
||||
|
nick, |
||||
|
photo, |
||||
|
mobile |
||||
|
from lpk_customer |
||||
|
<where> |
||||
|
${ew.sqlSegment} |
||||
|
</where> |
||||
|
</select> |
||||
|
</mapper> |
@ -0,0 +1,47 @@ |
|||||
|
package com.yxt.yyth.biz.lpkcustomer; |
||||
|
|
||||
|
import com.yxt.common.core.query.PagerQuery; |
||||
|
import com.yxt.common.core.result.ResultBean; |
||||
|
import com.yxt.common.core.vo.PagerVo; |
||||
|
import com.yxt.yyth.api.lpkcustomer.LpkCustomer; |
||||
|
import com.yxt.yyth.api.lpkcustomer.LpkCustomerQuery; |
||||
|
import com.yxt.yyth.api.lpkcustomer.LpkCustomerVo; |
||||
|
import com.yxt.yyth.api.lpkcustomer.WxBindMobileDto; |
||||
|
import io.swagger.annotations.Api; |
||||
|
import io.swagger.annotations.ApiOperation; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
/** |
||||
|
* @author wangpengfei |
||||
|
* @date 2023/11/21 15:03 |
||||
|
*/ |
||||
|
|
||||
|
@Api(tags = "用户信息") |
||||
|
@RestController |
||||
|
@RequestMapping("lpkcustomer") |
||||
|
public class LpkCustomerRest { |
||||
|
|
||||
|
@Autowired |
||||
|
LpkCustomerService lpkCustomerService; |
||||
|
|
||||
|
@PostMapping("/wxBindMobile") |
||||
|
@ApiOperation(value = "微信绑定手机") |
||||
|
public ResultBean wxBindMobile(@RequestBody WxBindMobileDto wxBindMobileDto) { |
||||
|
return lpkCustomerService.wxBindMobile(wxBindMobileDto); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation(value = "微信静默登录") |
||||
|
@GetMapping("/wxSilentLogin") |
||||
|
public ResultBean wxSilentLogin(@RequestParam(value = "wxCode") String wxCode) { |
||||
|
return lpkCustomerService.wxSilentLogin(wxCode); |
||||
|
} |
||||
|
|
||||
|
@ApiOperation("客户信息列表") |
||||
|
@PostMapping("/customerListPage") |
||||
|
public ResultBean<PagerVo<LpkCustomerVo>> customerListPage(@RequestBody PagerQuery<LpkCustomerQuery> pq) { |
||||
|
return lpkCustomerService.customerListPage(pq); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,136 @@ |
|||||
|
package com.yxt.yyth.biz.lpkcustomer; |
||||
|
|
||||
|
import com.alibaba.fastjson.JSONObject; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.yxt.common.base.config.component.FileUploadComponent; |
||||
|
import com.yxt.common.base.service.MybatisBaseService; |
||||
|
import com.yxt.common.base.utils.PagerUtil; |
||||
|
import com.yxt.common.base.utils.StringUtils; |
||||
|
import com.yxt.common.core.query.PagerQuery; |
||||
|
import com.yxt.common.core.result.ResultBean; |
||||
|
import com.yxt.common.core.vo.PagerVo; |
||||
|
import com.yxt.yyth.api.lpkcustomer.LpkCustomer; |
||||
|
import com.yxt.yyth.api.lpkcustomer.LpkCustomerQuery; |
||||
|
import com.yxt.yyth.api.lpkcustomer.LpkCustomerVo; |
||||
|
import com.yxt.yyth.api.lpkcustomer.WxBindMobileDto; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.http.ResponseEntity; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.web.client.RestTemplate; |
||||
|
|
||||
|
import java.text.SimpleDateFormat; |
||||
|
import java.util.*; |
||||
|
|
||||
|
/** |
||||
|
* @author wangpengfei |
||||
|
* @date 2023/11/21 15:03 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class LpkCustomerService extends MybatisBaseService<LpkCustomerMapper, LpkCustomer> { |
||||
|
|
||||
|
@Autowired |
||||
|
private FileUploadComponent fileUploadComponent; |
||||
|
|
||||
|
String APP_ID = "wx4724e3a3c27f36b5"; |
||||
|
String SECRET = "971fd3b8aa7b08ce3e8a5f3e502b1a8d"; |
||||
|
private static final String WX_URL_LOGIN = "https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code "; |
||||
|
|
||||
|
public ResultBean<JSONObject> wxLogin(String jsCode, String appid, String secret) { |
||||
|
ResultBean rb = new ResultBean(); |
||||
|
String url = WX_URL_LOGIN.replace("APPID", appid).replace("SECRET", secret).replace("JSCODE", jsCode).replace("authorization_code", "authorization_code"); |
||||
|
RestTemplate restTemplate = new RestTemplate(); |
||||
|
ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class); |
||||
|
JSONObject jsonObject = JSONObject.parseObject(forEntity.getBody()); |
||||
|
System.out.println(jsonObject); |
||||
|
return rb.success().setData(jsonObject); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 微信静默登录 |
||||
|
* @param wxCode 临时凭证code值 |
||||
|
* @return ResultBean data:Token |
||||
|
* 登陆成功后data返回用户Sid |
||||
|
* 聂金毅 2022/6/8 20:30 创建 |
||||
|
*/ |
||||
|
public ResultBean wxSilentLogin(String wxCode) { |
||||
|
ResultBean rb = ResultBean.fireFail(); |
||||
|
// 通过wxCode获取unionid,失败返回微信的错误提示。
|
||||
|
|
||||
|
ResultBean<JSONObject> rbJsonObject = wxLogin(wxCode,APP_ID,SECRET); |
||||
|
if (!rbJsonObject.getSuccess()){ |
||||
|
JSONObject jsonObject = rbJsonObject.getData(); |
||||
|
String errcode = jsonObject.get("errcode").toString(); |
||||
|
String errmsg = jsonObject.get("errmsg").toString(); |
||||
|
return rb.setMsg(errmsg).setCode(errcode); |
||||
|
} |
||||
|
// 判断存在不存在unionid,用户在开放平台的唯一标识符,若当前小程序已绑定到微信开放平台帐号下会返回,详见 UnionID 机制说明。、
|
||||
|
JSONObject jsonObject = rbJsonObject.getData(); |
||||
|
if (!jsonObject.containsKey("openid")){ |
||||
|
return rb.setMsg("未获得openid,请联系管理员"); |
||||
|
} |
||||
|
// String unionid = jsonObject.get("unionid").toString();
|
||||
|
String openid = jsonObject.get("openid").toString(); |
||||
|
Map<String,String> map=new HashMap<>(); |
||||
|
// map.put("unionid",unionid);
|
||||
|
map.put("openid",openid); |
||||
|
LpkCustomer lpkCustomer= baseMapper.selectOne(new QueryWrapper<LpkCustomer>().eq("wx_mp_openid",openid)); |
||||
|
//查询用户是否存在
|
||||
|
if(null==lpkCustomer){ |
||||
|
//新增用户
|
||||
|
LpkCustomer newCustomer=new LpkCustomer(); |
||||
|
newCustomer.setWxMpOpenid(openid); |
||||
|
// newCustomer.setUnionId(unionid);
|
||||
|
newCustomer.setCreateTime(new Date()); |
||||
|
baseMapper.insert(newCustomer); |
||||
|
return rb.setData(newCustomer).setCode("110"); |
||||
|
} |
||||
|
//判断是否绑定手机号
|
||||
|
if(StringUtils.isBlank(lpkCustomer.getMobile())){ |
||||
|
return rb.setData(lpkCustomer).setCode("110"); |
||||
|
} |
||||
|
return rb.success().setData(lpkCustomer); |
||||
|
} |
||||
|
public ResultBean wxBindMobile(WxBindMobileDto wxBindMobileDto) { |
||||
|
ResultBean rb = ResultBean.fireFail(); |
||||
|
String mobile = wxBindMobileDto.getMobile(); |
||||
|
LpkCustomer lpkCustomer= baseMapper.selectOne(new QueryWrapper<LpkCustomer>().eq("wx_mp_openid",wxBindMobileDto.getOpenid())); |
||||
|
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||
|
lpkCustomer.setBindDate(sdf.format(new Date())); |
||||
|
lpkCustomer.setMobile(mobile); |
||||
|
baseMapper.updateById(lpkCustomer); |
||||
|
return rb.success().setMsg("绑定成功").setData(lpkCustomer.getSid()); |
||||
|
} |
||||
|
// public ResultBean wxBindMobile(String sid) {
|
||||
|
// ResultBean rb = ResultBean.fireFail();
|
||||
|
//
|
||||
|
// // LpkCustomer lpkCustomer= baseMapper.selectOne(new QueryWrapper<LpkCustomer>().eq("wx_mp_openid",wxBindMobileDto.getOpenid()));
|
||||
|
//
|
||||
|
// return rb.success().setMsg("绑定成功").setData(lpkCustomer.getSid());
|
||||
|
// }
|
||||
|
|
||||
|
public ResultBean<PagerVo<LpkCustomerVo>> customerListPage(PagerQuery<LpkCustomerQuery> pq) { |
||||
|
ResultBean rb = ResultBean.fireFail(); |
||||
|
LpkCustomerQuery query = pq.getParams(); |
||||
|
QueryWrapper<LpkCustomer> qw = new QueryWrapper<>(); |
||||
|
if (StringUtils.isNotBlank(query.getMobile())) { |
||||
|
qw.like("mobile", query.getMobile()); |
||||
|
} |
||||
|
if (StringUtils.isNotBlank(query.getRealName())) { |
||||
|
qw.like("realName", query.getRealName()); |
||||
|
} |
||||
|
IPage<LpkCustomer> page = PagerUtil.queryToPage(pq); |
||||
|
IPage<LpkCustomerVo> pagging = baseMapper.customerListPage(page, qw); |
||||
|
PagerVo<LpkCustomerVo> p = PagerUtil.pageToVo(pagging, null); |
||||
|
List<LpkCustomerVo> records = pagging.getRecords(); |
||||
|
records.removeAll(Collections.singleton(null)); |
||||
|
if (!records.isEmpty()) { |
||||
|
for (LpkCustomerVo record : records) { |
||||
|
if (StringUtils.isNotBlank(record.getPhoto())) { |
||||
|
record.setPhoto(fileUploadComponent.getUrlPrefix() + record.getPhoto()); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return rb.success().setData(p); |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue