刘韬 6 anni fa
parent
commit
b4e3bac8a5

+ 6 - 0
PacsOnline_Wechat_Patient/pom.xml

@@ -67,6 +67,12 @@
 			<version>4.0.1</version>
 			<scope>provided</scope>
 		</dependency>
+		<!-- <dependency>
+    <groupId>com.jfinal</groupId>
+    <artifactId>jetty-server</artifactId>
+    <version>2019.3</version>
+    <scope>provided</scope>
+</dependency> -->
 	</dependencies>
 
 	<build>

+ 0 - 74
PacsOnline_Wechat_Patient/src/main/java/com/zskk/common/JsonSerializer.java

@@ -1,74 +0,0 @@
-package com.zskk.common;
-
-import java.io.UnsupportedEncodingException;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.serializer.SerializerFeature;
-import com.jfinal.plugin.redis.serializer.ISerializer;
-
-public class JsonSerializer implements ISerializer {
-
-	@Override
-	public byte[] keyToBytes(String key) {
-		return this.str2Byte(key);
-	}
-
-	@Override
-	public String keyFromBytes(byte[] bytes) {
-		if(bytes == null || bytes.length == 0){
-			return null;		
-		}
-		
-		return this.byte2Str(bytes);
-	}
-
-	@Override
-	public byte[] fieldToBytes(Object field) {
-		String json = JSON.toJSONString(field);
-		return this.str2Byte(json);
-	}
-
-	@Override
-	public Object fieldFromBytes(byte[] bytes) {
-		if(bytes == null || bytes.length == 0){
-			return null;		
-		}
-		
-		String json = this.byte2Str(bytes);
-		return JSON.parseObject(json);
-	}
-
-	@Override
-	public byte[] valueToBytes(Object value) {
-		String json = JSON.toJSONString(value, SerializerFeature.WriteClassName);
-		return this.str2Byte(json);
-	}
-
-	@Override
-	public Object valueFromBytes(byte[] bytes) {
-		if(bytes == null || bytes.length == 0){
-			return null;		
-		}
-		
-		String json = this.byte2Str(bytes);
-		return JSON.parse(json);
-	}
-	
-	private String byte2Str(byte[] bytes){
-		try {
-			return new String(bytes, "UTF-8");
-		} catch (UnsupportedEncodingException e) {
-			e.printStackTrace();
-		}
-		return null;		
-	}
-	
-	private byte[] str2Byte(String str){
-		try {
-			return str.getBytes("UTF-8");
-		} catch (UnsupportedEncodingException e) {
-			e.printStackTrace();
-		}
-		return null;	
-	}
-}

+ 40 - 22
PacsOnline_Wechat_Patient/src/main/java/com/zskk/common/ZskkConfig.java

@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2011-2014, James Zhan 詹波 (jfinal@126.com).
+ * Copyright (c) 2017-2019, lt 北京中世康恺科技有限公司 (www.pacsonline.cn).
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  */
@@ -12,6 +12,7 @@ import com.jfinal.config.Interceptors;
 import com.jfinal.config.JFinalConfig;
 import com.jfinal.config.Plugins;
 import com.jfinal.config.Routes;
+import com.jfinal.core.JFinal;
 import com.jfinal.kit.PropKit;
 import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
 import com.jfinal.plugin.druid.DruidPlugin;
