From 5dedf6c30f0864ae7c4fd3c47c74b057f2360156 Mon Sep 17 00:00:00 2001
From: zhouxiantao <1026371446@qq.com>
Date: Tue, 03 Sep 2024 10:07:54 +0800
Subject: [PATCH] 小程序开发

---
 dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/service/PaAccountService.java |  140 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 136 insertions(+), 4 deletions(-)

diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/service/PaAccountService.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/service/PaAccountService.java
index 20a6a8a..7d261fc 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/service/PaAccountService.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/service/PaAccountService.java
@@ -1,22 +1,33 @@
 package cn.huge.module.pauser.service;
 
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.huge.base.common.exception.ServiceException;
-import cn.huge.base.common.utils.DateUtils;
-import cn.huge.base.common.utils.IdUtils;
+import cn.huge.base.common.utils.*;
 import cn.huge.module.client.api.impl.UtilsClientImpl;
+import cn.huge.module.constant.BaseConsts;
+import cn.huge.module.cust.constant.UserBaseConsts;
 import cn.huge.module.pauser.dao.mapper.PaAccountMapper;
 import cn.huge.module.pauser.domain.po.PaAccount;
+import cn.huge.module.pauser.domain.po.PaUser;
+import cn.huge.module.oper.dto.SeCustWechatDTO;
+import cn.huge.module.pauser.dto.WeChatEmpowerDTO;
+import cn.huge.module.pauser.dto.WeChatLoginDTO;
+import cn.huge.module.utils.JwtUtils;
+import cn.huge.module.wechat.miniapp.service.WeixinMaService;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Maps;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.DigestUtils;
 
-import javax.annotation.PostConstruct;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -39,6 +50,15 @@
 
     @Autowired
     private UtilsClientImpl utilsClient;
