Browse Source

Merge branch 'develop_znwz_zzcx_xlcs' into 122run

gaodm 5 years ago
parent
commit
8bd1b9542c
42 changed files with 2079 additions and 41 deletions
  1. 11 1
      config-server/src/main/resources/shared/xlcs-service-dev.yml
  2. 11 1
      config-server/src/main/resources/shared/xlcs-service-local.yml
  3. 6 1
      config-server/src/main/resources/shared/xlcs-service-pre.yml
  4. 6 1
      config-server/src/main/resources/shared/xlcs-service-pro.yml
  5. 11 1
      config-server/src/main/resources/shared/xlcs-service-test.yml
  6. 1 0
      docs/032.20200225心理健康猜测试初始化脚本/init_xlcs.sql
  7. 19 0
      docs/032.20200225心理健康猜测试初始化脚本/xlcs20200304.sql
  8. 26 0
      xlcs-service/src/main/java/com/diagbot/config/IdcConfigurer.java
  9. 33 0
      xlcs-service/src/main/java/com/diagbot/dto/GetInquiryDetailDTO.java
  10. 40 0
      xlcs-service/src/main/java/com/diagbot/dto/HistoryInquiryDTO.java
  11. 10 0
      xlcs-service/src/main/java/com/diagbot/dto/InquiryDTO.java
  12. 6 0
      xlcs-service/src/main/java/com/diagbot/dto/SaveInquiryDTO.java
  13. 67 0
      xlcs-service/src/main/java/com/diagbot/entity/Client.java
  14. 47 0
      xlcs-service/src/main/java/com/diagbot/entity/Constants.java
  15. 25 1
      xlcs-service/src/main/java/com/diagbot/entity/InquiryInfo.java
  16. 53 0
      xlcs-service/src/main/java/com/diagbot/entity/JSONResponseBean.java
  17. 16 0
      xlcs-service/src/main/java/com/diagbot/entity/Option.java
  18. 142 0
      xlcs-service/src/main/java/com/diagbot/entity/Request.java
  19. 120 0
      xlcs-service/src/main/java/com/diagbot/entity/Response.java
  20. 29 0
      xlcs-service/src/main/java/com/diagbot/entity/SystemHeader.java
  21. 327 21
      xlcs-service/src/main/java/com/diagbot/facade/InquiryInfoFacade.java
  22. 31 6
      xlcs-service/src/main/java/com/diagbot/facade/SysSetFacade.java
  23. 36 0
      xlcs-service/src/main/java/com/diagbot/idc/AbstractIdCreater.java
  24. 26 0
      xlcs-service/src/main/java/com/diagbot/idc/IdCreater.java
  25. 62 0
      xlcs-service/src/main/java/com/diagbot/idc/InvisibleIdCreater.java
  26. 71 0
      xlcs-service/src/main/java/com/diagbot/idc/VisibleIdCreater.java
  27. 3 0
      xlcs-service/src/main/java/com/diagbot/mapper/InquiryInfoMapper.java
  28. 3 0
      xlcs-service/src/main/java/com/diagbot/service/InquiryInfoService.java
  29. 6 0
      xlcs-service/src/main/java/com/diagbot/service/impl/InquiryInfoServiceImpl.java
  30. 95 0
      xlcs-service/src/main/java/com/diagbot/util/AESUtils.java
  31. 71 0
      xlcs-service/src/main/java/com/diagbot/util/Demo.java
  32. 139 0
      xlcs-service/src/main/java/com/diagbot/util/JSONUtils.java
  33. 118 0
      xlcs-service/src/main/java/com/diagbot/util/MessageDigestUtil.java
  34. 118 0
      xlcs-service/src/main/java/com/diagbot/util/OpenApiUtils.java
  35. 126 0
      xlcs-service/src/main/java/com/diagbot/util/SignUtil.java
  36. 35 0
      xlcs-service/src/main/java/com/diagbot/vo/HistoryInquiryVO.java
  37. 19 0
      xlcs-service/src/main/java/com/diagbot/vo/HospSetVO.java
  38. 27 0
      xlcs-service/src/main/java/com/diagbot/vo/InquiryMechVO.java
  39. 7 0
      xlcs-service/src/main/java/com/diagbot/vo/SaveInquiryDetailVO.java
  40. 26 0
      xlcs-service/src/main/java/com/diagbot/vo/SaveInquiryVO.java
  41. 38 8
      xlcs-service/src/main/java/com/diagbot/web/InquiryInfoController.java
  42. 16 0
      xlcs-service/src/main/resources/mapper/InquiryInfoMapper.xml

+ 11 - 1
config-server/src/main/resources/shared/xlcs-service-dev.yml

@@ -101,4 +101,14 @@ io.github.lvyahui8.spring:
 
 weixin:
   appid: wxedd53be102996426
-  secret: c164e280950342f166a933dd7aa6daf7
+  secret: c164e280950342f166a933dd7aa6daf7
+
+#nali:
+#  apiUrl: http://116.62.170.131:8096/openapi-devtest/gateway
+#  appKey: ngari5e34e52511dc394f
+#  appSecret: 11dc394fc05518c1
+
+nali:
+  apiUrl: https://ssltest.ngarihealth.com/openapi-prerelease/gateway
+  appKey: ngari5e48d9ec11dc3978
+  appSecret: 11dc397869c2d24a

+ 11 - 1
config-server/src/main/resources/shared/xlcs-service-local.yml

@@ -101,4 +101,14 @@ io.github.lvyahui8.spring:
 
 weixin:
   appid: wxedd53be102996426
-  secret: c164e280950342f166a933dd7aa6daf7
+  secret: c164e280950342f166a933dd7aa6daf7
+
+#nali:
+#  apiUrl: http://116.62.170.131:8096/openapi-devtest/gateway
+#  appKey: ngari5e34e52511dc394f
+#  appSecret: 11dc394fc05518c1
+
+nali:
+  apiUrl: https://ssltest.ngarihealth.com/openapi-prerelease/gateway
+  appKey: ngari5e48d9ec11dc3978
+  appSecret: 11dc397869c2d24a

+ 6 - 1
config-server/src/main/resources/shared/xlcs-service-pre.yml

@@ -101,4 +101,9 @@ io.github.lvyahui8.spring:
 
 weixin:
   appid: wxe4e2b88ec9c578bd
-  secret: 16ae52c464d2a201c7ede0820dadb4a9
+  secret: 16ae52c464d2a201c7ede0820dadb4a9
+
+nali:
+  apiUrl: https://openapi.ngarihealth.com/openapi/gateway
+  appKey: ngari5e3517480e980e6e
+  appSecret: 0e980e6e502ab074

+ 6 - 1
config-server/src/main/resources/shared/xlcs-service-pro.yml

@@ -101,4 +101,9 @@ io.github.lvyahui8.spring:
 
 weixin:
   appid: wxe4e2b88ec9c578bd
-  secret: 16ae52c464d2a201c7ede0820dadb4a9
+  secret: 16ae52c464d2a201c7ede0820dadb4a9
+
+nali:
+  apiUrl: https://openapi.ngarihealth.com/openapi/gateway
+  appKey: ngari5e3517480e980e6e
+  appSecret: 0e980e6e502ab074

+ 11 - 1
config-server/src/main/resources/shared/xlcs-service-test.yml

@@ -101,4 +101,14 @@ io.github.lvyahui8.spring:
 
 weixin:
   appid: wxe4e2b88ec9c578bd
-  secret: 16ae52c464d2a201c7ede0820dadb4a9
+  secret: 16ae52c464d2a201c7ede0820dadb4a9
+
+#nali:
+#  apiUrl: http://116.62.170.131:8096/openapi-devtest/gateway
+#  appKey: ngari5e34e52511dc394f
+#  appSecret: 11dc394fc05518c1
+
+nali:
+  apiUrl: https://ssltest.ngarihealth.com/openapi-prerelease/gateway
+  appKey: ngari5e48d9ec11dc3978
+  appSecret: 11dc397869c2d24a

+ 1 - 0
docs/032.20200225心理健康猜测试初始化脚本/init_xlcs.sql