@@ -65,7 +66,7 @@ public class ZskkConfig extends JFinalConfig {
 
 		me.add("/msg", WeixinMsgController.class);
 		me.add("/api", WeixinApiController.class, "/api");
-        me.add("/web", WebBridgeController.class);
+		me.add("/web", WebBridgeController.class);
 	}
 
 	public void configPlugin(Plugins me) {
@@ -79,8 +80,8 @@ public class ZskkConfig extends JFinalConfig {
 
 		// 所有配置在 MappingKit 中搞定
 		_MappingKit.mapping(arp);
-		
-        // 使用redis分布accessToken
+
+		// 使用redis分布accessToken
 		RedisPlugin redisPlugin = new RedisPlugin("weixin_patient", "127.0.0.1", 6379);
 		redisPlugin.setSerializer(JdkSerializer.me); // 需要使用fst高性能序列化的用户请删除这一行(Fst jar依赖请查看WIKI)
 		me.add(redisPlugin);
@@ -102,31 +103,47 @@ public class ZskkConfig extends JFinalConfig {
 		super.onStart();
 		// 支持redis存储access_token、js_ticket,需要先启动RedisPlugin
 		ApiConfigKit.setAccessTokenCache(new RedisAccessTokenCache("weixin_patient"));
-
-		ApiConfig ac = new ApiConfig();
+		// 中世康恺电子胶片平台
+		ApiConfig ac_zskk = new ApiConfig();
 		// 配置微信 API 相关参数
-		ac.setToken(PropKit.get("token"));
-		ac.setAppId(PropKit.get("appId"));
-		ac.setAppSecret(PropKit.get("appSecret"));
+		ac_zskk.setToken(PropKit.get("token_zskk"));
+		ac_zskk.setAppId(PropKit.get("appId_zskk"));
+		ac_zskk.setAppSecret(PropKit.get("appSecret_zskk"));
 
 		/**
 		 * 是否对消息进行加密,对应于微信平台的消息加解密方式: 1:true进行加密且必须配置 encodingAesKey
 		 * 2:false采用明文模式,同时也支持混合模式
 		 */
-		ac.setEncryptMessage(Boolean.FALSE);
+		ac_zskk.setEncryptMessage(Boolean.FALSE);
 
 		/**
 		 * 多个公众号时,重复调用ApiConfigKit.putApiConfig(ac)依次添加即可,第一个添加的是默认。
 		 */
-		ApiConfigKit.putApiConfig(ac);
-
-		ApiConfig ac2 = new ApiConfig();
-//     配置微信 API 相关参数
-		ac2.setToken(PropKit.get("token"));
-		ac2.setAppId("wxee1c68f8944d357b");
-		ac2.setAppSecret("1bc0128b6bbb3907c3bcf4a1704f2a1f");
-		ac2.setEncryptMessage(Boolean.FALSE);
-		ApiConfigKit.putApiConfig(ac2);
+		ApiConfigKit.putApiConfig(ac_zskk);
+
+		// 黑龙江省电子胶片平台
+		ApiConfig ac_hlj = new ApiConfig();
+		ac_hlj.setToken(PropKit.get("token_hlj"));
+		ac_hlj.setAppId(PropKit.get("appId_hlj"));
+		ac_hlj.setAppSecret(PropKit.get("appSecret_hlj"));
+		ac_hlj.setEncryptMessage(Boolean.FALSE);
+		ApiConfigKit.putApiConfig(ac_hlj);
+
+		// 辽宁省电子胶片平台
+		ApiConfig ac_ln = new ApiConfig();
+		ac_ln.setToken(PropKit.get("token_ln"));
+		ac_ln.setAppId(PropKit.get("appId_ln"));
+		ac_ln.setAppSecret(PropKit.get("appSecret_ln"));
+		ac_ln.setEncryptMessage(Boolean.FALSE);
+		ApiConfigKit.putApiConfig(ac_ln);
+
+		// ceshi
+		ApiConfig ac_cs = new ApiConfig();
+		ac_cs.setToken(PropKit.get("token_cs"));
+		ac_cs.setAppId(PropKit.get("appId_cs"));
+		ac_cs.setAppSecret(PropKit.get("appSecret_cs"));
+		ac_ln.setEncryptMessage(Boolean.FALSE);
+		ApiConfigKit.putApiConfig(ac_cs);
 
 		/**
 		 * 1.9 新增LocalTestTokenCache用于本地和线上同时使用一套appId时避免本地将线上AccessToken冲掉
@@ -148,10 +165,11 @@ public class ZskkConfig extends JFinalConfig {
 		ServiceFactory.init();
 
 	}
+
 //
-//    public static void main(String[] args) {
-//        JFinal.start("src/main/webapp", 10000, "/", 5);
-//    }
+//	public static void main(String[] args) {
+//		JFinal.start("src/main/webapp", 10000, "/", 5);
+//	}
 
 	@Override
 	public void configEngine(Engine engine) {

+ 17 - 10
PacsOnline_Wechat_Patient/src/main/java/com/zskk/controller/WebBridgeController.java

@@ -1,16 +1,23 @@
 package com.zskk.controller;
 
-import com.jfinal.core.Controller;
+import com.jfinal.weixin.sdk.api.ApiConfigKit;
 import com.jfinal.weixin.sdk.api.SnsAccessToken;
+import com.jfinal.weixin.sdk.jfinal.ApiController;
 import com.zskk.model.User;
 import com.zskk.service.ServiceFactory;
 import com.zskk.service.UserService;
 import com.zskk.service.WeixinService;
 
-public class WebBridgeController extends Controller {
+public class WebBridgeController extends ApiController {
 
 	private static String WEB_BASR_URL = "http://wechat.client.pacsonline.cn/#";
 	
+	public void testappid() {
+		String string = ApiConfigKit.getApiConfig().getAppId();
+		System.out.println(string);
+		renderText(string);
+	}
+	
 	public void addBinding() {
 		this.process(WEB_BASR_URL+"/bind");
 	}
@@ -25,19 +32,19 @@ public class WebBridgeController extends Controller {
 	
 	private void process(String toUrl) {
 		try {
-			Object sessionObj = this.getRequest().getSession().getAttribute("pwpSessionObjtest2");
+			Object sessionObj = this.getRequest().getSession().getAttribute("pwpSessionObjtest8");
 			WeixinService wService = ServiceFactory.getService(WeixinService.class);
 			if (sessionObj == null) {
 				String code = this.getPara("code");
 				if (code == null) {
-//					String url = wService.getCodeUrl("wxee1c68f8944d357b", getRequest().getRequestURL().toString());
-					String url = wService.getCodeUrl("wx6a54bf0e98ecd2c7", getRequest().getRequestURL().toString());
+					String url = wService.getCodeUrl("wxee1c68f8944d357b", getRequest().getRequestURL().toString());
+//					String url = wService.getCodeUrl("wx6a54bf0e98ecd2c7", getRequest().getRequestURL().toString());
 
 					this.redirect(url);
 					return;
 				}
-//				SnsAccessToken snsAccessToken = wService.getWebAccessToken("wxee1c68f8944d357b", "1bc0128b6bbb3907c3bcf4a1704f2a1f", code);
-				SnsAccessToken snsAccessToken = wService.getWebAccessToken("wx6a54bf0e98ecd2c7", "f4b4e2b054d84157565ace97a43275e8", code);
+				SnsAccessToken snsAccessToken = wService.getWebAccessToken("wxee1c68f8944d357b", "1bc0128b6bbb3907c3bcf4a1704f2a1f", code);
+//				SnsAccessToken snsAccessToken = wService.getWebAccessToken("wx6a54bf0e98ecd2c7", "f4b4e2b054d84157565ace97a43275e8", code);
 
 				UserService uService = ServiceFactory.getService(UserService.class);
 				User user = User.dao.findFirst("select * from user where wx_openid=?",snsAccessToken.getOpenid());
@@ -46,9 +53,9 @@ public class WebBridgeController extends Controller {
 					user = uService.createWxUser(snsAccessToken.getOpenid());
 				}
 				if (user != null && user.getWxIcon().isEmpty()) {                     
-//					wService.getWebWeixinUserInfo(snsAccessToken.getAccessToken(), snsAccessToken.getOpenid());
+					wService.getWebWeixinUserInfo(snsAccessToken.getAccessToken(), snsAccessToken.getOpenid());
 				}
-				this.getRequest().getSession().setAttribute("pwpSessionObjtest2", user);
+				this.getRequest().getSession().setAttribute("pwpSessionObjtest8", user);
 				String uidStr = toUrl.contains("?") ? "&openid=" : "?openid=";
 				this.redirect(toUrl + uidStr + snsAccessToken.getOpenid());
 			} else {
@@ -66,7 +73,7 @@ public class WebBridgeController extends Controller {
 
 				}
 //				
-				this.getRequest().getSession().setAttribute("pwpSessionObjtest2", users2);
+				this.getRequest().getSession().setAttribute("pwpSessionObjtest8", users2);
 //
 				this.redirect(toUrl + uidStr + userWechats.getWxOpenid());
 

+ 4 - 2
PacsOnline_Wechat_Patient/src/main/java/com/zskk/controller/WeixinApiController.java

@@ -53,7 +53,7 @@ public class WeixinApiController extends ApiController {
                 "    \"button\": [\n" +
                 "        {\n" +
                 "            \"name\": \"扫一扫\",\n" +
-                "            \"key\": \"rselfmenu_0_0\",\n" +
+                "            \"key\": \"rselfmenu_0_1\",\n" +
                 "            \"type\": \"scancode_waitmsg\"\n" +
                 "        },\n" +
                 "        {\n" +
@@ -141,7 +141,9 @@ public class WeixinApiController extends ApiController {
      */
     public void getQrcode()
     {
-        String str = "{\"expire_seconds\": 604800, \"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": 123}}}";
+        String reportId = getPara("reportId");
+
+        String str = "{\"expire_seconds\": 2592000, \"action_name\": \"QR_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": \"ExamQR_" + reportId + "\"}}}";
         ApiResult apiResult = QrcodeApi.create(str);
         renderText(apiResult.getJson());
 

+ 39 - 1
PacsOnline_Wechat_Patient/src/main/java/com/zskk/controller/WeixinMsgController.java

@@ -1,17 +1,27 @@
 /**
- * Copyright (c) 2011-2014, James Zhan 詹波 (jfinal@126.com).
+ * Copyright (c) 2017-2019, lt 北京中世康恺科技有限公司 (www.pacsonline.cn).
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  */
 
 package com.zskk.controller;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import com.jfinal.weixin.sdk.api.CustomServiceApi;
+import com.jfinal.weixin.sdk.api.CustomServiceApi.Articles;
 import com.jfinal.weixin.sdk.jfinal.MsgControllerAdapter;
 import com.jfinal.weixin.sdk.msg.in.*;
 import com.jfinal.weixin.sdk.msg.in.event.*;
 import com.jfinal.weixin.sdk.msg.in.speech_recognition.InSpeechRecognitionResults;
 import com.jfinal.weixin.sdk.msg.out.OutCustomMsg;
 import com.jfinal.weixin.sdk.msg.out.OutTextMsg;
+import com.zskk.model.Exams;
+import com.zskk.model.User;
+import com.zskk.model.UserBind;
+import com.zskk.service.ServiceFactory;
+import com.zskk.service.UserService;
 
 /**
  * 将此 DemoController 在YourJFinalConfig 中注册路由,
@@ -109,6 +119,34 @@ public class WeixinMsgController extends MsgControllerAdapter {
         if (InQrCodeEvent.EVENT_INQRCODE_SCAN.equals(inQrCodeEvent.getEvent()))
         {
             log.debug("扫码已关注:" + inQrCodeEvent.getFromUserName());
+            String rid = inQrCodeEvent.getEventKey();
+			String[] arr = rid.split("_");
+			User userWechats = User.dao.findFirst("select * from user where wx_openid = ?",inQrCodeEvent.getFromUserName());
+			
+			UserService uService = ServiceFactory.getService(UserService.class);
+
+			if (userWechats == null) {
+				userWechats = uService.createWxUser(inQrCodeEvent.getFromUserName());
+			}
+			
+			Exams exams = Exams.dao.findById(arr[1]);
+
+			UserBind userBind = UserBind.dao.findFirst("select * from user_bind where user_id=? and exam_id=?",userWechats.getId(),exams.getId());
+			
+			if (userBind == null) {
+				uService.bindUserReport(userWechats.getId(), exams);
+			}
+			
+			String toUrlString = String.format("http://wechat.client.pacsonline.cn/#/reportInfo/report?openid=%s&exam_id=%s&study_id=%s",inQrCodeEvent.getFromUserName(),exams.getId(),exams.getStudyId());
+			List<Articles> list = new ArrayList<Articles>();
+			Articles articles1 = new Articles();
+			articles1.setTitle("点击查看本次影像和报告");
+			articles1.setDescription("欢迎使用中世康恺PacsOnline!\n点击进入查看详情,您可以分享给家属或医生,日后还可以在“我的报告”中查看本次影像和报告");
+			articles1.setUrl(toUrlString);
+			articles1.setPicurl("http://work.pacsonline.cn/static/img/banner.e8ee043.png");
+			list.add(articles1);
+			CustomServiceApi.sendNews(inQrCodeEvent.getFromUserName(), list);
+			renderNull();
         }
     }
 

+ 8 - 0
PacsOnline_Wechat_Patient/src/main/java/com/zskk/model/base/BaseInstitution.java

@@ -137,4 +137,12 @@ public abstract class BaseInstitution<M extends BaseInstitution<M>> extends Mode
 		return get("not_urgent_time");
 	}
 
+	public void setWxSource(java.lang.String wxSource) {
+		set("wx_source", wxSource);
+	}
+	
+	public java.lang.String getWxSource() {
+		return getStr("wx_source");
+	}
+
 }

+ 27 - 8
PacsOnline_Wechat_Patient/src/main/java/com/zskk/service/UserService.java

@@ -3,7 +3,9 @@ package com.zskk.service;
 import java.util.Date;
 import java.util.UUID;
 import com.jfinal.kit.PropKit;
+import com.zskk.model.Exams;
 import com.zskk.model.User;
+import com.zskk.model.UserBind;
 
 import okhttp3.OkHttpClient;
 import okhttp3.Request;
@@ -22,14 +24,31 @@ public class UserService {
 	 * @param openid
 	 */
 	public User createWxUser(String openid) {
-		User userWechats = new User();
-		userWechats.setId(creatId());
-		userWechats.setWxOpenid(openid);
-		userWechats.setSource("测试微信");
-		userWechats.setSubscribeStatus(2);
-		userWechats.setCreateAt(new Date());
-		userWechats.save();
-		return userWechats;
+		User user = new User();
+		user.setId(creatId());
+		user.setWxOpenid(openid);
+		user.setSource("测试微信");
+		user.setWxIcon("");
+		user.setSubscribeStatus(2);
+		user.setCreateAt(new Date());
+		user.save();
+		return user;
+	}
+	
+	/**
+	 * 创建微信用户
+	 * @param openid
+	 */
+	public UserBind bindUserReport (String uid,Exams exam) {
+		UserBind userBind = new UserBind();
+		userBind.setUserId(uid);
+		userBind.setExamId(exam.getId());
+		userBind.setPatientId(exam.getPatientId());
+		userBind.setCreateAt(new Date());
+		userBind.setBindWay(1);
+		userBind.setStatus(1);
+		userBind.save();
+		return userBind;
 	}
 	/*
 	 * 获取用户信息

+ 0 - 2
PacsOnline_Wechat_Patient/src/main/java/com/zskk/service/WeixinService.java

@@ -2,8 +2,6 @@ package com.zskk.service;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
-
-import com.jfinal.kit.PropKit;
 import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
 import com.jfinal.plugin.druid.DruidPlugin;
 import com.jfinal.weixin.sdk.api.ApiResult;

+ 24 - 4
PacsOnline_Wechat_Patient/src/main/resources/config.properties

@@ -5,7 +5,27 @@ password = ZSKK@2017~!@#
 devMode  = true
 
 
-#Wechat
-appId    = wx6a54bf0e98ecd2c7
-appSecret= f4b4e2b054d84157565ace97a43275e8
-token    = zhongshikangkai2019
+#Wechat-ZhongShiKangKaiDianZiJiaoPianPingTai
+appId_zskk    = wx6a54bf0e98ecd2c7
+appSecret_zskk= f4b4e2b054d84157565ace97a43275e8
+token_zskk    = zhongshikangkai2019
+
+#Wechat-ZhongShiKangKaiDianZiJiaoPianPingTai
+#appId_zskk    = wx1f3dc2c37dce641b
+#appSecret_zskk= 013c469bbd9e892a693f3375fdf4537e
+#token_zskk    = zhongshikangkai2019
+
+#Wechat-HeiLongJiangShengDianZiJiaoPianPingTai
+appId_hlj    = wxdeb75f5d7e5a2300
+appSecret_hlj= eda53ed6dfa269705c3ccc786e5fb01
+token_hlj    = zhongshikangkai2017
+
+#Wechat-LiaoNingShengDianZiJiaoPianPingTai
+appId_ln    = wx2f0834870403c54e
+appSecret_ln= 8c680120506ede6e915d0a38d214b67f
+token_ln    = zhongshikangkai2017
+
+#Wechat-ceshi
+appId_cs    = wxee1c68f8944d357b
+appSecret_cs= 1bc0128b6bbb3907c3bcf4a1704f2a1f
+token_cs    = zhongshikangkai2019