From 8dfa874483d682c540b5ee0fd74206cf94b240c3 Mon Sep 17 00:00:00 2001 From: wangpengfei <1928057482@qq.com> Date: Tue, 21 Nov 2023 15:33:14 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9D=99=E9=BB=98=E7=99=BB=E5=BD=95=20?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E6=89=8B=E6=9C=BA=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yxt/yyth/api/lpkcustomer/LpkCustomer.java | 33 +++++++ .../yyth/api/lpkcustomer/LpkCustomerDto.java | 14 +++ .../api/lpkcustomer/LpkCustomerQuery.java | 14 +++ .../yyth/api/lpkcustomer/LpkCustomerVo.java | 16 ++++ .../yyth/api/lpkcustomer/WxBindMobileDto.java | 17 ++++ .../biz/lpkcustomer/LpkCustomerMapper.java | 13 +++ .../biz/lpkcustomer/LpkCustomerMapper.xml | 7 ++ .../yyth/biz/lpkcustomer/LpkCustomerRest.java | 35 ++++++++ .../biz/lpkcustomer/LpkCustomerService.java | 89 +++++++++++++++++++ 9 files changed, 238 insertions(+) create mode 100644 src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomer.java create mode 100644 src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomerDto.java create mode 100644 src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomerQuery.java create mode 100644 src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomerVo.java create mode 100644 src/main/java/com/yxt/yyth/api/lpkcustomer/WxBindMobileDto.java create mode 100644 src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerMapper.java create mode 100644 src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerMapper.xml create mode 100644 src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerRest.java create mode 100644 src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerService.java diff --git a/src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomer.java b/src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomer.java new file mode 100644 index 0000000..673ba63 --- /dev/null +++ b/src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomer.java @@ -0,0 +1,33 @@ +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 mobile; + private String bindDate; + private String realName; + private String nick; + private String photo; +} diff --git a/src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomerDto.java b/src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomerDto.java new file mode 100644 index 0000000..f356c74 --- /dev/null +++ b/src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomerDto.java @@ -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 { +} diff --git a/src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomerQuery.java b/src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomerQuery.java new file mode 100644 index 0000000..6e5624b --- /dev/null +++ b/src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomerQuery.java @@ -0,0 +1,14 @@ +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 { +} diff --git a/src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomerVo.java b/src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomerVo.java new file mode 100644 index 0000000..cdc2425 --- /dev/null +++ b/src/main/java/com/yxt/yyth/api/lpkcustomer/LpkCustomerVo.java @@ -0,0 +1,16 @@ +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 { +} diff --git a/src/main/java/com/yxt/yyth/api/lpkcustomer/WxBindMobileDto.java b/src/main/java/com/yxt/yyth/api/lpkcustomer/WxBindMobileDto.java new file mode 100644 index 0000000..1ab9506 --- /dev/null +++ b/src/main/java/com/yxt/yyth/api/lpkcustomer/WxBindMobileDto.java @@ -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; +} diff --git a/src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerMapper.java b/src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerMapper.java new file mode 100644 index 0000000..579a5a2 --- /dev/null +++ b/src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerMapper.java @@ -0,0 +1,13 @@ +package com.yxt.yyth.biz.lpkcustomer; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yxt.yyth.api.lpkcustomer.LpkCustomer; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author wangpengfei + * @date 2023/11/21 15:03 + */ +@Mapper +public interface LpkCustomerMapper extends BaseMapper { +} diff --git a/src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerMapper.xml b/src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerMapper.xml new file mode 100644 index 0000000..81a3049 --- /dev/null +++ b/src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerMapper.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerRest.java b/src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerRest.java new file mode 100644 index 0000000..3ed351a --- /dev/null +++ b/src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerRest.java @@ -0,0 +1,35 @@ +package com.yxt.yyth.biz.lpkcustomer; + +import com.yxt.common.core.result.ResultBean; +import com.yxt.yyth.api.lpkcustomer.LpkCustomer; +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); + } +} diff --git a/src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerService.java b/src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerService.java new file mode 100644 index 0000000..59ea8be --- /dev/null +++ b/src/main/java/com/yxt/yyth/biz/lpkcustomer/LpkCustomerService.java @@ -0,0 +1,89 @@ +package com.yxt.yyth.biz.lpkcustomer; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.yxt.common.base.service.MybatisBaseService; +import com.yxt.common.base.utils.StringUtils; +import com.yxt.common.core.result.ResultBean; +import com.yxt.yyth.api.lpkcustomer.LpkCustomer; +import com.yxt.yyth.api.lpkcustomer.LpkCustomerVo; +import com.yxt.yyth.api.lpkcustomer.WxBindMobileDto; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * @author wangpengfei + * @date 2023/11/21 15:03 + */ +@Service +public class LpkCustomerService extends MybatisBaseService { + 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 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 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 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 map=new HashMap<>(); + map.put("unionid",unionid); + map.put("openid",openid); + LpkCustomer lpkCustomer= baseMapper.selectOne(new QueryWrapper().eq("wx_mp_openid",openid)); + //查询用户是否存在 + if(null==lpkCustomer){ + //新增用户 + LpkCustomer newCustomer=new LpkCustomer(); + newCustomer.setWxMpOpenid(openid); + newCustomer.setCreateTime(new Date()); + baseMapper.insert(newCustomer); + return rb.success().setData(newCustomer); + } + return rb.success().setData(lpkCustomer); + } + public ResultBean wxBindMobile(WxBindMobileDto wxBindMobileDto) { + ResultBean rb = ResultBean.fireFail(); + String mobile = wxBindMobileDto.getMobile(); + LpkCustomer lpkCustomer= baseMapper.selectOne(new QueryWrapper().eq("wx_mp_openid",wxBindMobileDto.getOpenid())); + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); + lpkCustomer.setBindDate(sdf.format(new Date())); + lpkCustomer.setMobile(mobile); + baseMapper.insert(lpkCustomer); + return rb.setMsg("绑定成功"); + } +}