@@ -88,3 +88,4 @@ CREATE TABLE `xlcs_sys_set` (
   `remark` varchar(128) DEFAULT NULL COMMENT '备注',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='医院所有配置信息';
+

+ 19 - 0
docs/032.20200225心理健康猜测试初始化脚本/xlcs20200304.sql

@@ -0,0 +1,19 @@
+use `sys-xlcs`;
+
+ALTER TABLE `xlcs_inquiry_info`
+ADD COLUMN `anxiety_range` varchar(1024) NOT NULL DEFAULT '' COMMENT '焦虑症分段说明' after `anxiety_point`;
+
+ALTER TABLE `xlcs_inquiry_info`
+ADD COLUMN `depression_range` varchar(1024) NOT NULL DEFAULT '' COMMENT '抑郁症分段说明' after `depression_point`;
+
+ALTER TABLE `xlcs_inquiry_info`
+ADD COLUMN `mpi_id` varchar(64) NOT NULL DEFAULT '' COMMENT '用户信息Id' after `depression_advise`;
+
+ALTER TABLE `xlcs_inquiry_info`
+ADD COLUMN `app_id` varchar(64) NOT NULL DEFAULT '' COMMENT '公众号appid' after `mpi_id`;
+
+ALTER TABLE `xlcs_inquiry_info`
+ADD COLUMN  `machine_id` varchar(25) NOT NULL DEFAULT '' COMMENT '机器ID' after `app_id`;
+
+ALTER TABLE `xlcs_inquiry_detail`
+MODIFY COLUMN `remark` VARCHAR (3000) DEFAULT NULL COMMENT '备注';

+ 26 - 0
xlcs-service/src/main/java/com/diagbot/config/IdcConfigurer.java

@@ -0,0 +1,26 @@
+package com.diagbot.config;
+
+//import com.diagbot.idc.InvisibleIdCreater;
+
+import com.diagbot.idc.VisibleIdCreater;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @Description: ID生成器配置
+ * @author: gaodm
+ * @time: 2018/9/20 10:43
+ */
+@Configuration
+public class IdcConfigurer {
+
+    @Bean
+    public VisibleIdCreater visibleIdCreater() {
+        return new VisibleIdCreater(0, 0);
+    }
+
+    //    @Bean
+    //    public InvisibleIdCreater invisibleIdCreater() {
+    //        return new InvisibleIdCreater(0, 0);
+    //    }
+}

+ 33 - 0
xlcs-service/src/main/java/com/diagbot/dto/GetInquiryDetailDTO.java

@@ -0,0 +1,33 @@
+package com.diagbot.dto;
+
+import com.diagbot.entity.Option;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/28 15:46
+ */
+@Getter
+@Setter
+public class GetInquiryDetailDTO {
+
+    /**
+     * 问题
+     */
+    private String question;
+
+    /**
+     * 答案
+     */
+    private String answer;
+
+    /**
+     * 题目选项
+     */
+    private List<Option> options;
+
+}

+ 40 - 0
xlcs-service/src/main/java/com/diagbot/dto/HistoryInquiryDTO.java

@@ -0,0 +1,40 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description:历史记录出参
+ * @Author:zhaops
+ * @time: 2020/3/5 10:56
+ */
+@Getter
+@Setter
+public class HistoryInquiryDTO {
+    private Long id;
+    private Date gmtCreate;
+    private Date gmtModified;
+    private String creator;
+    private String modifier;
+    private String hospitalCode;
+    private String ip;
+    private String patName;
+    private Integer patAge;
+    private Integer patSex;
+    private Integer idType;
+    private String idNum;
+    private String phone;
+    private String personnel;
+    private String anxietyPoint;
+    private String anxietyRange;
+    private String anxietyJudge;
+    private String anxietyAdvise;
+    private String depressionPoint;
+    private String depressionRange;
+    private String depressionJudge;
+    private String depressionAdvise;
+    private List<GetInquiryDetailDTO> detailList;
+}

+ 10 - 0
xlcs-service/src/main/java/com/diagbot/dto/InquiryDTO.java

@@ -76,6 +76,11 @@ public class InquiryDTO {
      */
     private String anxietyPoint;
 
+    /**
+     * 焦虑症分段说明
+     */
+    private String anxietyRange;
+
     /**
      * 焦虑症判断依据
      */
@@ -91,6 +96,11 @@ public class InquiryDTO {
      */
     private String depressionPoint;
 
+    /**
+     * 抑郁症分段说明
+     */
+    private String depressionRange;
+
     /**
      * 抑郁症判断依据
      */

+ 6 - 0
xlcs-service/src/main/java/com/diagbot/dto/SaveInquiryDTO.java

@@ -21,4 +21,10 @@ public class SaveInquiryDTO {
     @ApiModelProperty(value = "纳里返回的url")
     private String body;
 
+    private String response;
+
+    private String request;
+
+    private String requestBodys;
+
 }

+ 67 - 0
xlcs-service/src/main/java/com/diagbot/entity/Client.java

@@ -0,0 +1,67 @@
+
+package com.diagbot.entity;
+
+import com.diagbot.util.AESUtils;
+import com.diagbot.util.JSONUtils;
+import com.diagbot.util.MessageDigestUtil;
+import com.diagbot.util.OpenApiUtils;
+import com.diagbot.util.SignUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.UUID;
+
+/**
+ * Client
+ */
+public class Client {
+
+    private String apiUrl;
+    private String appKey;
+    private String appSecret;
+    private String encodingAesKey;
+
+    public Client(String apiUrl, String appKey, String appSecret, String encodingAesKey) {
+        this.apiUrl = apiUrl;
+        this.appKey = appKey;
+        this.appSecret = appSecret;
+        this.encodingAesKey = encodingAesKey;
+    }
+
+    /**
+     * 发送请求
+     *
+     * @param request request对象
+     * @return Response
+     * @throws Exception
+     */
+    public Response execute(Request request) throws Exception {
+        request.setApiUrl(this.apiUrl);
+        request.setAppKey(this.appKey);
+        request.setAppSecret(this.appSecret);
+        request.setEncodingAesKey(this.encodingAesKey);
+        request.addHeader(SystemHeader.X_CA_KEY, request.getAppKey());
+        request.addHeader(SystemHeader.X_CA_NONCE, UUID.randomUUID().toString());
+        request.addHeader(SystemHeader.X_CA_TIMESTAMP, String.valueOf(System.currentTimeMillis()));
+        String jsonStr = JSONUtils.toString(request.getBodys());
+        String encryptStr;
+        if (StringUtils.isNotEmpty(request.getEncodingAesKey())) {
+            encryptStr = AESUtils.encrypt(jsonStr, request.getEncodingAesKey());
+        } else {
+            encryptStr = jsonStr;
+        }
+        String contentMd5 = MessageDigestUtil.base64AndMD5(encryptStr);
+        request.addHeader(SystemHeader.X_CONTENT_MD5, contentMd5);
+        String signature = SignUtil.sign(request.getAppSecret(), request.getHeaders());
+        request.addHeader(SystemHeader.X_CA_SIGNATURE, signature);
+        request.setStringBody(encryptStr);
+        return OpenApiUtils.post(request);
+    }
+
+    public static void main(String[] args) throws Exception {
+        String body = "[1]";
+        String encryptStr = AESUtils.encrypt(body, "1234567890123456");
+        String contentMd5 = MessageDigestUtil.base64AndMD5(encryptStr.getBytes());
+        System.out.println(contentMd5);
+
+    }
+}

+ 47 - 0
xlcs-service/src/main/java/com/diagbot/entity/Constants.java

@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.diagbot.entity;
+
+/**
+ * 通用常量
+ */
+public class Constants {
+    //签名算法HmacSha256
+    public static final String HMAC_SHA256 = "HmacSHA256";
+    //编码UTF-8
+    public static final String ENCODING = "UTF-8";
+    //UserAgent
+    public static final String USER_AGENT = "demo/aliyun/java";
+    //换行符
+    public static final String LF = "\n";
+    //串联符
+    public static final String SPE1 = ",";
+    //示意符
+    public static final String SPE2 = ":";
+    //连接符
+    public static final String SPE3 = "&";
+    //赋值符
+    public static final String SPE4 = "=";
+    //问号符
+    public static final String SPE5 = "?";
+    //默认请求超时时间,单位毫秒
+    public static final int DEFAULT_TIMEOUT = 1000;
+    //参与签名的系统Header前缀,只有指定前缀的Header才会参与到签名中
+    public static final String CA_HEADER_TO_SIGN_PREFIX_SYSTEM = "X-Ca-";
+}

+ 25 - 1
xlcs-service/src/main/java/com/diagbot/entity/InquiryInfo.java

@@ -3,7 +3,6 @@ package com.diagbot.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -107,6 +106,11 @@ public class InquiryInfo implements Serializable {
      */
     private String anxietyPoint;
 
+    /**
+     * 焦虑症分段说明
+     */
+    private String anxietyRange;
+
     /**
      * 焦虑症判断依据
      */
@@ -122,6 +126,11 @@ public class InquiryInfo implements Serializable {
      */
     private String depressionPoint;
 
+    /**
+     * 抑郁症分段说明
+     */
+    private String depressionRange;
+
     /**
      * 抑郁症判断依据
      */
@@ -132,6 +141,21 @@ public class InquiryInfo implements Serializable {
      */
     private String depressionAdvise;
 
+    /**
+     * 用户授权id
+     */
+    private String mpiId;
+
+    /**
+     * 公众号id
+     */
+    private String appId;
+
+    /**
+     * 机器ID
+     */
+    private String machineId;
+
     /**
      * 备注
      */

+ 53 - 0
xlcs-service/src/main/java/com/diagbot/entity/JSONResponseBean.java

@@ -0,0 +1,53 @@
+package com.diagbot.entity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class JSONResponseBean {
+	private int code = 200;
+	private String msg;
+	private Object body;
+	private Map<String, Object> properties;
+	
+	public int getCode() {
+		return code;
+	}
+	
+	public void setCode(int code) {
+		this.code = code;
+	}
+	
+	public String getMsg() {
+		return msg;
+	}
+	
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+	
+	public Object getBody() {
+		return body;
+	}
+	
+	public void setBody(Object body) {
+		this.body = body;
+	}
+	
+	public Map<String, Object> getProperties() {
+		return properties;
+	}
+	
+	public Object getProperty(String nm){
+		if(properties == null || properties.isEmpty()){
+			return null;
+		}
+		return properties.get(nm);
+	}
+	
+	public void setProperty(String name, Object val){
+		if(properties == null){
+			properties = new HashMap<>();
+		}
+		properties.put(name, val);
+	}
+}

+ 16 - 0
xlcs-service/src/main/java/com/diagbot/entity/Option.java

@@ -0,0 +1,16 @@
+package com.diagbot.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/3/3 16:01
+ */
+@Getter
+@Setter
+public class Option {
+    private Boolean select;
+    private String name;
+}

+ 142 - 0
xlcs-service/src/main/java/com/diagbot/entity/Request.java

@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.diagbot.entity;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Request
+ */
+public class Request {
+
+    public Request() {
+    }
+
+    public Request(String serviceId, String method, List<Object> bodys) {
+        this.appKey = appKey;
+        this.appSecret = appSecret;
+        this.bodys=bodys;
+        headers = new HashMap<>();
+        headers.put(SystemHeader.X_CA_KEY, appKey);
+        headers.put(SystemHeader.X_SERVICE_ID, serviceId);
+        headers.put(SystemHeader.X_SERVICE_METHOD, method);
+    }
+    /**
+     * (必选)服务请求地址
+     */
+    private String apiUrl;
+
+
+
+    /**
+     * (必选)APP KEY
+     */
+    private String appKey;
+
+    /**
+     * (必选)APP密钥
+     */
+    private String appSecret;
+
+    private String encodingAesKey;
+
+
+    /**
+     * (必选) HTTP头
+     */
+    private Map<String, String> headers;
+    
+
+
+    /**
+     * (必选)请求参数
+     */
+    private List<Object> bodys;
+
+    /**
+     * (可选)字符串Body体
+     */
+    private String stringBody;
+
+
+    public String getAppKey() {
+        return appKey;
+    }
+
+    public void setAppKey(String appKey) {
+        this.appKey = appKey;
+    }
+
+    public String getAppSecret() {
+        return appSecret;
+    }
+
+    public void setAppSecret(String appSecret) {
+        this.appSecret = appSecret;
+    }
+
+
+    public Map<String, String> getHeaders() {
+        return headers;
+    }
+
+    public void setHeaders(Map<String, String> headers) {
+        this.headers = headers;
+    }
+
+    public List<Object> getBodys() {
+        return bodys;
+    }
+
+    public void setBodys(List<Object> bodys) {
+        this.bodys = bodys;
+    }
+
+    public String getStringBody() {
+        return stringBody;
+    }
+
+    public void setStringBody(String stringBody) {
+        this.stringBody = stringBody;
+    }
+
+    public String getEncodingAesKey() {
+        return encodingAesKey;
+    }
+
+    public void setEncodingAesKey(String encodingAesKey) {
+        this.encodingAesKey = encodingAesKey;
+    }
+
+    public String getApiUrl() {
+        return apiUrl;
+    }
+
+    public void setApiUrl(String apiUrl) {
+        this.apiUrl = apiUrl;
+    }
+    public void addHeader(String name, String value){
+        if(headers==null){
+            headers = new HashMap<>();
+        }
+        headers.put(name, value);
+    }
+}

+ 120 - 0
xlcs-service/src/main/java/com/diagbot/entity/Response.java

@@ -0,0 +1,120 @@
+package com.diagbot.entity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Response {
+    /**
+     * http 请求状态码
+     */
+    private int statusCode;
+    private String contentType;
+    /**
+     * 请求唯一 ID,请求一旦进入 API 网关应用后,API 网关就会生成请求 ID 并通过响应头返回给客户端,
+     * 建议客户端与后端服务都记录此请求 ID,可用于问题排查与跟踪。
+     */
+    private String requestId;
+    /**
+     * API网关会将服务端的StringToSign放到HTTP应答的Header中返回到客户端,Key为:X-Ca-Error-Message
+     * 只需要将本地计算的StringToSign与服务端返回的StringToSign进行对比即可找到问题;
+     * 如果服务端与客户端的签名串是一致的,请检查用于签名计算的密钥是否正确;
+     */
+    private String caErrorMsg;
+    /**
+     * 业务接口返回的错误信息
+     */
+    private String errorMessage;
+    private Map<String, String> headers;
+    private String body;
+    private JSONResponseBean jsonResponseBean;
+
+    public boolean isSuccess() {
+        return (200 == statusCode && jsonResponseBean != null && 200 == jsonResponseBean.getCode());
+    }
+
+    public Response() {
+
+    }
+
+    public int getStatusCode() {
+        return statusCode;
+    }
+
+    public void setStatusCode(int statusCode) {
+        this.statusCode = statusCode;
+    }
+
+    public String getContentType() {
+        return contentType;
+    }
+
+    public void setContentType(String contentType) {
+        this.contentType = contentType;
+    }
+
+    public String getRequestId() {
+        return requestId;
+    }
+
+    public void setRequestId(String requestId) {
+        this.requestId = requestId;
+    }
+
+    public String getErrorMessage() {
+        if (jsonResponseBean != null && !"200".equals(jsonResponseBean.getCode())) {
+            return jsonResponseBean.getMsg();
+        }
+        return null;
+    }
+
+    public void setErrorMessage(String errorMessage) {
+        this.errorMessage = errorMessage;
+    }
+
+    public Map<String, String> getHeaders() {
+        return headers;
+    }
+
+    public String getHeader(String key) {
+        if (null != headers) {
+            return headers.get(key);
+        } else {
+            return null;
+        }
+    }
+
+    public void setHeaders(Map<String, String> headers) {
+        this.headers = headers;
+    }
+
+    public void setHeader(String key, String value) {
+        if (null == this.headers) {
+            this.headers = new HashMap<String, String>();
+        }
+        this.headers.put(key, value);
+    }
+
+    public String getBody() {
+        return body;
+    }
+
+    public void setBody(String body) {
+        this.body = body;
+    }
+
+    public JSONResponseBean getJsonResponseBean() {
+        return jsonResponseBean;
+    }
+
+    public void setJsonResponseBean(JSONResponseBean jsonResponseBean) {
+        this.jsonResponseBean = jsonResponseBean;
+    }
+
+    public String getCaErrorMsg() {
+        return caErrorMsg;
+    }
+
+    public void setCaErrorMsg(String caErrorMsg) {
+        this.caErrorMsg = caErrorMsg;
+    }
+}

+ 29 - 0
xlcs-service/src/main/java/com/diagbot/entity/SystemHeader.java

@@ -0,0 +1,29 @@
+
+package com.diagbot.entity;
+
+/**
+ * 系统HTTP头常量
+ */
+public class SystemHeader {
+    //签名Header
+    public static final String X_CA_SIGNATURE = "X-Ca-Signature";
+    //所有参与签名的Header
+    public static final String X_CA_SIGNATURE_HEADERS = "X-Ca-Signature-Headers";
+    //请求时间戳
+    public static final String X_CA_TIMESTAMP = "X-Ca-Timestamp";
+    //请求放重放Nonce,15分钟内保持唯一,建议使用UUID
+    public static final String X_CA_NONCE = "X-Ca-Nonce";
+    //APP KEY
+    public static final String X_CA_KEY = "X-Ca-Key";
+    //服务id
+    public static final String X_SERVICE_ID = "X-Service-Id";
+    //具体method
+    public static final String X_SERVICE_METHOD = "X-Service-Method";
+    //MD5加密的请求体信息
+    public static final String X_CONTENT_MD5 = "X-Content-MD5";
+
+    //MD5加密的请求体信息
+    public static final String X_CA_REQUESTID = "X-Ca-RequestId";
+    //API网关会将服务端的StringToSign放到HTTP应答的Header中返回到客户端,Key为:X-Ca-Error-Message
+    public static final String X_CA_ERROR_MESSAGE = "X-Ca-Error-Message";
+}

+ 327 - 21
xlcs-service/src/main/java/com/diagbot/facade/InquiryInfoFacade.java

@@ -2,31 +2,55 @@ package com.diagbot.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.diagbot.dto.GetInquiryDetailDTO;
+import com.diagbot.dto.HistoryInquiryDTO;
 import com.diagbot.dto.InquiryDTO;
 import com.diagbot.dto.InquiryPatDTO;
+import com.diagbot.dto.SaveInquiryDTO;
+import com.diagbot.entity.Client;
 import com.diagbot.entity.InquiryDetail;
 import com.diagbot.entity.InquiryInfo;
+import com.diagbot.entity.JSONResponseBean;
+import com.diagbot.entity.Option;
+import com.diagbot.entity.Request;
+import com.diagbot.entity.Response;
 import com.diagbot.enums.IdTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.idc.VisibleIdCreater;
 import com.diagbot.service.impl.InquiryDetailServiceImpl;
 import com.diagbot.service.impl.InquiryInfoServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.FastJsonUtils;
+import com.diagbot.util.GsonUtil;
 import com.diagbot.util.HttpUtils;
 import com.diagbot.util.IdCard;
-import com.diagbot.util.IntegerUtil;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
+import com.diagbot.vo.HistoryInquiryVO;
 import com.diagbot.vo.HospitalVO;
 import com.diagbot.vo.InquiryDetailVO;
+import com.diagbot.vo.InquiryMechVO;
 import com.diagbot.vo.InquiryPatInquiryVO;
 import com.diagbot.vo.InquiryPatVO;
+import com.diagbot.vo.SaveInquiryDetailVO;
 import com.diagbot.vo.SaveInquiryVO;
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @Description:
@@ -34,6 +58,7 @@ import java.util.List;
  * @time: 2020/2/1 23:33
  */
 @Component
+@Slf4j
 public class InquiryInfoFacade extends InquiryInfoServiceImpl {
 
 
@@ -46,10 +71,26 @@ public class InquiryInfoFacade extends InquiryInfoServiceImpl {
     @Qualifier("inquiryDetailServiceImpl")
     private InquiryDetailServiceImpl inquiryDetailService;
 
-    public void saveInquiry(SaveInquiryVO saveInquiryVO) {
+    @Autowired
+    private VisibleIdCreater visibleIdCreater;
+
+    @Autowired
+    private SysSetFacade sysSetFacade;
+
+    @Value("${nali.apiUrl}")
+    private String apiUrl;
+    @Value("${nali.appKey}")
+    private String appKey;
+    @Value("${nali.appSecret}")
+    private String appSecret;
+
+    public SaveInquiryDTO saveInquiry(SaveInquiryVO saveInquiryVO) {
         if (StringUtil.isBlank(saveInquiryVO.getHospitalCode())) {
             saveInquiryVO.setHospitalCode("朗通通用");
         }
+
+        SaveInquiryDTO saveInquiryDTO = new SaveInquiryDTO();
+
         Date now = DateUtil.now();
         InquiryInfo inquiryInfo = null;
         // 如果是身份证,获取性别和年龄
@@ -61,20 +102,22 @@ public class InquiryInfoFacade extends InquiryInfoServiceImpl {
                 saveInquiryVO.setPatSex(IdCard.getGenderByIdCard(idNum));
             }
         }
-        if (StringUtil.isNotBlank(saveInquiryVO.getHospitalCode())
+        /*if (StringUtil.isNotBlank(saveInquiryVO.getHospitalCode())
                 && StringUtil.isNotBlank(saveInquiryVO.getPatName())
                 && !IntegerUtil.isNull(saveInquiryVO.getIdType())
                 && StringUtil.isNotBlank(saveInquiryVO.getIdNum())) {
-            String dateStr = DateUtil.formatDate(now);
-            inquiryInfo = this.getOne(new QueryWrapper<InquiryInfo>()
-                    .eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .eq("hospital_code", saveInquiryVO.getHospitalCode())
-                    .eq("pat_name", saveInquiryVO.getPatName())
-                    .eq("id_type", saveInquiryVO.getIdType())
-                    .eq("id_num", saveInquiryVO.getIdNum())
-                    .apply("date_format(gmt_modified, '%Y-%m-%d')={0}", dateStr), false
-            );
-        }
+            if (sysSetFacade.isCover(saveInquiryVO.getHospitalCode())) {
+                String dateStr = DateUtil.formatDate(now);
+                inquiryInfo = this.getOne(new QueryWrapper<InquiryInfo>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("hospital_code", saveInquiryVO.getHospitalCode())
+                        .eq("pat_name", saveInquiryVO.getPatName())
+                        .eq("id_type", saveInquiryVO.getIdType())
+                        .eq("id_num", saveInquiryVO.getIdNum())
+                        .apply("date_format(gmt_modified, '%Y-%m-%d')={0}", dateStr), false
+                );
+            }
+        }*/
 
         if (inquiryInfo == null) {
             inquiryInfo = new InquiryInfo();
@@ -90,11 +133,16 @@ public class InquiryInfoFacade extends InquiryInfoServiceImpl {
                     .set(StringUtil.isNotBlank(saveInquiryVO.getPhone()), "phone", saveInquiryVO.getPhone())
                     .set(StringUtil.isNotBlank(saveInquiryVO.getPersonnel()), "personnel", saveInquiryVO.getPersonnel())
                     .set(StringUtil.isNotBlank(saveInquiryVO.getAnxietyPoint()), "anxiety_point", saveInquiryVO.getAnxietyPoint())
+                    .set(StringUtil.isNotBlank(saveInquiryVO.getAnxietyRange()), "anxiety_range", saveInquiryVO.getAnxietyRange())
                     .set(StringUtil.isNotBlank(saveInquiryVO.getAnxietyJudge()), "anxiety_judge", saveInquiryVO.getAnxietyJudge())
                     .set(StringUtil.isNotBlank(saveInquiryVO.getAnxietyAdvise()), "anxiety_advise", saveInquiryVO.getAnxietyAdvise())
                     .set(StringUtil.isNotBlank(saveInquiryVO.getDepressionPoint()), "depression_point", saveInquiryVO.getDepressionPoint())
+                    .set(StringUtil.isNotBlank(saveInquiryVO.getDepressionRange()), "depression_range", saveInquiryVO.getDepressionRange())
                     .set(StringUtil.isNotBlank(saveInquiryVO.getDepressionJudge()), "depression_judge", saveInquiryVO.getDepressionJudge())
                     .set(StringUtil.isNotBlank(saveInquiryVO.getDepressionAdvise()), "depression_advise", saveInquiryVO.getDepressionAdvise())
+                    .set(StringUtil.isNotBlank(saveInquiryVO.getMachineId()), "machine_id", saveInquiryVO.getMachineId())
+                    .set("mpi_id", saveInquiryVO.getMpiId())
+                    .set("app_id", saveInquiryVO.getAppId())
                     .eq("id", inquiryInfo.getId())
             );
             // 删除原明细
@@ -106,18 +154,39 @@ public class InquiryInfoFacade extends InquiryInfoServiceImpl {
             );
         }
         Long id = inquiryInfo.getId();
-        List<InquiryDetail> inquiryDetailList = BeanUtil.listCopyTo(saveInquiryVO.getDetailList(), InquiryDetail.class);
-        inquiryDetailList.forEach(i -> {
-            i.setInquiryId(id);
-            i.setGmtCreate(now);
-            i.setGmtModified(now);
-        });
+        saveInquiryVO.setInquiryId(id);
+        List<InquiryDetail> inquiryDetailList = Lists.newArrayList();
+        for (SaveInquiryDetailVO saveInquiryDetailVO : saveInquiryVO.getDetailList()) {
+            InquiryDetail inquiryDetail = new InquiryDetail();
+            BeanUtil.copyProperties(saveInquiryDetailVO, inquiryDetail);
+            inquiryDetail.setInquiryId(id);
+            inquiryDetail.setGmtCreate(now);
+            inquiryDetail.setGmtModified(now);
+            if (ListUtil.isNotEmpty(saveInquiryDetailVO.getOptions())) {
+                inquiryDetail.setRemark(GsonUtil.toJson(saveInquiryDetailVO.getOptions()));
+            }
+            inquiryDetailList.add(inquiryDetail);
+        }
         inquiryDetailService.saveBatch(inquiryDetailList);
 
         HospitalVO hospitalVO = new HospitalVO();
         hospitalVO.setHospitalCode(saveInquiryVO.getHospitalCode());
         // 保存记录表
         optInfoFacade.saveOptOnfo(hospitalVO, "2");
+
+        //邵逸夫医院 心理测试 对接纳里时,返回url
+        if (saveInquiryVO.getHospitalCode().equals("邵逸夫医院")
+                && saveInquiryVO.getFrom().equals("5")
+                && saveInquiryVO.getDest().equals("1")) {
+            List<String> naliRetList = getUrl(saveInquiryVO);
+            String retUrl = naliRetList.get(0);
+            saveInquiryDTO.setBody(retUrl);
+            saveInquiryDTO.setResponse(naliRetList.get(1));
+            saveInquiryDTO.setRequest(naliRetList.get(2));
+            saveInquiryDTO.setRequestBodys(naliRetList.get(3));
+        }
+
+        return saveInquiryDTO;
     }
 
 
@@ -125,18 +194,255 @@ public class InquiryInfoFacade extends InquiryInfoServiceImpl {
         return this.getPatList(inquiryPatVO);
     }
 
+    public String getMachineId() {
+        return visibleIdCreater.getNextId(6).toString();
+    }
+
     public List<InquiryDTO> getPatInquiryFac(InquiryPatInquiryVO inquiryPatInquiryVO) {
         return this.getPatInquiryList(inquiryPatInquiryVO);
     }
 
-    public List<InquiryDetail> getDetail(InquiryDetailVO inquiryDetailVO) {
+    public List<InquiryDTO> getInquirysByMech(InquiryMechVO inquiryMechVO) {
+        return this.getInquirysByMechId(inquiryMechVO);
+    }
+
+    public List<GetInquiryDetailDTO> getDetail(InquiryDetailVO inquiryDetailVO) {
         List<InquiryDetail> list = inquiryDetailFacade.list(new QueryWrapper<InquiryDetail>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("inquiry_id", inquiryDetailVO.getId())
                 .orderByAsc("id")
         );
-        return list;
+
+        List<GetInquiryDetailDTO> resList = new ArrayList<>();
+        if (ListUtil.isNotEmpty(list)) {
+            for (InquiryDetail inquiryDetail : list) {
+                GetInquiryDetailDTO getInquiryDetailDTO = new GetInquiryDetailDTO();
+                BeanUtil.copyProperties(inquiryDetail, getInquiryDetailDTO);
+                if (StringUtil.isNotBlank(inquiryDetail.getRemark())) {
+                    getInquiryDetailDTO.setOptions(GsonUtil.toList(inquiryDetail.getRemark(), Option.class));
+                }
+                resList.add(getInquiryDetailDTO);
+            }
+        }
+        return resList;
     }
 
+    /**
+     * 历史记录
+     *
+     * @param historyInquiryVO
+     * @return
+     */
+    public List<HistoryInquiryDTO> getHistoryInquiry(HistoryInquiryVO historyInquiryVO) {
+        //入参验证
+        if (null == historyInquiryVO) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "请输入获取历史记录的参数!");
+        }
+
+        if (StringUtil.isBlank(historyInquiryVO.getHospitalCode())) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "请输入医院名称!");
+        }
 
+        if (StringUtil.isBlank(historyInquiryVO.getMachineId())) {
+            if (StringUtil.isBlank(historyInquiryVO.getPatName()) || StringUtil.isBlank(historyInquiryVO.getIdNum())) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "请输入机器ID或者同时输入证件号码和对应的姓名!");
+            }
+        }
+
+        //业务获取
+        List<HistoryInquiryDTO> historyInquiryDTOList = Lists.newLinkedList();
+        QueryWrapper<InquiryInfo> inquiryInfoQueryWrapper = new QueryWrapper<>();
+        inquiryInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_code", historyInquiryVO.getHospitalCode())
+                .eq(StringUtil.isNotBlank(historyInquiryVO.getPatName()), "pat_name", historyInquiryVO.getPatName())
+                .eq(StringUtil.isNotBlank(historyInquiryVO.getIdNum()), "id_num", historyInquiryVO.getIdNum())
+                .eq(StringUtil.isNotBlank(historyInquiryVO.getMachineId()), "machine_id", historyInquiryVO.getMachineId())
+                .orderByDesc("gmt_modified");
+        List<InquiryInfo> inquiryInfoList = this.list(inquiryInfoQueryWrapper);
+        if (ListUtil.isNotEmpty(inquiryInfoList)) {
+            if (sysSetFacade.isCover(historyInquiryVO.getHospitalCode())) {
+                List<String> keys = ListUtil.newArrayList();
+                for (int i = 0; i < inquiryInfoList.size(); i++) {
+                    InquiryInfo myInquiryInfo = inquiryInfoList.get(i);
+                    if (StringUtil.isNotBlank(myInquiryInfo.getPatName())
+                            && StringUtil.isNotBlank(myInquiryInfo.getIdNum())
+                            && (0 != myInquiryInfo.getIdType())) {
+                        String key = myInquiryInfo.getIdType() + "_" + myInquiryInfo.getIdNum()
+                                + "_" + myInquiryInfo.getPatName()
+                                + "_" + DateUtil.format(myInquiryInfo.getGmtModified(), DateUtil.DATE_FORMAT);
+                        if (keys.contains(key)) {
+                            inquiryInfoList.remove(i--);
+                        } else {
+                            keys.add(key);
+                        }
+                    }
+                }
+            }
+        }
+   /*     List<HistoryInquiryDTO> historyInquiryDTOList = Lists.newLinkedList();
+        QueryWrapper<InquiryInfo> inquiryInfoQueryWrapper = new QueryWrapper<>();
+        //配置了覆盖项时
+        if (sysSetFacade.isCover(historyInquiryVO.getHospitalCode())) {
+            if (StringUtil.isNotBlank(historyInquiryVO.getMachineId())) {
+                inquiryInfoQueryWrapper
+                        .eq("machine_id", historyInquiryVO.getMachineId())
+                        .apply("gmt_modified IN (\n" +
+                                "\t\tSELECT\n" +
+                                "\t\t\tmax(aa.gmt_modified) AS max_gmt_modified\n" +
+                                "\t\tFROM\n" +
+                                "\t\t\t(\n" +
+                                "\t\t\t\tSELECT\n" +
+                                "\t\t\t\t\tDATE(a.gmt_modified) datetemp,\n" +
+                                "\t\t\t\t\ta.gmt_modified,\n" +
+                                "\t\t\t\t\ta.machine_id\n" +
+                                "\t\t\t\tFROM\n" +
+                                "\t\t\t\t\txlcs_inquiry_info a\n" +
+                                "\t\t\t\tWHERE\n" +
+                                "\t\t\t\t\ta.is_deleted = 'N'\n" +
+                                "\t\t\t\t\tAND a.machine_id = {0}\n" +
+                                "\t\t\t\t\tAND a.hospital_code = {1}\n" +
+                                "\t\t\t) aa\n" +
+                                "\t\tGROUP BY\n" +
+                                "\t\t\taa.datetemp,\n" +
+                                "\t\t\taa.machine_id\n" +
+                                "\t)", historyInquiryVO.getMachineId(), historyInquiryVO.getHospitalCode());
+
+            } else if (StringUtil.isNotBlank(historyInquiryVO.getPatName()) && StringUtil.isNotBlank(historyInquiryVO.getIdNum())) {
+                inquiryInfoQueryWrapper
+                        .eq("pat_name", historyInquiryVO.getPatName())
+                        .eq("id_num", historyInquiryVO.getIdNum())
+                        .apply("gmt_modified IN (\n" +
+                                "\t\tSELECT\n" +
+                                "\t\t\tmax(aa.gmt_modified) AS max_gmt_modified\n" +
+                                "\t\tFROM\n" +
+                                "\t\t\t(\n" +
+                                "\t\t\t\tSELECT\n" +
+                                "\t\t\t\t\tDATE(gmt_modified) datetemp,\n" +
+                                "\t\t\t\t\ta.gmt_modified,\n" +
+                                "\t\t\t\t\ta.pat_name,\n" +
+                                "\t\t\t\t\ta.id_num\n" +
+                                "\t\t\t\tFROM\n" +
+                                "\t\t\t\t\txlcs_inquiry_info a\n" +
+                                "\t\t\t\tWHERE\n" +
+                                "\t\t\t\t\ta.is_deleted = 'N'\n" +
+                                "\t\t\t\tAND a.pat_name = {0}\n" +
+                                "\t\t\t\tAND a.id_num = {1}\n" +
+                                "\t\t\t\t\tAND a.hospital_code = {2}\n" +
+                                "\t\t\t) aa\n" +
+                                "\t\tGROUP BY\n" +
+                                "\t\t\taa.datetemp,\n" +
+                                "\t\t\taa.pat_name,\n" +
+                                "\t\t\taa.id_num\n" +
+                                "\t)", historyInquiryVO.getPatName(), historyInquiryVO.getIdNum(), historyInquiryVO.getHospitalCode());
+            }
+        } else {
+            inquiryInfoQueryWrapper
+                    .eq(StringUtil.isNotBlank(historyInquiryVO.getPatName()), "pat_name", historyInquiryVO.getPatName())
+                    .eq(StringUtil.isNotBlank(historyInquiryVO.getIdNum()), "id_num", historyInquiryVO.getIdNum())
+                    .eq(StringUtil.isNotBlank(historyInquiryVO.getMachineId()), "machine_id", historyInquiryVO.getMachineId());
+        }
+        inquiryInfoQueryWrapper
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_code", historyInquiryVO.getHospitalCode())
+                .orderByDesc("gmt_modified");
+       List<InquiryInfo> inquiryInfoList = this.list(inquiryInfoQueryWrapper);*/
+        if (ListUtil.isNotEmpty(inquiryInfoList)) {
+            List<Long> inquiryIdList = inquiryInfoList.stream().map(i -> i.getId()).collect(Collectors.toList());
+            QueryWrapper<InquiryDetail> inquiryDetailQueryWrapper = new QueryWrapper<>();
+            inquiryDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .in("inquiry_id", inquiryIdList)
+                    .orderByAsc("inquiry_id", "id");
+            List<InquiryDetail> inquiryDetailList = inquiryDetailFacade.list(inquiryDetailQueryWrapper);
+            Map<Long, List<InquiryDetail>> detailMap = EntityUtil.makeEntityListMap(inquiryDetailList, "inquiryId");
+            for (InquiryInfo inquiryInfo : inquiryInfoList) {
+                HistoryInquiryDTO historyInquiryDTO = new HistoryInquiryDTO();
+                BeanUtil.copyProperties(inquiryInfo, historyInquiryDTO);
+                List<InquiryDetail> details = detailMap.get(inquiryInfo.getId());
+                List<GetInquiryDetailDTO> getInquiryDetailDTOList = Lists.newLinkedList();
+                if (ListUtil.isNotEmpty(details)) {
+                    for (InquiryDetail inquiryDetail : details) {
+                        GetInquiryDetailDTO getInquiryDetailDTO = new GetInquiryDetailDTO();
+                        BeanUtil.copyProperties(inquiryDetail, getInquiryDetailDTO);
+                        if (StringUtil.isNotBlank(inquiryDetail.getRemark())) {
+                            getInquiryDetailDTO.setOptions(GsonUtil.toList(inquiryDetail.getRemark(), Option.class));
+                        }
+                        getInquiryDetailDTOList.add(getInquiryDetailDTO);
+                    }
+                    historyInquiryDTO.setDetailList(getInquiryDetailDTOList);
+                }
+                historyInquiryDTOList.add(historyInquiryDTO);
+            }
+        }
+        return historyInquiryDTOList;
+    }
+
+
+    private List<String> getUrl(SaveInquiryVO saveInquiryVO) {
+        List<String> ret = Lists.newArrayList();
+        String retUrl = null;
+        Request request = null;
+        Response response = null;
+        try {
+            String encodingAesKey = "";
+            Client client = new Client(apiUrl, appKey, appSecret, encodingAesKey);
+            request = getltcs(saveInquiryVO);
+            response = client.execute(request);
+            log.info("request:" + FastJsonUtils.getBeanToJson(request));
+            log.info("requestBodys:" + FastJsonUtils.getBeanToJson(request.getBodys()));
+            log.info("response:" + FastJsonUtils.getBeanToJson(response));
+            if (response.isSuccess()) {
+                JSONResponseBean result = response.getJsonResponseBean();
+                retUrl = result.getBody().toString();
+            }
+        } catch (Exception e) {
+        }
+        ret.add(retUrl);
+        ret.add(FastJsonUtils.getBeanToJson(response));
+        ret.add(FastJsonUtils.getBeanToJson(request));
+        ret.add(FastJsonUtils.getBeanToJson(request.getBodys()));
+        return ret;
+    }
+
+    private Request getltcs(SaveInquiryVO saveInquiryVO) {
+        List bodyList = new ArrayList<>();
+
+        List<Map<String, Object>> details = new ArrayList<>();
+        saveInquiryVO.getDetailList().forEach(i -> {
+            Map<String, Object> detail = new HashMap<>();
+            detail.put("question", i.getQuestion());
+            detail.put("answer", i.getAnswer());
+            List<Map<String, Object>> optionMapList = Lists.newArrayList();
+            if (ListUtil.isNotEmpty(i.getOptions())) {
+                i.getOptions().forEach(option -> {
+                    optionMapList.add(FastJsonUtils.getJsonToMap(FastJsonUtils.getBeanToJson(option)));
+                });
+            }
+            detail.put("options", optionMapList);
+            details.add(detail);
+        });
+
+        Map<String, Object> body = new HashMap<>();
+        body.put("details", details);
+        body.put("mpiId", saveInquiryVO.getMpiId());
+        body.put("appId", saveInquiryVO.getAppId());
+        body.put("fromId", saveInquiryVO.getFrom());
+        body.put("sources", "langtong");
+        body.put("inquiryId", saveInquiryVO.getInquiryId());
+        body.put("anxietyPoint", saveInquiryVO.getAnxietyPoint());
+        body.put("anxietyRange", saveInquiryVO.getAnxietyRange());
+        body.put("anxietyJudge", saveInquiryVO.getAnxietyJudge());
+        body.put("anxietyAdvise", saveInquiryVO.getAnxietyAdvise());
+        body.put("depressionPoint", saveInquiryVO.getDepressionPoint());
+        body.put("depressionRange", saveInquiryVO.getDepressionRange());
+        body.put("depressionJudge", saveInquiryVO.getDepressionJudge());
+        body.put("depressionAdvise", saveInquiryVO.getDepressionAdvise());
+
+        bodyList.add(body);
+
+        //X-Service-Id对应的值
+        String serviceId = "consult.questionRecordService";
+        //X-Service-Method对应的值
+        String method = "saveQuestionRecord";
+        return new Request(serviceId, method, bodyList);
+    }
 }

+ 31 - 6
xlcs-service/src/main/java/com/diagbot/facade/SysSetFacade.java

@@ -11,6 +11,7 @@ import com.diagbot.service.impl.SysSetServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.StringUtil;
+import com.diagbot.vo.HospSetVO;
 import com.diagbot.vo.SysSetVO;
 import org.springframework.stereotype.Component;
 
@@ -27,25 +28,25 @@ import java.util.stream.Collectors;
  */
 @Component
 public class SysSetFacade extends SysSetServiceImpl {
-    public List<SysSetDTO> getSysSet(SysSetVO sysSetVO){
-        if (null != sysSetVO && StringUtil.isBlank(sysSetVO.getHospitalCode())){
+    public List<SysSetDTO> getSysSet(SysSetVO sysSetVO) {
+        if (null != sysSetVO && StringUtil.isBlank(sysSetVO.getHospitalCode())) {
             throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "医院编码不能为空!");
         }
         QueryWrapper<SysSet> sysSetQueryWrapper = new QueryWrapper<>();
         sysSetQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("hospital_code",sysSetVO.getHospitalCode());
+                .eq("hospital_code", sysSetVO.getHospitalCode());
         List<SysSet> sysSetList = this.list(sysSetQueryWrapper);
         List<SysSetDTO> res = BeanUtil.listCopyTo(sysSetList, SysSetDTO.class);
         return res;
     }
 
 
-    public List<SysSetProHosResDTO> getPositon(){
+    public List<SysSetProHosResDTO> getPositon() {
         List<SysSetProHosResDTO> res = new ArrayList<>();
         QueryWrapper<SysSet> sysSetQueryWrapper = new QueryWrapper<>();
         sysSetQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("code","imgUrl")
-                .ne("province","")
+                .eq("code", "imgUrl")
+                .ne("province", "")
                 .orderByAsc("province");
         List<SysSet> sysSetList = this.list(sysSetQueryWrapper);
         Map<String, List<SysSet>> map = EntityUtil.makeEntityListMap(sysSetList, "province");
@@ -58,4 +59,28 @@ public class SysSetFacade extends SysSetServiceImpl {
         }
         return res;
     }
+
+    public SysSet getHospSet(HospSetVO hospSetVO) {
+        QueryWrapper<SysSet> sysSetQueryWrapper = new QueryWrapper<>();
+        sysSetQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("code", hospSetVO.getCode())
+                .eq("hospital_code", hospSetVO.getHospitalCode());
+        SysSet sysSet = this.getOne(sysSetQueryWrapper, false);
+        return sysSet;
+    }
+
+    public Boolean isCover(String hospitalCode) {
+        HospSetVO hospSetVO = new HospSetVO();
+        hospSetVO.setCode("isCover");
+        hospSetVO.setHospitalCode(hospitalCode);
+        SysSet sysSet = getHospSet(hospSetVO);
+        if (null == sysSet) {
+            return false;
+        } else {
+            if ("1".equals(sysSet.getValue())) {
+                return true;
+            }
+        }
+        return false;
+    }
 }

+ 36 - 0
xlcs-service/src/main/java/com/diagbot/idc/AbstractIdCreater.java

@@ -0,0 +1,36 @@
+package com.diagbot.idc;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: ID生成抽象类接口
+ * @author: gaodm
+ * @time: 2018/9/5 9:20
+ */
+public abstract class AbstractIdCreater<T> implements IdCreater<T> {
+
+    protected int machineId;
+    protected int dataCenterId;
+
+    public AbstractIdCreater(int machineId, int dataCenterId) {
+        this.machineId = machineId;
+        this.dataCenterId = dataCenterId;
+    }
+
+    @Override
+    public abstract Long getNextId(T param);
+
+    @Override
+    public List<Long> getNextIds(T param, int size) {
+        List<Long> longs = new ArrayList<>(size);
+        for (int i = 0; i < size; i++) {
+            longs.add(getNextId(param));
+        }
+        return longs;
+    }
+
+    protected long timeGen() {
+        return System.currentTimeMillis();
+    }
+}

+ 26 - 0
xlcs-service/src/main/java/com/diagbot/idc/IdCreater.java

@@ -0,0 +1,26 @@
+package com.diagbot.idc;
+
+import java.util.List;
+
+/**
+ * @Description: ID生成接口
+ * @author: gaodm
+ * @time: 2018/9/5 9:21
+ */
+public interface IdCreater<T> {
+
+    /**
+     * 生成一个id
+     *
+     * @return 生成的id
+     */
+    Long getNextId(T param);
+
+    /**
+     * 批量生成id
+     *
+     * @param size 生成数量
+     * @return 生成的id列表
+     */
+    List<Long> getNextIds(T param, int size);
+}

+ 62 - 0
xlcs-service/src/main/java/com/diagbot/idc/InvisibleIdCreater.java

@@ -0,0 +1,62 @@
+package com.diagbot.idc;//package com.diagbot.idc;
+//
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.beans.factory.annotation.Qualifier;
+//import org.springframework.dao.DataAccessException;
+//import org.springframework.data.redis.connection.RedisConnection;
+//import org.springframework.data.redis.core.RedisCallback;
+//import org.springframework.data.redis.core.RedisTemplate;
+//
+//import java.util.List;
+//
+///**
+// * @Description: 不可见id由redis生成
+// * @author: gaodm
+// * @time: 2018/9/5 9:21
+// */
+//@SuppressWarnings("unchecked")
+//@Slf4j
+//public class InvisibleIdCreater extends AbstractIdCreater<Class> {
+//
+//    @Autowired
+//    @Qualifier("redisTemplateForIdc")
+//    RedisTemplate redisTemplate;
+//
+//    public InvisibleIdCreater(int machineId, int dataCenterId) {
+//        super(machineId, dataCenterId);
+//    }
+//
+//    @Override
+//    public Long getNextId(Class param) {
+//        final byte[] redis_key = redisTemplate.getKeySerializer().serialize("id_" + param.getName());
+//        Object execute = redisTemplate.execute(new RedisCallback() {
+//            @Override
+//            public Long doInRedis(RedisConnection connection) throws DataAccessException {
+//                Long incr = connection.incr(redis_key);
+//                return incr;
+//            }
+//        });
+//        return (Long) execute;
+//    }
+//
+//    @Override
+//    public List<Long> getNextIds(Class param, final int size) {
+//        final byte[] rawKey = redisTemplate.getKeySerializer().serialize("id_" + param.getName());
+//        //pipeline
+//        RedisCallback<List<Object>> pipelineCallback = new RedisCallback<List<Object>>() {
+//            @Override
+//            public List<Object> doInRedis(RedisConnection connection) throws DataAccessException {
+//                connection.openPipeline();
+//                for (int i = 0; i < size; i++) {
+//                    connection.incr(rawKey);
+//                }
+//                return connection.closePipeline();
+//            }
+//        };
+//
+//        List<Long> results = (List<Long>) redisTemplate.execute(pipelineCallback);
+//        return results;
+//    }
+//
+//}

+ 71 - 0
xlcs-service/src/main/java/com/diagbot/idc/VisibleIdCreater.java

@@ -0,0 +1,71 @@
+package com.diagbot.idc;
+
+
+import com.diagbot.util.DateUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomUtils;
+import org.apache.commons.lang3.time.DateUtils;
+
+import java.util.Calendar;
+
+/**
+ * @Description: 可见id每秒递增
+ * @author: gaodm
+ * @time: 2018/9/5 10:45
+ */
+@Slf4j
+public class VisibleIdCreater extends AbstractIdCreater<Integer> {
+
+    private long lastTimestamp = -1L;
+
+    private long sequence = 0L;
+    private long sequenceMask = 9999;
+
+    public VisibleIdCreater(int machineId, int dataCenterId) {
+        super(machineId, dataCenterId);
+    }
+
+    @Override
+    /**
+     *  对外id生成规则
+     *  180905123451110001
+     *  180905 - 12345 -  1   -  1   -     1     - 0001
+     *   日期 -  秒数  - 业务 - 机器 - 数据中心 - 秒内自增
+     *  @param type 业务id 1.订单 2.交易 3.退款
+     *  @return 生成的id
+     */
+    public synchronized Long getNextId(Integer type) {
+
+        Calendar calendar = Calendar.getInstance();
+
+        long timestamp = timeGen() / 1000;
+
+        if (timestamp < lastTimestamp) {
+            log.error(String.format("clock is moving backwards. Rejecting requests until %d.", lastTimestamp));
+            throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));
+        }
+
+        if (lastTimestamp == timestamp) {
+            sequence = (sequence + 1);
+            if (sequence > sequenceMask) {
+                //timestamp = tilNextMillis(lastTimestamp);
+                log.error(String.format("id creater sequence is full. wait to next time"));
+                return null;
+            }
+        } else {
+            sequence = getNewSequence();
+        }
+
+        lastTimestamp = timestamp;
+
+        String date = DateUtil.format(calendar.getTime(), "yyMMdd");
+        long seconds = DateUtils.getFragmentInSeconds(calendar, Calendar.DAY_OF_YEAR);
+
+        return Long.valueOf(date + String.format("%05d", seconds) + String.valueOf(type) + machineId + dataCenterId + sequence);
+    }
+
+    private long getNewSequence() {
+        return RandomUtils.nextInt(1000, 2000);
+    }
+
+}

+ 3 - 0
xlcs-service/src/main/java/com/diagbot/mapper/InquiryInfoMapper.java

@@ -4,6 +4,7 @@ import com.diagbot.dto.InquiryDTO;
 import com.diagbot.dto.InquiryPatDTO;
 import com.diagbot.entity.InquiryInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.vo.InquiryMechVO;
 import com.diagbot.vo.InquiryPatInquiryVO;
 import com.diagbot.vo.InquiryPatVO;
 
@@ -23,4 +24,6 @@ public interface InquiryInfoMapper extends BaseMapper<InquiryInfo> {
 
     public List<InquiryDTO> getPatInquiryList(InquiryPatInquiryVO inquiryPatInquiryVO);
 
+    public List<InquiryDTO> getInquirysByMechId(InquiryMechVO inquiryMechVO);
+
 }

+ 3 - 0
xlcs-service/src/main/java/com/diagbot/service/InquiryInfoService.java

@@ -4,6 +4,7 @@ import com.diagbot.dto.InquiryDTO;
 import com.diagbot.dto.InquiryPatDTO;
 import com.diagbot.entity.InquiryInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.InquiryMechVO;
 import com.diagbot.vo.InquiryPatInquiryVO;
 import com.diagbot.vo.InquiryPatVO;
 
@@ -22,4 +23,6 @@ public interface InquiryInfoService extends IService<InquiryInfo> {
     public List<InquiryPatDTO> getPatList(InquiryPatVO inquiryPatVO);
 
     public List<InquiryDTO> getPatInquiryList(InquiryPatInquiryVO inquiryPatInquiryVO);
+
+    public List<InquiryDTO> getInquirysByMechId(InquiryMechVO inquiryMechVO);
 }

+ 6 - 0
xlcs-service/src/main/java/com/diagbot/service/impl/InquiryInfoServiceImpl.java

@@ -6,6 +6,7 @@ import com.diagbot.entity.InquiryInfo;
 import com.diagbot.mapper.InquiryInfoMapper;
 import com.diagbot.service.InquiryInfoService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.vo.InquiryMechVO;
 import com.diagbot.vo.InquiryPatInquiryVO;
 import com.diagbot.vo.InquiryPatVO;
 import org.springframework.stereotype.Service;
@@ -33,4 +34,9 @@ public class InquiryInfoServiceImpl extends ServiceImpl<InquiryInfoMapper, Inqui
         return baseMapper.getPatInquiryList(inquiryPatInquiryVO);
     }
 
+    @Override
+    public List<InquiryDTO> getInquirysByMechId(InquiryMechVO inquiryMechVO){
+        return baseMapper.getInquirysByMechId(inquiryMechVO);
+    }
+
 }

+ 95 - 0
xlcs-service/src/main/java/com/diagbot/util/AESUtils.java

@@ -0,0 +1,95 @@
+package com.diagbot.util;
+
+import com.diagbot.entity.Constants;
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.Key;
+
+public class AESUtils {
+
+    private static final String KEY_ALGORITHM = "AES";
+    private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
+
+    public static byte[] initSecretKey() throws Exception {
+        KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
+        kg.init(128);
+        SecretKey secretKey = kg.generateKey();
+
+        return secretKey.getEncoded();
+    }
+
+    public static Key toKey(byte[] key) {
+        return new SecretKeySpec(key, KEY_ALGORITHM);
+    }
+
+    public static String encrypt(String data, String key) throws Exception {
+        return Base64.encodeBase64String(encrypt(data.getBytes(Constants.ENCODING), toKey(key.getBytes()), DEFAULT_CIPHER_ALGORITHM));
+    }
+
+    public static String decrypt(String data, String key) throws Exception {
+        return new String(decrypt(Base64.decodeBase64(data.getBytes(Constants.ENCODING)), toKey(key.getBytes()), DEFAULT_CIPHER_ALGORITHM));
+    }
+
+    public static byte[] encrypt(byte[] data, Key key) throws Exception {
+        return encrypt(data, key, DEFAULT_CIPHER_ALGORITHM);
+    }
+
+    public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
+        return encrypt(data, toKey(key), DEFAULT_CIPHER_ALGORITHM);
+    }
+
+    public static byte[] encrypt(byte[] data, Key key, String cipherAlgorithm) throws Exception {
+        Cipher cipher = Cipher.getInstance(cipherAlgorithm);
+        cipher.init(Cipher.ENCRYPT_MODE, key);
+        return cipher.doFinal(data);
+    }
+
+    public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
+        return decrypt(data, key, DEFAULT_CIPHER_ALGORITHM);
+    }
+
+    public static byte[] decrypt(byte[] data, Key key) throws Exception {
+        return decrypt(data, key, DEFAULT_CIPHER_ALGORITHM);
+    }
+
+    public static byte[] decrypt(byte[] data, byte[] key, String cipherAlgorithm) throws Exception {
+        Key k = toKey(key);
+        return decrypt(data, k, cipherAlgorithm);
+    }
+
+    public static byte[] decrypt(byte[] data, Key key, String cipherAlgorithm) throws Exception {
+        Cipher cipher = Cipher.getInstance(cipherAlgorithm);
+        cipher.init(Cipher.DECRYPT_MODE, key);
+        return cipher.doFinal(data);
+    }
+
+    private static String showByteArray(byte[] data) {
+        if (null == data) {
+            return null;
+        }
+        StringBuilder sb = new StringBuilder("{");
+        for (byte b : data) {
+            sb.append(b).append(",");
+        }
+        sb.deleteCharAt(sb.length() - 1);
+        sb.append("}");
+        return sb.toString();
+    }
+
+
+    public static void main(String[] args) throws Exception {
+        String original = "[1]";
+        String key = "1234567890123456";
+        System.out.println("original: " + original);
+        String encrypt = encrypt(original, key);
+        System.out.println("encrypt: " + encrypt + ", key: " + key);
+        String decrypt = decrypt(encrypt, key);
+        System.out.println("decrypt: " + decrypt);
+
+    }
+
+}

