Browse Source

客服系统

trick9191 7 years ago
parent
commit
5e1655b195
59 changed files with 7411 additions and 20 deletions
  1. 4 0
      patient-co-manage/wlyy-manage/pom.xml
  2. 537 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/controller/WeixinBaseController.java
  3. 324 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/controller/common/account/BookingController.java
  4. 128 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/DoctorTeamMember.java
  5. 321 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/PatientReservation.java
  6. 139 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/httpLog/HttpLog.java
  7. 53 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/httpLog/HttpLogDetail.java
  8. 98 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/organization/HospitalMapping.java
  9. 65 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/security/AccessToken.java
  10. 71 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/security/JsApiTicket.java
  11. 29 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/security/RSA.java
  12. 81 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/security/Token.java
  13. 92 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/wechat/WechatPushLog.java
  14. 70 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/wechat/WechatTag.java
  15. 107 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/wechat/WechatTagLog.java
  16. 66 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/wechat/WechatTemplate.java
  17. 25 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/wechat/WechatTemplateData.java
  18. 102 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/logs/BusinessLogs.java
  19. 70 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/DoctorTeamMemberDao.java
  20. 39 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/PatientReservationDao.java
  21. 9 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/SignFamilyDao.java
  22. 3 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/SystemDictDao.java
  23. 12 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/httplog/HttpLogDao.java
  24. 11 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/httplog/HttpLogDetailDao.java
  25. 34 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/organization/HospitalMappingDao.java
  26. 17 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/security/AccessTokenDao.java
  27. 17 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/security/JsapiTicketDao.java
  28. 14 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/security/RSADao.java
  29. 46 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/security/TokenDao.java
  30. 11 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/wechat/WechatPushLogDao.java
  31. 30 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/wechat/WechatTagDao.java
  32. 11 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/wechat/WechatTagLogDao.java
  33. 31 14
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/BaseService.java
  34. 88 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/common/AccessTokenService.java
  35. 45 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/common/ConsultService.java
  36. 45 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/common/PatientService.java
  37. 107 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/httplog/LogService.java
  38. 118 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/jw/GuahaoDoctor.java
  39. 1189 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/jw/GuahaoXMService.java
  40. 46 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/jw/IGuahaoService.java
  41. 454 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/jw/JwSmjkService.java
  42. 1 1
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/manager/account/UserService.java
  43. 20 1
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/manager/dict/SystemDictService.java
  44. 265 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/reservation/PatientReservationService.java
  45. 118 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/third/GuahaoDoctor.java
  46. 641 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/task/PushMsgTaskWlyy.java
  47. 21 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/CommonUtil.java
  48. 253 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/Constant.java
  49. 8 1
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/DateUtil.java
  50. 192 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/IdCardUtil.java
  51. 21 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/ImUtill.java
  52. 371 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/RSAUtils.java
  53. 248 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/SOAPUtil.java
  54. 63 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/SendPatientUtil.java
  55. 13 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/SystemConf.java
  56. 193 0
      patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/WeiXinOpenIdUtils.java
  57. 120 1
      patient-co-manage/wlyy-manage/src/main/resources/application.yml
  58. 104 0
      patient-co-manage/wlyy-manage/src/main/resources/system.properties
  59. 0 2
      patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/third/zysoft/BookingController.java

+ 4 - 0
patient-co-manage/wlyy-manage/pom.xml

@ -239,6 +239,10 @@
            <artifactId>spring-security-taglibs</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.yihu</groupId>
            <artifactId>jave-ffmpegjave</artifactId>
        </dependency>
    </dependencies>
    <build>

+ 537 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/controller/WeixinBaseController.java

@ -0,0 +1,537 @@
package com.yihu.wlyy.controller;
import com.yihu.wlyy.entity.security.AccessToken;
import com.yihu.wlyy.entity.security.JsApiTicket;
import com.yihu.wlyy.service.common.AccessTokenService;
import com.yihu.wlyy.service.common.PatientService;
import com.yihu.wlyy.util.CommonUtil;
import com.yihu.wlyy.util.HttpUtil;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.token.TokenService;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;
public class WeixinBaseController extends BaseController {
	@Autowired
	private AccessTokenService accessTokenService;
	@Value("${wechat.appId}")
	private String appId;
	@Value("${wechat.appSecret}")
	private String appSecret;
	@Value("${wechat.accId}")
	private String accId;
	/**
	 * 通过code获取判断openid
	 * 
	 * @param code
	 * @return
	 */
	public String getOpenidByCode(String code) {
		try {
			String token_url = "https://api.weixin.qq.com/sns/oauth2/access_token";
			String params = "appid=" + appId + "&secret=" +appSecret+ "&code=" + code + "&grant_type=authorization_code";
			String result = HttpUtil.sendGet(token_url, params);
			System.out.println("getOpenidByCode:"+result);
			JSONObject json = new JSONObject(result);
			if (json.has("openid")) {
				return json.get("openid").toString();
			} else {
				return null;
			}
		} catch (Exception e) {
			error(e);
		}
		return null;
	}
	/**
	 * 通过code获取判断openid
	 * 
	 * @param code
	 * @return
	 */
	public String getOpenid(String code) {
		try {
			String token_url = "https://api.weixin.qq.com/sns/oauth2/access_token";
			String params = "appid=" + appId + "&secret=" +appSecret + "&code=" + code + "&grant_type=authorization_code";
			String result = HttpUtil.sendGet(token_url, params);
			JSONObject json = new JSONObject(result);
			Map<Object, Object> map = new HashMap<Object, Object>();
			if (json.has("openid")) {
				String openid = json.get("openid").toString();
				map.put("openid", openid);
				return write(200, "获取成功", "data", map);
			} else {
				return error(Integer.parseInt(json.get("errcode").toString()), "操作失败:" + json.get("errmsg").toString());
			}
		} catch (Exception e) {
			error(e);
			return invalidUserException(e, -1, "操作失败!");
		}
	}
	/**
	 * 拼接地址?后的参数
	 * 
	 * @param data
	 * @param type
	 * @return
	 */
	public String getParamUrl(String data, int type) {
		try {
			JSONObject jsonData = new JSONObject(data);
			String id = jsonData.get("id").toString();
			String uid = jsonData.get("uid").toString();
			String name = jsonData.get("name").toString();
			String openid = jsonData.get("openid").toString();
			String photo = jsonData.get("photo").toString();
			String token = jsonData.get("token").toString();
			String paramUrl = "?type=" + type + "&id=" + id + "&uid=" + uid + "&name=" + name + "&openid=" + openid + "&photo=" + photo + "&token=" + token;
			return paramUrl;
		} catch (Exception e) {
			error(e);
			return "";
		}
	}
	/**
	 * 获取微信的access_token
	 * 
	 * @return
	 */
	public String getAccessToken() {
		try {
			Iterable<AccessToken> accessTokens = accessTokenService.findAccessToken();
			if (accessTokens != null) {
				for (AccessToken accessToken : accessTokens) {
					if ((System.currentTimeMillis() - accessToken.getAdd_timestamp()) < (accessToken.getExpires_in() * 1000)) {
						return accessToken.getAccess_token();
					} else {
						accessTokenService.delAccessToken(accessToken);
						break;
					}
				}
			}
			String token_url = "https://api.weixin.qq.com/cgi-bin/token";
			String params = "grant_type=client_credential&appid=" + appId + "&secret=" + appSecret;
			String result = HttpUtil.sendGet(token_url, params);
			JSONObject json = new JSONObject(result);
			if (json.has("access_token")) {
				String token = json.get("access_token").toString();
				String expires_in = json.get("expires_in").toString();
				AccessToken newaccessToken = new AccessToken();
				newaccessToken.setAccess_token(token);
				newaccessToken.setExpires_in(Long.parseLong(expires_in));
				newaccessToken.setAcc_id(accId);
				accessTokenService.addAccessToken(newaccessToken);
				return token;
			} else {
				return null;
			}
		} catch (Exception e) {
			error(e);
			return null;
		}
	}
	/**
	 * 获取微信的jsapi_ticket
	 * 
	 * @return
	 */
	public String getJsapi_ticketByToken() {
		try {
			Iterable<JsApiTicket> jsapiTickets = accessTokenService.findJsapiTicket();
			if (jsapiTickets != null) {
				for (JsApiTicket jsApiTicket : jsapiTickets) {
					if ((System.currentTimeMillis() - jsApiTicket.getAdd_timestamp()) < (jsApiTicket.getExpires_in() * 1000)) {
						return jsApiTicket.getJsapi_ticket();
					} else {
						accessTokenService.delJsapiTicket(jsApiTicket);
						break;
					}
				}
			}
			String token = getAccessToken();
			if (token != null) {
				String token_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket";
				String params = "access_token=" + token + "&type=jsapi";
				String result = HttpUtil.sendGet(token_url, params);
				JSONObject json = new JSONObject(result);
				if (json.has("ticket")) {
					String ticket = json.get("ticket").toString();
					String expires_in = json.get("expires_in").toString();
					JsApiTicket newJsApiTicket = new JsApiTicket();
					newJsApiTicket.setJsapi_ticket(ticket);
					newJsApiTicket.setExpires_in(Long.parseLong(expires_in));
					newJsApiTicket.setAcc_id(accId);
					accessTokenService.addJsapiTicket(newJsApiTicket);
					return ticket;
				} else {
					return null;
				}
			} else {
				return null;
			}
		} catch (Exception e) {
			error(e);
			return null;
		}
	}
	/**
	 * @description: SHA、SHA1加密 @parameter: str:待加密字符串 @return: 加密串
	 **/
	public String SHA1(String str) {
		try {
			MessageDigest digest = MessageDigest.getInstance("SHA-1"); // 如果是SHA加密只需要将"SHA-1"改成"SHA"即可
			digest.update(str.getBytes());
			byte messageDigest[] = digest.digest();
			// Create Hex String
			StringBuffer hexStr = new StringBuffer();
			// 字节数组转换为 十六进制 数
			for (int i = 0; i < messageDigest.length; i++) {
				String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
				if (shaHex.length() < 2) {
					hexStr.append(0);
				}
				hexStr.append(shaHex);
			}
			return hexStr.toString();
		} catch (Exception e) {
			error(e);
		}
		return null;
	}
	/**
	 * 获取微信服务器图片
	 * 
	 * @return
	 */
//	public String Images() {
//		String photos = "";
//		try {
//			String images = request.getParameter("mediaIds");
//			if (StringUtils.isEmpty(images)) {
//				return photos;
//			}
//			String[] mediaIds = images.split(",");
//			for (String mediaId : mediaIds) {
//				if (StringUtils.isEmpty(mediaId)) {
//					continue;
//				}
//				String temp = saveImageToDisk(mediaId);
//				if (StringUtils.isNotEmpty(temp)) {
//					if (photos.length() == 0) {
//						photos = temp;
//					} else {
//						photos += "," + temp;
//					}
//				}
//			}
//		} catch (Exception e) {
//			error(e);
//		}
//		return photos;
//	}
	/**
	 * 获取下载图片信息(jpg)
	 * 
	 * @param mediaId 文件的id
	 * @throws Exception
	 */
//	public String saveImageToDisk(String mediaId) throws Exception {
//		// 文件保存的临时路径
//		String tempPath = SystemConf.getInstance().getTempPath() + File.separator;
//		// 拼接年月日路径
//		String datePath = DateUtil.getStringDate("yyyy") + File.separator + DateUtil.getStringDate("MM") + File.separator + DateUtil.getStringDate("dd") + File.separator;
//		// 重命名文件
//		String newFileName = DateUtil.dateToStr(new Date(), DateUtil.YYYYMMDDHHMMSS) + "_" + new Random().nextInt(1000) + ".png";
//		// 保存路径
//		File uploadFile = new File(tempPath + datePath + newFileName);
//
//		InputStream inputStream = null;
//		FileOutputStream fileOutputStream = null;
//		try {
//			if (!uploadFile.getParentFile().exists()) {
//				uploadFile.getParentFile().mkdirs();
//			}
//			inputStream = getInputStream(mediaId);
//			byte[] data = new byte[1024];
//			int len = 0;
//			fileOutputStream = new FileOutputStream(uploadFile);
//			while ((len = inputStream.read(data)) != -1) {
//				fileOutputStream.write(data, 0, len);
//			}
//			// 生成缩略图
//			ImageCompress.compress(uploadFile.getAbsolutePath(), uploadFile.getAbsolutePath() + "_small", 300, 300);
//			// 返回保存路径
//			return datePath + newFileName;
//		} catch (IOException e) {
//			e.printStackTrace();
//		} finally {
//			if (inputStream != null) {
//				try {
//					inputStream.close();
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
//			if (fileOutputStream != null) {
//				try {
//					fileOutputStream.close();
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
//		}
//		return null;
//	}
//	public String saveImageToDiskNoImageCompress(String mediaId) throws Exception {
//		// 文件保存的临时路径
//		String tempPath = imagesPath+ File.separator;
//		// 拼接年月日路径
//		String datePath = DateUtil.getStringDate("yyyy") + File.separator + DateUtil.getStringDate("MM") + File.separator + DateUtil.getStringDate("dd") + File.separator;
//		// 重命名文件
//		String newFileName = DateUtil.dateToStr(new Date(), DateUtil.YYYYMMDDHHMMSS) + "_" + new Random().nextInt(1000) + ".png";
//		// 保存路径
//		File uploadFile = new File(tempPath + datePath + newFileName);
//
//		InputStream inputStream = null;
//		FileOutputStream fileOutputStream = null;
//		try {
//			if (!uploadFile.getParentFile().exists()) {
//				uploadFile.getParentFile().mkdirs();
//			}
//			inputStream = getInputStream(mediaId);//下载微信图片
//			byte[] data = new byte[1024];
//			int len = 0;
//			fileOutputStream = new FileOutputStream(uploadFile);
//			while ((len = inputStream.read(data)) != -1) {
//				fileOutputStream.write(data, 0, len);
//			}
//			return datePath + newFileName;
//		} catch (IOException e) {
//			e.printStackTrace();
//		} finally {
//			if (inputStream != null) {
//				try {
//					inputStream.close();
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
//			if (fileOutputStream != null) {
//				try {
//					fileOutputStream.close();
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
//		}
//		return null;
//	}
	/**
	 * 获取微信服务器图片
	 *
	 * @return
	 */
//	public String fetchWxImages() {
//		String photos = "";
//		try {
//			String images = request.getParameter("mediaIds");
//			if (StringUtils.isEmpty(images)) {
//				return photos;
//			}
//			String[] mediaIds = images.split(",");
//			for (String mediaId : mediaIds) {
//				if (StringUtils.isEmpty(mediaId)) {
//					continue;
//				}
//				String temp = saveImageToDisk(mediaId);
//				if (StringUtils.isNotEmpty(temp)) {
//					if (photos.length() == 0) {
//						photos = temp;
//					} else {
//						photos += "," + temp;
//					}
//				}
//			}
//		} catch (Exception e) {
//			error(e);
//		}
//		return photos;
//	}
	/**
	 * 获取微信服务器语音
	 * 
	 * @return
	 */
//	public String fetchWxVoices() {
//		String voiceIds = "";
//		try {
//			String voices = request.getParameter("voices");
//			if (StringUtils.isEmpty(voices)) {
//				return voices;
//			}
//			String[] mediaIds = voices.split(",");
//			for (String mediaId : mediaIds) {
//				if (StringUtils.isEmpty(mediaId)) {
//					continue;
//				}
//				String temp = saveVoiceToDisk(mediaId);
//				if (StringUtils.isNotEmpty(temp)) {
//					if (voiceIds.length() == 0) {
//						voiceIds = temp;
//					} else {
//						voiceIds += "," + temp;
//					}
//				}
//			}
//		} catch (Exception e) {
//			error(e);
//		}
//		return voiceIds;
//	}
	/**
	 * 获取下载语音信息(jpg)
	 * 
	 * @param mediaId 文件的id
	 * @throws Exception
	 */
//	public String saveVoiceToDisk(String mediaId) throws Exception {
//		// 文件保存的临时路径
//		String tempPath = SystemConf.getInstance().getTempPath() + File.separator;
//		// 拼接年月日路径
//		String datePath = DateUtil.getStringDate("yyyy") + File.separator + DateUtil.getStringDate("MM") + File.separator + DateUtil.getStringDate("dd") + File.separator;
//		// 重命名文件
//		String fileBase =  DateUtil.dateToStr(new Date(), DateUtil.YYYYMMDDHHMMSS) + "_" + new Random().nextInt(1000);
//		String newFileName = fileBase+ ".amr";
//		String mp3FileName  = fileBase + ".mp3";
//		// 保存路径
//		File uploadFile = new File(tempPath + datePath + newFileName);
//
//		InputStream inputStream = null;
//		FileOutputStream fileOutputStream = null;
//		try {
//			if (!uploadFile.getParentFile().exists()) {
//				uploadFile.getParentFile().mkdirs();
//			}
//			inputStream = getInputStream(mediaId);
//			byte[] data = new byte[1024];
//			int len = 0;
//			fileOutputStream = new FileOutputStream(uploadFile);
//			while ((len = inputStream.read(data)) != -1) {
//				fileOutputStream.write(data, 0, len);
//			}
//			String amrFilePath = tempPath+datePath+newFileName;
//			String Mp3FilePath = tempPath+datePath+mp3FileName;
//			CommonUtil.changeToMp3(amrFilePath,Mp3FilePath);
//			// 返回保存路径
//			return Mp3FilePath;
//		} catch (IOException e) {
//			e.printStackTrace();
//		} finally {
//			if (inputStream != null) {
//				try {
//					inputStream.close();
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
//			if (fileOutputStream != null) {
//				try {
//					fileOutputStream.close();
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//			}
//		}
//		return null;
//	}
	/**
	 * 下载多媒体文件(请注意,视频文件不支持下载,调用该接口需http协议)
	 *
	 * @return
	 */
//	public InputStream getInputStream(String mediaId) {
//		String accessToken = getAccessToken();
//		InputStream is = null;
//		String url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=" + accessToken + "&media_id=" + mediaId;
//		try {
//			URL urlGet = new URL(url);
//			HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
//			http.setRequestMethod("GET"); // 必须是get方式请求
//			http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//			http.setDoOutput(true);
//			http.setDoInput(true);
//			System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
//			System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
//			http.connect();
//			// 获取文件转化为byte流
//			is = http.getInputStream();
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return is;
//	}
	/**
	 * 获取Open
	 * @param code
	 * @return
	 * @throws Exception
     */
	public String getOpenId(String code) throws Exception {
		String token_url = "https://api.weixin.qq.com/sns/oauth2/access_token";
		String params = "appid=" + appId+ "&secret=" + appSecret + "&code=" + code + "&grant_type=authorization_code";
		String result = HttpUtil.sendGet(token_url, params);
		JSONObject json = new JSONObject(result);
		if (json.has("openid")) {
			return json.get("openid").toString();
		} else {
			return null;
		}
	}
	/**
	 * 获取subscribe
	 * @param openid
	 * @return
	 * @throws Exception
     */
	public String getIsSus(String openid) throws Exception{
		String userInfo_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + getAccessToken() + "&openid=" + openid + "&lang=zh_CN";
		String params = "";
		String result = HttpUtil.sendGet(userInfo_url, params);
		JSONObject json = new JSONObject(result);
		if (json.has("subscribe")) {
			return json.get("subscribe").toString();
		} else {
			return null;
		}
	}
	/**
	 * 获取Subscribe
	 * @param code
	 * @return
	 * @throws Exception
     */
	public String getSubscribeByCode(String code)throws Exception{
		return getIsSus(getOpenid(code));
	}
}

+ 324 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/controller/common/account/BookingController.java

@ -0,0 +1,324 @@
package com.yihu.wlyy.controller.common.account;
import com.yihu.wlyy.controller.BaseController;
import com.yihu.wlyy.controller.WeixinBaseController;
import com.yihu.wlyy.entity.Patient;
import com.yihu.wlyy.entity.PatientReservation;
import com.yihu.wlyy.entity.SMS;
import com.yihu.wlyy.logs.BusinessLogs;
import com.yihu.wlyy.repository.SMSDao;
import com.yihu.wlyy.service.SMSService;
import com.yihu.wlyy.service.common.PatientService;
import com.yihu.wlyy.service.jw.GuahaoXMService;
import com.yihu.wlyy.service.jw.JwSmjkService;
import com.yihu.wlyy.service.reservation.PatientReservationService;
import com.yihu.wlyy.task.PushMsgTaskWlyy;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.NetworkUtil;
import com.yihu.wlyy.util.WeiXinOpenIdUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * Created by Trick on 2017/12/5.
 */
@Controller
@RequestMapping(value = "/third/guahao",method = {RequestMethod.GET,RequestMethod.POST})
@Api(description = "预约挂号接口")
public class BookingController extends WeixinBaseController {
    @Autowired
    private JwSmjkService jwSmjkService;
    @Autowired
    private PatientReservationService patientReservationService;
    @Autowired
    private SMSDao smsDao;
    @Autowired
    private PatientService patientService;
    @Autowired
    private GuahaoXMService guahaoXM;
    @Autowired
    private SMSService smsService;
    @Autowired
    private PushMsgTaskWlyy pushMsgTaskWlyy;
    @Autowired
    private WeiXinOpenIdUtils weiXinOpenIdUtils;
    @RequestMapping(value = "GetOrgList", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation("获取机构列表")
    public String GetOrgList(@ApiParam(name = "city", value = "城市编码", defaultValue = "350200")
                             @RequestParam(value = "city", required = false) String city,
                             @ApiParam(name = "filter", value = "过滤条件", defaultValue = "")
                             @RequestParam(value = "filter", required = false) String filter,
                             @ApiParam(name = "type", value = "类型", defaultValue = "1")
                             @RequestParam(value = "type", required = false) String type,
                             @ApiParam(name = "pageIndex", value = "第几页", defaultValue = "")
                             @RequestParam(value = "pageIndex", required = false) Integer pageIndex,
                             @ApiParam(name = "pageSize", value = "每页记录数", defaultValue = "")
                             @RequestParam(value = "pageSize", required = false) Integer pageSize) {
        try {
            String re = jwSmjkService.GetOrgList(type);
            return re;
//            return write(200, "获取机构列表成功!", "data", re);
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());
        }
    }
    @RequestMapping(value = "GetDoctorReservationList", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation("获取医生代预约信息列表接口-医生端")
    public String GetDoctorReservation(@ApiParam(name = "pageIndex", value = "第几页", defaultValue = "1")
                                       @RequestParam(value = "pageIndex", required = false) Integer pageIndex,
                                       @ApiParam(name = "pageSize", value = "每页记录数", defaultValue = "10")
                                       @RequestParam(value = "pageSize", required = false) Integer pageSize,
                                       @ApiParam(name = "doctor", value = "医生编号", defaultValue = "shiliuD20160926005")
                                       @RequestParam(value = "doctor", required = false) String doctor) {
        try {
            List<Map<String,String>> list = patientReservationService.getReservationByDoctor(doctor, pageIndex, pageSize);
            return write(200, "获取患者预约信息列表成功!", "data", list);
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());
        }
    }
    @RequestMapping(value = "GetDoctorInfo", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation("根据医生编码获取医生详细信息")
    public String GetDoctorInfo(@ApiParam(name = "city", value = "城市编码", defaultValue = "350200")
                                @RequestParam(value = "city", required = false) String city,
                                @ApiParam(name = "doctorId", value = "医生id", defaultValue = "07101")
                                @RequestParam(value = "doctorId", required = true) String doctorId,
                                @ApiParam(name = "hospitalId", value = "医院id", defaultValue = "350211A1001")
                                @RequestParam(value = "hospitalId", required = true) String hospitalId,
                                @ApiParam(name = "hosDeptId", value = "科室id", defaultValue = "1040610")
                                @RequestParam(value = "hosDeptId", required = true) String hosDeptId) {
        try {
            //---2017.07.31----黄文杰---获取医生详细信息时从10天号源的医生
            JSONObject result  = jwSmjkService.GetDoctorInfoTen(hospitalId,hosDeptId,doctorId);
            return write(200, "获取医生详细信息成功!","data",result);
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());
        }
    }
    @RequestMapping(value = "GetOrgDepList", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation("获取科室接口")
    public String GetOrgDepList(@ApiParam(name = "city", value = "城市编码", defaultValue = "350200")
                                @RequestParam(value = "city", required = false) String city,
                                @ApiParam(name = "hospitalId", value = "医院ID", defaultValue = "350211A1001")
                                @RequestParam(value = "hospitalId", required = true) String hospitalId,
                                @ApiParam(name = "filter", value = "过滤条件", defaultValue = "")
                                @RequestParam(value = "filter", required = false) String filter,
                                @ApiParam(name = "pageIndex", value = "第几页", defaultValue = "")
                                @RequestParam(value = "pageIndex", required = false) Integer pageIndex,
                                @ApiParam(name = "pageSize", value = "每页记录数", defaultValue = "")
                                @RequestParam(value = "pageSize", required = false) Integer pageSize) {
        try {
//            List<Map<String, String>> list = getService(city).GetOrgDepList(hospitalId, filter, pageIndex, pageSize);
            String list = jwSmjkService.GetOrgDepList(hospitalId);
            return list;
//            return write(200, "获取科室列表成功!", "data", list);
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());
        }
    }
    @RequestMapping(value = "GetPatientReservationList", method = {RequestMethod.POST,RequestMethod.GET})
    @ResponseBody
    @ApiOperation("获取患者预约信息列表接口-医生端")
    public String GetPatientReservation(@ApiParam(name = "pageIndex", value = "第几页", defaultValue = "1")
                                        @RequestParam(value = "pageIndex", required = false) Integer pageIndex,
                                        @ApiParam(name = "pageSize", value = "每页记录数", defaultValue = "10")
                                        @RequestParam(value = "pageSize", required = false) Integer pageSize,
                                        @ApiParam(name = "patient", value = "患者编号", defaultValue = "4afdbce6194e412fbc770eb4dfbe7b00")
                                        @RequestParam(value = "patient", required = false) String patient,
                                        @ApiParam(name = "teamCode", value = "行政团队")
                                        @RequestParam(value = "teamCode", required = false) Long teamCode) {
        try {
            JSONArray list = patientReservationService.getReservationByPatient(patient, teamCode, pageIndex, pageSize);
            return write(200, "获取患者预约信息列表成功!", "data", list);
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());
        }
    }