+
+    @Autowired
+    private WeixinMaService weixinMaService;
+
+    @Autowired
+    private WxMaService wxMaService;
+
+    @Autowired
+    private PaUserService paUserService;
 
     /**
     * 更新对象
@@ -130,4 +150,116 @@
         }
     }
 
+    /**
+     * 当事人小程序-微信用户授权
+     * @param weChatEmpowerDTO 微信用户授权信息
+     * @return WeChatLoginDTO
+     */
+    public WeChatLoginDTO wechatEmpower(WeChatEmpowerDTO weChatEmpowerDTO) {
+        try{
+            Date nowDate = new Date();
+            WeChatLoginDTO weChatLoginDTO = new WeChatLoginDTO();
+            SeCustWechatDTO seCustWechatDTO = mapper.getSeCustWechatByAppid(weChatEmpowerDTO.getAppid());
+            weixinMaService.createConfig(seCustWechatDTO);
+            WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(weChatEmpowerDTO.getCode());
+            weChatLoginDTO.setSessionKey(session.getSessionKey());
+            weChatLoginDTO.setOpenId(session.getOpenid());
+            PaUser paUser = null;
+            PaAccount account = this.getByTypeAndAcc(UserBaseConsts.ACC_TYPE_2, session.getOpenid(), seCustWechatDTO.getCustId());
+            // 是否新注册
+            if (ObjectUtils.isEmpty(account)) {
+                weChatLoginDTO.setLastLoginTime(nowDate);
+                // 新建用户信息
+                paUser = new PaUser();
+                paUser.setId(utilsClient.getNewTimeId());
+                paUser.setAvatar(weChatEmpowerDTO.getAvatar());
+                paUser.setRealStatus(UserBaseConsts.REAL_STATUS_0);
+//                paUser.setFaceStatus(UserBaseConsts.REAL_STATUS_0);
+                paUser.setStatus(UserBaseConsts.USER_STATUS_1);
+                paUser.setDeleteStatus(BaseConsts.DELETE_STATUS_0);
+                paUser.setCustId(seCustWechatDTO.getCustId());
+                paUser.setCreateTime(nowDate);
+                paUser.setUpdateTime(nowDate);
+                paUserService.save(paUser);
+                // 新增账号信息
+                account = new PaAccount();
+                account.setId(utilsClient.getNewTimeId());
+                account.setUserId(paUser.getId());
+                account.setAccType(UserBaseConsts.ACC_TYPE_2);
+                account.setAcc(session.getOpenid());
+                account.setCipher(DigestUtils.md5DigestAsHex(session.getOpenid().getBytes()));
+                account.setCipherOpen(session.getOpenid());
+                account.setLoginTime(nowDate);
+                account.setCustId(seCustWechatDTO.getCustId());
+                account.setCreateTime(nowDate);
+                account.setUpdateTime(nowDate);
+                mapper.insert(account);
+            }else {
+                weChatLoginDTO.setLastLoginTime(account.getLoginTime());
+                // 更新登录时间
+                account.setLoginTime(nowDate);
+                mapper.updatePaAccount(account);
+                // 获取用户信息
+                paUser = paUserService.getById(account.getUserId());
+            }
+            // 封装用户信息
+            weChatLoginDTO.setUserId(paUser.getId());
+            weChatLoginDTO.setTrueName(paUser.getTrueName());
+            weChatLoginDTO.setRealStatus(paUser.getRealStatus());
+//            weChatLoginDTO.setFaceStatus(paUser.getFaceStatus());
+            //生成JWT
+            String token = JwtUtils.buildJWT(account.getCustId(), account.getUserId());
+            weChatLoginDTO.setToken(token);
+            return weChatLoginDTO;
+        }catch (Exception e){
+            log.error("service方法[PaAccountService.wechatEmpower]调用异常:"+e, e);
+            throw new ServiceException("PaAccountService.wechatEmpower", e);
+        }
+    }
+
+    /**
+     * 通过账号类型和授权凭证查询
+     * @param accType 账户类型
+     * @param acc 账号
+     * @param custId 客户编号
+     * @return PaAccount
+     */
+    public PaAccount getByTypeAndAcc(Integer accType, String acc, String custId){
+        QueryWrapper<PaAccount> paAccountQueryWrapper = new QueryWrapper<>();
+        paAccountQueryWrapper.eq("acc_type", accType).eq("acc", acc).eq("cust_id", custId);
+        PaAccount paAccount = mapper.selectOne(paAccountQueryWrapper);
+        return paAccount;
+    }
+
+    /**
+     * 当事人小程序-获取手机号码
+     * @param weChatEmpowerDTO 请求信息
+     * @return String
+     */
+    public String wechatGetPhone(WeChatEmpowerDTO weChatEmpowerDTO) {
+        try{
+            SeCustWechatDTO seCustWechatDTO = mapper.getSeCustWechatByAppid(weChatEmpowerDTO.getAppid());
+            weixinMaService.createConfig(seCustWechatDTO);
+            String accessToken = wxMaService.getAccessToken();
+            String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token="+accessToken;
+            Map<String, String> map = Maps.newHashMap();
+            map.put("code", weChatEmpowerDTO.getCode());
+            JsonMapper jsonMapper = new JsonMapper();
+            String jsonStr = jsonMapper.toJson(map);
+            String result = HttpClientUtils.httpPostRaw(url, jsonStr, null, null);
+            JSONObject resultJson = JSONObject.parseObject(new String(result));
+            int errcode = resultJson.getIntValue("errcode");
+            if (errcode == 0){
+                JSONObject phoneInfoJson = resultJson.getJSONObject("phone_info");
+                String phoneNumber = phoneInfoJson.getString("phoneNumber");
+                return phoneNumber;
+            }else {
+                throw new ServiceException("errcode:"+errcode+";errmsg:"+resultJson.getIntValue("errmsg"));
+            }
+        }catch (Exception e){
+            log.error("service方法[PaAccountService.wechatGetPhone]调用异常:"+e, e);
+            throw new ServiceException("PaAccountService.wechatGetPhone", e);
+        }
+    }
+
 }

--
Gitblit v1.8.0