微信后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

240 lines
8.3 KiB

package com.ynxbd.common.action;
import com.ynxbd.ali.enums.AliEnergyEnum;
import com.ynxbd.ali.helper.AliCacheHelper;
import com.ynxbd.ali.helper.AliHelper;
import com.ynxbd.ali.helper.AliMessageHelper;
import com.ynxbd.ali.helper.AliUploadHelper;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.User;
import com.ynxbd.common.bean.enums.HCardTypeEnum;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.result.ServiceException;
import com.ynxbd.common.service.PatientService;
import com.ynxbd.wx.wxfactory.WxCacheHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.ehcache.Cache;
import java.util.HashMap;
import java.util.Map;
/**
* @Author wsq
* @Date 2021/2/26 12:50
* @Copyright @ 2020 云南新八达科技有限公司 All rights reserved.
*/
@Slf4j
@Namespace("/ali")
public class AliAction extends BaseAction {
/**
* [支付宝]小程序授权 [启动程序使用auth_base; 用户信息授权:auth_user;]
*/
@Action("auth")
public Result auth(String authCode, String code, String scopes) {
if (authCode == null) authCode = code;
log.info("【支付宝】用户授权 authCode={}", authCode);
if (authCode == null) {
return Result.error(ResultEnum.PARAM_IS_BLANK);
}
if (scopes == null) scopes = "";
User tokenInfo = AliHelper.getToken(authCode);
if (tokenInfo == null) {
return Result.error(ResultEnum.AUTH_FAILED);
}
String openid = tokenInfo.getOpenid();
String accessToken = tokenInfo.getAccessToken();
Long expiresIn = tokenInfo.getExpiresIn();
log.info("【支付宝】授权令牌 openid={}, accessToken={}, scopes={}, expiresIn={}", openid, accessToken, scopes, expiresIn);
if (openid == null || accessToken == null) {
return Result.error(ResultEnum.INTERFACE_ALI_INVOKE_ERROR); // 支付宝接口调用失败
}
Cache<String, User> cache = WxCacheHelper.getUserCache();
User user;
if (cache.containsKey(openid)) {
user = WxCacheHelper.getCacheUser(openid);
if (user == null) {
user = new User();
user.setOpenid(openid);
}
} else {
user = new User();
user.setOpenid(openid);
user.setPatientList(new PatientService().getPatientList(openid, null, true));
cache.put(openid, user);
}
Cache<String, User> userInfoCache = AliCacheHelper.getAliUserCache();
if (userInfoCache.containsKey(openid)) {
AliHelper.copyUserInfo(user, userInfoCache.get(openid));
} else {
if (scopes.contains(AliCacheHelper.AUTH_USER)) {
AliHelper.copyUserInfo(user, AliHelper.getUserInfo(openid, accessToken));
}
}
if (user.getPatientList() == null) {
user.setPatientList(new PatientService().getPatientList(openid, null, true));
}
AliCacheHelper.setUserAccessToken(scopes, user, accessToken);
cache.replace(openid, user);
log.info("[授权]user={}", user);
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("patients", user.getPatientList());
user.setPatientList(null);
dataMap.put("user", user);
return Result.success(dataMap);
}
/**
* 绑定新患者(不通过电子健康卡)
*/
@Action("bindMyself")
public Result bindMyself(String openid, String accessToken, String address, String county, String nation, String birthday, boolean isVerifyCode, String smsCode) {
log.info("【支付宝】用户授权 accessToken={}", accessToken);
if (accessToken == null) {
return Result.error(ResultEnum.PARAM_IS_BLANK);
}
User user;
Cache<String, User> cache = AliCacheHelper.getAliUserCache();
if (!cache.containsKey(openid)) {
user = AliHelper.getUserInfo(openid, accessToken);
cache.put(openid, user);
} else {
user = cache.get(openid);
if (user.getTrueName() == null || user.getIdCardNo() == null) {
user = AliHelper.getUserInfo(openid, accessToken);
cache.replace(openid, user);
}
}
String trueName = user.getTrueName();
String idCardNo = user.getIdCardNo();
String tel = user.getTel();
String gender = user.getGender();
HCardTypeEnum cardTypeEnum = user.getCardTypeEnum();
return new PatientService().bindMyself(trueName, idCardNo, cardTypeEnum, address, county, openid, gender, nation, birthday, isVerifyCode, tel, smsCode);
}
/**
* [支付宝]发送能量
*/
@Action("sendEnergy")
public Result sendEnergy(String openid, String callNo) {
log.info("【支付宝】发送能量 openid={}, callNo={}", openid, callNo);
if (openid == null || callNo == null) {
return Result.error(ResultEnum.PARAM_IS_BLANK);
}
AliEnergyEnum energyEnum = AliEnergyEnum.toEnum(callNo);
if (energyEnum == null) {
return Result.error(ResultEnum.SMS_CALL_NO_ERROR);
}
try {
AliMessageHelper.sendEnergy(openid, energyEnum);
} catch (ServiceException e) {
return Result.error(e);
}
return Result.success();
}
/**
* [支付宝]刷新授权令牌
*/
@Action("refreshToken")
public Result refreshToken(String refreshToken) {
log.info("【支付宝】刷新授权令牌 refreshToken={}", refreshToken);
if (refreshToken == null) {
return Result.error(ResultEnum.PARAM_IS_BLANK);
}
User user = AliHelper.refreshToken(refreshToken);
return user == null
? Result.error(ResultEnum.AUTH_FAILED)
: Result.success(user);
}
/**
* [支付宝]上传医院信息
*/
@Action("uploadHosp")
public Result uploadHosp() {
log.info("【支付宝】上传医院信息");
AliUploadHelper.uploadHosp();
return Result.success();
}
// /**
// * [支付宝]刷新授权令牌
// */
// @Action("test02")
// public Result test02(String openid) {
// String link = AliHelper.getLink("pages/home/home", null);
// AliMessageHelper.hospitalOrder(openid,
// "标题",
// new BigDecimal("4.500"),
// "ALId224a2e415fe45915d311e1de4a1",
// DateHelper.getCurDateTime(),
// "001", "外科", "任意医师", "王绍全", link);
// return Result.success();
// }
/**
* [支付宝]跳转首页
*/
@Action("toHome")
public Result toHome() {
return Result.success();
}
/**
* [支付宝]跳转科室列表
*/
@Action("toDept")
public Result toDept() {
return Result.success();
}
// /**
// * [支付宝]授权
// */
// @Action("getUserId")
// public Result getUserId(String code) {
// log.info("【支付宝】用户授权 code={}", code);
// if (code == null) {
// return Result.error(ResultEnum.PARAM_IS_BLANK);
// }
//
// User user = AliHelper.getToken(code);
// if (user == null) {
// return Result.error(ResultEnum.AUTH_FAILED);
// }
// String openid = user.getOpenid();
// String accessToken = user.getAccessToken();
// if (StringUtils.isEmpty(openid) || StringUtils.isEmpty(accessToken)) {
// return Result.error(ResultEnum.INTERFACE_ALI_INVOKE_ERROR); // 支付宝接口调用失败
// }
// List<Patient> patients = new PatientDao().selectListByOpenid(openid);
// Map<String, Object> dataMap = new HashMap<>();
// dataMap.put("user", user);
// dataMap.put("date", new Date());
// dataMap.put("patients", patients);
// return Result.success(dataMap);
// }
}