//    @RequestMapping(value = "CreateOrderByDoctor", method = RequestMethod.POST)
//    @ResponseBody
//    @ApiOperation("(内网)转诊预约挂号")
//    public String CreateOrderByDoctor(@ApiParam(name = "hospitalId", value = "医院ID", defaultValue = "350211A1001")
//                                      @RequestParam(value = "hospitalId", required = true) String hospitalId,
//                                      @ApiParam(name = "hospitalName", value = "医院名称", defaultValue = "厦门大学附属第一医院")
//                                      @RequestParam(value = "hospitalName", required = true) String hospitalName,
//                                      @ApiParam(name = "hosDeptId", value = "科室ID", defaultValue = "1011610")
//                                      @RequestParam(value = "hosDeptId", required = true) String hosDeptId,
//                                      @ApiParam(name = "hosDeptName", value = "医院科室名称", defaultValue = "内分泌糖尿病科门诊")
//                                      @RequestParam(value = "hosDeptName", required = true) String hosDeptName,
//                                      @ApiParam(name = "doctorId", value = "医生ID", defaultValue = "50108")
//                                      @RequestParam(value = "doctorId", required = true) String doctorId,
//                                      @ApiParam(name = "doctorName", value = "医生姓名", defaultValue = "杨叔禹")
//                                      @RequestParam(value = "doctorName", required = true) String doctorName,
//                                      @ApiParam(name = "arrangeDate", value = "排班信息", defaultValue = "{\"sectionType\":\"p\",\"startTime\":\"2016-12-29 14:00:00\",\"endTime\":\"2016-12-29 14:08:00\"}")
//                                      @RequestParam(value = "arrangeDate", required = true) String arrangeDate,
//                                      @ApiParam(name = "patient", value = "患者代码", defaultValue = "01954b2ebbb24a40a05da9d2f5c94795")
//                                      @RequestParam(value = "patient", required = true) String patient,
//                                      @ApiParam(name = "patientName", value = "患者姓名", defaultValue = "张锦川")
//                                      @RequestParam(value = "patientName", required = true) String patientName,
//                                      @ApiParam(name = "cardNo", value = "身份证号码", defaultValue = "35052419880511553X")
//                                      @RequestParam(value = "cardNo", required = true) String cardNo,
//                                      @ApiParam(name = "clinicCard", value = "市民卡号", defaultValue = "A0601003595X")
//                                      @RequestParam(value = "clinicCard", required = true) String clinicCard,
//                                      @ApiParam(name = "patientPhone", value = "患者手机", defaultValue = "13559207522")
//                                      @RequestParam(value = "patientPhone", required = true) String patientPhone,
//                                      @ApiParam(name = "dcode", value = "代预约医生编号", defaultValue = "test00000000005")
//                                      @RequestParam(value = "dcode", required = true) String dcode,
//                                      @ApiParam(name = "dname", value = "代预约医生名称", defaultValue = "组2全科医生")
//                                      @RequestParam(value = "dname", required = true) String dname) {
//        try {
//            String orderCode = guahaoXM.CreateOrderByDoctor(hospitalId, hospitalName, hosDeptId, hosDeptName, doctorId, doctorName, arrangeDate, patient, patientName, cardNo, clinicCard, patientPhone, dname, dcode);
//            //获取预约信息查询是否挂号成功
//            PatientReservation obj = patientReservationService.findByCode(orderCode);
//            if (obj != null) {
//                String des = "";
//                try {
//                    String msg = obj.getDname() + "医生已成功为您预约:" + DateUtil.dateToChinese(obj.getStartTime()) + "," + obj.getOrgName() +
//                            obj.getDeptName() + obj.getDoctorName() + "医生的号源。您可直接前往医院就诊。";
//
//                    //发送短信消息,调用总部发送信息的接口
//                    JSONObject resultJson = smsService.sendMsg(patientPhone,msg);
//                    if (resultJson != null && resultJson.getInt("result") != 0) {
//                        des = "短信提醒失败!(原因:"+resultJson.getString("description")+")";
//                    }
//                    //保存短信记录
//                    SMS sms = new SMS();
//                    sms.setContent(msg+des);
//                    sms.setCaptcha(null);
//                    Date date = new Date();
//                    sms.setDeadline(date);
//                    sms.setCzrq(date);
//                    sms.setMobile(patientPhone);
//                    sms.setIp(NetworkUtil.getIpAddress(request));
//                    sms.setType(6);
//                    sms.setStatus(1);
//                    smsDao.save(sms);
//
//                    // 推送消息给微信端
//                    Patient p = patientService.findByCode(patient);
//                    if (StringUtils.isNotEmpty(p.getOpenid())) {
//
//                        JSONObject json = new JSONObject();
//                        json.put("first", "");
//                        json.put("toUser", patient);
//                        json.put("represented",patient);//被代理人
//                        json.put("id", orderCode);
//                        json.put("date", obj.getStartTime());
//                        json.put("orgName", obj.getOrgName());
//                        json.put("orgCode", obj.getOrgCode());
//                        json.put("doctorName", obj.getDeptName());
//                        json.put("deptName", obj.getDeptName());
//                        json.put("remark", patientName + ",您好!\n" + msg);
//
//                        //判断是否判定openId,有没有发则查找家人发送
//                        if(StringUtils.isNotBlank(p.getOpenid())){
//                            // 添加到发送队列
//                            pushMsgTaskWlyy.putWxMsg(getAccessToken(), 6, p.getOpenid(), patientName, json);
//                        }
////
//                        //发送代理人
//                        JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(p.getCode(),p.getOpenid());
//                        if(jsonArray!=null&&jsonArray.length()>0){
//                            for (int i = 0;i<jsonArray.length();i++){
//                                JSONObject j  = jsonArray.getJSONObject(i);
//                                Patient member = (Patient) j.get("member");
//                                JSONObject data = json;
//                                data.remove("toUser");
//                                data.put("toUser",member.getCode());
//                                //String first = (String) json.get("first");
//                                data.remove("first");
//                                data.put("first",weiXinOpenIdUtils.getTitleMes(p,j.getInt("relation"),p.getName()));
//                                pushMsgTaskWlyy.putWxMsg(getAccessToken(), 6, member.getOpenid(), p.getName(), data);
//                            }
//                        }
//
//
//                    }
//                    else{
//                        des +=" 微信提醒失败,患者无绑定微信!";
//                    }
//                    BusinessLogs.info(BusinessLogs.BusinessType.appointment, getUID(), p.getCode(), new JSONObject(obj));
//                }
//                catch (Exception ex)
//                {
//                    ex.printStackTrace();
//                }
//                return write(200, "创建挂号单成功!"+des,"data",obj.getId());
//            } else {
//                return error(-1, "创建挂号单失败!");
//            }
//        } catch (Exception e) {
//            error(e);
//            return error(-1, e.getMessage());
//        }
//    }
    @RequestMapping(value = "CancelOrder", method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation("取消挂号单")
    public String CancelOrder(@ApiParam(name = "orderId", value = "订单id")
                              @RequestParam(value = "orderId", required = true) Long orderId,
                              @ApiParam(name = "code", value = "订单code")
                              @RequestParam(value = "code", required = false) String code,
                              @ApiParam(name = "ssc", value = "社保卡号")
                              @RequestParam(value = "ssc", required = false) String ssc,
                              @ApiParam(name = "doctor", value = "医生编码")
                              @RequestParam(value = "doctor", required = false)String doctor) {
        try {
            //获取订单信息
            PatientReservation obj = patientReservationService.findById(orderId);
            boolean re = false;
            if(obj==null){
                re = jwSmjkService.CancelOrder(code,ssc);
            }else {
                re = jwSmjkService.CancelOrder(obj.getCode(),obj.getSsc());
            }
            if (re) {
                //更新状态
                if(obj!=null){
                    patientReservationService.doctorCancelOrder(orderId,doctor);//"6c0cfe5065e011e69f7c005056850d66"
                }
                return write(200, "取消挂号单成功!");
            } else {
                return error(-1, "取消挂号单失败!");
            }
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());
        }
    }
}

+ 128 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/DoctorTeamMember.java

@ -0,0 +1,128 @@
package com.yihu.wlyy.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.sql.Timestamp;
import java.util.Date;
/**
 * 医生签约团队成员。
 *
 * @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "wlyy_doctor_team_member")
public class DoctorTeamMember extends IdEntity {
    // Fields
    private String team;
    private String memberCode;
    private String code;
    private String name;
    private Integer type;//医生类型:1专科医生,2全科医生,3健康管理师,4临时专科 5.患者
    private Date czrq;
    private String del;//是否作废,1正常,0作废
    private String signType;//签约类型(1表示三师签约,2表示家庭签约)
    /**
     * default constructor
     */
    public DoctorTeamMember() {
    }
    /**
     * minimal constructor
     */
    public DoctorTeamMember(String team, String doctor, Integer type,
                            Timestamp czrq) {
        this.team = team;
        this.type = type;
        this.czrq = czrq;
    }
    /**
     * full constructor
     */
    public DoctorTeamMember(String team, String doctor, String name,
                            Integer type, Timestamp czrq, String del) {
        this.team = team;
        this.name = name;
        this.type = type;
        this.czrq = czrq;
        this.del = del;
    }
    @Column(name = "team", nullable = false, length = 50)
    public String getTeam() {
        return this.team;
    }
    public void setTeam(String team) {
        this.team = team;
    }
    @Column(name = "member_code", nullable = false, length = 50)
    public String getMemberCode() {
        return memberCode;
    }
    public void setMemberCode(String memberCode) {
        this.memberCode = memberCode;
    }
    @Column(name = "name", length = 50)
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "type", nullable = false)
    public Integer getType() {
        return this.type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    @Column(name = "czrq", nullable = false, length = 0)
    public Date getCzrq() {
        return this.czrq;
    }
    public void setCzrq(Date czrq) {
        this.czrq = czrq;
    }
    @Column(name = "del", length = 1)
    public String getDel() {
        return this.del;
    }
    public void setDel(String del) {
        this.del = del;
    }
    @Column(name = "code")
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Column(name = "sign_type")
    public String getSignType() {
        return signType;
    }
    public void setSignType(String signType) {
        this.signType = signType;
    }
}

+ 321 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/PatientReservation.java

@ -0,0 +1,321 @@
package com.yihu.wlyy.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * 预约挂号记录表
 * @author George
 *
 */
