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 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 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 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 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 patients = new PatientDao().selectListByOpenid(openid); // Map dataMap = new HashMap<>(); // dataMap.put("user", user); // dataMap.put("date", new Date()); // dataMap.put("patients", patients); // return Result.success(dataMap); // } }