+ 71 - 0
xlcs-service/src/main/java/com/diagbot/util/Demo.java

@@ -0,0 +1,71 @@
+package com.diagbot.util;
+
+import com.diagbot.entity.Client;
+import com.diagbot.entity.JSONResponseBean;
+import com.diagbot.entity.Request;
+import com.diagbot.entity.Response;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class Demo {
+
+    public static void main(String[] args) throws Exception {
+        //必填 apiUrl
+        String apiUrl = "http://116.62.170.131:8096/openapi-devtest/gateway";
+        //必填
+        String appKey = "ngari5e34e52511dc394f";
+        //必填
+        String appSecret = "11dc394fc05518c1";
+        //如果开启加密,则必填
+        String encodingAesKey = "";
+        Client client = new Client(apiUrl, appKey, appSecret, encodingAesKey);
+
+        //调用相应的接口请求
+        Response response = client.execute(getltcs());
+//        System.out.println(JSONUtils.toString(response));
+        if (response.isSuccess()) {
+            //接口返回的结果
+            JSONResponseBean result = response.getJsonResponseBean();
+//            System.out.println(JSONUtils.toString(result));
+            System.out.println(result.getBody().toString());
+
+        } else {
+            System.out.println(response.getCaErrorMsg());
+            System.out.println(response.getErrorMessage());
+        }
+
+    }
+
+    public static Request getltcs() {
+        //入参赋值,注意最外层是个json数组
+        List bodyList = new ArrayList<>();
+
+        List<Map<String, Object>> details = new ArrayList<>();
+        Map<String, Object> detail1 = new HashMap<>();
+        detail1.put("question", "问题1");
+        detail1.put("answer", "答案1");
+        Map<String, Object> detail2 = new HashMap<>();
+        detail2.put("question", "问题2");
+        detail2.put("answer", "答案2");
+        details.add(detail1);
+        details.add(detail2);
+
+        Map<String, Object> body = new HashMap<>();
+        body.put("details", details);
+        body.put("doctorId", 1182);
+        body.put("mpiId", "2c90818958b4f5f10158b50289020001");
+        body.put("appId", "wx6a80dd109228fd4b");
+        body.put("diagnosis", "Summary");
+
+        bodyList.add(body);
+
+        //X-Service-Id对应的值
+        String serviceId = "consult.questionRecordService";
+        //X-Service-Method对应的值
+        String method = "saveQuestionRecord";
+        return new Request(serviceId, method, bodyList);
+    }
+}

