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.
241 lines
8.3 KiB
241 lines
8.3 KiB
2 years ago
|
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);
|
||
|
// }
|
||
|
}
|