|
@ -0,0 +1,216 @@
|
|
|
|
package com.yihu.jw.hospital.service.consult;
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
import com.yihu.jw.doctor.dao.BaseDoctorDao;
|
|
|
|
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
|
|
|
|
import com.yihu.jw.file_upload.FileUploadService;
|
|
|
|
import com.yihu.jw.hospital.prescription.service.entrance.EntranceService;
|
|
|
|
import com.yihu.jw.hospital.prescription.service.entrance.XzzxEntranceService;
|
|
|
|
import com.yihu.jw.restmodel.iot.common.UploadVO;
|
|
|
|
import com.yihu.jw.util.wechat.wxhttp.HttpUtil;
|
|
|
|
import com.yihu.jw.wechat.dao.WechatDao;
|
|
|
|
import com.yihu.jw.wechat.service.WechatInfoService;
|
|
|
|
import com.yihu.jw.wechat.service.WxAccessTokenService;
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
import org.json.JSONObject;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
import org.springframework.mock.web.MockMultipartFile;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
import javax.transaction.Transactional;
|
|
|
|
import java.io.InputStream;
|
|
|
|
import java.net.HttpURLConnection;
|
|
|
|
import java.net.URL;
|
|
|
|
import java.net.URLEncoder;
|
|
|
|
import java.util.Map;
|
|
|
|
@Service
|
|
|
|
public class QrcodeService {
|
|
|
|
private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(QrcodeService.class);
|
|
|
|
@Autowired
|
|
|
|
private WechatInfoService wechatInfoService;
|
|
|
|
@Value("${wechat.id}")
|
|
|
|
private String wxId;
|
|
|
|
@Value("${fastDFS.fastdfs_file_url}")
|
|
|
|
private String fastdfs_file_url;
|
|
|
|
@Autowired
|
|
|
|
private BaseDoctorDao baseDoctorDao;
|
|
|
|
@Autowired
|
|
|
|
private FileUploadService fileUploadService;
|
|
|
|
@Value("${testPattern.sign}")
|
|
|
|
private String isClose;
|
|
|
|
@Value("${testPattern.remote_inner_url}")
|
|
|
|
private String remote_inner_url;
|
|
|
|
@Autowired
|
|
|
|
private ObjectMapper objectMapper;
|
|
|
|
@Autowired
|
|
|
|
private WechatDao wechatDao;
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
private WxAccessTokenService wxAccessTokenService;
|
|
|
|
@Autowired
|
|
|
|
private EntranceService entranceService;
|
|
|
|
@Autowired
|
|
|
|
private XzzxEntranceService xzzxEntranceService;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 生成所有医生的二维码
|
|
|
|
*
|
|
|
|
* @return
|
|
|
|
* @throws Exception
|
|
|
|
*/
|
|
|
|
@Transactional
|
|
|
|
public void makeAllSpecialistQrcode() throws Exception {
|
|
|
|
String token=null;
|
|
|
|
//中山医院互联网医院
|
|
|
|
if("xm_zsyy_wx".equals(wxId)) {
|
|
|
|
String response = entranceService.getAccessToken("100033");
|
|
|
|
net.sf.json.JSONObject object1 = net.sf.json.JSONObject.fromObject(response);
|
|
|
|
if (null != object1&&null!=object1.get("respCode") && "00".equals(object1.get("respCode"))) {
|
|
|
|
token = object1.getJSONObject("respEntity").getString("access_token");
|
|
|
|
} else {
|
|
|
|
throw new Exception("获取ACCESSTOKEN失败");
|
|
|
|
}
|
|
|
|
|
|
|
|
}else if("xm_xzzx_wx".equals(wxId)){
|
|
|
|
token = xzzxEntranceService.getXzToken();
|
|
|
|
}else{
|
|
|
|
token = wxAccessTokenService.getWxAccessTokenById(wxId).getAccessToken();
|
|
|
|
}
|
|
|
|
System.out.println("token"+token);
|
|
|
|
System.out.println("wxId"+wxId);
|
|
|
|
Iterable<BaseDoctorDO> doctors = baseDoctorDao.findAll();
|
|
|
|
for (BaseDoctorDO doctorDO :doctors){
|
|
|
|
if (null==doctorDO.getQrcode()||"".equals(doctorDO.getQrcode())){
|
|
|
|
// 二维码内容
|
|
|
|
String content = "hlw_doctor_" + doctorDO.getId() +"_"+doctorDO.getName();
|
|
|
|
System.out.println("content"+content);
|
|
|
|
// 二维码图片文件名
|
|
|
|
String fileName = doctorDO.getId()+"_"+doctorDO.getMobile()+".png";
|
|
|
|
/*String path = QrcodeService.class.getResource("/").getPath().replace("/WEB-INF/classes/", "")
|
|
|
|
+ File.separator + "qrcode";*/
|
|
|
|
System.out.println("fileName"+fileName);
|
|
|
|
// 通过微信接口生成医生二维码
|
|
|
|
String uri = makeQrcodeFromWeiXin(content, fileName.replaceAll("\r\n", ""), token);
|
|
|
|
System.out.println("uri"+uri);
|
|
|
|
doctorDO.setQrcode(uri);
|
|
|
|
baseDoctorDao.save(doctorDO);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* 生成某个医生的二维码
|
|
|
|
*
|
|
|
|
* @param doctor
|
|
|
|
* @return
|
|
|
|
* @throws Exception
|
|
|
|
*/
|
|
|
|
public String makeSpecialistQrcode(String doctor) throws Exception {
|
|
|
|
System.out.println("doctorID"+doctor);
|
|
|
|
|
|
|
|
String token=null;
|
|
|
|
//中山医院互联网医院
|
|
|
|
if("xm_zsyy_wx".equals(wxId)) {
|
|
|
|
String response = entranceService.getAccessToken("100033");
|
|
|
|
net.sf.json.JSONObject object1 = net.sf.json.JSONObject.fromObject(response);
|
|
|
|
if (null != object1&&null!=object1.get("respCode") && "00".equals(object1.get("respCode"))) {
|
|
|
|
token = object1.getJSONObject("respEntity").getString("access_token");
|
|
|
|
} else {
|
|
|
|
throw new Exception("获取ACCESSTOKEN失败");
|
|
|
|
}
|
|
|
|
|
|
|
|
}else if("xm_xzzx_wx".equals(wxId)){
|
|
|
|
token = xzzxEntranceService.getXzToken();
|
|
|
|
}else{
|
|
|
|
token = wxAccessTokenService.getWxAccessTokenById(wxId).getAccessToken();
|
|
|
|
}
|
|
|
|
System.out.println("token"+token);
|
|
|
|
System.out.println("wxId"+wxId);
|
|
|
|
BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(doctor);
|
|
|
|
if (null!=baseDoctorDO){
|
|
|
|
if (null==baseDoctorDO.getQrcode()||"".equals(baseDoctorDO.getQrcode())){
|
|
|
|
// 二维码内容
|
|
|
|
String content = "hlw_doctor_" + baseDoctorDO.getId() +"_"+baseDoctorDO.getName();
|
|
|
|
System.out.println("content"+content);
|
|
|
|
// 二维码图片文件名
|
|
|
|
String fileName = baseDoctorDO.getId()+"_"+baseDoctorDO.getMobile()+".png";
|
|
|
|
/*String path = QrcodeService.class.getResource("/").getPath().replace("/WEB-INF/classes/", "")
|
|
|
|
+ File.separator + "qrcode";*/
|
|
|
|
System.out.println("fileName"+fileName);
|
|
|
|
// 通过微信接口生成医生二维码
|
|
|
|
String uri = makeQrcodeFromWeiXin(content, fileName.replaceAll("\r\n", ""), token);
|
|
|
|
System.out.println("uri"+uri);
|
|
|
|
baseDoctorDO.setQrcode(uri);
|
|
|
|
baseDoctorDao.save(baseDoctorDO);
|
|
|
|
return uri;
|
|
|
|
}else {
|
|
|
|
return baseDoctorDO.getQrcode();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
throw new Exception("找不到对应医生信息!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* 从微信生成二维码并下载到本地
|
|
|
|
*
|
|
|
|
* @param content 场景值
|
|
|
|
* @param fileName 二维码文件名
|
|
|
|
* @param token
|
|
|
|
* @throws
|
|
|
|
*/
|
|
|
|
public String makeQrcodeFromWeiXin(String content, String fileName, String token) throws Exception {
|
|
|
|
try {
|
|
|
|
String token_url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + token;
|
|
|
|
String params = "{\"action_name\": \"QR_LIMIT_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": \"" + content + "\"}}}";
|
|
|
|
LOGGER.info("参数:"+params);
|
|
|
|
|
|
|
|
String result = HttpUtil.sendPost(token_url, params);
|
|
|
|
LOGGER.info("步骤1:"+result);
|
|
|
|
|
|
|
|
if (!StringUtils.isEmpty(result)) {
|
|
|
|
JSONObject json = new JSONObject(result);
|
|
|
|
LOGGER.info("步骤2:"+json.toString());
|
|
|
|
if (json.has("ticket")) {
|
|
|
|
// 请求输入流
|
|
|
|
InputStream inputStream = null;
|
|
|
|
// 下载二维码图片
|
|
|
|
URL urlGet = new URL("https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket="
|
|
|
|
+ URLEncoder.encode(json.get("ticket").toString(), "UTF-8"));
|
|
|
|
HttpURLConnection connection = (HttpURLConnection) urlGet.openConnection();
|
|
|
|
connection.connect();
|
|
|
|
inputStream = connection.getInputStream();
|
|
|
|
UploadVO uploadVO = new UploadVO();
|
|
|
|
MultipartFile multipartFile = new MockMultipartFile(fileName,fileName,"", inputStream);
|
|
|
|
if (isClose.equalsIgnoreCase("1")){
|
|
|
|
System.out.println("isClose"+1);
|
|
|
|
Map<String, Object> map = fileUploadService.uploadImg(multipartFile);
|
|
|
|
uploadVO.setFullUri(map.get("accessory").toString());
|
|
|
|
}else if(isClose.equals("2")){
|
|
|
|
System.out.println("isClose"+2);
|
|
|
|
//内网上传
|
|
|
|
String rs = fileUploadService.request(remote_inner_url,multipartFile,null);
|
|
|
|
System.out.println("rs"+rs);
|
|
|
|
com.alibaba.fastjson.JSONObject rsJson = JSON.parseObject(rs);
|
|
|
|
uploadVO = objectMapper.readValue(rsJson.getJSONObject("obj").toJSONString(),UploadVO.class);
|
|
|
|
|
|
|
|
}else {
|
|
|
|
// 上传服务器
|
|
|
|
uploadVO = fileUploadService.uploadStream(inputStream,fileName+".png",fastdfs_file_url);
|
|
|
|
}
|
|
|
|
|
|
|
|
return uploadVO.getFullUri();
|
|
|
|
} else {
|
|
|
|
throw new Exception("请求微信生成二维码失败!");
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
throw new Exception("请求微信生成二维码失败!");
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
throw new Exception(e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|