+ 139 - 0
xlcs-service/src/main/java/com/diagbot/util/JSONUtils.java

@@ -0,0 +1,139 @@
+package com.diagbot.util;
+
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.text.SimpleDateFormat;
+
+public class JSONUtils {
+	private static ObjectMapper mapper =  new ObjectMapper();
+
+	static{
+		mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+		mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
+		mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
+
+		mapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING,true);
+		mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+		mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
+		mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+
+	}
+
+	public static <T> T parse(String value, Class<T> clz){
+
+		if (StringUtils.isEmpty(value)) {
+			return null;
+		}
+		try {
+			return mapper.readValue(value, clz);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	public static <T> T parse(byte[] bytes, Class<T> clz){
+		try {
+			return mapper.readValue(bytes, clz);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+
+	public static <T> T parse(InputStream ins, Class<T> clz){
+		try {
+			return mapper.readValue(ins, clz);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+
+	public static <T> T  parse(Reader reader, Class<T> clz){
+		try {
+			return mapper.readValue(reader, clz);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	public static <T> T update(String value, T object) {
+		try {
+			return (T) mapper.readerForUpdating(object).readValue(value);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	public static String writeValueAsString(Object o){
+		try {
+			return mapper.writeValueAsString(o);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	public static void write(OutputStream outs, Object o){
+		try {
+			mapper.writeValue(outs,o);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+    }
+
+	public static void write(Writer writer, Object o){
+		try {
+			mapper.writeValue(writer,o);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	public static String toString(Object o){
+		try {
+			return mapper.writeValueAsString(o);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	public static String toString(Object o, Class<?> clz){
+		try {
+			return mapper.writerFor(clz).writeValueAsString(o);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	public static byte[] toBytes(Object o){
+		try {
+			return mapper.writeValueAsBytes(o);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+}

+ 118 - 0
xlcs-service/src/main/java/com/diagbot/util/MessageDigestUtil.java

@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.diagbot.util;
+
+import com.diagbot.entity.Constants;
+import org.apache.commons.codec.binary.Base64;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * 消息摘要工具
+ */
+public class MessageDigestUtil {
+    /**
+     * 先进行MD5摘要再进行Base64编码获取摘要字符串
+     *
+     * @param str
+     * @return
+     */
+    public static String base64AndMD5(String str) {
+        if (str == null) {
+            throw new IllegalArgumentException("inStr can not be null");
+        }
+        return base64AndMD5(toBytes(str));
+    }
+
+    /**
+     * 先进行MD5摘要再进行Base64编码获取摘要字符串
+     *
+     * @return
+     */
+    public static String base64AndMD5(byte[] bytes) {
+        if (bytes == null) {
+            throw new IllegalArgumentException("bytes can not be null");
+        }
+        try {
+            final MessageDigest md = MessageDigest.getInstance("MD5");
+            md.reset();
+            md.update(bytes);
+            final Base64 base64 = new Base64();
+            final byte[] enbytes = base64.encode(md.digest());
+            return new String(enbytes);
+        } catch (final NoSuchAlgorithmException e) {
+            throw new IllegalArgumentException("unknown algorithm MD5");
+        }
+    }
+
+    /**
+     * UTF-8编码转换为ISO-9959-1
+     *
+     * @param str
+     * @return
+     */
+    public static String utf8ToIso88591(String str) {
+        if (str == null) {
+            return str;
+        }
+
+        try {
+            return new String(str.getBytes("UTF-8"), "ISO-8859-1");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * ISO-9959-1编码转换为UTF-8
+     *
+     * @param str
+     * @return
+     */
+    public static String iso88591ToUtf8(String str) {
+        if (str == null) {
+            return str;
+        }
+
+        try {
+            return new String(str.getBytes("ISO-8859-1"), "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * String转换为字节数组
+     *
+     * @param str
+     * @return
+     */
+    private static byte[] toBytes(final String str) {
+        if (str == null) {
+            return null;
+        }
+        try {
+            return str.getBytes(Constants.ENCODING);
+        } catch (final UnsupportedEncodingException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+}

+ 118 - 0
xlcs-service/src/main/java/com/diagbot/util/OpenApiUtils.java

@@ -0,0 +1,118 @@
+package com.diagbot.util;
+
+import com.diagbot.entity.JSONResponseBean;
+import com.diagbot.entity.Request;
+import com.diagbot.entity.Response;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ClientConnectionManager;
+import org.apache.http.conn.scheme.Scheme;
+import org.apache.http.conn.scheme.SchemeRegistry;
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.util.EntityUtils;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.io.IOException;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+import java.util.Map;
+
+public class OpenApiUtils {
+    public static Response post(Request request) throws Exception {
+        return convert(doPost(request));
+    }
+
+    /**
+     * post form
+     *
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    private static HttpResponse doPost(Request request)
+            throws Exception {
+        HttpClient httpClient = wrapClient(request.getApiUrl());
+
+        HttpPost httpPost = new HttpPost(request.getApiUrl());
+        for (Map.Entry<String, String> e : request.getHeaders().entrySet()) {
+            httpPost.addHeader(e.getKey(), e.getValue());
+        }
+        if (request.getBodys() != null || StringUtils.isNotEmpty(request.getStringBody())) {
+            if (StringUtils.isNotEmpty(request.getStringBody())) {
+                httpPost.setEntity(new StringEntity(request.getStringBody(), ContentType.APPLICATION_JSON));
+            } else {
+                httpPost.setEntity(new StringEntity(JSONUtils.toString(request.getBodys()), ContentType.APPLICATION_JSON));
+            }
+        }
+        return httpClient.execute(httpPost);
+    }
+
+    private static HttpClient wrapClient(String host) {
+        HttpClient httpClient = new DefaultHttpClient();
+        if (host.startsWith("https://")) {
+            sslClient(httpClient);
+        }
+        return httpClient;
+    }
+
+    private static void sslClient(HttpClient httpClient) {
+        try {
+            SSLContext ctx = SSLContext.getInstance("TLS");
+            X509TrustManager tm = new X509TrustManager() {
+                public X509Certificate[] getAcceptedIssuers() {
+                    return null;
+                }
+
+                public void checkClientTrusted(X509Certificate[] xcs, String str) {
+
+                }
+
+                public void checkServerTrusted(X509Certificate[] xcs, String str) {
+
+                }
+            };
+            ctx.init(null, new TrustManager[] { tm }, null);
+            SSLSocketFactory ssf = new SSLSocketFactory(ctx);
+            ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
+            ClientConnectionManager ccm = httpClient.getConnectionManager();
+            SchemeRegistry registry = ccm.getSchemeRegistry();
+            registry.register(new Scheme("https", 443, ssf));
+        } catch (KeyManagementException ex) {
+            throw new RuntimeException(ex);
+        } catch (NoSuchAlgorithmException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    private static Response convert(HttpResponse response) throws IOException {
+        Response res = new Response();
+
+        if (null != response) {
+            res.setStatusCode(response.getStatusLine().getStatusCode());
+            for (Header header : response.getAllHeaders()) {
+                res.setHeader(header.getName(), MessageDigestUtil.iso88591ToUtf8(header.getValue()));
+            }
+            res.setContentType(res.getHeader("Content-Type"));
+            res.setRequestId(res.getHeader("X-Ca-Request-Id"));
+            res.setBody(EntityUtils.toString(response.getEntity()));
+            res.setJsonResponseBean(JSONUtils.parse(res.getBody(), JSONResponseBean.class));
+            res.setCaErrorMsg(res.getHeader("X-Ca-Error-Message"));
+
+        } else {
+            //服务器无回应
+            res.setStatusCode(500);
+            res.setErrorMessage("No Response");
+        }
+
+        return res;
+    }
+}

+ 126 - 0
xlcs-service/src/main/java/com/diagbot/util/SignUtil.java

@@ -0,0 +1,126 @@
+
+package com.diagbot.util;
+
+
+import com.diagbot.entity.Constants;
+import com.diagbot.entity.SystemHeader;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.UUID;
+
+/**
+ * 签名工具
+ */
+public class SignUtil {
+    /**
+     * 需要参与签名的请求头
+     */
+    private static final List<String> SIGN_HEADER_LIST = Arrays.asList("X-Service-Id","X-Service-Method","X-Ca-Key",
+            "X-Ca-Nonce","X-Ca-Timestamp","X-Content-MD5");
+    /**
+     * 计算签名
+     *
+     * @param secret APP密钥
+     * @param headers 请求头参数
+     * @return 签名后的字符串
+     */
+    public static String sign(String secret,
+                              Map<String, String> headers) {
+        try {
+            Mac hmacSha256 = Mac.getInstance(Constants.HMAC_SHA256);
+            byte[] keyBytes = secret.getBytes(Constants.ENCODING);
+            hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, Constants.HMAC_SHA256));
+//            String contentMd5 = MessageDigestUtil.base64AndMD5(bodyContent);
+
+            return new String(Base64.encodeBase64(
+                    hmacSha256.doFinal((buildHeaders(headers, SIGN_HEADER_LIST))
+                            .getBytes(Constants.ENCODING))),
+                    Constants.ENCODING);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 构建待签名Http头
+     *
+     * @param headers 请求中所有的Http头
+     * @param signHeaderList 自定义参与签名Header前缀
+     * @return 待签名Http头
+     */
+    public static String buildHeaders(Map<String, String> headers, List<String> signHeaderList) {
+
+    	List<String> sbList=new ArrayList<>();
+    	if (null != signHeaderList) {
+    		Collections.sort(signHeaderList);
+    		if (null != headers) {
+    			Map<String, String> sortMap = new TreeMap<String, String>();
+    			sortMap.putAll(headers);
+    			StringBuilder signHeadersStringBuilder = new StringBuilder();
+    			for (Map.Entry<String, String> header : sortMap.entrySet()) {
+                    if (isHeaderToSign(header.getKey(), signHeaderList)) {
+                        StringBuilder sb = new StringBuilder();
+                    	sb.append(header.getKey().toLowerCase());
+                    	sb.append(Constants.SPE2);
+                        if (!StringUtils.isBlank(header.getValue())) {
+                        	sb.append(header.getValue());
+                        }
+                        sbList.add(sb.toString());
+                        if (0 < signHeadersStringBuilder.length()) {
+                        	signHeadersStringBuilder.append(Constants.SPE1);
+                        }
+                        signHeadersStringBuilder.append(header.getKey().toLowerCase());
+                    }
+                }
+    			headers.put(SystemHeader.X_CA_SIGNATURE_HEADERS, signHeadersStringBuilder.toString());
+    		}
+    	}
+        return StringUtils.join(sbList,Constants.SPE3);
+    }
+
+    /**
+     * Http头是否参与签名 return
+     */
+    private static boolean isHeaderToSign(String headerName, List<String> signHeaderList) {
+        if (StringUtils.isBlank(headerName)) {
+            return false;
+        }
+
+        if (headerName.startsWith(Constants.CA_HEADER_TO_SIGN_PREFIX_SYSTEM)) {
+            return true;
+        }
+
+        if (null != signHeaderList) {
+            for (String signHeaderPrefix : signHeaderList) {
+                if (headerName.equalsIgnoreCase(signHeaderPrefix)) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    public static void main(String[] args) {
+        String secret = "1234567890123456";
+        Map<String, String> headers = new HashMap<>();
+        headers.put("X-Service-Id", "eh.organ");
+        headers.put("X-Service-Method", "");
+        headers.put("X-Ca-Key", "hello");
+        headers.put("X-Ca-Timestamp", String.valueOf(System.currentTimeMillis()));
+        headers.put("X-Ca-Nonce", UUID.randomUUID().toString());
+        headers.put(SystemHeader.X_CONTENT_MD5, UUID.randomUUID().toString());
+        System.out.println(sign(secret, headers));
+
+    }
+}

+ 35 - 0
xlcs-service/src/main/java/com/diagbot/vo/HistoryInquiryVO.java

@@ -0,0 +1,35 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @Description: 历史记录入参
+ * @Author:zhaops
+ * @time: 2020/3/5 9:56
+ */
+@Getter
+@Setter
+public class HistoryInquiryVO {
+    @ApiModelProperty(value = "医院名称", required = true)
+//    @NotBlank(message = "请输入医院编码")
+    private String hospitalCode;
+
+//    @NotBlank(message = "请输入姓名")
+    @ApiModelProperty(value = "姓名")
+    private String patName;
+
+//    @NotBlank(message = "请输入证件号")
+    @ApiModelProperty(value = "证件号")
+    private String idNum;
+
+    /**
+     * 机器ID
+     */
+//    @NotBlank(message = "请输入机器ID")
+    @ApiModelProperty(value = "机器ID")
+    private String machineId;
+}

+ 19 - 0
xlcs-service/src/main/java/com/diagbot/vo/HospSetVO.java

@@ -0,0 +1,19 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/3/5 10:51
+ */
+@Getter
+@Setter
+public class HospSetVO {
+    //医院编码
+    private String hospitalCode;
+
+    //配置编码
+    private String code;
+}

+ 27 - 0
xlcs-service/src/main/java/com/diagbot/vo/InquiryMechVO.java

@@ -0,0 +1,27 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/2/3 9:50
+ */
+@Getter
+@Setter
+public class InquiryMechVO {
+    private static final long serialVersionUID = 1L;
+
+    @NotBlank(message = "请输入医院名称")
+    private String hospitalCode;
+
+    /**
+     * 机器ID
+     */
+    @NotBlank(message = "请输入机器ID")
+    private String machineId;
+
+}

+ 7 - 0
xlcs-service/src/main/java/com/diagbot/vo/SaveInquiryDetailVO.java

@@ -1,8 +1,11 @@
 package com.diagbot.vo;
 
+import com.diagbot.entity.Option;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * @author rengb
  * @Description
@@ -22,5 +25,9 @@ public class SaveInquiryDetailVO {
      */
     private String answer;
 
+    /**
+     * 问题的选项答案,包含已选中的问题
+     */
+    private List<Option> options;
 
 }

+ 26 - 0
xlcs-service/src/main/java/com/diagbot/vo/SaveInquiryVO.java

@@ -6,6 +6,7 @@ import lombok.Getter;
 import lombok.Setter;
 
 import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
 import java.util.List;
 
 /**
@@ -52,6 +53,9 @@ public class SaveInquiryVO {
     @ApiModelProperty(value = "焦虑症总分")
     private String anxietyPoint;
 
+    @ApiModelProperty(value = "焦虑症分段说明")
+    private String anxietyRange;
+
     @ApiModelProperty(value = "焦虑症判断依据")
     private String anxietyJudge;
 
@@ -61,9 +65,31 @@ public class SaveInquiryVO {
     @ApiModelProperty(value = "抑郁症总分")
     private String depressionPoint;
 
+    @ApiModelProperty(value = "抑郁症分段说明")
+    private String depressionRange;
+
     @ApiModelProperty(value = "抑郁症判断依据")
     private String depressionJudge;
 
     @ApiModelProperty(value = "抑郁症建议")
     private String depressionAdvise;
+
+    @ApiModelProperty(value = "用户Id")
+    private String mpiId;
+
+    @ApiModelProperty(value = "公众号Id")
+    private String appId;
+
+    @ApiModelProperty(value = "机器Id")
+    private String machineId;
+
+    @ApiModelProperty(value = "链接来源 菜单问诊from=1,菜单挂号from=2,公众号问诊from=3,当日挂号from=4,心理测试from=5", required = true)
+    @NotBlank(message = "链接来源必传")
+    private String from;
+
+    @ApiModelProperty(value = "自诊程序产生的ID")
+    private Long inquiryId;
+
+    @ApiModelProperty(value = "对接方 对接纳里dest=1")
+    private String dest;
 }

+ 38 - 8
xlcs-service/src/main/java/com/diagbot/web/InquiryInfoController.java

@@ -1,27 +1,29 @@
 package com.diagbot.web;
 
 import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.GetInquiryDetailDTO;
+import com.diagbot.dto.HistoryInquiryDTO;
 import com.diagbot.dto.InquiryDTO;
 import com.diagbot.dto.InquiryPatDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.SaveInquiryDTO;
-import com.diagbot.entity.InquiryDetail;
 import com.diagbot.facade.InquiryInfoFacade;
+import com.diagbot.vo.HistoryInquiryVO;
 import com.diagbot.vo.InquiryDetailVO;
+import com.diagbot.vo.InquiryMechVO;
 import com.diagbot.vo.InquiryPatInquiryVO;
 import com.diagbot.vo.InquiryPatVO;
 import com.diagbot.vo.SaveInquiryVO;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import javax.validation.Valid;
 import java.util.List;
 
 /**
@@ -41,9 +43,9 @@ public class InquiryInfoController {
     @PostMapping("/saveInquiry")
     @SysLogger("saveInquiry")
     @Transactional
-    public RespDTO<Boolean> saveInquiry(@RequestBody SaveInquiryVO saveInquiryVO) {
-        inquiryInfoFacade.saveInquiry(saveInquiryVO);
-        return RespDTO.onSuc(true);
+    public RespDTO<SaveInquiryDTO> saveInquiry(@RequestBody SaveInquiryVO saveInquiryVO) {
+        SaveInquiryDTO data = inquiryInfoFacade.saveInquiry(saveInquiryVO);
+        return RespDTO.onSuc(data);
     }
 
 
@@ -60,6 +62,13 @@ public class InquiryInfoController {
         return RespDTO.onSuc(data);
     }
 
+    @ApiOperation(value = "生成全局唯一机器编码[by:gaodm]",
+            notes = "")
+    @PostMapping("/getMachineId")
+    @SysLogger("getMachineId")
+    public RespDTO<String> getMachineId() {
+        return RespDTO.onSuc(inquiryInfoFacade.getMachineId());
+    }
 
     @ApiOperation(value = "获取机构下病人病历[by:zhoutg]",
             notes = "hospitalCode:医院名称<br>" +
@@ -74,13 +83,34 @@ public class InquiryInfoController {
         return RespDTO.onSuc(data);
     }
 
+    @ApiOperation(value = "获取机构下病人病历[by:gaodm]",
+            notes = "hospitalCode:医院名称<br>" +
+                    "machineId:机器ID<br>")
+    @PostMapping("/getInquirysByMech")
+    @SysLogger("getInquirysByMech")
+    public RespDTO<List<InquiryDTO>> getInquirysByMech(@RequestBody @Validated InquiryMechVO inquiryMechVO) {
+        return RespDTO.onSuc(inquiryInfoFacade.getInquirysByMech(inquiryMechVO));
+    }
+
 
     @ApiOperation(value = "获取病历详情[by:zhoutg]",
             notes = "id:病历id<br>")
     @PostMapping("/getDetailById")
     @SysLogger("getDetailById")
-    public RespDTO<List<InquiryDetail>> getDetail(@RequestBody InquiryDetailVO inquiryDetailVO) {
-        List<InquiryDetail> data = inquiryInfoFacade.getDetail(inquiryDetailVO);
+    public RespDTO<List<GetInquiryDetailDTO>> getDetail(@RequestBody InquiryDetailVO inquiryDetailVO) {
+        List<GetInquiryDetailDTO> data = inquiryInfoFacade.getDetail(inquiryDetailVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "获取历史记录[by:zhaops]",
+            notes = "hospitalCode:医院名称<br>" +
+                    "patName:病人姓名<br>" +
+                    "idNum:证件号码<br>" +
+                    "machineId:机器ID<br>")
+    @PostMapping("/getHistoryInquiry")
+    @SysLogger("getHistoryInquiry")
+    public RespDTO<List<HistoryInquiryDTO>> getHistoryInquiry(@RequestBody HistoryInquiryVO historyInquiryVO) {
+        List<HistoryInquiryDTO> data = inquiryInfoFacade.getHistoryInquiry(historyInquiryVO);
         return RespDTO.onSuc(data);
     }
 }

+ 16 - 0
xlcs-service/src/main/resources/mapper/InquiryInfoMapper.xml

@@ -20,11 +20,16 @@
         <result column="phone" property="phone" />
         <result column="personnel" property="personnel" />
         <result column="anxiety_point" property="anxietyPoint" />
+        <result column="anxiety_range" property="anxietyRange" />
         <result column="anxiety_judge" property="anxietyJudge" />
         <result column="anxiety_advise" property="anxietyAdvise" />
         <result column="depression_point" property="depressionPoint" />
+        <result column="depression_range" property="depressionRange" />
         <result column="depression_judge" property="depressionJudge" />
         <result column="depression_advise" property="depressionAdvise" />
+        <result column="mpi_id" property="mpiId" />
+        <result column="app_id" property="appId" />
+        <result column="machine_id" property="machineId" />
         <result column="remark" property="remark" />
     </resultMap>
 
@@ -70,4 +75,15 @@
         order by gmt_modified desc
     </select>
 
+    <select id="getInquirysByMechId" resultType="com.diagbot.dto.InquiryDTO">
+        select * from xlcs_inquiry_info where is_deleted = 'N'
+        <if test="hospitalCode != null and hospitalCode != '' ">
+            and hospital_code = #{hospitalCode}
+        </if>
+        <if test="machineId != null and machineId != '' ">
+            and machine_id = #{machineId}
+        </if>
+        order by gmt_modified desc
+    </select>
+
 </mapper>