@Entity
@Table(name = "wlyy_patient_reservation")
public class PatientReservation extends IdEntity {
	/**
	 * 
	 */
	private static final long serialVersionUID = 8452660447546825044L;
	// 预约号/预约流水号
	private String code;
	// 医生标识(医生帮患者预约时才会有值)
	private String doctor;
	// 医生姓名(医生帮患者预约时才会有值)
	private String dname;
	// 患者标识
	private String patient;
	// 患者身份证
	private String idcard;
	// 患者姓名
	private String name;
	// 患者手机号
	private String phone;
	// 患者社保卡号
	private String ssc;
	// 预约时间段:AM (上午)或者PM (下午)
	private String sectionType;
	// 一次预约段的开始时间
	private Date startTime;
	// 一次预约段的结束时间
	private Date endTime;
	// 医生所在医疗机构编码
	private String orgCode;
	// 医疗机构名称
	private String orgName;
	// 科室编码
	private String deptCode;
	// 科室名称
	private String deptName;
	// 专家ID/编码
	private String doctorCode;
	// 专家姓名
	private String doctorName;
	// 专家头像
	private String doctorPhoto;
	// 专家职称
	private String doctorJob;
	// 状态:1预约成功,0预约取消
	private Integer status;
	//取消预约者(状态为预约取消时才有值)
	private String canceler;
	//取消预约者姓名(状态为预约取消时才有值)
	private String cancelerName;
	//取消预约者角色(状态为预约取消时才有值)1专科医生,2全科医生,3健康管理师,4临时专科 5.患者 (与医生服务团队角色一直)
	private Integer cancelerType;
	//取消时间(状态为预约取消时才有值)
	private String cancelerTime;
	// 预约时间
	private Date czrq;
	// 0 健康之路 1智业
	private String type;
	// 签约类型 1三师 2家庭
	private Integer signType;
	// 行政团队
	private Long adminTeamCode;
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public String getDoctor() {
		return doctor;
	}
	public void setDoctor(String doctor) {
		this.doctor = doctor;
	}
	public String getDname() {
		return dname;
	}
	public void setDname(String dname) {
		this.dname = dname;
	}
	public String getPatient() {
		return patient;
	}
	public void setPatient(String patient) {
		this.patient = patient;
	}
	public String getIdcard() {
		return idcard;
	}
	public void setIdcard(String idcard) {
		this.idcard = idcard;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getSsc() {
		return ssc;
	}
	public void setSsc(String ssc) {
		this.ssc = ssc;
	}
	@Column(name = "section_type")
	public String getSectionType() {
		return sectionType;
	}
	public void setSectionType(String sectionType) {
		this.sectionType = sectionType;
	}
	@Column(name = "start_time")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
	public Date getStartTime() {
		return startTime;
	}
	public void setStartTime(Date startTime) {
		this.startTime = startTime;
	}
	@Column(name = "end_time")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
	public Date getEndTime() {
		return endTime;
	}
	public void setEndTime(Date endTime) {
		this.endTime = endTime;
	}
	@Column(name = "org_code")
	public String getOrgCode() {
		return orgCode;
	}
	public void setOrgCode(String orgCode) {
		this.orgCode = orgCode;
	}
	@Column(name = "org_name")
	public String getOrgName() {
		return orgName;
	}
	public void setOrgName(String orgName) {
		this.orgName = orgName;
	}
	@Column(name = "dept_code")
	public String getDeptCode() {
		return deptCode;
	}
	public void setDeptCode(String deptCode) {
		this.deptCode = deptCode;
	}
	@Column(name = "dept_name")
	public String getDeptName() {
		return deptName;
	}
	public void setDeptName(String deptName) {
		this.deptName = deptName;
	}
	@Column(name = "doctor_code")
	public String getDoctorCode() {
		return doctorCode;
	}
	public void setDoctorCode(String doctorCode) {
		this.doctorCode = doctorCode;
	}
	@Column(name = "doctor_name")
	public String getDoctorName() {
		return doctorName;
	}
	public void setDoctorName(String doctorName) {
		this.doctorName = doctorName;
	}
	@Column(name = "doctor_photo")
	public String getDoctorPhoto() {
		return doctorPhoto;
	}
	public void setDoctorPhoto(String doctorPhoto) {
		this.doctorPhoto = doctorPhoto;
	}
	@Column(name = "doctor_job")
	public String getDoctorJob() {
		return doctorJob;
	}
	public void setDoctorJob(String doctorJob) {
		this.doctorJob = doctorJob;
	}
	public Integer getStatus() {
		return status;
	}
	public void setStatus(Integer status) {
		this.status = status;
	}
	public String getCanceler() {
		return canceler;
	}
	public void setCanceler(String canceler) {
		this.canceler = canceler;
	}
	@Column(name = "canceler_name")
	public String getCancelerName() {
		return cancelerName;
	}
	public void setCancelerName(String cancelerName) {
		this.cancelerName = cancelerName;
	}
	@Column(name = "canceler_type")
	public Integer getCancelerType() {
		return cancelerType;
	}
	public void setCancelerType(Integer cancelerType) {
		this.cancelerType = cancelerType;
	}
	@Column(name = "canceler_time")
	public String getCancelerTime() {
		return cancelerTime;
	}
	public void setCancelerTime(String cancelerTime) {
		this.cancelerTime = cancelerTime;
	}
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
	public Date getCzrq() {
		return czrq;
	}
	public void setCzrq(Date czrq) {
		this.czrq = czrq;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public Integer getSignType() {
		return signType;
	}
	public void setSignType(Integer signType) {
		this.signType = signType;
	}
	public Long getAdminTeamCode() {
		return adminTeamCode;
	}
	public void setAdminTeamCode(Long adminTeamCode) {
		this.adminTeamCode = adminTeamCode;
	}
}

+ 139 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/httpLog/HttpLog.java

@ -0,0 +1,139 @@
package com.yihu.wlyy.entity.httpLog;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/** http交互日志
 * Created by yeshijie on 2017/1/12.
 */
@Entity
@Table(name = "wlyy_http_log")
public class HttpLog extends IdEntity{
    // 接口类型 0对外接口 1基卫接口 2健康网接口
    private String type;
    // 业务内容
    private String content;
    // 调用接口
    private String api;
    // 调用方式
    private String method;
    // 调用参数
    private String params;
    // 调用头部信息
    private String header;
    // 返回结果
    private String response;
    // 状态 0失败 1成功 2已重试
    private String status;
    // 重试次数
    private Integer retryTimes;
    // 创建时间
    private Date createTime;
    //异常信息
    private String error;
    @Column(name = "type")
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    @Column(name = "content")
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    @Column(name = "api")
    public String getApi() {
        return api;
    }
    public void setApi(String api) {
        this.api = api;
    }
    @Column(name = "method")
    public String getMethod() {
        return method;
    }
    public void setMethod(String method) {
        this.method = method;
    }
    @Column(name = "params")
    public String getParams() {
        return params;
    }
    public void setParams(String params) {
        this.params = params;
    }
    @Column(name = "header")
    public String getHeader() {
        return header;
    }
    public void setHeader(String header) {
        this.header = header;
    }
    @Column(name = "response")
    public String getResponse() {
        return response;
    }
    public void setResponse(String response) {
        this.response = response;
    }
    @Column(name = "status")
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    @Column(name = "retry_times")
    public Integer getRetryTimes() {
        return retryTimes;
    }
    public void setRetryTimes(Integer retryTimes) {
        this.retryTimes = retryTimes;
    }
    @Column(name = "create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    @Column(name = "error")
    public String getError() {
        return error;
    }
    public void setError(String error) {
        this.error = error;
    }
}

+ 53 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/httpLog/HttpLogDetail.java

@ -0,0 +1,53 @@
package com.yihu.wlyy.entity.httpLog;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by yeshijie on 2017/9/26.
 */
@Entity
@Table(name = "wlyy_http_log_detail")
public class HttpLogDetail extends IdEntity {
    private Long code;//关联code和ZyPushLog表的id
    private String response;//'返回结果',
    private String error;//'报错信息',
    private Date createTime;// '创建时间',
    public Long getCode() {
        return code;
    }
    public void setCode(Long code) {
        this.code = code;
    }
    public String getResponse() {
        return response;
    }
    public void setResponse(String response) {
        this.response = response;
    }
    public String getError() {
        return error;
    }
    public void setError(String error) {
        this.error = error;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

+ 98 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/organization/HospitalMapping.java

@ -0,0 +1,98 @@
package com.yihu.wlyy.entity.organization;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * 医院映射表
 *
 * @author hzp
 */
@Entity
@Table(name = "wlyy_hospital_mapping")
public class HospitalMapping extends IdEntity {
    // 本地机构代码
    private String code;
    // 机构名称
    private String name;
    // 对接机构
    private String type;
    // 映射机构代码
    private String mappingCode;
    // 易联众appid
    private String appId;
    // 易联众app secret
    private String appSecret;
    //机构编码号(来自基卫)
    private String sbCode;
    // 基卫授权码
    private String licence;
    public String getSbCode() {
        return sbCode;
    }
    public void setSbCode(String sbCode) {
        this.sbCode = sbCode;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getMappingCode() {
        return mappingCode;
    }
    public void setMappingCode(String mappingCode) {
        this.mappingCode = mappingCode;
    }
    public String getAppId() {
        return appId;
    }
    public void setAppId(String appId) {
        this.appId = appId;
    }
    public String getAppSecret() {
        return appSecret;
    }
    public void setAppSecret(String appSecret) {
        this.appSecret = appSecret;
    }
    
    public String getLicence() {
        return licence;
    }
    
    public void setLicence(String licence) {
        this.licence = licence;
    }
}

+ 65 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/security/AccessToken.java

@ -0,0 +1,65 @@
package com.yihu.wlyy.entity.security;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
@Entity
@Table(name = "wx_access_token")
public class AccessToken extends IdEntity {
    private static final long serialVersionUID = -3297644428262254694L;
    private String access_token;
    private String acc_id;
    private Long add_timestamp;
    private Long expires_in;
    private Date czrq;
    public String getAcc_id() {
        return acc_id;
    }
    public void setAcc_id(String acc_id) {
        this.acc_id = acc_id;
    }
    public String getAccess_token() {
        return access_token;
    }
    public void setAccess_token(String access_token) {
        this.access_token = access_token;
    }
    public Long getAdd_timestamp() {
        return add_timestamp;
    }
    public void setAdd_timestamp(Long add_timestamp) {
        this.add_timestamp = add_timestamp;
    }
    public Long getExpires_in() {
        return expires_in;
    }
    public void setExpires_in(Long expires_in) {
        this.expires_in = expires_in;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getCzrq() {
        return czrq;
    }
    public void setCzrq(Date czrq) {
        this.czrq = czrq;
    }
}

+ 71 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/security/JsApiTicket.java

@ -0,0 +1,71 @@
package com.yihu.wlyy.entity.security;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * JavaScript API访问所需要的凭据
 */
@Entity
@Table(name = "wx_jsapi_ticket")
public class JsApiTicket extends IdEntity {
    private static final long serialVersionUID = -3297644428262254694L;
    private String jsapi_ticket;
    private String acc_id;;
    private Long add_timestamp;
    private Long expires_in;
    private Date czrq;
    public String getAcc_id() {
        return acc_id;
    }
    public void setAcc_id(String acc_id) {
        this.acc_id = acc_id;
    }
    public String getJsapi_ticket() {
        return jsapi_ticket;
    }
    public void setJsapi_ticket(String jsapi_ticket) {
        this.jsapi_ticket = jsapi_ticket;
    }
    public Long getAdd_timestamp() {
        return add_timestamp;
    }
    public void setAdd_timestamp(Long add_timestamp) {
        this.add_timestamp = add_timestamp;
    }
    public Long getExpires_in() {
        return expires_in;
    }
    public void setExpires_in(Long expires_in) {
        this.expires_in = expires_in;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getCzrq() {
        return czrq;
    }
    public void setCzrq(Date czrq) {
        this.czrq = czrq;
    }
}

+ 29 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/security/RSA.java

@ -0,0 +1,29 @@
package com.yihu.wlyy.entity.security;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Lob;
import javax.persistence.Table;
/**
 * 非对象算法加密信息
 * @author George
 *
 */
@Entity
@Table(name = "dm_rsa")
public class RSA extends IdEntity {
	private static final long serialVersionUID = 7832717679571844202L;
	
	private byte[] data;
	@Lob
	public byte[] getData() {
	    return data;
	}
	
	public void setData(byte[] data){
		this.data = data;
	}
}

+ 81 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/security/Token.java

@ -0,0 +1,81 @@
package com.yihu.wlyy.entity.security;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
@Entity
@Table(name = "wlyy_token")
public class Token extends IdEntity {
	private static final long serialVersionUID = -3297644428262254694L;
	private String user;
	private Integer platform;   // 1患者端,2医生端app,3微信公众号wechat,4医生端pc
	private Date timeout;
	private String imei;
	private String token;
	private Date czrq;
	private String del;
	public String getUser() {
		return user;
	}
	public void setUser(String user) {
		this.user = user;
	}
	public Integer getPlatform() {
		return platform;
	}
	public void setPlatform(Integer platform) {
		this.platform = platform;
	}
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
	public Date getTimeout() {
		return timeout;
	}
	public void setTimeout(Date timeout) {
		this.timeout = timeout;
	}
	public String getImei() {
		return imei;
	}
	public void setImei(String imei) {
		this.imei = imei;
	}
	public String getToken() {
		return token;
	}
	public void setToken(String token) {
		this.token = token;
	}
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
	public Date getCzrq() {
		return czrq;
	}
	public void setCzrq(Date czrq) {
		this.czrq = czrq;
	}
	public String getDel() {
		return del;
	}
	public void setDel(String del) {
		this.del = del;
	}
}

+ 92 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/wechat/WechatPushLog.java

@ -0,0 +1,92 @@
package com.yihu.wlyy.entity.wechat;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * 微信模板推送日志
 * Created by yeshijie on 2017/10/18.
 */
@Entity
@Table(name = "wlyy_wx_push_log")
public class WechatPushLog extends IdEntity {
    private Integer type;// '推送类型',
    //1:签约成功  2:签约失败  3:咨询回复通知  4:健康指导提醒  5:解约申请通知  6:预约挂号成功通知  7:预约取消通知 8 缴费提醒 9 健康教育  10 签约医生变更(信息变更通知)续方订单配送员已顺利取药
    //12.添加家人申请 13.添加家人申请成功 14.添加家人申请失败 16.续签家庭医生 17.医生评价 91.医生助手 92.医生助手项目gcMessageController发送
    //18 产检提醒和产检就诊提醒 19:续方审核结果通知(0.不通过 1.通过 2。调整处方并通过) 20:服务结果通知(续方订单已成功配送) 11.代办事项通知(完成配药)
    private String openid;
    private String patient;//'居民code',
    private String name;//'居民姓名',
    private String request;//'请求入参',
    private String response;// '返回值',
    private Integer status;//'状态(0失败,1成功)',
    private Date createTime;
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getOpenid() {
        return openid;
    }
    public void setOpenid(String openid) {
        this.openid = openid;
    }
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getRequest() {
        return request;
    }
    public void setRequest(String request) {
        this.request = request;
    }
    public String getResponse() {
        return response;
    }
    public void setResponse(String response) {
        this.response = response;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

+ 70 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/wechat/WechatTag.java

@ -0,0 +1,70 @@
package com.yihu.wlyy.entity.wechat;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by chenweida on 2017/8/4.
 */
@Entity
@Table(name = "wx_tag")
public class WechatTag extends IdEntity {
    private Integer tagId;
    private String tagName;
    private Date createTime;
    private Integer del;
    private String townCode;//区code
    private String townName;//区名称
    public Integer getTagId() {
        return tagId;
    }
    public void setTagId(Integer tagId) {
        this.tagId = tagId;
    }
    public String getTagName() {
        return tagName;
    }
    public void setTagName(String tagName) {
        this.tagName = tagName;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Integer getDel() {
        return del;
    }
    public void setDel(Integer del) {
        this.del = del;
    }
    public String getTownCode() {
        return townCode;
    }
    public void setTownCode(String townCode) {
        this.townCode = townCode;
    }
    public String getTownName() {
        return townName;
    }
    public void setTownName(String townName) {
        this.townName = townName;
    }
}

+ 107 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/wechat/WechatTagLog.java

@ -0,0 +1,107 @@
package com.yihu.wlyy.entity.wechat;
import com.yihu.wlyy.entity.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by chenweida on 2017/8/4.
 */
@Entity
@Table(name = "wx_tag_log")
public class WechatTagLog extends IdEntity {
    private Integer tagId;
    private String tagName;
    private Date createTime;
    private String townCode;//区code
    private String townName;//区名称
    private String patient;//患者名称
    private String patientName;//患者名称
    private String openId;//患者名称
    private String message;//信息
    private Integer type;// 1新增 2取消
    public Integer getTagId() {
        return tagId;
    }
    public void setTagId(Integer tagId) {
        this.tagId = tagId;
    }
    public String getTagName() {
        return tagName;
    }
    public void setTagName(String tagName) {
        this.tagName = tagName;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getTownCode() {
        return townCode;
    }
    public void setTownCode(String townCode) {
        this.townCode = townCode;
    }
    public String getTownName() {
        return townName;
    }
    public void setTownName(String townName) {
        this.townName = townName;
    }
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
    public String getPatientName() {
        return patientName;
    }
    public void setPatientName(String patientName) {
        this.patientName = patientName;
    }
    public String getOpenId() {
        return openId;
    }
    public void setOpenId(String openId) {
        this.openId = openId;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
}

+ 66 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/wechat/WechatTemplate.java

@ -0,0 +1,66 @@
package com.yihu.wlyy.entity.wechat;
import com.yihu.wlyy.entity.IdEntity;
import java.util.Map;
/**
 * 微信消息模板推送内容
 * @author George
 */
public class WechatTemplate extends IdEntity {
	private static final long serialVersionUID = 3877107913397496785L;
	/**
     * 模板消息id
     */
    private String template_id;
    /**
     * 用户openId
     */
    private String touser;
    /**
     * URL置空,则在发送后,点击模板消息会进入一个空白页面(ios),或无法点击(android)
     */
    private String url;
    /**
     * 标题颜色
     */
    private String topcolor;
    /**
     * 详细内容
     */
    private Map<String,WechatTemplateData> data;
    
    public String getTemplate_id() {
        return template_id;
    }
    public void setTemplate_id(String template_id) {
        this.template_id = template_id;
    }
    public String getTouser() {
        return touser;
    }
    public void setTouser(String touser) {
        this.touser = touser;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getTopcolor() {
        return topcolor;
    }
    public void setTopcolor(String topcolor) {
        this.topcolor = topcolor;
    }
    public Map<String, WechatTemplateData> getData() {
        return data;
    }
    public void setData(Map<String, WechatTemplateData> data) {
        this.data = data;
    }
    
}

+ 25 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/entity/wechat/WechatTemplateData.java

@ -0,0 +1,25 @@
package com.yihu.wlyy.entity.wechat;
import com.yihu.wlyy.entity.IdEntity;
/**
 * 微信消息模板
 * @author George
 */
public class WechatTemplateData extends IdEntity {
	private static final long serialVersionUID = -7399054549159698617L;
	private String value; 
    private String color;
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
}

+ 102 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/logs/BusinessLogs.java

@ -0,0 +1,102 @@
package com.yihu.wlyy.logs;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 业务日志输出
 * <p>
 * Created by lyr-pc on 2017/1/19.
 */
public class BusinessLogs {
    // 日志输出
    private static Logger logger = LoggerFactory.getLogger(BusinessLogs.class);
    /**
     * 业务类型
     */
    public enum BusinessType {
        // 咨询
        consult
        // 指导
        , guidance
        // 健康教育
        , article
        // 随访
        , followup
        // 预约
        , appointment
        // 标签
        , label
        // 注册
        , register
        // 健康档案
        , archive
        // 签约
        , sign
        // 指标
        , index
    }
    /**
     * 业务日志输出
     *
     * @param type 业务类别
     * @param info 日志信息
     */
    public static void info(BusinessType type, String caller,String user, JSONObject info) {
        try {
            JSONObject log = new JSONObject();
            log.put("time", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date()));
            log.put("logType", 2);
            log.put("caller", caller);
            JSONObject data = new JSONObject();
            data.put("businessType", type.ordinal());
            data.put("patient", user);
            data.put("data", info);
            log.put("data", data);
            logger.info(log.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 业务日志输出
     *
     * @param type 业务类别
     * @param info 日志信息
     */
    public static void info(BusinessType type,String caller, String user, JSONArray info) {
        try {
            JSONObject log = new JSONObject();
            log.put("time", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date()));
            log.put("logType", 2);
            log.put("caller", caller);
            JSONObject data = new JSONObject();
            data.put("businessType", type.ordinal());
            data.put("patient", user);
            data.put("data", info);
            log.put("data", data);
            logger.info(log.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

+ 70 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/DoctorTeamMemberDao.java

@ -0,0 +1,70 @@
package com.yihu.wlyy.repository;
import com.yihu.wlyy.entity.Doctor;
import com.yihu.wlyy.entity.DoctorTeamMember;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import java.util.List;
/**
 * Created by Administrator on 2016/7/30.
 */
public interface DoctorTeamMemberDao extends PagingAndSortingRepository<DoctorTeamMember, Long>, JpaSpecificationExecutor<DoctorTeamMember> {
    @Query(" FROM DoctorTeamMember a WHERE a.team=?1 and a.type=?2 and a.del='1'")
    DoctorTeamMember findDoctor2ByTeam(String code, int type);
    @Query(" FROM DoctorTeamMember a WHERE a.team=?1 and a.type=?2 and a.del='1'and signType='1'")
    DoctorTeamMember findDoctorSanshi2ByTeam(String code, int type);
    @Query(" FROM DoctorTeamMember a WHERE a.team=?1 and a.type=?2 and a.del='1'and signType='2'")
    DoctorTeamMember findDoctorJiating2ByTeam(String code, int type);
    @Query(" FROM DoctorTeamMember a WHERE a.team=?1 and a.memberCode=?2 and a.del='1'")
    DoctorTeamMember findMemberCodeAndTeam(String code, String doctor);
    @Modifying
    @Query("update DoctorTeamMember a set a.del = '0' where a.team = ?1 and a.type=1 ")
    void updateType1Del(String code);
    @Modifying
    @Query("update DoctorTeamMember a set a.del = '0' where a.team = ?1 and signType='2' ")
    void deleteMember(String code);
    @Query("select count(a) FROM DoctorTeamMember a WHERE a.memberCode =?1 and  a.del='1'")
    Integer teamListByDoctorCode(String doctorCode);
    @Query(" FROM DoctorTeamMember a WHERE a.team =?1 and  a.del='1' and  a.signType='1'")
    List<DoctorTeamMember> findBySanshiTeam(String teamCode);
    @Query(" FROM DoctorTeamMember a WHERE a.team =?1 and  a.del='1' and  a.signType='1' and  a.type=?2 ")
    DoctorTeamMember findSanshiByTeamAndType(String teamCode, int i);
    List<DoctorTeamMember> findByTeamAndDel(String team, String del);
    @Query(" FROM DoctorTeamMember a WHERE a.team =?1 and  a.del='1' and  a.signType='2' and a.type = '3' and  a.memberCode=?2 ")
    DoctorTeamMember findMemberByTeamAndCode(String teamCode, String oldDoctorCode);
    @Query(" FROM DoctorTeamMember a WHERE a.team =?1 and  a.del='1' and  a.signType='2' and a.type = '2' and  a.memberCode=?2 ")
    DoctorTeamMember findMemberByTeamAndQkCode(String teamCode, String oldDoctorCode);
    @Query("select count(a) FROM DoctorTeamMember a WHERE a.team =?1 and  a.del='1' and  a.memberCode=?2 ")
    int countMemberByTeamAndCode(String teamCode, String oldDoctorCode);
    /**
     * 判断医生是否为三师签团队的成员。
     *
     * @param doctorCode
     * @return
     */
    @Query("SELECT case when count(a) > 0 THEN true else false END FROM DoctorTeamMember a WHERE a.signType = 1 AND a" +
            ".memberCode = :memberCode")
    Boolean isSanShiSigning(@Param("memberCode") String doctorCode);
    @Query("select d FROM DoctorTeamMember a,Doctor d WHERE a.memberCode=d.code  and  a.del='1'and  a.type=1 and a.team in ( select b.team from DoctorTeamMember b where b.memberCode= ?1 and b.del='1' and b.type=2) ")
    List<Doctor> getTeamZKByQK(String qkCode);
}

+ 39 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/PatientReservationDao.java

@ -0,0 +1,39 @@
/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package com.yihu.wlyy.repository;
import com.yihu.wlyy.entity.PatientReservation;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.Date;
import java.util.List;
public interface PatientReservationDao extends PagingAndSortingRepository<PatientReservation, Long>, JpaSpecificationExecutor<PatientReservation> {
	PatientReservation findById(Long id);
	PatientReservation findByCode(String code);
	List<PatientReservation> findByPatient(String patient, Pageable page);
	List<PatientReservation> findByPatientAndAdminTeamCode(String patient, Long teamCode, Pageable page);
	List<PatientReservation> findByDoctor(String doctor, Pageable page);
	@Query("select count(1) from PatientReservation a where a.doctor = ?1 and a.patient=?2 ")
	Long  countReservationByDoctorForPatient(String doctor, String patient);
	@Query(value = "select a.* from wlyy_patient_reservation a where a.patient = ?1 and a.canceler=?2 and a.canceler_time>?3 and a.status ='0' order by a.canceler_time DESC limit 1",nativeQuery = true)
	PatientReservation findByPatientAndCancelerAndCancelTime(String patient, String canceler, String cancelerTime);
	//根据患者医获取近三个月的已取消的预约记录
	@Query("select a from PatientReservation a where a.patient = ?1 and a.startTime between ?2 and ?3 and a.status = 0 order by a.startTime desc")
	List<PatientReservation> findByPatientAndStartTime(String patientCode, Date startTime, Date endTime);
}

+ 9 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/SignFamilyDao.java

@ -39,4 +39,13 @@ public interface SignFamilyDao extends PagingAndSortingRepository<SignFamily, Lo
    @Query("select a from SignFamily a where a.patient = ?1 and a.status > 0 and a.expensesStatus ='1' order by a.czrq desc")
    List<SignFamily> findSignInfo(String patient);
    @Query("select a from SignFamily a where a.patient = ?1 and a.type =2 and a.status >= 1")
    SignFamily findByjiatingPatient(String code);
    @Query("select a from SignFamily a where a.patient = ?1 and a.type =2 and a.status >= 0")
    SignFamily findByPatient(String patient);
    @Query(" from SignFamily a where a.patient = ?1 and a.type = ?2 and (a.status=-3 or a.status=-4)  order by a.id desc")
    List<SignFamily> findLastJySignByPatient(String patient, int type);
}

+ 3 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/SystemDictDao.java

@ -16,4 +16,7 @@ public interface SystemDictDao extends PagingAndSortingRepository<SystemDict, Lo
    List<SystemDict> findByDictName(String name);
    List<SystemDict> findByDictNameAndCode(String name,String code);
    @Query("select s.value from SystemDict s where s.dictName=?1 and s.code =?2")
    String findByDictNameAndCode2(String dictName, String code);
}

+ 12 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/httplog/HttpLogDao.java

@ -0,0 +1,12 @@
package com.yihu.wlyy.repository.httplog;
import com.yihu.wlyy.entity.httpLog.HttpLog;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by yeshijie on 2017/1/12.
 */
public interface HttpLogDao extends PagingAndSortingRepository<HttpLog, Long>,JpaSpecificationExecutor<HttpLog> {
}

+ 11 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/httplog/HttpLogDetailDao.java

@ -0,0 +1,11 @@
package com.yihu.wlyy.repository.httplog;
import com.yihu.wlyy.entity.httpLog.HttpLogDetail;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by yeshijie on 2017/9/26.
 */
public interface HttpLogDetailDao extends PagingAndSortingRepository<HttpLogDetail, Long>, JpaSpecificationExecutor<HttpLogDetail> {
}

+ 34 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/organization/HospitalMappingDao.java

@ -0,0 +1,34 @@
/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package com.yihu.wlyy.repository.organization;
import com.yihu.wlyy.entity.organization.HospitalMapping;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * 医院映射接口
 **/
public interface HospitalMappingDao extends PagingAndSortingRepository<HospitalMapping, Long>,JpaSpecificationExecutor<HospitalMapping>  {
	@Query(value="select a.photo from dm_hospital a,wlyy_hospital_mapping b where a.code = b.code and b.mapping_code = ?1 and b.type=?2",nativeQuery = true)
	String getPhotoByMappingCode(String mappingCode, String type);
	@Query("select a.mappingCode from HospitalMapping a where a.code=?1 and a.type=?2")
	String getMappingCode(String code, String type);
	@Query("select a.code from HospitalMapping a where a.mappingCode=?1 and a.type=?2")
	String getCodeByMapping(String mappingCode, String type);
	@Query("select a.name from HospitalMapping a where a.mappingCode=?1 and a.type=?2")
	String getNameByMapping(String mappingCode, String type);
	@Query("select a from HospitalMapping a where a.appId=?1 ")
	HospitalMapping findByAppId(String appId);
	HospitalMapping findByCode(String code);
}

+ 17 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/security/AccessTokenDao.java

@ -0,0 +1,17 @@
/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package com.yihu.wlyy.repository.security;
import com.yihu.wlyy.entity.security.AccessToken;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface AccessTokenDao extends PagingAndSortingRepository<AccessToken, Long> {
	
	@Query("select p from AccessToken p where p.acc_id = ?1 order by p.add_timestamp desc")
	Iterable<AccessToken> findAccessToken(String accId);
	
}

+ 17 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/security/JsapiTicketDao.java

@ -0,0 +1,17 @@
/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package com.yihu.wlyy.repository.security;
import com.yihu.wlyy.entity.security.JsApiTicket;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface JsapiTicketDao extends PagingAndSortingRepository<JsApiTicket, Long> {
	
	@Query("select p from JsApiTicket p where p.acc_id = ?1 order by p.add_timestamp desc")
	Iterable<JsApiTicket> findJsapiTicket(String accId);
	
}

+ 14 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/security/RSADao.java

@ -0,0 +1,14 @@
/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package com.yihu.wlyy.repository.security;
import com.yihu.wlyy.entity.security.RSA;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface RSADao extends PagingAndSortingRepository<RSA, Long>, JpaSpecificationExecutor<RSA> {
	
}

+ 46 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/security/TokenDao.java

@ -0,0 +1,46 @@
package com.yihu.wlyy.repository.security;
import com.yihu.wlyy.entity.security.Token;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface TokenDao extends PagingAndSortingRepository<Token, Long> {
	
	@Modifying
	@Query("delete Token a where a.user = ?1")
	int deleteByUser(String user);
	@Modifying
	@Query("delete Token a where a.user = ?1 and platform=?2")
	int deleteByUserAndPlatform(String user, Integer platform);
	
	@Modifying
	@Query("delete Token a where a.token = ?1")
	int deleteByToken(String token);
	
//	@Query("select a from Token a where a.user = ?1 and a.platform = ?2 and a.del = '1'")
//	Token findByUser(String user, int platform);
	
//	@Query("select a from Token a where a.user = ?1 and a.del = '1'")
//	Token findByUser(String user);
	
//	@Query("select count(1) from Token a where a.user = ?1 and a.del = '1'")
//	int countByUser(String user);
	
	@Query("select a from Token a where a.token = ?1 and a.del = '1'")
	Token findByToken(String token);
	
	@Query("select a from Token a where a.user = ?1 and a.platform = ?2 and a.del = '1'")
	Token findByPatient(String patient, int platform);
	
	@Modifying
	@Query("delete Token a where a.user = ?1 and a.platform = 3 and a.del = '1'")
	int deleteWxTokenByPatient(String patient);
	@Query("select a from Token a where a.imei = ?1 and a.platform = 3")
	Page<Token> findByOpenid(String openid, Pageable pageable);
}

+ 11 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/wechat/WechatPushLogDao.java

@ -0,0 +1,11 @@
package com.yihu.wlyy.repository.wechat;
import com.yihu.wlyy.entity.wechat.WechatPushLog;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by yeshijie on 2017/10/18.
 */
public interface WechatPushLogDao extends PagingAndSortingRepository<WechatPushLog, Long>, JpaSpecificationExecutor<WechatPushLog> {
}

+ 30 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/wechat/WechatTagDao.java

@ -0,0 +1,30 @@
package com.yihu.wlyy.repository.wechat;
import com.yihu.wlyy.entity.wechat.WechatTag;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by chenweida on 2017/8/4.
 */
public interface WechatTagDao extends PagingAndSortingRepository<WechatTag, Long>, JpaSpecificationExecutor<WechatTag> {
    @Query(" from WechatTag where tagName=? and del=1")
    WechatTag findByName(String name);
    @Query(" from WechatTag where tagId=? and del=1")
    WechatTag findByTagId(Integer tagId);
    @Query(" from WechatTag where townCode=? and del=1")
    WechatTag findByTownCode(String townCode);
    @Query(" update WechatTag set del=0 where tagId=?1 ")
    @Modifying
    void deleteTag(Integer tagId);
    @Query(" from WechatTag where  del=1")
    List<WechatTag> findAllTag();
}

+ 11 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/repository/wechat/WechatTagLogDao.java

@ -0,0 +1,11 @@
package com.yihu.wlyy.repository.wechat;
import com.yihu.wlyy.entity.wechat.WechatTagLog;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by chenweida on 2017/8/7.
 */
public interface WechatTagLogDao  extends PagingAndSortingRepository<WechatTagLog, Long>, JpaSpecificationExecutor<WechatTagLog> {
}

+ 31 - 14
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/BaseService.java

@ -4,17 +4,21 @@ import java.security.KeyPair;
import java.util.Iterator;
import java.util.UUID;
import com.yihu.wlyy.entity.security.RSA;
import com.yihu.wlyy.repository.security.RSADao;
import org.springframework.beans.factory.annotation.Autowired;
//import com.yihu.wlyy.entity.RSA;
//import com.yihu.wlyy.repository.RSADao;
import com.yihu.wlyy.util.CommonUtil;
import org.springframework.stereotype.Component;
@Component
public class BaseService {
	// RSA加密信息持久化DAO
	@Autowired
//	private RSADao rsaDao;
	private RSADao rsaDao;
	public String getCode() {
		return UUID.randomUUID().toString().replaceAll("-", "");
@ -51,18 +55,18 @@ public class BaseService {
	// return messageDao.save(message);
	// }
//	/**
//	 * 保存RSA加密信息
//	 * @return
//	 */
//	public RSA saveRSA(KeyPair keyPair) {
//		RSA rsa = new RSA();
//		rsa.setData(CommonUtil.toByteArray(keyPair));
//		// 先清空
//		rsaDao.deleteAll();
//		// 再添加
//		return rsaDao.save(rsa);
//	}
	/**
	 * 保存RSA加密信息
	 * @return
	 */
	public RSA saveRSA(KeyPair keyPair) {
		RSA rsa = new RSA();
		rsa.setData(CommonUtil.toByteArray(keyPair));
		// 先清空
		rsaDao.deleteAll();
		// 再添加
		return rsaDao.save(rsa);
	}
	/**
	 * 读取RSA加密信息
@ -78,5 +82,18 @@ public class BaseService {
//		}
//		return null;
//	}
	/**
	 * 读取RSA加密信息
	 * @return
	 */
	public RSA loadRSA() {
		Iterable<RSA> iterable = rsaDao.findAll();
		if (iterable != null) {
			Iterator<RSA> it = iterable.iterator();
			if (it != null && it.hasNext()) {
				return it.next();
			}
		}
		return null;
	}
}

+ 88 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/common/AccessTokenService.java

@ -0,0 +1,88 @@
/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package com.yihu.wlyy.service.common;
import com.yihu.wlyy.entity.security.AccessToken;
import com.yihu.wlyy.entity.security.JsApiTicket;
import com.yihu.wlyy.repository.security.AccessTokenDao;
import com.yihu.wlyy.repository.security.JsapiTicketDao;
import com.yihu.wlyy.service.BaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springside.modules.utils.Clock;
/**
 * 患者基本信息类.
 * 
 * @author George
 */
@Component
@Transactional(rollbackFor = Exception.class)
public class AccessTokenService extends BaseService {
	private AccessTokenDao accessTokenDao;
	private JsapiTicketDao jsapiTicketDao;
	@Value("${wechat.accId}")
	private String accId;
	
	@Autowired
	public void setJsapiTicketDao(JsapiTicketDao jsapiTicketDao) {
		this.jsapiTicketDao = jsapiTicketDao;
	}
	private Clock clock = Clock.DEFAULT;
	@Autowired
	public void setAccessTokenDao(AccessTokenDao accessTokenDao) {
		this.accessTokenDao = accessTokenDao;
	}
	public void setClock(Clock clock) {
		this.clock = clock;
	}
	
	public Iterable<AccessToken> findAccessToken() {
		return accessTokenDao.findAccessToken(accId);
	}
	
	public Iterable<JsApiTicket> findJsapiTicket() {
		return jsapiTicketDao.findJsapiTicket(accId);
	}
	
	/**
	 * 添加access_token
	 * @param accessToken
	 */
	public void addAccessToken(AccessToken accessToken) {
		accessToken.setAdd_timestamp(System.currentTimeMillis());
		accessToken.setCzrq(clock.getCurrentDate());
		accessToken.setAcc_id(accId);
		accessTokenDao.save(accessToken);
	}
	
	public void delAccessToken(AccessToken accessToken) {
		accessTokenDao.delete(accessToken);
	}
	
	/**
	 * 添加JsapiTicket
	 * @param JsapiTicket
	 */
	public void addJsapiTicket(JsApiTicket jsApiTicket) {
		jsApiTicket.setAdd_timestamp(System.currentTimeMillis());
		jsApiTicket.setCzrq(clock.getCurrentDate());
		jsApiTicket.setAcc_id(accId);
		jsapiTicketDao.save(jsApiTicket);
	}
	
	public void delJsapiTicket(JsApiTicket jsApiTicket) {
		jsapiTicketDao.delete(jsApiTicket);
	}
}

+ 45 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/common/ConsultService.java

@ -0,0 +1,45 @@
package com.yihu.wlyy.service.common;
import com.yihu.wlyy.entity.Doctor;
import com.yihu.wlyy.entity.SignFamily;
import com.yihu.wlyy.repository.DoctorDao;
import com.yihu.wlyy.repository.PatientDao;
import com.yihu.wlyy.repository.SignFamilyDao;
import com.yihu.wlyy.service.BaseService;
import com.yihu.wlyy.util.SendPatientUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Component
@Transactional
public class ConsultService extends BaseService {
	@Autowired
	public PatientDao patientDao;
	@Autowired
	public DoctorDao doctorDao;
	@Autowired
	private SignFamilyDao signFamilyDao;
	@Autowired
	private PatientService patientService;
	public void sendMucMessageBySingnType(String doctor,String doctorName,String patient,String  content,String contentType,String title){
		Doctor d = doctorDao.findByCode(doctor);
		SignFamily signFamily = signFamilyDao.findByPatient(patient);//当前签约团队
		if(signFamily==null){
			List<SignFamily> signFamilys = signFamilyDao.findLastJySignByPatient(patient,2);//获取旧的家庭签约关系
			if(signFamilys!=null&&signFamilys.size()>0){
				signFamily = signFamilys.get(0);
			}
		}
		if(signFamily!=null){
			new SendPatientUtil(doctor,doctorName,patient, contentType, content,title,signFamily.getType()+"",signFamily.getTeamCode()).start();
		}else {
			throw new RuntimeException("无法找到签约关系!");
		}
	}
}

+ 45 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/common/PatientService.java

@ -0,0 +1,45 @@
/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package com.yihu.wlyy.service.common;
import com.yihu.wlyy.entity.Patient;
import com.yihu.wlyy.repository.DoctorDao;
import com.yihu.wlyy.repository.PatientDao;
import com.yihu.wlyy.repository.SignFamilyDao;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.EncodesUtil;
import com.yihu.wlyy.util.IdcardInfoExtractor;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.core.token.TokenService;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springside.modules.utils.Clock;
import java.util.*;
/**
 * 患者基本信息类.
 *
 * @author George
 */
@Component
@Transactional(rollbackFor = Exception.class)
public class PatientService {
    @Autowired
    private PatientDao patientDao;
    public Patient findByCode(String code) {
        return patientDao.findByCode(code);
    }
}

+ 107 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/httplog/LogService.java

@ -0,0 +1,107 @@
package com.yihu.wlyy.service.httplog;
import com.yihu.wlyy.entity.httpLog.HttpLog;
import com.yihu.wlyy.entity.httpLog.HttpLogDetail;
import com.yihu.wlyy.repository.httplog.HttpLogDao;
import com.yihu.wlyy.repository.httplog.HttpLogDetailDao;
import com.yihu.wlyy.service.manager.dict.SystemDictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
 * Created by ysj on 2017/1/12.
 * 日志服务
 */
@Service
public class LogService {
    @Autowired
    private HttpLogDao httpLogDao;
    @Autowired
    private HttpLogDetailDao httpLogDetailDao;
    @Autowired
    private SystemDictService systemDictService;
    public String openApiType = "0";
    public String signType = "1";   //签约
    public String archiveType = "2";    //档案
    public String onepayType = "3"; //医保支付
    public String caType = "4";     //CA认证
    /**
     * 新增开放api调用日志
     * */
    public void saveOpenApiLog(Boolean isSuccess,String url,String content,String method,String params,String response,String error)
    {
        try {
            HttpLog log = new HttpLog();
            log.setType("0");  //开放接口
            log.setApi(url);
            log.setContent(content);
            log.setMethod(method);
            log.setParams(params);
            log.setCreateTime(new Date());
//            log.setResponse(response);
//            log.setError(error);
            log.setStatus(isSuccess?"1":"0");
            httpLogDao.save(log);
            //明细表
            HttpLogDetail detail = new HttpLogDetail();
            detail.setCode(log.getId());
            detail.setCreateTime(new Date());
            detail.setResponse(response);
            detail.setError(error);
            httpLogDetailDao.save(detail);
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
    /**
     * 保存http调用日志  type 0开放api  1基卫接口  2市民健康网接口   3易联众接口
     */
    public void saveHttpLog(Boolean isSuccess,String url,String content,String method,String header,String params,String response,String error,String type)
    {
        try {
            //成功日志是否保存
            Boolean saveSuccessLog = systemDictService.getSaveSuccessLog();
            if(!isSuccess || saveSuccessLog) {
                //新增日志
                HttpLog log = new HttpLog();
                log.setType(type);
                log.setApi(url);
                log.setContent(content);
                log.setMethod(method);
                log.setHeader(header);
                log.setParams(params);
                log.setCreateTime(new Date());
//                log.setResponse(response);
//                log.setError(error);
                log.setStatus(isSuccess?"1":"0");
                httpLogDao.save(log);
                //明细表
                HttpLogDetail detail = new HttpLogDetail();
                detail.setCode(log.getId());
                detail.setCreateTime(new Date());
                detail.setResponse(response);
                detail.setError(error);
                httpLogDetailDao.save(detail);
            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
}

+ 118 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/jw/GuahaoDoctor.java

@ -0,0 +1,118 @@
package com.yihu.wlyy.service.jw;
/**
 * Created by hzp on 2016/8/13.
 * 挂号服务医生信息
 */
public class GuahaoDoctor {
    private String id;//医生编码
    private String name;//医生姓名
    private String sex;//医生性别
    private String title;//医生职称
    private String edu;//医生学历
    private String introduce;//医生简介
    private String photo;//医生头像
    private String fee;//医生挂号费
    private String hosDeptId;//医生科室编码
    private String hosDeptName;//医生科室名称
    private String hospitalId;//医生医院编码
    private String hospitalName;//医生医院名称
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getEdu() {
        return edu;
    }
    public void setEdu(String edu) {
        this.edu = edu;
    }
    public String getIntroduce() {
        return introduce;
    }
    public void setIntroduce(String introduce) {
        this.introduce = introduce;
    }
    public String getPhoto() {
        return photo;
    }
    public void setPhoto(String photo) {
        this.photo = photo;
    }
    public String getFee() {
        return fee;
    }
    public void setFee(String fee) {
        this.fee = fee;
    }
    public String getHosDeptId() {
        return hosDeptId;
    }
    public void setHosDeptId(String hosDeptId) {
        this.hosDeptId = hosDeptId;
    }
    public String getHosDeptName() {
        return hosDeptName;
    }
    public void setHosDeptName(String hosDeptName) {
        this.hosDeptName = hosDeptName;
    }
    public String getHospitalId() {
        return hospitalId;
    }
    public void setHospitalId(String hospitalId) {
        this.hospitalId = hospitalId;
    }
    public String getHospitalName() {
        return hospitalName;
    }
    public void setHospitalName(String hospitalName) {
        this.hospitalName = hospitalName;
    }
}

+ 1189 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/jw/GuahaoXMService.java

@ -0,0 +1,1189 @@
package com.yihu.wlyy.service.jw;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.wlyy.entity.Patient;
import com.yihu.wlyy.entity.PatientReservation;
import com.yihu.wlyy.entity.SignFamily;
import com.yihu.wlyy.repository.PatientReservationDao;
import com.yihu.wlyy.repository.SignFamilyDao;
import com.yihu.wlyy.repository.organization.HospitalMappingDao;
import com.yihu.wlyy.service.common.ConsultService;
import com.yihu.wlyy.service.common.PatientService;
import com.yihu.wlyy.service.httplog.LogService;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.SOAPUtil;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * Created by hzp on 2016/8/13.
 * 厦门市民健康网挂号服务
 */
@Service
public class GuahaoXMService implements IGuahaoService {
    private int nextDays = 8;  //一周内预约号
    private String ORG_LIST = "GetOrgListNew";//获取医院列表
    private String DEP_LIST = "GetDeptListByOrg"; //科室列表
    private String DOCTOR_LIST = "GetRegDeptDoctorList"; //医生列表
    private String DOCTOR_ARRANGE = "GetRegDeptDoctorSectionList"; //医生排班列表
    private String DOCTOR_ARRANGE_SIMPLE = "GetDoctorSectionSimpleList"; //医生排班列表
    private String ORDER_CREATE = "WebRegisterVerify";  //新建预约
    private String ORDER_CANCEL = "Unregister";   //取消预约
    private String ORDER_INFO = "GetReservationRecord";//预约信息
    private String REG_LIST = "GetRegList";//获取市民预约挂号信息
    @Autowired
    private PatientService patientService;
    @Autowired
    private HospitalMappingDao hospitalMappingDao;
    @Autowired
    private PatientReservationDao patientReservationDao;
    @Autowired
    JwSmjkService jwSmjkService;
    @Autowired
    SignFamilyDao signFamilyDao;
    @Autowired
    private LogService logService;
    @Autowired
    private ConsultService consultService;
    private ObjectMapper objectMapper = new ObjectMapper();
    /**
     * 解析挂号后
     */
    private String CreateOrderAfter(String response, String hospitalId, String hospitalName, String hosDeptId, String hosDeptName, String doctorId, String doctorName, String sectionType, String startTime, String endTime, String patient, String patientName, String cardNo, String clinicCard, String patientPhone, String dname, String dcode) throws Exception {
        String code = "";
        if (response.startsWith("error") || response.startsWith("System-Error")) {
            throw new Exception(response);
        } else if (response.toLowerCase().startsWith("ok")) {      //预约成功
            // 预约成功,获取预约号
            code = response.replace("OK:", "").replace("ok:", "");
        } else if (response.split("\\|").length == 3) {
            code = response.split("\\|")[0];
        } else {
            throw new Exception(response);
        }
        // 查询医生职称和头像
        GuahaoDoctor doctor = null;
        try{
            doctor = jwSmjkService.getGuahaoDoctor(doctorId, hospitalId, hosDeptId);
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("获取医生信息失败");
        }
        // 保存预约记录
        PatientReservation reservation = new PatientReservation();
        reservation.setCode(code);
        reservation.setCzrq(new Date());
        reservation.setType("1");
        reservation.setOrgCode(hospitalId);
        reservation.setOrgName(hospitalName);
        reservation.setDeptCode(hosDeptId);
        reservation.setDeptName(hosDeptName);
        reservation.setDoctorCode(doctorId);
        reservation.setDoctorName(doctorName);
        if(doctor!=null){
            reservation.setDoctorJob(doctor.getTitle());
            reservation.setDoctorPhoto(doctor.getPhoto());
        }
        reservation.setIdcard(cardNo);
        reservation.setName(patientName);
        reservation.setPatient(patient);
        reservation.setPhone(patientPhone);
        reservation.setSectionType(sectionType);
        reservation.setSsc(clinicCard);
        reservation.setStartTime(DateUtil.strToDate(startTime,DateUtil.YYYY_M_D_HH_MM_SS));
        reservation.setEndTime(DateUtil.strToDate(endTime,DateUtil.YYYY_M_D_HH_MM_SS));
        reservation.setStatus(1);
        if (StringUtils.isNotEmpty(dcode)) {
            SignFamily signFamily = signFamilyDao.findByjiatingPatient(patient);
            if (signFamily == null) {
                throw new Exception("can not find patient's family sign info");
            }
            reservation.setSignType(2);
            reservation.setAdminTeamCode(signFamily.getAdminTeamId());
        }
        if (StringUtils.isNotBlank(dname)) {
            reservation.setDname(dname);//代理签约维护待签约人名称
        }
        if (StringUtils.isNotBlank(dcode)) {
            reservation.setDoctor(dcode);//代理签约维护待签约人编码
        }
        // 保存预约记录
        patientReservationDao.save(reservation);
        if(StringUtils.isNotBlank(dcode)){
            Patient p = patientService.findByCode(patient);
            consultService.sendMucMessageBySingnType(dcode,dname,patient,"我已成功为您预约:" + startTime + "," + hospitalName + hosDeptName + doctorName + "医生的号源。您可直接前往医院就诊</br><a name='guahao' href='javascript:void(0)' data-id='" + reservation.getId() + "'>点击查看详情</a>","1",p.getName());
        }
        return code;
    }
    /**
     * 预约排班xml转列表
     */
    private List<Map<String, Object>> xmlToList(String xml) throws Exception {
        List<Map<String, Object>> re = new ArrayList<>();
        if (StringUtils.isEmpty(xml)) {
            // 请求失败
            throw new Exception("获取医生排班表失败!");
        } else if (StringUtils.startsWith(xml, "System-Error")) {
            // 调用失败
            throw new Exception(xml.substring(xml.indexOf(":") + 1, xml.length()));
        } else if (StringUtils.startsWith(xml, "Error")) {
            // 调用失败
            throw new Exception(xml.substring(xml.indexOf(":") + 1, xml.length()));
        }
        Document document = DocumentHelper.parseText(xml);
        Element root = document.getRootElement();
        if (root.element("doctor") != null)     //包含doctor节点
        {
            root = root.element("doctor");
        }
        List<?> child = root.elements();
        for (Object o : child) {
            Element e = (Element) o;
            // 日期
            String date = e.attributeValue("date");
            // a或者p
            String time = e.attributeValue("time");
            // 限号
            String max = e.attributeValue("max");
            // 已使用的号
            String used = e.attributeValue("used");
            // 1正常、2满号、3已过期
            String status = e.attributeValue("status");
            // 诊查费
            String fee = e.attributeValue("fee");
            // 号源类型
            String regType = "普通号";
            if(!StringUtils.isEmpty(e.attributeValue("reg_type")))
            {
                regType = e.attributeValue("reg_type");
            }
            else if(!StringUtils.isEmpty(e.attributeValue("type")))
            {
                regType = e.attributeValue("type");
            }
            Map<String, Object> map = new HashMap<>();
            map.put("date", date);
            map.put("time", time);
            map.put("max", max);
            map.put("used", used);
            map.put("status", status);
            map.put("fee", fee);
            map.put("regType", regType);
            // 排班信息
            List<?> sections = e.elements();
            List<Map<String, String>> arrangeList = new ArrayList<>();
            for (Object s : sections) {
                Element section = (Element) s;
                // 限号
                String s_max = section.attributeValue("max");
                // 已使用的号
                String s_used = section.attributeValue("used");
                // 一次专家坐诊时间段的开始时间
                String start_time = section.attributeValue("start_time");
                // 结束时间
                String end_time = section.attributeValue("end_time");
                Map<String, String> item = new HashMap<>();
                item.put("max", s_max);
                item.put("used", s_used);
                item.put("startTime", start_time);
                item.put("endTime", end_time);
                arrangeList.add(item);
            }
            map.put("sections", arrangeList);
            re.add(map);
        }
        return re;
    }
    /***********************************************************************************************************************************************/
    /**
     * xml验证,并保存日志
     * @param url
     * @param content
     * @param method
     * @param msgBody
     * @param res
     */
    private void  verificationXml(String xml,String title,String url,String content,String method,String msgBody,String res) throws Exception{
        String error = "";
        Boolean isSuccess = false;
        if (StringUtils.isEmpty(xml)) {
            // 请求失败
            //保存http日志
            error = title;
            logService.saveHttpLog(isSuccess,url,content,method,null,msgBody,res,error,logService.archiveType);
            throw new Exception(error);
        } else if (StringUtils.startsWith(xml, "System-Error")) {
            // 调用失败
            //保存http日志
            error = xml.substring(xml.indexOf(":") + 1, xml.length());
            logService.saveHttpLog(isSuccess,url,content,method,null,msgBody,res,error,logService.archiveType);
            throw new Exception(error);
        } else if (StringUtils.startsWith(xml, "Error")) {
            // 调用失败
            //保存http日志
            error = xml.substring(xml.indexOf(":") + 1, xml.length());
            logService.saveHttpLog(isSuccess,url,content,method,null,msgBody,res,error,logService.archiveType);
            throw new Exception(error);
        }
    }
    /**
     * 获取医院列表
     */
    public List<Map<String, String>> GetOrgList(String city, String filter, String type, Integer pageIndex, Integer pageSize) throws Exception {
        List<Map<String, String>> re = new ArrayList<>();
        String[] values = null;
        //医院列表
        if (type.equals("1")) {
            values = SOAPUtil.getCredential("<?xml version=\"1.0\" encoding=\"utf-8\"?><root type=\"1\"></root>", true);
        } else if (type.equals("2")) //社区列表
        {
            values = SOAPUtil.getCredential("<?xml version=\"1.0\" encoding=\"utf-8\"?><root type=\"2\"></root>", true);
        }
        if (values != null && values.length == 3) {
            JSONArray params = new JSONArray();
            JSONObject param1 = new JSONObject();
            param1.put("key", "?strCondition");
            param1.put("value", values[0]);
            params.put(param1);
            JSONObject param2 = new JSONObject();
            param2.put("key", "?strCredential");
            param2.put("value", values[1]);
            params.put(param2);
            JSONObject param3 = new JSONObject();
            param3.put("key", "?strKey");
            param3.put("value", values[2]);
            params.put(param3);
            //新增日志
            String method = "POST";
            String content = "获取医院列表";
            Long startTime = System.currentTimeMillis();
            String xml = SOAPUtil.post(ORG_LIST, params);
            Long spendTime = (System.currentTimeMillis()-startTime)/1000;//计算请求时间
            String res = "耗时:"+spendTime+"s,xml="+xml;
            String msgBody = params.toString();
            //xml验证
            verificationXml(xml,"获取机构列表失败!",ORG_LIST,content,method,msgBody,res);
            Document document = DocumentHelper.parseText(xml);
            Element root = document.getRootElement();
            List<?> child = root.elements();
            for (Object o : child) {
                Element e = (Element) o;
                String shortName = e.attribute("short_name").getValue();
                String code = e.attribute("code").getValue();
                String name = e.getText();
                Map<String, String> map = new HashMap<>();
                map.put("id", code);
                map.put("name", shortName);
                map.put("address", name);
                String photo = hospitalMappingDao.getPhotoByMappingCode(code, "1");
                map.put("photo", photo);
                re.add(map);
            }
            //保存http日志
            logService.saveHttpLog(true,ORG_LIST,content,method,null,msgBody,res,null,logService.archiveType);
        }
        return re;
    }
    /**
     * 获取科室接口
     */
    public List<Map<String, String>> GetOrgDepList(String hospitalId, String filter, Integer pageIndex, Integer pageSize) throws Exception {
        List<Map<String, String>> re = new ArrayList<>();
        JSONArray params = new JSONArray();
        JSONObject param1 = new JSONObject();
        param1.put("key", "?orgCode");
        param1.put("value", hospitalId);
        params.put(param1);
        //新增日志
        String method = "POST";
        String content = "获取科室接口";
        Long startTime = System.currentTimeMillis();
        String xml = SOAPUtil.post(DEP_LIST, params);
        Long spendTime = (System.currentTimeMillis()-startTime)/1000;//计算请求时间
        String res = "耗时:"+spendTime+"s,xml="+xml;
        String msgBody = params.toString();
        //xml验证
        verificationXml(xml,"获取可预约科室列表失败!",DEP_LIST,content,method,msgBody,res);
        Document document = DocumentHelper.parseText(xml);
        Element root = document.getRootElement();
        List<?> child = root.elements();
        for (Object o : child) {
            Element e = (Element) o;
            if (e.getName().equals("dept")) {
                String code = e.attribute("code").getValue();
                String name = e.attribute("name").getValue();
                Map<String, String> map = new HashMap<>();
                map.put("id", code);
                map.put("name", name);
                map.put("hospitalId", hospitalId);
                re.add(map);
            }
        }
        //保存http日志
        logService.saveHttpLog(true,DEP_LIST,content,method,null,msgBody,res,null,logService.archiveType);
        return re;
    }
    /**
     * 获取医生列表接口
     */
    public List<GuahaoDoctor> GetDoctorList(String hospitalId, String hosDeptId, String filter, Integer pageIndex, Integer pageSize) throws Exception {
        List<GuahaoDoctor> re = new ArrayList<>();
        JSONArray params = new JSONArray();
        JSONObject param1 = new JSONObject();
        param1.put("key", "?OrgCode");
        param1.put("value", hospitalId);
        params.put(param1);
        JSONObject param2 = new JSONObject();
        param2.put("key", "?DeptCode");
        param2.put("value", hosDeptId);
        params.put(param2);
        JSONObject param3 = new JSONObject();
        param3.put("key", "?strStart");
        String nowDate = DateUtil.getStringDateShort();   //当前时间;
        param3.put("value", nowDate);
        params.put(param3);
        JSONObject param4 = new JSONObject();
        param4.put("key", "?strEnd");
        param4.put("value", DateUtil.getNextDay(nowDate, nextDays));  //一周后时间
        params.put(param4);
        //新增日志
        String method = "POST";
        String content = "获取医生列表接口";
        Long startTime = System.currentTimeMillis();
        String xml = SOAPUtil.post(DOCTOR_LIST, params);
        Long spendTime = (System.currentTimeMillis()-startTime)/1000;//计算请求时间
        String res = "耗时:"+spendTime+"s,xml="+xml;
        String msgBody = params.toString();
        //xml验证
        verificationXml(xml,"获取医生列表失败!",DOCTOR_LIST,content,method,msgBody,res);
        Document document = DocumentHelper.parseText(xml);
        Element root = document.getRootElement();
        List<?> child = root.elements();
        for (Object o : child) {
            Element e = (Element) o;
            // 医生编码
            String code = e.attributeValue("code");
            // 性别
            String sex = e.attributeValue("sex");
            // 职称
            String tech = e.attributeValue("tech");
            // 学历
            String edu = e.attributeValue("edu");
            // 简介
            String introduce = e.attributeValue("introduce");
            // 专家姓名
            String name = e.attributeValue("name");
            // 照片
            String photo = "";
            if (e.attribute("photo") != null) {
                photo = e.attributeValue("photo");
            }
            // 挂号费
            String fee = e.attributeValue("fee");
            // 科室编码
            String deptcode = e.attributeValue("deptcode");
            // 科室名称
            String deptname = e.attributeValue("deptname");
            // 机构编码
            String orgcode = e.attributeValue("orgcode");
            // 机构名称
            String orgname = e.attributeValue("orgname");
            GuahaoDoctor doctor = new GuahaoDoctor();
            doctor.setId(code);
            doctor.setName(name);
            doctor.setSex(sex);
            doctor.setTitle(tech);
            doctor.setEdu(edu);
            doctor.setIntroduce(introduce);
            doctor.setPhoto(photo);
            doctor.setFee(fee);
            doctor.setHosDeptId(deptcode);
            doctor.setHosDeptName(deptname);
            doctor.setHospitalId(orgcode);
            doctor.setHospitalName(orgname);
            re.add(doctor);
        }
        //保存http日志
        logService.saveHttpLog(true,DOCTOR_LIST,content,method,null,msgBody,res,null,logService.archiveType);
        return re;
    }
    /**
     * 获取医生排班接口(包含排班详细)
     * status 0 停诊、1正常、2满号、3已过期
     */
    public List<Map<String, Object>> GetDoctorArrange(String hospitalId, String hosDeptId, String doctorId) throws Exception {
        JSONArray params = new JSONArray();
        JSONObject param1 = new JSONObject();
        param1.put("key", "?OrgCode");
        param1.put("value", hospitalId);
        params.put(param1);
        JSONObject param2 = new JSONObject();
        param2.put("key", "?DeptCode");
        param2.put("value", hosDeptId);
        params.put(param2);
        JSONObject param3 = new JSONObject();
        param3.put("key", "?DocCode");
        param3.put("value", doctorId);
        params.put(param3);
        JSONObject param4 = new JSONObject();
        param4.put("key", "?strStart");
        String nowDate = DateUtil.getStringDateShort();   //当前时间;
        param4.put("value", nowDate);
        params.put(param4);
        JSONObject param5 = new JSONObject();
        param5.put("key", "?strEnd");
        param5.put("value", DateUtil.getNextDay(nowDate, nextDays));  //一周后时间
        params.put(param5);
        //新增日志
        String method = "POST";
        String content = "获取医生排班接口(包含排班详细)";
        Long startTime = System.currentTimeMillis();
        String xml = SOAPUtil.post(DOCTOR_ARRANGE, params);
        Long spendTime = (System.currentTimeMillis()-startTime)/1000;//计算请求时间
        String res = "耗时:"+spendTime+"s,xml="+xml;
        String msgBody = params.toString();
        //xml验证
        verificationXml(xml,"获取医生排班表失败!",DOCTOR_ARRANGE,content,method,msgBody,res);
        //保存http日志
        logService.saveHttpLog(true,DOCTOR_ARRANGE,content,method,null,msgBody,res,null,logService.archiveType);
        return xmlToList(xml);
    }
    /**
     * 获取医生排班接口(一级)
     * status 0 停诊、1正常、2满号、3已过期
     */
    public List<Map<String, String>> GetDoctorArrangeSimple(String hospitalId, String hosDeptId, String doctorId) throws Exception {
        List<Map<String, String>> re = new ArrayList<>();
        JSONArray params = new JSONArray();
        JSONObject param1 = new JSONObject();
        param1.put("key", "?OrgCode");
        param1.put("value", hospitalId);
        params.put(param1);
        JSONObject param2 = new JSONObject();
        param2.put("key", "?DeptCode");
        param2.put("value", hosDeptId);
        params.put(param2);
        JSONObject param3 = new JSONObject();
        param3.put("key", "?DocCode");
        param3.put("value", doctorId);
        params.put(param3);
        JSONObject param4 = new JSONObject();
        param4.put("key", "?strStart");
        String nowDate = DateUtil.getStringDateShort();   //当前时间;
        param4.put("value", nowDate);
        params.put(param4);
        JSONObject param5 = new JSONObject();
        param5.put("key", "?strEnd");
        param5.put("value", DateUtil.getNextDay(nowDate, nextDays));  //一周后时间
        params.put(param5);
        //新增日志
        String method = "POST";
        String content = "获取医生排班接口(一级)";
        Long startTime = System.currentTimeMillis();
        String xml = SOAPUtil.post(DOCTOR_ARRANGE_SIMPLE, params);
        Long spendTime = (System.currentTimeMillis()-startTime)/1000;//计算请求时间
        String res = "耗时:"+spendTime+"s,xml="+xml;
        String msgBody = params.toString();
        //xml验证
        verificationXml(xml,"获取医生排班表失败!",DOCTOR_ARRANGE_SIMPLE,content,method,msgBody,res);
        Document document = DocumentHelper.parseText(xml);
        Element root = document.getRootElement();
        List<?> child = root.elements();
        for (Object o : child) {
            Element e = (Element) o;
            // 日期
            String date = e.attributeValue("date");
            // a或者p
            String time = e.attributeValue("time");
            // 限号
            String max = e.attributeValue("max");
            // 已使用的号
            String used = e.attributeValue("used");
            // 1正常、2满号、3已过期
            String status = e.attributeValue("status");
            Map<String, String> map = new HashMap<>();
            map.put("date", date);
            map.put("time", time);
            map.put("max", max);
            map.put("used", used);
            map.put("status", status);  //0 停诊、1正常、2满号、3已过期
            re.add(map);
        }
        //保存http日志
        logService.saveHttpLog(true,DOCTOR_ARRANGE_SIMPLE,content,method,null,msgBody,res,null,logService.archiveType);
        return re;
    }
    /**
     * 创建挂号单
     */
    public String CreateOrder(String hospitalId, String hospitalName, String hosDeptId, String hosDeptName, String doctorId, String doctorName, String arrangeDate, String patient, String patientName, String cardNo, String clinicCard, String patientPhone) throws Exception {
        String re = "";
        Patient p = patientService.findByCode(patient);
        if (p == null) {
            throw new Exception("患者信息不存在!");
        }
        Map<String, String> map = objectMapper.readValue(arrangeDate, Map.class);
        if (map.containsKey("sectionType") && map.containsKey("startTime")) {
            String sectionType = map.get("sectionType");
            String startTime = map.get("startTime");
            String endTime = map.get("endTime");
            StringBuffer sb = new StringBuffer();
            sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
            sb.append("<root>");
            sb.append("<section_type>").append(sectionType).append("</section_type>");
            sb.append("<start_time>").append(startTime).append("</start_time>");
            sb.append("<org_code>").append(hospitalId).append("</org_code>");
            sb.append("<dept_code>").append(hosDeptId).append("</dept_code>");
            sb.append("<dept_name>").append(hosDeptName).append("</dept_name>");
            sb.append("<doctor_code>").append(doctorId).append("</doctor_code>");
            sb.append("<doctor_name>").append(doctorName).append("</doctor_name>");
            sb.append("<id_card>").append(cardNo).append("</id_card>");
            sb.append("<patient_name>").append(patientName).append("</patient_name>");
            sb.append("<ssid>").append(clinicCard).append("</ssid>");
            sb.append("<patient_phone>").append(patientPhone).append("</patient_phone>");
            sb.append("</root>");
            // 生成身份证明
            String[] values = SOAPUtil.getCredential(sb.toString(), true);
            JSONArray params = new JSONArray();
            JSONObject param1 = new JSONObject();
            param1.put("key", "?strCondition");
            param1.put("value", values[0]);
            params.put(param1);
            JSONObject param2 = new JSONObject();
            param2.put("key", "?strCredential");
            param2.put("value", values[1]);
            params.put(param2);
            JSONObject param3 = new JSONObject();
            param3.put("key", "?strKey");
            param3.put("value", values[2]);
            params.put(param3);
            //新增日志
            String method = "POST";
            String content = "创建挂号单";
            Long startTimes = System.currentTimeMillis();
            String response = SOAPUtil.post(ORDER_CREATE, params);
            Long spendTime = (System.currentTimeMillis()-startTimes)/1000;//计算请求时间
            String res = "耗时:"+spendTime+"s,xml="+response;
            String msgBody = params.toString();
            //xml验证
            verificationXml(response,"获取医生排班表失败!",ORDER_CREATE,content,method,msgBody,res);
            //保存http日志
            logService.saveHttpLog(true,ORDER_CREATE,content,method,null,msgBody,res,null,logService.archiveType);
            re = CreateOrderAfter(response, hospitalId, hospitalName, hosDeptId, hosDeptName, doctorId, doctorName, sectionType, startTime, endTime, patient, patientName, cardNo, clinicCard, patientPhone, null, null);
        } else {
            throw new Exception("该排班信息错误或者不存在!");
        }
        return re;
    }
    /**
     * 取消挂号单
     */
    public boolean CancelOrder(String orderId, String clinicCard) throws Exception {
        JSONArray params = new JSONArray();
        JSONObject param1 = new JSONObject();
        param1.put("key", "?strSSID");
        param1.put("value", clinicCard);
        params.put(param1);
        JSONObject param2 = new JSONObject();
        param2.put("key", "?strRegID");
        param2.put("value", orderId);
        params.put(param2);
        String[] values = SOAPUtil.getCredential(null, true);
        JSONObject param3 = new JSONObject();
        param3.put("key", "?strCredential");
        param3.put("value", values[1]);
        params.put(param3);
        JSONObject param4 = new JSONObject();
        param4.put("key", "?strKey");
        param4.put("value", values[2]);
        params.put(param4);
        //新增日志
        String method = "POST";
        String content = "取消挂号单";
        Long startTime = System.currentTimeMillis();
        String xml = SOAPUtil.post(ORDER_CANCEL, params);
        Long spendTime = (System.currentTimeMillis()-startTime)/1000;//计算请求时间
        String res = "耗时:"+spendTime+"s,xml="+xml;
        String msgBody = params.toString();
        //xml验证
        verificationXml(xml,"取消挂号失败!",ORDER_CANCEL,content,method,msgBody,res);
        Boolean isOk = false;
        if (xml.toLowerCase().startsWith("ok")) {
            isOk =  true;
        }
        //保存http日志
        logService.saveHttpLog(isOk,ORDER_CANCEL,content,method,null,msgBody,res,null,logService.archiveType);
        return isOk;
    }
    /**
     * 获取医生信息
     */
    public GuahaoDoctor GetDoctorInfo(String doctorId, String hospitalId, String hosDeptId) throws Exception {
        GuahaoDoctor doctor = new GuahaoDoctor();
        JSONArray params = new JSONArray();
        JSONObject param1 = new JSONObject();
        param1.put("key", "?OrgCode");
        param1.put("value", hospitalId);
        params.put(param1);
        JSONObject param2 = new JSONObject();
        param2.put("key", "?DeptCode");
        param2.put("value", hosDeptId);
        params.put(param2);
        JSONObject param3 = new JSONObject();
        param3.put("key", "?strStart");
        String nowDate = DateUtil.getStringDateShort();   //当前时间;
        param3.put("value", nowDate);
        params.put(param3);
        JSONObject param4 = new JSONObject();
        param4.put("key", "?strEnd");
        param4.put("value", DateUtil.getNextDay(nowDate, nextDays));  //一周后时间
        params.put(param4);
        //新增日志
        String method = "POST";
        String content = "获取医生信息";
        Long startTime = System.currentTimeMillis();
        String xml = SOAPUtil.post(DOCTOR_LIST, params);
        Long spendTime = (System.currentTimeMillis()-startTime)/1000;//计算请求时间
        String res = "耗时:"+spendTime+"s,xml="+xml;
        String msgBody = params.toString();
        //xml验证
        verificationXml(xml,"获取医生列表失败!",DOCTOR_LIST,content,method,msgBody,res);
        Document document = DocumentHelper.parseText(xml);
        Element root = document.getRootElement();
        List<?> child = root.elements();
        for (Object o : child) {
            Element e = (Element) o;
            // 医生编码
            String code = e.attributeValue("code");
            if (code.equals(doctorId)) {
                // 性别
                String sex = e.attributeValue("sex");
                // 职称
                String tech = e.attributeValue("tech");
                // 学历
                String edu = e.attributeValue("edu");
                // 简介
                String introduce = e.attributeValue("introduce");
                // 专家姓名
                String name = e.attributeValue("name");
                // 照片
                String photo = "";
                if (e.attribute("photo") != null) {
                    photo = e.attributeValue("photo");
                }
                // 挂号费
                String fee = e.attributeValue("fee");
                // 科室编码
                String deptcode = e.attributeValue("deptcode");
                // 科室名称
                String deptname = e.attributeValue("deptname");
                // 机构编码
                String orgcode = e.attributeValue("orgcode");
                // 机构名称
                String orgname = e.attributeValue("orgname");
                doctor.setId(code);
                doctor.setName(name);
                doctor.setSex(sex);
                doctor.setTitle(tech);
                doctor.setEdu(edu);
                doctor.setIntroduce(introduce);
                doctor.setPhoto(photo);
                doctor.setFee(fee);
                doctor.setHosDeptId(deptcode);
                doctor.setHosDeptName(deptname);
                doctor.setHospitalId(orgcode);
                doctor.setHospitalName(orgname);
                break;
            }
        }
        //保存http日志
        logService.saveHttpLog(true,DOCTOR_LIST,content,method,null,msgBody,res,null,logService.archiveType);
        return doctor;
    }
    /**
     * 获取预约状态
     * 0 撤销 1 确认 2 已诊  3停诊
     */
    public Integer GetOrderStatus(String hospitalId, String orderId, String clinicCard) throws Exception {
        Integer re = null;
        try {
            StringBuffer sb = new StringBuffer();
            sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
            sb.append("<root>");
            sb.append("<org_code>").append(hospitalId).append("</org_code>");
            sb.append("<resid>").append(orderId).append("</resid>");
            sb.append("<ssid>").append(clinicCard).append("</ssid>");
            sb.append("</root>");
            String[] values = SOAPUtil.getCredential(sb.toString(), true);
            JSONArray params = new JSONArray();
            JSONObject param1 = new JSONObject();
            param1.put("key", "?strCondition");
            param1.put("value", values[0]);
            params.put(param1);
            JSONObject param2 = new JSONObject();
            param2.put("key", "?strCredential");
            param2.put("value", values[1]);
            params.put(param2);
            JSONObject param3 = new JSONObject();
            param3.put("key", "?strKey");
            param3.put("value", values[2]);
            params.put(param3);
            //新增日志
            String method = "POST";
            String content = "获取预约状态";
            Long startTime = System.currentTimeMillis();
            String xml = SOAPUtil.post(ORDER_INFO, params);
            Long spendTime = (System.currentTimeMillis()-startTime)/1000;//计算请求时间
            String res = "耗时:"+spendTime+"s,xml="+xml;
            String msgBody = params.toString();
            String errMsg = "获取预约状态失败!";
            //xml验证
            verificationXml(xml,errMsg,ORDER_INFO,content,method,msgBody,res);
            Document document = DocumentHelper.parseText(xml);
            Element root = document.getRootElement();
            List<?> child = root.elements();
            if (child != null) {
                Element obj = (Element) child.get(0);
                String status = obj.attributeValue("status");
                switch (status) {
                    case "撤销": {
                        re = 0;
                        break;
                    }
                    case "确认": {
                        re = 1;
                        break;
                    }
                    case "已诊": {
                        re = 2;
                        break;
                    }
                    case "停诊": {
                        re = 3;
                        break;
                    }
                }
                //保存http日志
                logService.saveHttpLog(true,ORDER_INFO,content,method,null,msgBody,res,null,logService.archiveType);
            } else {
                //保存http日志
                logService.saveHttpLog(false,ORDER_INFO,content,method,null,msgBody,res,errMsg,logService.archiveType);
                throw new Exception(errMsg);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return re;
    }
    /**
     * 根据患者医保卡获取近三个月的预约记录
     */
    public List<PatientReservation> GetRegList(String patientCode, String strStart, String strEnd,Date strStartTime,Date strEndTime) throws Exception {
        Patient patient = patientService.findByCode(patientCode);
        if (patient == null) {
            throw new Exception("不存在该用户!");
        }
        //获取签名信息
        List<PatientReservation> patientRegList = new ArrayList<>();
        String[] values = SOAPUtil.getCredential(null, true);
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        JSONArray params = new JSONArray();
        JSONObject param1 = new JSONObject();
        param1.put("key", "?strSSID");
        param1.put("value", patient.getSsc());
        params.put(param1);
        JSONObject param2 = new JSONObject();
        param2.put("key", "?strStart");
        param2.put("value", strStart);
        params.put(param2);
        JSONObject param3 = new JSONObject();
        param3.put("key", "?strEnd");
        param3.put("value", strEnd);
        params.put(param3);
        JSONObject param4 = new JSONObject();
        param4.put("key", "?strCredential");
        param4.put("value", values[1]);
        params.put(param4);
        JSONObject param5 = new JSONObject();
        param5.put("key", "?strKey");
        param5.put("value", values[2]);  //一周后时间
        params.put(param5);
        //新增日志
        String method = "POST";
        String content = "根据患者医保卡获取近三个月的预约记录";
        Long startTime = System.currentTimeMillis();
        String xml = SOAPUtil.post(REG_LIST, params);
        Long spendTime = (System.currentTimeMillis()-startTime)/1000;//计算请求时间
        String res = "耗时:"+spendTime+"s,xml="+xml;
        String msgBody = params.toString();
        String errMsg = "获取挂号信息失败!";
        //xml验证
        verificationXml(xml,errMsg,REG_LIST,content,method,msgBody,res);
        Document document = DocumentHelper.parseText(xml);
        Element root = document.getRootElement();
        List<?> child = root.elements();
        if (child.size() > 0) {
            for (Object o : child) {
                Element e = (Element) o;
                // 医生编码
                String regdate = e.attributeValue("regdate");//预约日期
                String time = e.attributeValue("time");//a or p 上下午
                String regBegin = e.attributeValue("start_time");//预约时间段的开始时间
                String regEnd = e.attributeValue("end_time");//预约时间段的结束时间
                String orgID = e.attributeValue("orgID");//机构ID
                String OrgCode = e.attributeValue("OrgCode");//医疗机构编码
                String org = e.attributeValue("org");//医疗机构名称
                String DeptCode = e.attributeValue("DeptCode");//科室代码
                String dept = e.attributeValue("dept");//科室
                String DoctorCode = e.attributeValue("DoctorCode");//医生代码
                String doctor = e.attributeValue("doctor");//医生
                String Introduction = e.attributeValue("Introduction");//医生简介
                String status = e.attributeValue("status");//状态:删除、新建、确认、已诊
                String enter_time = e.attributeValue("enter_time");//预约登记时间
                String notes = e.attributeValue("notes");//备注
                String code = e.getText();//预约号
                PatientReservation patientReservation = new PatientReservation();
                patientReservation.setCode(code);
                patientReservation.setSectionType(time);
                patientReservation.setCzrq(dateFormat.parse(enter_time));
                patientReservation.setDeptCode(DeptCode);
                patientReservation.setDeptName(dept);
                patientReservation.setDoctorCode(DoctorCode);
                patientReservation.setDoctorName(doctor);
                patientReservation.setStartTime(DateUtil.strToDate(regBegin,DateUtil.YYYY_M_D_HH_MM_SS));
                patientReservation.setEndTime(DateUtil.strToDate(regEnd,DateUtil.YYYY_M_D_HH_MM_SS));
                patientReservation.setOrgCode(OrgCode);
                patientReservation.setOrgName(org);
                patientReservation.setType("1");
                patientReservation.setPatient(patientCode);
                patientReservation.setName(patient.getName());
                patientReservation.setIdcard(patient.getIdcard());
                patientReservation.setPhone(patient.getMobile());
                switch (status) {
                    case "删除":
                        patientReservation.setStatus(0);
                        break;
                    case "新建":
                        patientReservation.setStatus(1);
                        break;
                    case "确认":
                        patientReservation.setStatus(2);
                        break;
                    case "已诊":
                        patientReservation.setStatus(3);
                        break;
                    default:
                        patientReservation.setStatus(4);
                }
                ;
                patientReservation.setSsc(patient.getSsc());
                GuahaoDoctor guahaoDoctor = GetDoctorInfo(DoctorCode, OrgCode, DeptCode);
                patientReservation.setDoctorPhoto(guahaoDoctor.getPhoto());//照片
                patientReservation.setDoctorJob(guahaoDoctor.getTitle());//职称
                patientRegList.add(patientReservation);
            }
        }
        //根据患者医保卡获取近三个月的已取消的预约记录
        List<PatientReservation> list = patientReservationDao.findByPatientAndStartTime(patientCode,strStartTime,strEndTime);
        if(list.size()>0){
            patientRegList.addAll(list);
            patientRegList.sort(new Comparator<PatientReservation>() {
                public int compare(PatientReservation o1, PatientReservation o2) {
                    Date startTime1 = o1.getStartTime();
                    Date startTime2 = o2.getStartTime();
                    return startTime2.compareTo(startTime1);
                }
            });
        }
        //保存http日志
        logService.saveHttpLog(true,REG_LIST,content,method,null,msgBody,res,null,logService.archiveType);
        return patientRegList;
    }
    /**
     * 根据患者,预约编号,机构编号获取单条记录预约记录
     */
    public PatientReservation getRegDetail(String patientCode, String orgCode, String regCode) throws Exception {
        //获取签名信息
        Patient patient = patientService.findByCode(patientCode);
        if (patient == null) {
            throw new Exception("获取挂号人员信息失败!");
        }
        StringBuffer sb = new StringBuffer();
        sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
        sb.append("<root>");
        sb.append("<org_code>").append(orgCode).append("</org_code>");
        sb.append("<resid>").append(regCode).append("</resid>");
        sb.append("<ssid>").append(patient.getSsc()).append("</ssid>");
        sb.append("</root>");
        String[] values = SOAPUtil.getCredential(sb.toString(), true);
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        JSONArray params = new JSONArray();
        JSONObject param1 = new JSONObject();
        param1.put("key", "?strCondition");
        param1.put("value", values[0]);
        params.put(param1);
        JSONObject param2 = new JSONObject();
        param2.put("key", "?strCredential");
        param2.put("value", values[1]);
        params.put(param2);
        JSONObject param3 = new JSONObject();
        param3.put("key", "?strKey");
        param3.put("value", values[2]);
        params.put(param3);
        //新增日志
        String method = "POST";
        String content = "获取单条记录预约记录";
        Long startTime = System.currentTimeMillis();
        String xml = SOAPUtil.post(ORDER_INFO, params);
        Long spendTime = (System.currentTimeMillis()-startTime)/1000;//计算请求时间
        String res = "耗时:"+spendTime+"s,xml="+xml;
        String msgBody = params.toString();
        String errMsg = "获取挂号信息失败!";
        //xml验证
        verificationXml(xml,errMsg,ORDER_INFO,content,method,msgBody,res);
        Document document = DocumentHelper.parseText(xml);
        Element root = document.getRootElement();
        List<?> child = root.elements();
        if (child.size() > 0) {
            Element e = (Element) child.get(0);
            // 医生编码
            String regdate = e.attributeValue("regdate");//预约日期
            String time = e.attributeValue("time");//a or p 上下午
            String regBegin = e.attributeValue("start_time");//预约时间段的开始时间
            String regEnd = e.attributeValue("end_time");//预约时间段的结束时间
            String orgID = e.attributeValue("org_id");//机构ID
            String OrgCode = e.attributeValue("org_code");//医疗机构编码
            String org = e.attributeValue("org_name");//医疗机构名称
            String DeptCode = e.attributeValue("dept_code");//科室代码
            String dept = e.attributeValue("dept_name");//科室
            String DoctorCode = e.attributeValue("doctor_code");//医生代码
            String doctor = e.attributeValue("doctor_name");//医生
            String Introduction = e.attributeValue("introduction");//医生简介
            String status = e.attributeValue("status");//状态:删除、新建、确认、已诊
            String enter_time = e.attributeValue("enter_time");//预约登记时间
            String notes = e.attributeValue("notes");//备注
            String code = e.getText();//预约号
            PatientReservation patientReservation = new PatientReservation();
            patientReservation.setCode(code);
            patientReservation.setSectionType(time);
            patientReservation.setCzrq(dateFormat.parse(enter_time));
            patientReservation.setDeptCode(DeptCode);
            patientReservation.setDeptName(dept);
            patientReservation.setDoctorCode(DoctorCode);
            patientReservation.setDoctorName(doctor);
            patientReservation.setStartTime(DateUtil.strToDate(regBegin,DateUtil.YYYY_M_D_HH_MM_SS));
            patientReservation.setEndTime(DateUtil.strToDate(regEnd,DateUtil.YYYY_M_D_HH_MM_SS));
            patientReservation.setOrgCode(OrgCode);
            patientReservation.setOrgName(org);
            patientReservation.setType("1");
            patientReservation.setPatient(patient.getCode());
            patientReservation.setName(patient.getName());
            patientReservation.setIdcard(patient.getIdcard());
            patientReservation.setPhone(patient.getMobile());
            switch (status) {
                case "删除":
                    patientReservation.setStatus(0);
                    break;
                case "新建":
                    patientReservation.setStatus(1);
                    break;
                case "确认":
                    patientReservation.setStatus(2);
                    break;
                case "已诊":
                    patientReservation.setStatus(3);
                    break;
                default:
                    patientReservation.setStatus(4);
            }
            ;
            patientReservation.setSsc(patient.getSsc());
            GuahaoDoctor guahaoDoctor = GetDoctorInfo(DoctorCode, OrgCode, DeptCode);
            patientReservation.setDoctorPhoto(guahaoDoctor.getPhoto());//照片
            patientReservation.setDoctorJob(guahaoDoctor.getTitle());//职称
            //保存http日志
            logService.saveHttpLog(true,ORDER_INFO,content,method,null,msgBody,res,null,logService.archiveType);
            return patientReservation;
        } else {
            //保存http日志
            logService.saveHttpLog(false,ORDER_INFO,content,method,null,msgBody,res,null,logService.archiveType);
            return null;
        }
    }
    /******************************** 基卫内网服务 ************************************************/
    public List<Map<String, Object>> GetDoctorArrangeTenDay(String hospitalId, String hosDeptId, String doctorId) throws Exception {
        String strStart = DateUtil.getStringDateShort(); //当前时间;
        String strEnd = DateUtil.getNextDay(strStart, 11);         //10天预约
        String response = jwSmjkService.getRegDeptSpeDoctorSectionList(hospitalId, hosDeptId, strStart, strEnd, doctorId);
        return xmlToList(response);
    }
    /**
     * 转诊预约挂号
     */
    public String CreateOrderByDoctor(String hospitalId, String hospitalName, String hosDeptId, String hosDeptName, String doctorId, String doctorName, String arrangeDate, String patient, String patientName, String cardNo, String clinicCard, String patientPhone, String dname, String dcode) throws Exception {
        String re = "";
        Patient p = patientService.findByCode(patient);
        if (p == null) {
            throw new Exception("患者信息不存在!");
        }
        Map<String, String> map = objectMapper.readValue(arrangeDate, Map.class);
        if (map.containsKey("sectionType") && map.containsKey("startTime")) {
            String sectionType = map.get("sectionType");
            String startTime = map.get("startTime");
            String endTime = map.get("endTime");
            String response = jwSmjkService.webRegisterByFamily(cardNo, patientName, clinicCard, sectionType, startTime, hospitalId, hosDeptId, hosDeptName, doctorId, doctorName,patientPhone);
            re = CreateOrderAfter(response, hospitalId, hospitalName, hosDeptId, hosDeptName, doctorId, doctorName, sectionType, startTime, endTime, patient, patientName, cardNo, clinicCard, patientPhone, dname, dcode);
        } else {
            throw new Exception("该排班信息错误或者不存在!");
        }
        return re;
    }
}

+ 46 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/jw/IGuahaoService.java

@ -0,0 +1,46 @@
package com.yihu.wlyy.service.jw;
import java.util.List;
import java.util.Map;
public interface IGuahaoService {
	/**
	 * 获取医院列表
     */
	public List<Map<String,String>> GetOrgList(String city, String filter, String type, Integer pageIndex, Integer pageSize) throws Exception;
	/**
	 * 获取科室接口
	 */
	public List<Map<String,String>> GetOrgDepList(String hospitalId, String filter, Integer pageIndex, Integer pageSize) throws Exception;
	/**
	 * 获取医生列表接口
	 */
	public List<GuahaoDoctor> GetDoctorList(String hospitalId, String hosDeptId, String filter, Integer pageIndex, Integer pageSize) throws Exception;
	/**
	 * 获取医生排班接口
	 */
	public List<Map<String,Object>> GetDoctorArrange(String hospitalId, String hosDeptId, String doctorId) throws Exception;
	/**
	 * 获取医生排班接口(一级)
	 * status 0 停诊、1正常、2满号、3已过期
	 */
	public List<Map<String,String>> GetDoctorArrangeSimple(String hospitalId, String hosDeptId, String doctorId) throws Exception;
	/**
	 * 创建挂号单
	 */
	public String CreateOrder(String hospitalId, String hospitalName, String hosDeptId, String hosDeptName, String doctorId, String doctorName, String arrangeDate, String patient, String patientName, String cardNo, String clinicCard, String patientPhone) throws Exception;
	/**
	 * 获取医生信息
	 */
	public GuahaoDoctor GetDoctorInfo(String doctorId, String hospitalId, String hosDeptId) throws Exception;
}

File diff suppressed because it is too large
+ 454 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/jw/JwSmjkService.java


+ 1 - 1
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/manager/account/UserService.java

@ -25,7 +25,7 @@
//import com.yihu.wlyy.entity.UserRole;
//import com.yihu.wlyy.entity.WlyyOrganizationDept;
//import com.yihu.wlyy.repository.DmJobDao;
//import com.yihu.wlyy.repository.HospitalDeptDao;
//import com.yihu.wlyy.repository.HospitalDeptDao;0
//import com.yihu.wlyy.repository.RoleDao;
//import com.yihu.wlyy.repository.UserDao;
//import com.yihu.wlyy.repository.UserRoleDao;

+ 20 - 1
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/manager/dict/SystemDictService.java

@ -22,12 +22,31 @@ import java.util.List;
public class SystemDictService extends BaseJpaService<SystemDict, SystemDictDao> {
    @Autowired
    SystemDictDao systemDictDao;
    private String dictName = "SYSTEM_PARAMS";
    public List<SystemDict> getByDictName(String name){
        return systemDictDao.findByDictName(name);
    }
    /**
     * http_log是否记录成功消息
     *
     * @return
     */
    public Boolean getSaveSuccessLog() {
        try {
            String re = systemDictDao.findByDictNameAndCode2(dictName, "SAVE_SUCCESS_LOG");
            if ("1".equals(re)) {
                return true;
            } else {
                return false;
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        }
    }
}

+ 265 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/reservation/PatientReservationService.java

@ -0,0 +1,265 @@
package com.yihu.wlyy.service.reservation;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.wlyy.entity.*;
import com.yihu.wlyy.repository.*;
import com.yihu.wlyy.service.BaseService;
import com.yihu.wlyy.service.jw.GuahaoXMService;
import com.yihu.wlyy.util.DateUtil;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Component;
import org.springside.modules.persistence.DynamicSpecifications;
import org.springside.modules.persistence.SearchFilter;
import org.springside.modules.persistence.SearchFilter.Operator;
import javax.transaction.Transactional;
import java.util.*;
/**
 * 预约挂号业务处理类
 *
 * @author George
 */
@Component
@Transactional(rollbackOn = Exception.class)
public class PatientReservationService extends BaseService {
    @Autowired
    private PatientReservationDao patientReservationDao;
//    @Autowired
//    private PatientReservationDoctorDao patientReservationDoctorDao;
    @Autowired
    private GuahaoXMService guahaoXMService;
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private PatientDao patientDao;
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private DoctorTeamMemberDao doctorTeamDoctor;
    @Autowired
    private DoctorDao doctorDao;
    public PatientReservation findByCode(String code) {
        return patientReservationDao.findByCode(code);
    }
    public PatientReservation findById(Long id) throws Exception {
        PatientReservation re = patientReservationDao.findById(id);
        if (re == null) {
            throw new Exception("not exit result!id:" + id);
        }
        return re;
    }
    /**
     * 实体转map
     */
    private Map<String, String> entityToMap(PatientReservation obj) throws Exception {
        String mapString = objectMapper.writeValueAsString(obj);
        return objectMapper.readValue(mapString, Map.class);
    }
    /**
     * 更新预约状态
     */
    @Transactional
    public void updateStatus(Long id, Integer status) {
        PatientReservation obj = patientReservationDao.findOne(id);
        if (!obj.getStatus().equals(status)) {
            obj.setStatus(status);
            patientReservationDao.save(obj);
        }
    }
    /**
     * 医生取消预约
     */
    @Transactional
    public void doctorCancelOrder(Long id,String doctor) {
        PatientReservation obj = patientReservationDao.findOne(id);
        if (obj.getStatus()!=0) {
            obj.setStatus(0);
            String patient = obj.getPatient();
            SignFamily signFamily = signFamilyDao.findByPatient(patient);//得到患者的签约信息
            DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findMemberCodeAndTeam(signFamily.getTeamCode(), doctor);//得到服务团队的医生信息
            if(doctorTeamMember!=null){
                obj.setCancelerName(doctorTeamMember.getName());
                obj.setCancelerType(doctorTeamMember.getType());
                obj.setCancelerTime(DateUtil.dateToStrLong(new Date()));
            }
            obj.setCanceler(doctor);
            patientReservationDao.save(obj);
        }
    }
    /**
     * 居民取消预约
     */
    @Transactional
    public void patientCancelOrder(String code,String patient) {
        PatientReservation obj = patientReservationDao.findByCode(code);
        if (obj.getStatus()!=0) {
            obj.setStatus(0);
            obj.setCanceler(patient);
            obj.setCancelerName(obj.getName());
            obj.setCancelerType(5);
            obj.setCancelerTime(DateUtil.dateToStrLong(new Date()));
            patientReservationDao.save(obj);
        }
    }
    /**
     * 保存预约挂号记录
     *
     * @param code         预约号/流水号
     * @param doctor       医生标识
     * @param patient      患者标识
     * @param idcard       患者身份证号
     * @param name         患者姓名
     * @param phone        患者手机号
     * @param ssc          患者社保卡号
     * @param section_type 预约时间段:AM (上午)或者PM (下午)
     * @param start_time   一次预约段的开始时间
     * @param org_code     医生所在医疗机构编码
     * @param org_name     医疗机构名称
     * @param dept_code    科室编码
     * @param dept_name    科室名称
     * @param doctor_code  专家ID/编码
     * @param doctor_name  专家姓名
     * @param doctor_photo 专家头像
     * @return
     */
//    public void save(String code, Doctor doctor, String patient, String idcard, String name, String phone, String ssc, String section_type, String start_time, String org_code, String org_name, String dept_code, String dept_name, String doctor_code, String doctor_name, String doctor_job, String doctor_photo) {
//        try {
//            PatientReservation reservation = new PatientReservation();
//            reservation.setCode(code);
//            reservation.setCzrq(new Date());
//            reservation.setType("1");
//            reservation.setDeptCode(dept_code);
//            reservation.setDeptName(dept_name);
//            if (doctor != null) {
//                reservation.setDname(doctor.getName());
//                reservation.setDoctor(doctor.getCode());
//            }
//            reservation.setDoctorCode(doctor_code);
//            reservation.setDoctorName(doctor_name);
//            reservation.setDoctorJob(doctor_job);
//            reservation.setDoctorPhoto(doctor_photo);
//            reservation.setIdcard(idcard);
//            reservation.setName(doctor_name);
//            reservation.setOrgCode(org_code);
//            reservation.setOrgName(org_name);
//            reservation.setPatient(patient);
//            reservation.setPhone(phone);
//            reservation.setSectionType(section_type);
//            reservation.setSsc(ssc);
//            reservation.setStartTime(DateUtil.strToDate(start_time,DateUtil.YYYY_M_D_HH_MM_SS));
//            reservation.setStatus(1);
//            // 保存记录
//            PatientReservation temp = patientReservationDao.save(reservation);
//            if (temp != null) {
//                // 先删除,防止重复
//                patientReservationDoctorDao.deleteByPatient(patient, org_code, dept_code, doctor_code);
//                // 添加预约过的医生
//                PatientReservationDoctor prd = new PatientReservationDoctor();
//                prd.setDeptCode(dept_code);
//                prd.setDeptName(dept_name);
//                prd.setDoctorCode(doctor_code);
//                prd.setDoctorName(doctor_name);
//                prd.setOrgCode(org_code);
//                prd.setOrgName(org_name);
//                prd.setPatient(patient);
//                patientReservationDoctorDao.save(prd);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
    /**
     * 分页获取患者预约记录(医生端)
     */
    public List<Map<String, String>> getReservationByDoctor(String doctor, int page, int pagesize) throws Exception {
        List<Map<String, String>> re = new ArrayList<>();
        // 排序
        Sort sort = new Sort(Direction.DESC, "id");
        // 分页信息
        PageRequest pageRequest = new PageRequest(page - 1, pagesize, sort);
        List<PatientReservation> list = patientReservationDao.findByDoctor(doctor, pageRequest);
        //返回患者头像
        for (PatientReservation item : list) {
            Map<String, String> map = entityToMap(item);
            Patient patient = patientDao.findByCode(item.getPatient());
            if (patient != null) {
                map.put("photo", patient.getPhoto());
            }
            re.add(map);
        }
        return re;
    }
    public Long countReservationByDoctorForPatient(String doctor, String patient) {
        return patientReservationDao.countReservationByDoctorForPatient(doctor, patient);
    }
    /**
     * 分页获取患者预约记录,根据团队
     */
    @Transactional
    public JSONArray getReservationByPatient(String patient, Long teamCode, int page, int pagesize) throws Exception {
        List<PatientReservation> list = new ArrayList<>();
        JSONArray array = new JSONArray();
        // 排序
        Sort sort = new Sort(Direction.DESC, "id");
        // 分页信息
        PageRequest pageRequest = new PageRequest(page - 1, pagesize, sort);
        if (teamCode != null && teamCode > 0) {//传入医生查询医生帮此患者的预约记录
            list = patientReservationDao.findByPatientAndAdminTeamCode(patient, teamCode, pageRequest);
        } else {
            list = patientReservationDao.findByPatient(patient, pageRequest);
        }
        if (list != null) {
            Map<String, Doctor> doctors = new HashMap<>();
            for (PatientReservation item : list) {
                JSONObject obj = new JSONObject(item);
                if (!StringUtils.isEmpty(item.getDoctor())) {
                    if (doctors.get(item.getDoctor()) != null) {
                        obj.put("photo", doctors.get(item.getDoctor()).getPhoto());
                    } else {
                        Doctor doc = doctorDao.findByCode(item.getDoctor());
                        if (doc != null) {
                            doctors.put(doc.getCode(), doc);
                            obj.put("photo", doc.getPhoto());
                        }
                    }
                }
                array.put(obj);
            }
        }
        return array;
    }
}

+ 118 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/service/third/GuahaoDoctor.java

@ -0,0 +1,118 @@
package com.yihu.wlyy.service.third;
/**
 * Created by hzp on 2016/8/13.
 * 挂号服务医生信息
 */
public class GuahaoDoctor {
    private String id;//医生编码
    private String name;//医生姓名
    private String sex;//医生性别
    private String title;//医生职称
    private String edu;//医生学历
    private String introduce;//医生简介
    private String photo;//医生头像
    private String fee;//医生挂号费
    private String hosDeptId;//医生科室编码
    private String hosDeptName;//医生科室名称
    private String hospitalId;//医生医院编码
    private String hospitalName;//医生医院名称
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getEdu() {
        return edu;
    }
    public void setEdu(String edu) {
        this.edu = edu;
    }
    public String getIntroduce() {
        return introduce;
    }
    public void setIntroduce(String introduce) {
        this.introduce = introduce;
    }
    public String getPhoto() {
        return photo;
    }
    public void setPhoto(String photo) {
        this.photo = photo;
    }
    public String getFee() {
        return fee;
    }
    public void setFee(String fee) {
        this.fee = fee;
    }
    public String getHosDeptId() {
        return hosDeptId;
    }
    public void setHosDeptId(String hosDeptId) {
        this.hosDeptId = hosDeptId;
    }
    public String getHosDeptName() {
        return hosDeptName;
    }
    public void setHosDeptName(String hosDeptName) {
        this.hosDeptName = hosDeptName;
    }
    public String getHospitalId() {
        return hospitalId;
    }
    public void setHospitalId(String hospitalId) {
        this.hospitalId = hospitalId;
    }
    public String getHospitalName() {
        return hospitalName;
    }
    public void setHospitalName(String hospitalName) {
        this.hospitalName = hospitalName;
    }
}

+ 641 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/task/PushMsgTaskWlyy.java

@ -0,0 +1,641 @@
package com.yihu.wlyy.task;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.wlyy.entity.wechat.WechatPushLog;
import com.yihu.wlyy.entity.wechat.WechatTemplate;
import com.yihu.wlyy.entity.wechat.WechatTemplateData;
import com.yihu.wlyy.repository.wechat.WechatPushLogDao;
import com.yihu.wlyy.util.HttpUtil;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.LinkedBlockingQueue;
@Component
public class PushMsgTaskWlyy {
    private static Logger logger = LoggerFactory.getLogger(PushMsgTaskWlyy.class);
    // 最大容量为50的数组堵塞队列
    private static LinkedBlockingQueue<JSONObject> queue = new LinkedBlockingQueue<JSONObject>();
//    @Autowired
//    private HttpUtil httpUtil;
    @Value("${server.server_url}")
    private String server_url;
    @Value("${wechat.message.template_consult_notice}")
    private String template_consult_notice;
    @Value("${wechat.message.template_sign_success}")
    private String template_sign_success;
    @Value("${wechat.message.template_sign_failed}")
    private String template_sign_failed;
    @Value("${wechat.message.template_health_notice}")
    private String template_health_notice;
    @Value("${wechat.message.template_termination}")
    private String template_termination;
    @Value("${wechat.message.template_appoint_success}")
    private String template_appoint_success;
    @Value("${wechat.message.template_appoint_failed}")
    private String template_appoint_failed;
    @Value("${wechat.message.template_expenses_remind}")
    private String template_expenses_remind;
    @Value("${wechat.message.template_healthy_article}")
    private String template_healthy_article;
    @Value("${wechat.message.template_doctor_change}")
    private String template_doctor_change;
    @Value("${wechat.message.template_doctor_survey}")
    private String template_doctor_survey;
    @Value("${wechat.message.template_doctor_audit}")
    private String template_doctor_audit;//审核结果通知
    @Value("${wechat.message.template_doctor_service}")
    private String template_doctor_service;//服务结果通知
    @Value("${pushMes.method}")
    private String putMesMethod;
    @Value("${pushMes.redis_prescription_title}")
    private String redisQueue;
    @Value("${putMesType.wechat}")
    private String putMesType;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private WechatPushLogDao wechatPushLogDao;
    /**
     * 添加一条推送消息
     *
     * @param receiver 接收人
     * @param type     消息类型
     * @param title    消息标题
     * @param msg      消息内容
     * @param data     消息数据
     */
    public void put(String receiver, String type, String title, String msg, String data) {
        try {
            JSONObject json = new JSONObject();
            json.put("receiver", receiver);
            json.put("type", type);
            json.put("title", title);
            json.put("msg", msg);
            json.put("data", data);
            queue.put(json);
        } catch (Exception e) {
            logger.error("添加到消息队列失败!", e);
            e.printStackTrace();
        }
    }
    /**
     * 添加微信消息
     *
     * @param type
     * @param data
     */
    public void putWxMsg(String access_token, int type, String openid, String name, JSONObject data) {
        try {
            JSONObject json = new JSONObject();
            json.put("wx", true);
            json.put("access_token", access_token);
            json.put("type", type);
            json.put("openid", openid);
            json.put("name", name);
            json.put("data", data);
            //如果是内网推送到redis,如果是外网推送到内存队列
            if(putMesMethod.equals("1")){
                JSONObject mes = new JSONObject();
                mes.put("title",putMesType);
                mes.put("value",json.toString());
                redisTemplate.opsForList().leftPush(redisQueue,mes.toString());
            }else{
                queue.put(json);
            }
        } catch (Exception e) {
            logger.error("添加到微信消息列队列失败!", e);
            e.printStackTrace();
        }
    }
    public void put(JSONArray array) {
        if (array == null || array.length() == 0) {
            return;
        }
        for (int i = 0; i < array.length(); i++) {
            JSONObject json = array.getJSONObject(i);
            if (json == null) {
                continue;
            }
            try {
                queue.put(json);
            } catch (Exception e) {
                logger.error("批量添加到消息队列失败!", e);
            }
        }
    }
    @PostConstruct
    private void run() {
        new Thread(new ConsumerTask()).start();
    }
    // 消费者
    class ConsumerTask implements Runnable {
        @Override
        public void run() {
            while (true) {
                try {
                    // 如果queue为空,则当前线程会堵塞,直到有新数据加入
                    JSONObject json = queue.take();
                    boolean wx = json.has("wx") ? json.getBoolean("wx") : false;
                    if (wx) {
                        // 推送微信消息
                        JSONObject data = json.has("data") ? json.getJSONObject("data") : null;
                        if (data == null) {
                            continue;
                        }
                        // 消息类型:1:签约成功 2:签约失败 3:咨询回复通知 4:健康指导提醒
                        int type = json.has("type") ? json.getInt("type") : -1;
                        if (type == -1) {
                            continue;
                        }
                        String access_token = json.has("access_token") ? json.getString("access_token") : "";
                        String openid = json.has("openid") ? json.getString("openid") : "";
                        String name = json.has("name") ? json.getString("name") : "";
//                        String name = data.has("name") ? json.getString("name") : "";
                        // 发送消息到微信端
                        sendWeixinMessage(access_token, type, openid, name, data);
                    } else {
                        // 推送平台消息
                        String receiver = json.has("receiver") ? json.getString("receiver") : "";
                        String type = json.has("type") ? json.getString("type") : "";
                        String title = json.has("title") ? json.getString("title") : "";
                        String msg = json.has("msg") ? json.getString("msg") : "";
                        String data = json.has("data") ? json.getString("data") : "";
                        boolean res = HttpUtil.pushMessage(receiver, type, title, msg, data);
                        if (res) {
                            logger.info("消息推送成功!");
                        } else {
                            logger.error("消息推送失败!");
                        }
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    public boolean sendWeixinMessage(String access_token, int type, String openid, String name, JSONObject json) {
        try {
            if (StringUtils.isEmpty(openid)) {
                logger.error("send wechat message failed:openid is empty");
                return false;
            }
            if (access_token != null) {
                String token_url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token;
                String params = typeMsg(type, openid, name, json);
                if (params == "") {
                    logger.error("参数错误!error");
                    return false;
                }
                WechatPushLog log = new WechatPushLog();
                log.setType(type);
                log.setCreateTime(new Date());
                log.setName(name);
                log.setOpenid(openid);
                if(!json.isNull("toUser")){
                    log.setPatient(json.getString("toUser"));
                }
                log.setRequest(json.toString());
                String result = HttpUtil.sendPost(token_url, params);
                JSONObject jsonResult = new JSONObject(result);
                log.setResponse(result);
                if (Integer.parseInt(jsonResult.get("errcode").toString()) == 0) {
                    logger.info("微信信息推送成功!success");
                    log.setStatus(1);
                    wechatPushLogDao.save(log);
                    return true;
                } else {
                    log.setStatus(0);
                    wechatPushLogDao.save(log);
                    logger.error("错误编码:" + jsonResult.get("errcode").toString() + "  错误提示:" + jsonResult.get("errmsg").toString());
                    return false;
                }
            } else {
                logger.error("获取access_token失败!");
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("微信信息推送失败!");
            return false;
        }
    }
    /**
     * 拼接参数
     *
     * @param type
     * @return
     */
    public String typeMsg(int type, String openid, String name, JSONObject json) {
        try {
            String url = server_url + "wx/html/";
            WechatTemplate temp = new WechatTemplate();
            temp.setTouser(openid);
            temp.setTopcolor("#000000");
            Map<String, WechatTemplateData> m = new HashMap<String, WechatTemplateData>();
            WechatTemplateData first = new WechatTemplateData();
            first.setColor("#000000");
            first.setValue(json.getString("first"));
            m.put("first", first);
            WechatTemplateData remark = new WechatTemplateData();
            remark.setColor("#000000");
            remark.setValue(json.getString("remark"));
            m.put("remark", remark);
            String temp_id = "";
            if (type == 3) {
                if (json.has("isPublic") && json.getInt("isPublic") == 1) {
                    temp.setUrl(url + "jbsq/html/public-consult-detail.html?openid=" + openid + "&code=" + json.getString("consult") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                } else {
                    temp.setUrl(url + "yszx/html/consulting-doctor.html?openid=" + openid + "&consult=" + json.getString("consult") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                }
                temp_id = template_consult_notice;
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("consultcontent"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("replycontent"));
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("keyword3", keyword3);
            } else if (type == 1 || type == 2) {
                if (type == 1) {
                    temp_id = template_sign_success;
                } else {
                    temp_id = template_sign_failed;
                }
                String isRenew = "0";
                if (json.has("isRenew")) {
                    isRenew = "1";
                }
                String signState = "0";
                if (json.has("signState")) {
                    signState = (String) json.get("signState");
                }
                if (json.has("isRenew") && type == 2) {
                    //如果续签失败,不发送详情
                } else {
                    if (json.has("agent") && ("1".equals(json.getString("agent")))) {
//                        发送给授权代理人
                        temp.setUrl(url + "ssgg/html/doctor-homepage-new.html?openid=" + openid + "&state=" + json.getString("doctor") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&isRenew=" + isRenew + "&signState=" + signState + "&represented=" + json.getString("represented") + "&signCode=" + json.getString("signCode"));
                    } else if (json.has("agent") && ("0".equals(json.getString("agent")))) {
//                        发送给自己
                        temp.setUrl(url + "qygl/html/pay_flow.html?openid=" + openid + "&state=" + json.getString("doctor") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&isRenew=" + isRenew + "&signState=" + signState + "&represented=" + json.getString("represented") + "&signCode=" + json.getString("signCode"));
                    }
                }
                temp.setTouser(openid);
                temp.setTopcolor("#000000");
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("doctorName"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(name);
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("date"));
                m.put("keyword3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("content"));
                m.put("keyword4", keyword4);
            } else if (type == 4) {
                temp.setUrl(url + "yszd/html/guidance-detail.html?openid=" + openid + "&toUser=" + json.getString("toUser") + "&id=" + String.valueOf(json.get("id")) + "&toName=" + name + "&represented=" + json.getString("represented"));
                temp_id = template_health_notice;
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("date"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("orgName"));
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("keyword3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(name);
                m.put("keyword4", keyword4);
                WechatTemplateData keyword5 = new WechatTemplateData();
                keyword5.setColor("#000000");
                keyword5.setValue(json.getString("content"));
                m.put("keyword5", keyword5);
            } else if (type == 5) {
                temp.setUrl(url + "ssgg/html/doctor-homepage-new.html?openid=" + openid + "&state=" + json.getString("doctor") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                temp_id = template_termination;
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("doctorName"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(name);
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("orgName"));
                m.put("keyword3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("date"));
                m.put("keyword4", keyword4);
            } else if (type == 6) {
                temp.setUrl(url + "wdyy/html/detail-appointment.html?openid=" + openid + "&orgCode=" + json.get("orgCode") + "&id=" + json.getString("id") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                temp_id = template_appoint_success;
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("orgName"));
                m.put("hospitalname", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("deptName"));
                m.put("deptname", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("doctorname", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("date"));
                m.put("planstarttime", keyword4);
            } else if (type == 7) {
                temp.setUrl(url + "wdyy/html/my-appointment.html?openid=" + openid + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                temp_id = template_appoint_failed;
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("name"));
                m.put("keynote1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("date"));
                m.put("keynote2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("keynote3", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("orgName"));
                m.put("keynote4", keyword4);
            } else if (type == 8) {
                //temp.setUrl(url + "wdyy/html/my-appointment.html?openid=" + openid + "&toUser=" + json.getString("toUser"));
                temp_id = template_expenses_remind;
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("doctorName"));
                m.put("first", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue("以协议为准");
                m.put("keyword1", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue("家庭医生签约");
                m.put("keyword2", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("content"));
                m.put("remark", keyword4);
            } else if (type == 9) {
                temp.setUrl(url + "jkjy/html/article.html?openid=" + openid + "&dataId=" + json.getString("article") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                temp_id = template_healthy_article;
                temp.setTemplate_id(temp_id);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("first"));
                m.put("first", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("title"));
                m.put("keyword1", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("doctorName"));
                m.put("keyword2", keyword3);
                WechatTemplateData keyword4 = new WechatTemplateData();
                keyword4.setColor("#000000");
                keyword4.setValue(json.getString("date"));
                m.put("keyword3", keyword4);
                WechatTemplateData keyword5 = new WechatTemplateData();
                keyword5.setColor("#000000");
                keyword5.setValue(json.getString("remark"));
                m.put("remark", keyword5);
            } else if (type == 10) {
                if (json.has("url")) {
                    temp.setUrl(url + json.getString("url"));
                }else {
                    temp.setUrl(url + "qygl/html/signing-doctors.html?openid=" + openid + "&state=" + openid + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                }
                temp.setTemplate_id(template_doctor_change);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("keyword3"));
                m.put("keyword3", keyword3);
            } else if (type == 11) {
                if (json.has("url")) {
                    temp.setUrl(url + json.getString("url"));
                } else {
                    String xinurl = url + "survey/html/survey_info.html?openid=" + openid + "&state=" + openid + "&survey_id=" + json.getString("survey_id") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented");
//                temp.setUrl(url + "survey/html/survey_info.html?openid=" + openid + "&state=" + openid + "&survey_id=" + json.getString("survey_id") + "&toUser=" + json.getString("toUser") + "&toName=" + name);
                    temp.setUrl(xinurl);
                }
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
                logger.info("type=====>openId " + openid);
            } else if (type == 12) {
                temp.setUrl(url + "jtgx/html/application-msg-list.html?openid=" + openid + "&member=" + json.getString("member") + "&toUser=" + json.getString("member") + "&toName=" + name);
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
//                WechatTemplateData  keyword3= new WechatTemplateData();
//                keyword3.setColor("#000000");
//                keyword3.setValue(json.getString("keyword3"));
//                m.put("keyword3", keyword3);
//
//                WechatTemplateData  keyword4= new WechatTemplateData();
//                keyword4.setColor("#000000");
//                keyword4.setValue(json.getString("keyword4"));
//                m.put("keyword4", keyword4);
            } else if (type == 13) {
                temp.setUrl(url + "jtgx/html/family.html?openid=" + openid);
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
//                WechatTemplateData  keyword3= new WechatTemplateData();
//                keyword3.setColor("#000000");
//                keyword3.setValue(json.getString("keyword3"));
//                m.put("keyword3", keyword3);
//
//                WechatTemplateData  keyword4= new WechatTemplateData();
//                keyword4.setColor("#000000");
//                keyword4.setValue(json.getString("keyword4"));
//                m.put("keyword4", keyword4);
            } else if (type == 14) {
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
            } else if (type == 15) {
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
            } else if (type == 16) {
                temp.setUrl(url + "xuqian/html/information.html?openid=" + openid + "&changeDoctor=" + 1 + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
            } else if (type == 17) {
                temp.setUrl(url + "yszx/html/manyidu.html?openid=" + openid + "&consult=" + json.getString("consult") + "&toUser=" + json.getString("toUser") + "&toName=" + name + "&represented=" + json.getString("represented"));
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
            } else if (type == 18) {
                temp.setUrl(url + json.getString("url"));
                temp.setTemplate_id(template_doctor_survey);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
            } else if (type == 19) {
                temp.setUrl(url + json.getString("url"));
                temp.setTemplate_id(template_doctor_audit);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
            } else if (type == 20) {
                temp.setUrl(url + json.getString("url"));
                temp.setTemplate_id(template_doctor_service);
                WechatTemplateData keyword1 = new WechatTemplateData();
                keyword1.setColor("#000000");
                keyword1.setValue(json.getString("keyword1"));
                m.put("keyword1", keyword1);
                WechatTemplateData keyword2 = new WechatTemplateData();
                keyword2.setColor("#000000");
                keyword2.setValue(json.getString("keyword2"));
                m.put("keyword2", keyword2);
                WechatTemplateData keyword3 = new WechatTemplateData();
                keyword3.setColor("#000000");
                keyword3.setValue(json.getString("keyword3"));
                m.put("keyword3", keyword3);
            }
            temp.setData(m);
            ObjectMapper mapper = new ObjectMapper();
            String strJson = mapper.writeValueAsString(temp);
            //System.out.println("send message================>" + strJson);
            logger.error("send message================>" + strJson);
            return strJson;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
}

+ 21 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/CommonUtil.java

@ -10,6 +10,7 @@ import java.io.ObjectOutputStream;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
public class CommonUtil {
@ -214,4 +215,24 @@ public class CommonUtil {
		// }
		return 0;
	}
//	public void changeToMp3(String sourcePath, String targetPath) {
//		File source = new File(sourcePath);
//		File target = new File(targetPath);
//		AudioAttributes audio = new AudioAttributes();
//		Encoder encoder = new Encoder();
//		audio.setCodec("libmp3lame");
//		EncodingAttributes attrs = new EncodingAttributes();
//		attrs.setFormat("mp3");
//		attrs.setAudioAttributes(audio);
//		try {
//			encoder.encode(source, target, attrs);
//		} catch (IllegalArgumentException e) {
//			e.printStackTrace();
//		} catch (InputFormatException e) {
//			e.printStackTrace();
//		} catch (EncoderException e) {
//			e.printStackTrace();
//		}
//	}
}

+ 253 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/Constant.java

@ -0,0 +1,253 @@
package com.yihu.wlyy.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * Created by Administrator on 2016.08.18.
 * 常量类
 */
public class Constant {
    public static String city="350200";
    public static String cityName="厦门市";
    //二级维度的性别
    public static String level_sex_1="1";
    public static String level_sex_2="2";
    public static String level_sex_3="3";
    public static String level_sex_1_name="女";
    public static String level_sex_2_name="男";
    public static String level_sex_3_name="未知";
    //二级维度的年龄
    public static String level_age_1="1";
    public static String level_age_2="2";
    public static String level_age_3="3";
    public static String level_age_4="4";
    public static String level_age_5="5";
    public static String level_age_6="6";
    public static String level_age_1_name="0~6";
    public static String level_age_2_name="7~18";
    public static String level_age_3_name="19~30";
    public static String level_age_4_name="31~50";
    public static String level_age_5_name="51~65";
    public static String level_age_6_name=">65";
    //二级维度的组
    public static String level_group_1="1";
    public static String level_group_2="2";
    public static String level_group_3="3";
    public static String level_group_4="4";
    public static String level_group_5="5";
    public static String level_group_6="6";
    public static String level_group_1_name="普通人群";
    public static String level_group_2_name="慢病人群";
    public static String level_group_3_name="65岁以上人群";
    public static String level_group_4_name="高血压";
    public static String level_group_5_name="糖尿病";
    public static String level_group_6_name="糖尿病和高血压";
    //二级维度签约扣费
    public static String level_expense_0="0";
    public static String level_expense_1="1";
    public static String level_expense_2="2";
    public static String level_expense_0_name="未扣费";
    public static String level_expense_1_name="已扣费";
    public static String level_expense_2_name="已退费";
    //二级维度健康分布
    public static String level_health_fb_0="0";
    public static String level_health_fb_1="1";
    public static String level_health_fb_2="2";
    public static String level_health_fb_3="3";
    public static String level_health_fb_4="4";
    public static String level_health_fb_0_name="未标注";
    public static String level_health_fb_1_name="健康人群";
    public static String level_health_fb_2_name="患病人群";
    public static String level_health_fb_3_name="高危人群";
    public static String level_health_fb_4_name="恢复期人群";
    //三级维度的疾病
    public static String level_disease_1="1";
    public static String level_disease_2="2";
    public static String level_disease_3="3";
    public static String level_disease_4="4";
    public static String level_disease_1_name="高血压";
    public static String level_disease_2_name="糖尿病";
    public static String level_disease_3_name="糖尿病和高血压";
    public static String level_disease_4_name="健康人群";
    public static String getlevelHealthFbName(String key){
        switch (key){
            case "1":{
                return level_health_fb_1_name;
            }
            case "2":{
                return level_health_fb_2_name;
            }
            case "3":{
                return level_health_fb_3_name;
            }
            case "4":{
                return level_health_fb_4_name;
            }
            case "0":{
                return level_health_fb_0_name;
            }
        }
        return "";
    }
    public static String getLevelExpenseName(String key){
        switch (key){
            case "1":{
                return level_expense_1_name;
            }
            case "2":{
                return level_expense_2_name;
            }
            case "0":{
                return level_expense_0_name;
            }
        }
        return "";
    }
    public static String getLevelSexName(String key){
        switch (key){
            case "1":{
                return level_sex_1_name;
            }
            case "2":{
                return level_sex_2_name;
            }
            case "3":{
                return level_sex_3_name;
            }
        }
        return "";
    }
    public static String getLevelGroupName(String key){
        switch (key){
            case "1":{
                return level_group_1_name;
            }
            case "2":{
                return level_group_2_name;
            }
            case "3":{
                return level_group_3_name;
            }
            case "4":{
                return level_group_4_name;
            }
            case "5":{
                return level_group_5_name;
            }
            case "6":{
                return level_group_6_name;
            }
        }
        return "";
    }
    public static String getLevelAgeName(String key){
        switch (key){
            case "1":{
                return level_age_1_name;
            }
            case "2":{
                return level_age_2_name;
            }
            case "3":{
                return level_age_3_name;
            }
            case "4":{
                return level_age_4_name;
            }
            case "5":{
                return level_age_5_name;
            }
            case "6":{
                return level_age_6_name;
            }
        }
        return "";
    }
    public static String getLevelDiseaseName(String key){
        switch (key){
            case "1":{
                return level_disease_1_name;
            }
            case "2":{
                return level_disease_2_name;
            }
            case "3":{
                return level_disease_3_name;
            }
            case "4":{
                return level_disease_4_name;
            }
        }
        return "";
    }
    public static String getStartTime() throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        String todayString = simpleDateFormat.format(today);
        String startDateString = (1900 + today.getYear()) + "-07-01";
        Date startDate = simpleDateFormat.parse(startDateString);
        if (simpleDateFormat.parse(todayString).after(startDate)) {
            return (1900 + today.getYear()) + "-06-30";
        } else {
            return (1900 + today.getYear() - 1) + "-06-30";
        }
    }
    public static String getStartYear() throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        String todayString = simpleDateFormat.format(today);
        String startDateString = (1900 + today.getYear()) + "-07-01";
        Date startDate = simpleDateFormat.parse(startDateString);
        if (simpleDateFormat.parse(todayString).after(startDate)) {
            return (1900 + today.getYear()) + "";
        } else {
            return (1900 + today.getYear() - 1) + "";
        }
    }
    public static String getNowYear() throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        String todayString = simpleDateFormat.format(today);
        String startDateString = (1900 + today.getYear()) + "-06-30";
        Date startDate = simpleDateFormat.parse(startDateString);
        if (simpleDateFormat.parse(todayString).after(startDate)) {
            return (1900 + today.getYear()) + "";
        } else {
            return (1900 + today.getYear() - 1) + "";
        }
    }
    public static String getNowYearByDate(String todayString) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = simpleDateFormat.parse(todayString);
        String startDateString = (1900 + today.getYear()) + "-06-30";
        Date startDate = simpleDateFormat.parse(startDateString);
        if (simpleDateFormat.parse(todayString).after(startDate)) {
            return (1900 + today.getYear()) + "";
        } else {
            return (1900 + today.getYear() - 1) + "";
        }
    }
}

+ 8 - 1
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/DateUtil.java

@ -22,6 +22,7 @@ public class DateUtil {
	public static final String YYYY_MM_DD_HH = "yyyy-MM-dd HH";
	public static final String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
	public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
	public static final String YYYY_M_D_HH_MM_SS = "yyyy/M/d HH:mm:ss";
	/**
	  * 获取现在时间
@ -688,7 +689,13 @@ public class DateUtil {
		long s = (l / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
		return hour + ":" + min +":" + s;
	}
	/**
	 * 时间格式转中文格式
	 */
	public static String dateToChinese(Date date) {
		SimpleDateFormat formatter =   new SimpleDateFormat( "yyyy年MM月dd日 EEEEaaaa hh:mm", Locale.CHINA);
		return formatter.format(date);
	}
//	public static void main(String[] args) {
//		String hour = "12:22:12";
//		System.out.println(Time.valueOf(hour));

+ 192 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/IdCardUtil.java

@ -0,0 +1,192 @@
package com.yihu.wlyy.util;
import org.apache.commons.lang3.StringUtils;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
 * Created by Administrator on 2016.08.17.
 * 身份证工具类
 */
public class IdCardUtil {
//    /**
//     * 根据身份证的号码算出当前身份证持有者的年龄
//     *
//     * @param
//     * @throws Exception
//     */
//    public static int getAgeForIdcard(String card)
//            throws Exception {
//        int age = 0;
//        if (card.length() == 18) {
//            String year = card.substring(6).substring(0, 4);// 得到年份
//            String yue = card.substring(10).substring(0, 2);// 得到月份
//            // String day=CardCode.substring(12).substring(0,2);//得到日
//            Date date = new Date();// 得到当前的系统时间
//            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//            String fyear = format.format(date).substring(0, 4);// 当前年份
//            String fyue = format.format(date).substring(5, 7);// 月份
//            if (Integer.parseInt(yue) <= Integer.parseInt(fyue)) { // 当前月份大于用户出身的月份表示已过生
//                age = Integer.parseInt(fyear) - Integer.parseInt(year) + 1;
//            } else {// 当前用户还没过生
//                age = Integer.parseInt(fyear) - Integer.parseInt(year);
//            }
//        } else if (card.length() == 15) {
//            String uyear = "19" + card.substring(6, 8);// 年份
//            String uyue = card.substring(8, 10);// 月份
//            Date date = new Date();// 得到当前的系统时间
//            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//            String fyear = format.format(date).substring(0, 4);// 当前年份
//            String fyue = format.format(date).substring(5, 7);// 月份
//            // String fday=format.format(date).substring(8,10);
//            if (Integer.parseInt(uyue) <= Integer.parseInt(fyue)) { // 当前月份大于用户出身的月份表示已过生
//                age = Integer.parseInt(fyear) - Integer.parseInt(uyear) + 1;
//            } else {// 当前用户还没过生
//                age = Integer.parseInt(fyear) - Integer.parseInt(uyear);
//            }
//
//        }
//        return age;
//    }
    /**
     * 根据身份证的号码算出当前身份证持有者的年龄
     *
     * @param
     * @throws Exception
     */
    public static int getAgeForIdcard(String idcard) {
        try {
            int age = 0;
            if (StringUtils.isEmpty(idcard)) {
                return age;
            }
            String birth = "";
            if (idcard.length() == 18) {
                birth = idcard.substring(6, 14);
            } else if (idcard.length() == 15) {
                birth = "19" + idcard.substring(6, 12);
            }
            int year = Integer.valueOf(birth.substring(0, 4));
            int month = Integer.valueOf(birth.substring(4, 6));
            int day = Integer.valueOf(birth.substring(6));
            Calendar cal = Calendar.getInstance();
            age = cal.get(Calendar.YEAR) - year;
            //周岁计算
            if (cal.get(Calendar.MONTH) < (month - 1) || (cal.get(Calendar.MONTH) == (month - 1) && cal.get(Calendar.DATE) < day)) {
                age--;
            }
            return age;
        } catch (Exception e) {
        }
        return -1;
    }
    /**
     * 身份证提取出身日期
     *
     * @param card
     * @return
     * @throws Exception
     */
    public static Date getBirthdayForIdcard(String card)
            throws Exception {
        Date b = null;
        if (card.length() == 18) {
            String year = card.substring(6).substring(0, 4);// 得到年份
            String yue = card.substring(10).substring(0, 2);// 得到月份
            String ri = card.substring(12).substring(0, 2);// 得到日
            // String day=CardCode.substring(12).substring(0,2);//得到日
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            b = format.parse(year + "-" + yue + "-" + ri);
        } else if (card.length() == 15) {
            String uyear = "19" + card.substring(6, 8);// 年份
            String uyue = card.substring(8, 10);// 月份
            String uri = card.substring(10, 12);// 得到日
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            b = format.parse(uyear + "-" + uyue + "-" + uri);
        }
        return b;
    }
    /**
     * 根据身份证的号码算出当前身份证持有者的性别
     * 1 女 2 男 3未知
     *
     * @return
     * @throws Exception
     */
    public static String getSexForIdcard(String CardCode)
            throws Exception {
        String sex = Constant.level_sex_3;
        if (CardCode.length() == 18) {
            if (Integer.parseInt(CardCode.substring(16).substring(0, 1)) % 2 == 0) {// 判断性别
                // modifid by lyr 2016-09-29
                // sex =  Constant.level_sex_2;
                sex = Constant.level_sex_1;
                // modifid by lyr 2016-09-29
            } else {
                // modifid by lyr 2016-09-29
                // sex =  Constant.level_sex_1;
                sex = Constant.level_sex_2;
                // modifid by lyr 2016-09-29
            }
        } else if (CardCode.length() == 15) {
            String usex = CardCode.substring(14, 15);// 用户的性别
            if (Integer.parseInt(usex) % 2 == 0) {
                // sex =  Constant.level_sex_2;
                sex = Constant.level_sex_1;
            } else {
                // sex =  Constant.level_sex_1;
                sex = Constant.level_sex_2;
            }
        }
        return sex;
    }
    /**
     * 根据身份证的号码算出当前身份证持有者的性别
     * 1 男 2 女 3未知
     *
     * @return
     * @throws Exception
     */
    public static String getSexForIdcard_new(String CardCode)
            throws Exception {
        String sex = Constant.level_sex_3;
        try {
            if (CardCode.length() == 18) {
                if (Integer.parseInt(CardCode.substring(16).substring(0, 1)) % 2 == 0) {// 判断性别
                    // modifid by lyr 2016-09-29
                    sex = Constant.level_sex_2;
                    // modifid by lyr 2016-09-29
                } else {
                    // modifid by lyr 2016-09-29
                    sex = Constant.level_sex_1;
                    // modifid by lyr 2016-09-29
                }
            } else if (CardCode.length() == 15) {
                String usex = CardCode.substring(14, 15);// 用户的性别
                if (Integer.parseInt(usex) % 2 == 0) {
                    sex = Constant.level_sex_2;
                } else {
                    sex = Constant.level_sex_1;
                }
            }
            return sex;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sex;
    }
}

+ 21 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/ImUtill.java

@ -352,4 +352,25 @@ public class ImUtill {
    public  static final String SESSION_STATUS_END= "1";
    public  static final String CONTENT_TYPE_TEXT= "1";
    /**
     * 判断会话是否存在
     */
    public static Boolean sessionIsExist(String sessionId) {
        Boolean re = false;
        String url = ImService.im_host + "api/v2/sessions/isExist?session_id="+sessionId;
        JSONObject params = new JSONObject();
        String ret = HttpClientUtil.get(url, "UTF-8");
        JSONObject obj = null;
        try {
            obj = new JSONObject(ret);
            if(obj.getInt("status")==200&&sessionId.equals(obj.getString("sessionId"))){
                re = true;
            }
        } catch (Exception e) {
            return null;
        }
        return re;
    }
}

+ 371 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/RSAUtils.java

@ -0,0 +1,371 @@
package com.yihu.wlyy.util;
import com.yihu.wlyy.entity.security.RSA;
import com.yihu.wlyy.repository.security.RSADao;
import com.yihu.wlyy.service.BaseService;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;
import java.util.Date;
/**
 * RSA算法加密/解密工具类。
 *
 * @author fuchun
 * @version 1.0.0, 2010-05-05
 */
@Component
public class RSAUtils {
    @Autowired
    private RSADao rsaDao;
    @Autowired
    private BaseService baseService;
    @PostConstruct
    public void cleanRSA() {
        // 情况缓存表
        rsaDao.deleteAll();
    }
    private static final Logger LOGGER = LoggerFactory.getLogger(RSAUtils.class);
    /**
     * 算法名称
     */
    private static final String ALGORITHOM = "RSA";
    /**
     * 密钥大小
     */
    private static final int KEY_SIZE = 1024;
    /**
     * 默认的安全服务提供者
     */
    private static final Provider DEFAULT_PROVIDER = new BouncyCastleProvider();
    private static KeyPairGenerator keyPairGen = null;
    private static KeyFactory keyFactory = null;
    /**
     * 缓存的密钥对。
     */
    private KeyPair oneKeyPair = null;
    private static RSAUtils rsaUtils = null;
    static {
        try {
            keyPairGen = KeyPairGenerator.getInstance(ALGORITHOM, DEFAULT_PROVIDER);
            keyFactory = KeyFactory.getInstance(ALGORITHOM, DEFAULT_PROVIDER);
        } catch (NoSuchAlgorithmException ex) {
            LOGGER.error(ex.getMessage());
        }
    }
    public synchronized static RSAUtils getInstance(BaseService baseService) {
        if (rsaUtils == null) {
            rsaUtils = new RSAUtils();
            rsaUtils.baseService = baseService;
        }
        return rsaUtils;
    }
    public KeyPair getKeyPair() {
        if (oneKeyPair == null) {
            // 从数据库加载
            RSA rsa = baseService.loadRSA();
            if (rsa == null) {
                // 生成密钥
                generateKeyPair();
            } else {
                // 由数据库取出来
                Object obj = CommonUtil.toObject(rsa.getData());
                oneKeyPair = (KeyPair) obj;
            }
        }
        return oneKeyPair;
    }
    /**
     * 生成并返回RSA密钥对。
     */
    private synchronized KeyPair generateKeyPair() {
        try {
            keyPairGen.initialize(KEY_SIZE, new SecureRandom(DateFormatUtils.format(new Date(), DateUtil.YYYYMMDD).getBytes()));
            oneKeyPair = keyPairGen.generateKeyPair();
            // 保存到数据库
            baseService.saveRSA(oneKeyPair);
            return oneKeyPair;
        } catch (InvalidParameterException ex) {
            LOGGER.error("KeyPairGenerator does not support a key length of " + KEY_SIZE + ".", ex);
        } catch (NullPointerException ex) {
            LOGGER.error("RSAUtils#KEY_PAIR_GEN is null, can not generate KeyPairGenerator instance.", ex);
        }
        return null;
    }
    /**
     * 根据给定的系数和专用指数构造一个RSA专用的公钥对象。
     *
     * @param modulus        系数。
     * @param publicExponent 专用指数。
     * @return RSA专用公钥对象。
     */
    public RSAPublicKey generateRSAPublicKey(byte[] modulus, byte[] publicExponent) {
        RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(new BigInteger(modulus), new BigInteger(publicExponent));
        try {
            return (RSAPublicKey) keyFactory.generatePublic(publicKeySpec);
        } catch (InvalidKeySpecException ex) {
            LOGGER.error("RSAPublicKeySpec is unavailable.", ex);
        } catch (NullPointerException ex) {
            LOGGER.error("RSAUtils#KEY_FACTORY is null, can not generate KeyFactory instance.", ex);
        }
        return null;
    }
    /**
     * 根据给定的系数和专用指数构造一个RSA专用的私钥对象。
     *
     * @param modulus         系数。
     * @param privateExponent 专用指数。
     * @return RSA专用私钥对象。
     */
    public RSAPrivateKey generateRSAPrivateKey(byte[] modulus, byte[] privateExponent) {
        RSAPrivateKeySpec privateKeySpec = new RSAPrivateKeySpec(new BigInteger(modulus), new BigInteger(privateExponent));
        try {
            return (RSAPrivateKey) keyFactory.generatePrivate(privateKeySpec);
        } catch (InvalidKeySpecException ex) {
            LOGGER.error("RSAPrivateKeySpec is unavailable.", ex);
        } catch (NullPointerException ex) {
            LOGGER.error("RSAUtils#KEY_FACTORY is null, can not generate KeyFactory instance.", ex);
        }
        return null;
    }
    /**
     * 使用指定的公钥加密数据。
     *
     * @param publicKey 给定的公钥。
     * @param data      要加密的数据。
     * @return 加密后的数据。
     */
    public byte[] encrypt(PublicKey publicKey, byte[] data) throws Exception {
        Cipher ci = Cipher.getInstance(ALGORITHOM, DEFAULT_PROVIDER);
        ci.init(Cipher.ENCRYPT_MODE, publicKey);
        return ci.doFinal(data);
    }
    /**
     * 使用指定的私钥解密数据。
     *
     * @param privateKey 给定的私钥。
     * @param data       要解密的数据。
     * @return 原数据。
     */
    public byte[] decrypt(PrivateKey privateKey, byte[] data) throws Exception {
        Cipher ci = Cipher.getInstance(ALGORITHOM, DEFAULT_PROVIDER);
        ci.init(Cipher.DECRYPT_MODE, privateKey);
        return ci.doFinal(data);
    }
    /**
     * 使用给定的公钥加密给定的字符串。
     * <p>
     * 若 {@code publicKey} 为 {@code null},或者 {@code plaintext} 为 {@code null} 则返回 {@code
     * null}。
     *
     * @param publicKey 给定的公钥。
     * @param plaintext 字符串。
     * @return 给定字符串的密文。
     */
    public String encryptString(PublicKey publicKey, String plaintext) {
        if (publicKey == null || plaintext == null) {
            return null;
        }
        byte[] data = plaintext.getBytes();
        try {
            byte[] en_data = encrypt(publicKey, data);
            return new String(Hex.encodeHex(en_data));
        } catch (Exception ex) {
            LOGGER.error(ex.getCause().getMessage());
        }
        return null;
    }
    /**
     * 使用默认的公钥加密给定的字符串。
     * <p>
     * 若{@code plaintext} 为 {@code null} 则返回 {@code null}。
     *
     * @param plaintext 字符串。
     * @return 给定字符串的密文。
     */
    public String encryptString(String plaintext) {
        if (plaintext == null) {
            return null;
        }
        byte[] data = plaintext.getBytes();
        try {
            byte[] en_data = encrypt((RSAPublicKey) getKeyPair().getPublic(), data);
            return new String(Hex.encodeHex(en_data));
        } catch (NullPointerException ex) {
            LOGGER.error("keyPair cannot be null.");
        } catch (Exception ex) {
            LOGGER.error(ex.getCause().getMessage());
        }
        return null;
    }
    /**
     * 使用给定的私钥解密给定的字符串。
     * <p>
     * 若私钥为 {@code null},或者 {@code encrypttext} 为 {@code null}或空字符串则返回 {@code null}。
     * 私钥不匹配时,返回 {@code null}。
     *
     * @param privateKey  给定的私钥。
     * @param encrypttext 密文。
     * @return 原文字符串。
     */
    public String decryptString(PrivateKey privateKey, String encrypttext) {
        if (privateKey == null || StringUtils.isBlank(encrypttext)) {
            return null;
        }
        try {
            byte[] en_data = Hex.decodeHex(encrypttext.toCharArray());
            byte[] data = decrypt(privateKey, en_data);
            return new String(data);
        } catch (Exception ex) {
            LOGGER.error(String.format("\"%s\" Decryption failed. Cause: %s", encrypttext, ex.getCause().getMessage()));
        }
        return null;
    }
    /**
     * 使用默认的私钥解密给定的字符串。
     * <p>
     * 若{@code encrypttext} 为 {@code null}或空字符串则返回 {@code null}。
     * 私钥不匹配时,返回 {@code null}。
     *
     * @param encrypttext 密文。
     * @return 原文字符串。
     */
    public String decryptString(String encrypttext) {
        if (StringUtils.isBlank(encrypttext)) {
            return null;
        }
        try {
            byte[] en_data = Hex.decodeHex(encrypttext.toCharArray());
            byte[] data = decrypt((RSAPrivateKey) getKeyPair().getPrivate(), en_data);
            return new String(data);
        } catch (NullPointerException ex) {
            LOGGER.error("keyPair cannot be null.");
        } catch (Exception ex) {
            LOGGER.error(String.format("\"%s\" Decryption failed. Cause: %s", encrypttext, ex.getMessage()));
        }
        return null;
    }
    /**
     * 使用默认的私钥解密由JS加密(使用此类提供的公钥加密)的字符串。
     *
     * @param encrypttext 密文。
     * @return {@code encrypttext} 的原文字符串。
     */
    public String decryptStringByJs(String encrypttext) {
        String text = decryptString(encrypttext);
        if (text == null) {
            return null;
        }
        return StringUtils.reverse(text);
    }
    /**
     * 返回已初始化的默认的公钥。
     */
    public RSAPublicKey getDefaultPublicKey() {
        KeyPair keyPair = getKeyPair();
        if (keyPair != null) {
            return (RSAPublicKey) keyPair.getPublic();
        }
        return null;
    }
    /**
     * 返回已初始化的默认的私钥。
     */
    public RSAPrivateKey getDefaultPrivateKey() {
        KeyPair keyPair = getKeyPair();
        if (keyPair != null) {
            return (RSAPrivateKey) keyPair.getPrivate();
        }
        return null;
    }
    public String getModulus() {
        return new String(Hex.encodeHex(getDefaultPublicKey().getModulus().toByteArray()));
    }
    public String getExponent() {
        return new String(Hex.encodeHex(getDefaultPublicKey().getPublicExponent().toByteArray()));
    }
    public static byte[] getPublicGovKey2() throws IOException {
        byte[] buffer = null;
        InputStream fis = null;
        ByteArrayOutputStream bos = null;
        try {
            fis = RSAUtils.class.getClassLoader().getResourceAsStream("PublicGov.key");
            bos = new ByteArrayOutputStream(1000);
            byte[] b = new byte[1000];
            int n;
            while ((n = fis.read(b)) != -1) {
                bos.write(b, 0, n);
            }
            buffer = bos.toByteArray();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fis != null)
                fis.close();
            if (bos != null)
                bos.close();
        }
        return buffer;
    }
    public static byte[] getPublicGovKey() {
        return sehrCrypto.sehrCrypto.ReadFileBytes(RSAUtils.class.getClassLoader().getResource("PublicGov.key").getPath());
    }
    public static void main(String[] args) {
        try {
            byte[] t1 = getPublicGovKey2();
            byte[] t2 = getPublicGovKey();
            System.out.println(t1);
            System.out.println(t2);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void setBaseService(BaseService baseService) {
        this.baseService = baseService;
    }
}

+ 248 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/SOAPUtil.java

@ -0,0 +1,248 @@
package com.yihu.wlyy.util;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
public class SOAPUtil {
	private static Logger logger = LoggerFactory.getLogger(SOAPUtil.class);
	private static String defaultUrl;
	private static String defaultNamespace;
	private static byte[] publicKey;
	private static byte[] bKEY;
	static {
		try {
			publicKey = RSAUtils.getPublicGovKey(); // 卫计委公钥
			defaultUrl = SystemConf.getInstance().getXMGuahaoUrl();
			defaultNamespace = SystemConf.getInstance().getXMGuahaoNamespace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 文件内容替换
	 */
	private static String replace(String inFileName, JSONArray params) throws IOException {
		String xml = XmlToString(inFileName);
		if (params == null || params.length() == 0) {
			return xml;
		}
		for (int i = 0; i < params.length(); i++) {
			JSONObject json = params.getJSONObject(i);
			xml = xml.replace(json.getString("key"), json.getString("value"));
		}
		return xml;
	}
	private static org.jdom.Document load(String path) {
		org.jdom.Document document = null;
		try {
			SAXBuilder reader = new SAXBuilder();
			document = reader.build(new File(path));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return document;
	}
	private static String XmlToString(String path) {
		org.jdom.Document document = load(path);
		Format format = Format.getPrettyFormat();
		format.setEncoding("UTF-8");// 设置编码格式
		StringWriter out = null; // 输出对象
		String sReturn = ""; // 输出字符串
		XMLOutputter outputter = new XMLOutputter();
		out = new StringWriter();
		try {
			outputter.output(document, out);
		} catch (IOException e) {
			e.printStackTrace();
		}
		sReturn = out.toString();
		return sReturn;
	}
	/**
	 * 获取soap消息主体
	 * @return
     */
	private static String getRequestBody(String fileName,JSONArray params) throws Exception
	{
		String xml = SOAPUtil.class.getClassLoader().getResource("soap/guaihao/" + fileName + ".xml").getFile();
		return replace(xml, params);
	}
	/**
	 * 从输入流中读取数据
	 * @param inStream
	 * @return
	 * @throws IOException
	 * @throws Exception
	 */
	public static byte[] readInputStream(InputStream inStream) throws IOException {
		ByteArrayOutputStream outStream = null;
		byte[] data = null;
		try {
			outStream = new ByteArrayOutputStream();
			byte[] buffer = new byte[1024];
			int len = 0;
			while ((len = inStream.read(buffer)) != -1) {
				outStream.write(buffer, 0, len);
			}
			data = outStream.toByteArray();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (outStream != null) {
				outStream.close();
			}
			if (inStream != null) {
				inStream.close();
			}
		}
		return data;
	}
	/**
	 * 获取身份证据
	 */
	private static String getStrCredential() {
		Document document = DocumentHelper.createDocument();
		Element root = document.addElement("root");
		root.addElement("org").addAttribute("code", "jkzl").addText("健康之路");
		root.addElement("visitor").addAttribute("type", "0").addAttribute("code", "jtqy").addAttribute("key", "jtqy").addText("健康之路");
		return document.asXML();// 身份证据
	}
	/**
	 * 将字符串转成unicode
	 * @param str 待转字符串
	 * @return unicode字符串
	 */
	private static String string2Unicode(String str) {
		str = (str == null ? "" : str);
		String tmp;
		StringBuffer sb = new StringBuffer(1000);
		char c;
		int i, j;
		sb.setLength(0);
		for (i = 0; i < str.length(); i++) {
			c = str.charAt(i);
			sb.append("\\u");
			j = (c >>> 8); // 取出高8位
			tmp = Integer.toHexString(j);
			if (tmp.length() == 1)
				sb.append("0");
			sb.append(tmp);
			j = (c & 0xFF); // 取出低8位
			tmp = Integer.toHexString(j);
			if (tmp.length() == 1)
				sb.append("0");
			sb.append(tmp);
		}
		return (new String(sb));
	}
	/******************************************************************************************/
	/**
	 * 使用默认服务地址
     */
	public static String post(String api, JSONArray params) throws Exception {
		return post(defaultUrl,defaultNamespace,api,params);
	}
	public static String post(String urlString,String namespace,String api,JSONArray params) throws Exception{
		String body = getRequestBody(api,params);
		return post(urlString,namespace,api,body);
	}
	/**
	 * webservice 调用接口
     */
	public static String post(String urlString,String namespace,String api, String body) throws Exception {
		OutputStream out = null;
		try {
			URL url = new URL(urlString);
			HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
			httpConn.setRequestProperty("Content-Length", String.valueOf(body.length()));
			httpConn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
			httpConn.setRequestProperty("soapActionString", namespace + api);
			httpConn.setRequestMethod("POST");
			httpConn.setDoOutput(true);
			httpConn.setDoInput(true);
			out = httpConn.getOutputStream();
			out.write(body.getBytes());
			byte[] datas = readInputStream(httpConn.getInputStream());
			String result = new String(datas, "UTF-8");
			Document document = DocumentHelper.parseText(result);
			Element rootElement = document.getRootElement();
			Element bodyElement = rootElement.element("Body");
			Element responseElement = bodyElement.element(api + "Response");
			Element resultElement = responseElement.element(api + "Result");
			return resultElement.getText();
		} catch (Exception e) {
			logger.error("SOAPUtil post error:", e);
			throw new Exception("当前的网络情况较差,请稍候重试");
		} finally {
			if (out != null) {
				out.close();
				out.flush();
			}
		}
	}
	/**
	 * 对称加密后结果
	 */
	public static String[] getCredential(String strCondition, boolean credential) throws UnsupportedEncodingException {
		String strCredential = null;
		String condition = null;
		String strKey = null;
		// 生成临时对称密钥bKEY
		if (bKEY == null) {
			bKEY = sehrCrypto.sehrCrypto.GenerateKey128();
		}
		if (credential) {
			// 对身份证据Compress()压缩
			byte[] bSource = getStrCredential().getBytes("UTF-16LE");
			byte[] pbyteSource = sehrCrypto.sehrCrypto.Compress(bSource);
			// 采用bKEY对称加密Encrypt()
			byte[] encryptSource = sehrCrypto.sehrCrypto.Encrypt(pbyteSource, bKEY);
			// 再编码EncodeU()
			strCredential = new String(sehrCrypto.sehrCrypto.EncodeU(encryptSource));
		}
		if (StringUtils.isNotEmpty(strCondition)) {
			// 对身份证据Compress()压缩
			byte[] pbyteSource = sehrCrypto.sehrCrypto.Compress(strCondition.getBytes("UTF-16LE"));
			// 采用bKEY对称加密Encrypt()
			byte[] encryptSource = sehrCrypto.sehrCrypto.Encrypt(pbyteSource, bKEY);
			// 再编码EncodeU()
			condition = new String(sehrCrypto.sehrCrypto.EncodeU(encryptSource));
		}
		byte[] bKeyRsa = sehrCrypto.sehrCrypto.RSAEncrypt(bKEY, publicKey);
		strKey = new String(sehrCrypto.sehrCrypto.EncodeU(bKeyRsa));
		return new String[] { condition, strCredential, strKey };
	}
}

+ 63 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/SendPatientUtil.java

@ -0,0 +1,63 @@
package com.yihu.wlyy.util;
import org.json.JSONArray;
import org.json.JSONObject;
public class SendPatientUtil extends  Thread {
	private String from;
	private String fromName;
	private String to;
	private String contentType;
	private String content;
	private String title;
	private String type;
	private String teamCode;
	//private ImUtill imUtill;
	public SendPatientUtil(String from, String fromName, String to, String contentType, String content, String title, String type, String teamCode){
		this.from = from;
		this.fromName = fromName;
		this.to = to;
		this.contentType = contentType;
		this.content = content;
		this.title = title;
		this.type = type;
		this.teamCode =teamCode;
		//this.imUtill=imUtill;
	}
	public String sendToPatient(String from,String fromName,String to,String contentType,String content,String title,String type,String teamCode){
		JSONArray jsonArray = ImUtill.getParticipants(to+"_"+teamCode+"_"+type);
		JSONObject participants = new JSONObject();
		for(Object object:jsonArray){
			JSONObject jsonObject = (JSONObject)object;
			participants.put(jsonObject.getString("id"),jsonObject.get("role"));
		}
		if(participants.isNull(from)){
			participants.put(from,0);
		}
		if(participants.isNull(to)){
			participants.put(from,0);
		}
		participants.put(to,0);
		if(!"4".equals(contentType)){
			contentType = "0";
		}
		String sessionId = to+"_"+teamCode+"_"+type;
		Boolean flag = ImUtill.sessionIsExist(sessionId);
		if(!flag){
			JSONObject sessionJson  = ImUtill.createSession(participants,ImUtill.SESSION_TYPE_MUC,title,sessionId);
			if(sessionJson.getInt("status")==-1){
				throw  new RuntimeException(sessionJson.getString("message"));
			}
		}
		return ImUtill.sendImMsg(from,fromName,sessionId,contentType,content,"1");
	}
	public void run(){
		this.sendToPatient(from,fromName,to,contentType,content,title,type,teamCode);
	}
}

+ 13 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/SystemConf.java

@ -240,7 +240,20 @@ public class SystemConf {
		domain = StringUtils.isEmpty(port) ? "" : "/" + domain;
		return "http://" + getServerIp() + port + domain + "/";
	}
	/******************************** 挂号配置 ********************************************/
	/**
	 * 获取厦门预约服务地址
	 */
	public String getXMGuahaoUrl() {
		return getSystemProperties().getProperty("guahao_url");
	}
	/**
	 * 获取厦门预约服务命名空间
	 */
	public String getXMGuahaoNamespace() {
		return getSystemProperties().getProperty("guahao_namespace");
	}
//	public static void main(String[] args) {
//		System.out.println(getInstance().getServerUrl());
//	}

+ 193 - 0
patient-co-manage/wlyy-manage/src/main/java/com/yihu/wlyy/util/WeiXinOpenIdUtils.java

@ -0,0 +1,193 @@
package com.yihu.wlyy.util;
import com.yihu.wlyy.entity.Patient;
import com.yihu.wlyy.repository.PatientDao;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by Trick on 2017/4/20.
 */
@Component
public class WeiXinOpenIdUtils {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    PatientDao patientDao;
    private Map<Integer, String> relations = new HashMap<>();
    @PostConstruct
    public void init() {
        relations.put(0, "其他");
        relations.put(1, "父亲");
        relations.put(2, "母亲");
        relations.put(3, "老公");
        relations.put(4, "老婆");
        relations.put(5, "儿子");
        relations.put(6, "女儿");
        relations.put(7, "未知");
    }
    //关系翻译
    public String getRelation(int relation) {
        return relations.get(relation);
    }
    /**
     * 先按照家庭关系“父亲→母亲→老公→老婆→儿子→女儿→其他”的顺序,获取openid
     *
     * @param code 推送人
     * @return
     */
    public JSONObject getFamilyOpenId(String code) {
        /**
         * 按关系和时间排序
         */
        StringBuffer sql = new StringBuffer("SELECT * FROM wlyy_patient_family_member t WHERE t.patient = '" + code + "' ORDER BY t.family_relation ASC ,t.czrq DESC");
        JSONObject result = new JSONObject();
        List<Map<String, Object>> members = jdbcTemplate.queryForList(sql.toString());
        List<Map<String, Object>> others = new ArrayList<>();
        if (members != null && members.size() > 0) {
            for (Map<String, Object> member : members) {
                if ((int) member.get("family_relation") == 0) {
                    others.add(member);
                } else {
                    String memberCode = (String) member.get("family_member");
                    if (StringUtils.isNotBlank(memberCode)) {
                        Patient p = patientDao.findByCode(memberCode);
                        if (StringUtils.isNotBlank(p.getOpenid())) {
                            result.put("member", p);
                            result.put("relation", (int) member.get("family_relation"));
                            return result;
                        }
                    }
                }
            }
        }
        //查询为关系为其他的openid
        if (others != null && others.size() > 0) {
            for (Map<String, Object> other : others) {
                String memberCode = (String) other.get("family_member");
                if (StringUtils.isNotBlank(memberCode)) {
                    Patient p = patientDao.findByCode(memberCode);
                    if (StringUtils.isNotBlank(p.getOpenid())) {
                        result.put("member", p);
                        result.put("relation", (int) other.get("family_relation"));
                        return result;
                    }
                }
            }
        }
        result.put("member",new Patient());
        return result;
    }
    /**
     * 查找代理人的openId
     * @param code
     * @return
     */
    public JSONArray getAgentOpenId(String code,String openid) {
        JSONArray result = new JSONArray();
        StringBuffer sql = new StringBuffer("SELECT * FROM wlyy_patient_family_member t WHERE t.patient = '" + code + "' and t.is_authorize =1 ");
        List<Map<String, Object>> members = jdbcTemplate.queryForList(sql.toString());
        if (members != null && members.size() > 0) {
            Map<String,String> map = new HashMap<>();
            for (Map<String, Object> member : members) {
                String memberCode = (String) member.get("family_member");
                if (StringUtils.isNotBlank(memberCode)) {
                    Patient p = patientDao.findByCode(memberCode);
                    if (StringUtils.isNotBlank(p.getOpenid())&&!p.getOpenid().equals(openid)) {
                        if(!map.containsKey(p.getOpenid())){
                            map.put(p.getOpenid(),p.getOpenid());
                            JSONObject json = new JSONObject();
                            json.put("member", p);
                            json.put("relation", (int) member.get("family_relation"));
                            result.put(json);
                        }
                    }
                }
            }
        }
        return result;
    }
    public String getTitleMes(Patient p, int ralation, String dealerName) throws Exception {
        return "因您是" + relations.get(familyRelationTrans(p, ralation)) + p.getName() + "的代理人,故请将该消息传达给" + dealerName + ":";
    }
    /**
     * 家庭关系转换
     *
     * @param patient  居民
     * @param relation 关系 1父亲 2母亲 3老公 4老婆 5儿子 6女儿 7其他
     * @return
     */
    public int familyRelationTrans(Patient patient, int relation) throws Exception {
        int relationTrans = 0;
        switch (relation) {
            case 1:
            case 2:
                if (patient.getSex() == 1) {
                    relationTrans = 5;
                } else if (patient.getSex() == 2) {
                    relationTrans = 6;
                } else {
                    relationTrans = 0;
                }
                if (relationTrans == 0) {
                    if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("1")) {
                        relationTrans = 6;
                    } else if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("2")) {
                        relationTrans = 5;
                    }
                }
                break;
            case 3:
                relationTrans = 4;
                break;
            case 4:
                relationTrans = 3;
                break;
            case 5:
            case 6:
                if (patient.getSex() == 1) {
                    relationTrans = 1;
                } else if (patient.getSex() == 2) {
                    relationTrans = 2;
                } else {
                    relationTrans = 0;
                }
                if (relationTrans == 0) {
                    if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("1")) {
                        relationTrans = 2;
                    } else if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("2")) {
                        relationTrans = 1;
                    }
                }
                break;
        }
        return relationTrans;
    }
}

+ 120 - 1
patient-co-manage/wlyy-manage/src/main/resources/application.yml

@ -93,6 +93,45 @@ wlyyService:
  api: http://192.168.131.113:8081
image:
  imgUrlDomain: http://172.19.103.54/
sign:
  check_upload: http://172.19.103.87:8011/wlyy_service
server:
  server_url: http://weixin.xmtyw.cn/wlyy-dev/
wechat:
  appId: wxd03f859efdf0873d
  appSecret: 2935b54b53a957d9516c920a544f2537
  wechat_token: 27eb3bb24f149a7760cf1bb154b08040
  wechat_base_url: http%3a%2f%2fweixin.xmtyw.cn%2fwlyy-dev
  accId: gh_ffd64560fb21
  message:
   ##医生追加建议提醒 --签约邀请
   doctor_invitel_template: TLWrBtNE2kBJaFCdVzDOOnQC8N2TtRY9ZxEzwZXQcR0
   #咨询回复
   template_consult_notice: qSOW0DBxO3qEBm4ucG0Ial0jxsOyD7_f2TFK5e-mQEc
   #签约成功
   template_sign_success: hDWV_sknKlhxhOwR5h68OCXbAhRpcgnx9INrT8BybE8
   #签约失败
   template_sign_failed: ezgttXE7rG4rAboQK2ituG1dKq4PeyCj3LxGJWO_vOA
   #健康指导提醒
   template_health_notice: 128RCfyCHi22jW8PZzo7vabKMsA3SBv5VeHaDPr2Bhw
   #解约提醒
   template_termination:  LrrzHjnIF67ww5uQUvSiv3_pVKJiIK4ZE3fKrvsT0AE
   #预约成功
   template_appoint_success:  Bo2yqNczSU9zkg4wXoouv9tSeefZ6TziggWL3dTXPYE
   #预约取消
   template_appoint_failed:  pErTBTdweIdrNRf_1Oo62YtQC0aHwPvtLaCzw44JzCQ
   #缴费提醒
   template_expenses_remind:  BkTGJ8S18qZ3DfaptAXnZznAk8RJjx9v93og5vyO0bs
   #健康教育
   template_healthy_article: LA7erINJ0CSsG2G_ZCrgsDaX3krhsI4qg_NSHEyL_l4
   #医生变更
   template_doctor_change:  TNIDMjduVKgVL4-k71umYLpHROvFB8K6mmm8aZC_EH8
   #问卷调查
   template_doctor_survey:  IjQvzBy0PLeft2kN9mdBhACXPE9I_jyJywJ6B-JRxsY
   #审核结果通知
   template_doctor_audit:  OFyLUeBW3r9trWw-i6pbB1sPSTD4J2recCv_mc-gKxA
   #服务结果通知
   template_doctor_service:  ezr5RlX0nvh7bGU9aVsGDMJbjKDp1uMKP-AGGYXwI5g
---
spring:
  profiles: test
@ -131,6 +170,46 @@ wlyyService:
  api: http://ehr.yihu.com/wlyy/
image:
  imgUrlDomain: http://172.19.103.54/
sign:
  check_upload: http://172.19.103.88:8011/wlyy_service
server:
  server_url: http://ehr.yihu.com/wlyy/
wechat:
  appId: wx1f129f7b51701428
  appSecret: 988f005d8309ed1795939e0f042431fb
  wechat_token: 27eb3bb24f149a7760cf1bb154b08040
  wechat_base_url: http%3a%2f%2fehr.yihu.com%2fwlyy
  accId: gh_ffd64560fb21
  message:
    ##医生追加建议提醒 --签约邀请
    doctor_invitel_template:  uXdBJVbrhKG-WLaCG4s8C4SXSr2kknQ94vKFt-3rIiA
    #咨询回复
    template_consult_notice: dr4QNyFoRvVsf8uWxXMC1dRyjwnbUuJwJ21vBLhf18
    #签约成功
    template_sign_success: VYGj8OUKj6FH4i4_nZS2UAHurJxQHx-7_OBPILIdB8s
    #签约失败
    template_sign_failed: m221Jrkm0UUY00ExTCpQNTB8t_1U_V4LR9Bg8BgH9-o
    #健康指导提醒
    template_health_notice: 5Nts8lA_at9Cd1JuTK-qDxx95lchpcmUfPTEwYDgXYQ
    #解约提醒
    template_termination:  qZm1NwSueAsbHaOf9DrnLoSj0X5gZuh9W7aDYzLWNds
    #预约成功
    template_appoint_success:  vU5x2tGyk1zUngBrEqMfnFqqMa6M8J98w8k5MCSUYM
    #预约取消
    template_appoint_failed:  r-bVEKgXVyl8O96saoJXlLd7DX1zW7fXA4a0PZHxiQM
    #缴费提醒
    template_expenses_remind:  pZby4Mz3H5angmjGTuvXzo9lwlaVfEiqORwI8soI-5E
    #健康教育
    template_healthy_article: aO_qqk5nAXaGXhsikPVLNelqzwlrp1LTPfIQ1qRMpxo
    #医生变更
    template_doctor_change:  V5h0F84t972kUzQvWy8qYrgdaYGJVj10pFeFVl19Nb8
    #问卷调查
    template_doctor_survey:  OqQXrb-e43_TJpq_70_K_y6vYJgY5mpjFYY4c5RWFP4
    #审核结果通知
    template_doctor_audit:  lCtOgJgL1tBJbAytqN7cn-FgCH_Usg99FENEy2TrC08
    #服务结果通知
    template_doctor_service: i34rq3xFLnpf_VN2Jor9n2YlQqJMM7oXyYvuctriISw
---
spring:
  profiles: prod
@ -167,4 +246,44 @@ doctorAssistant:
wlyyService:
  api: http://www.xmtyw.cn/wlyy/
image:
  imgUrlDomain: http://www.xmtyw.cn/
  imgUrlDomain: http://www.xmtyw.cn/
sign:
  check_upload: http://59.61.92.90:8072/wlyy_service
server:
  server_url: http://www.xmtyw.cn/wlyy/
wechat:
  appId: wxad04e9c4c5255acf
  appSecret: ae77c48ccf1af5d07069f5153d1ac8d3
  wechat_token: 27eb3bb24f149a7760cf1bb154b08040
  wechat_base_url: http%3a%2f%2fwww.xmtyw.cn%2fwlyy
  accId: gh_ffd64560fb21
  message:
   ##医生追加建议提醒 --签约邀请
   doctor_invitel_template: MQn79bx1ofb6hekhmRIuqLU7KjySJQzaBzrimgqVrzA
   #咨询回复
   template_consult_notice: 0mF_vHj-ILx8EH8DwzmAi7LqzjqYiU9IrSRRmziTZyc
   #签约成功
   template_sign_success: 0D2vYZVRzFz15p9Y_pkZ1DKutDq8UOsks79FXUKS0tA
   #签约失败
   template_sign_failed: My2VNERjJt4NXR4Ibh42pdrP6B6ka8rQxZeWinQh99s
   #健康指导提醒
   template_health_notice: uv31ES_VCmq3tBYtyGmEQvIwU_zh9LDhF3bFpbIUt5g
   #解约提醒
   template_termination:  C0tdXtA_8k-Cy4a1EkzQuI877vqaqAtRkc-e_Gsd7sk
   #预约成功
   template_appoint_success:  FY3Pqa66tHIE1Fv-irbFBPOh5cYP71fkOzfZKH4S-Fo
   #预约取消
   template_appoint_failed:  tldWEb9AN7p_RoHoD8ml0GxWW3V1V_mpEEhp2v6p56s
   #缴费提醒
   template_expenses_remind:  AcrlihhoGbm22A8cdFFDQ4u38ptRw0aiIPf-aGvNxMM
   #健康教育
   template_healthy_article: a5-ZGf-IUUULsuRNoHWQiBMU6pSYhLgPPqV67SjdLRo
   #医生变更
   template_doctor_change:  dtzSHImbPKfwcrjWlJEjAw3lGlvrLjsobSOE8g4adZA
   #问卷调查
   template_doctor_survey:  8ZWKJmoJ7VR7Uk4YS7aa0Z94QzCkxsyTW6R4CHhUJII
   #审核结果通知
   template_doctor_audit:  egrX5Larpkv8opQW67_hwsZoT0OHwwUpE1v7HeU_Jnw
   #服务结果通知
   template_doctor_service:  xhi1LEudiZwJfZylOHuZNo8EiA73GtSshPQv5XOt9Lk

+ 104 - 0
patient-co-manage/wlyy-manage/src/main/resources/system.properties

@ -0,0 +1,104 @@
#-------------------------共同配置-----------------------------#
# 预约配置参数
guahao_url = http://www.xmsmjk.com/UrpNetService/ReservationNet.asmx
guahao_namespace = http://www.zysoft.com.cn/
# 基卫对接服务地址
jw_url = http://59.61.92.90:8072/wlyy_service
# EHR档案服务地址
ehr_used = false
ehr_services = http://localhost:9009/api/v1.0/
ehr_services_base = http://localhost:10220/api/v1.0/
# 微信图文消息URL
doctor_qrcode_url=https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&amp;redirect_uri={server}%2fwx%2fhtml%2fssgg%2fhtml%2fdoctor-homepage-new.html&amp;response_type=code&amp;scope=snsapi_base&amp;state={doctorCode}#wechat_redirect
doctor_hos_qrcode_url=https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&amp;redirect_uri={server}%2fwx%2fhtml%2fqygl%2fhtml%2fsearch-doctor.html&amp;response_type=code&amp;scope=snsapi_base&amp;state={hospital}#wechat_redirect
doctor_subscribe_url=https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&amp;redirect_uri={server}%2fwx%2fhtml%2fqygl%2fhtml%2fsigning-welcome.html&amp;response_type=code&amp;scope=snsapi_base&amp;state=code#wechat_redirect
doctor_town_qrcode_url=https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&amp;redirect_uri={server}%2fwx%2fhtml%2fqygl%2fhtml%2fsearch-community.html&amp;response_type=code&amp;scope=snsapi_base&amp;state={town}#wechat_redirect
doctor_qrcode_pic_url={server}/images/familycontract.png
doctor_invitel_url=https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&redirect_uri={server}%2fwx%2fhtml%2fssgg%2fhtml%2fdoctor-homepage-new.html&response_type=code&scope=snsapi_base&state={doctorCode}__{invilogcode}__{currentPatient}__{currentZH}__{currentName}#wechat_redirect
#就诊记录
patient_visit_url = https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&amp;redirect_uri={server}%2fwx%2fhtml%2fjkda%2fhtml%2fjiuzhenjilu.html&amp;response_type=code&amp;scope=snsapi_base&amp;state=STATE#wechat_redirect
#检查检验
patient_inspect_url =https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&amp;redirect_uri={server}%2fwx%2fhtml%2fjkda%2fhtml%2fjianchajianyan.html&amp;response_type=code&amp;scope=snsapi_base&amp;state=STATE#wechat_redirect
#社区体检
patient_examination_url=https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&amp;redirect_uri={server}%2fwx%2fhtml%2fjkda%2fhtml%2fjiankangtijian.html&amp;response_type=code&amp;scope=snsapi_base&amp;state=STATE#wechat_redirect
#处方记录
patient_prescription_url=https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&amp;redirect_uri={server}%2fwx%2fhtml%2fprescription%2fhtml%2fprescription_records.html&amp;response_type=code&amp;scope=snsapi_base&amp;state=STATE#wechat_redirect
#居民取药码
patient_QRCode_url=https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&amp;redirect_uri={server}%2fwx%2fhtml%2fprescription%2fhtml%2fmy-medicine-code.html&amp;response_type=code&amp;scope=snsapi_base&amp;state=STATE#wechat_redirect
#就诊记录
patient_visit_pic ={server}/images/visit.png
#检查检验
patient_inspect_pic ={server}/images/inspect.png
#社区体检
patient_examination_pic={server}/images/examination.png
#处方记录
patient_prescription_pic={server}/images/prescriptionRecords.png
#居民取药码
patient_QRCode_pic={server}/images/patientQRCode.png
patient_operatinginstrutions_pic_url={server}/images/operatinginstructions.png
patient_booking_pic_url={server}/images/booking.png
patient_device_pic_url={server}/images/device.png
patient_family_pic_url={server}/images/myfamily.png
patient_sign_again_pic_url={server}/images/renew.png
patient_consult_url=https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&amp;redirect_uri={server}%2fwx%2fhtml%2fintroduction%2fhtml%2fyszx.html&amp;response_type=code&amp;scope=snsapi_base&amp;state=code#wechat_redirect
patient_booking_url=https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&amp;redirect_uri={server}%2fwx%2fhtml%2fintroduction%2fhtml%2fyygh.html&amp;response_type=code&amp;scope=snsapi_base&amp;state=code#wechat_redirect
patient_device_url=https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&amp;redirect_uri={server}%2fwx%2fhtml%2fintroduction%2fhtml%2ftzsb.html&amp;response_type=code&amp;scope=snsapi_base&amp;state=code#wechat_redirect
patient_family_url=https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&amp;redirect_uri={server}%2fwx%2fhtml%2fintroduction%2fhtml%2ffamily.html&amp;response_type=code&amp;scope=snsapi_base&amp;state=code#wechat_redirect
patient_sign_again_url=https://open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&amp;redirect_uri={server}%2fwx%2fhtml%2fxuqian%2fhtml%2finformation.html&amp;response_type=code&amp;scope=snsapi_base&amp;state=code#wechat_redirect
# SMS短信配置
yihu_sms_url=https://smsapi.ums86.com:9600/sms/Api/Send.do
yihu_sms_code=229336
yihu_sms_name=jkzldxjr
yihu_sms_password=jkzldxjrpwd123
yihu_guahao_url=http://ssotest.yihu.cn/OpenPlatform/cgiBin/1.0/
yihu_guahao_appid=sanshi
yihu_guahao_secret=sanshi
# 上传文件配置
upload_temp_path=/var/local/temp
image_path=/var/local/upload/images
voice_path=/var/local/upload/voice
chat_file_path=/var/local/upload/chat
#系统管理员token
admin_uid=admin
admin_token=0a5c5258-8863-4b07-a3f9-88c768528ab4
# 签约到期JOB触发时间,每年7月1日零点
sign_end_job_trigger= 0 0 0 1 7 ?
# 续签提醒JOB触发时间 (每7天一次)
sign_again_job_trigger=59 59 23 7/7 * ?
# 续签提醒JOB停止时间
sign_again_job_end=2017-10-1 00:00:00
# 产检提醒JOB触发时间 (每天6点一次)
prenatal_inspector_job_trigger=0 0 6 * * ?
evaluate_score_job = 0 0 */2 * * ?
#续方支付到期,每天0点触发
prescription_pay_overdue_job = 0 0 0 * * ?
#统一支付平台支付成功后页面跳转地址
return_url={server}/wx/html/qygl/html/pay_result.html
#统一支付平台支付接口地址
bindCardType=onepay.sicard.bind.info
chargeType=onepay.trade.medical.charge
chargeQueryType=onepay.trade.medical.charge.query
createSicardType=onepay.sicard.createurl
receiveNotify=wlyy.onepay.receiveNotify
returnUrl=wlyy.onepay.returnUrl
#长处方
#redist订阅消息主题
redisMessage=redisMessage
#是否需要药师审方
pharmacistExaminationType=false

+ 0 - 2
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/third/zysoft/BookingController.java

@ -63,8 +63,6 @@ public class BookingController extends WeixinBaseController {
    @Autowired
    private PatientService patientService;
    @Autowired
    private DoctorService doctorService;
    @Autowired
    private SMSDao smsDao;