Commit cd07eb23600d62680cafeae7ee2515e859d234fb

Authored by 陶汉栋
1 parent d80bdd42
Exists in master

增加网关负载

cloud/dahua/src/main/java/com/example/dahua/mqtt/MqttManager.java
... ... @@ -96,7 +96,7 @@ public class MqttManager {
96 96 public void sendMq(String deviceId, String cmd) {
97 97 String recvClientId = groupId + "@@@" + deviceId;
98 98 final String p2pSendTopic = topic + "/p2p/" + recvClientId;
99   - String content = "{\"cmd\":\"" + cmd + "\",\"clientId\":\"" + deviceId + "\",\"data\": \"http://update.myjxt.com/CloundWindowYueQing.apk\"}";
  99 + String content = "{\"cmd\":\"" + cmd + "\",\"clientId\":\"" + deviceId + "\",\"data\": \"http://update.myjxt.com/CloundWindow.apk\"}";
100 100 MqttMessage message = new MqttMessage(content.getBytes());
101 101 message.setQos(qosLevel);
102 102 System.out.println("发送内容:" + p2pSendTopic);
... ...
cloud/dahua/src/test/java/com/example/dahua/DahuaApplicationTests.java
... ... @@ -478,13 +478,23 @@ public class DahuaApplicationTests {
478 478 @Test
479 479 public void test1() {
480 480  
481   - List<StudentBean> list = userDao.getStudentUserIdsWith();
  481 +// List<StudentBean> list = userDao.getStudentUserIdsWith();
  482 +//
  483 +// for (int i = 0; i < list.size(); i++) {
  484 +// StudentBean studentBean = list.get(i);
  485 +// }
  486 +//
  487 +// System.out.println("list:" + list.toString());
  488 +
  489 + List<AttendanceBean> attendanceBeanList = userDao.getAttendanceBeans("479","4");
  490 +
  491 + for (int i = 0; i < attendanceBeanList.size(); i++) {
  492 + AttendanceBean attendanceBean = attendanceBeanList.get(i);
  493 +
482 494  
483   - for (int i = 0; i < list.size(); i++) {
484   - StudentBean studentBean = list.get(i);
485 495 }
486 496  
487   - System.out.println("list:" + list.toString());
  497 +
488 498  
489 499 }
490 500  
... ... @@ -496,7 +506,7 @@ public class DahuaApplicationTests {
496 506  
497 507 mqttManager.init();
498 508  
499   - List<String> stringList = userDao.getAllDecWithSch(13);
  509 + List<String> stringList = userDao.getAllDecWithSch(479);
500 510 System.out.println("stringList:" + stringList.size());
501 511 for (int i = 0; i < stringList.size(); i++) {
502 512 String devId = stringList.get(i);
... ...
cloud/haikangface/.gitignore
1 1 HELP.md
2 2 target/
3 3 !.mvn/wrapper/maven-wrapper.jar
4   -!**/src/main/**
5   -!**/src/test/**
  4 +!**/src/main/**/target/
  5 +!**/src/test/**/target/
6 6  
7 7 ### STS ###
8 8 .apt_generated
... ... @@ -26,6 +26,8 @@ target/
26 26 /nbdist/
27 27 /.nb-gradle/
28 28 build/
  29 +!**/src/main/**/build/
  30 +!**/src/test/**/build/
29 31  
30 32 ### VS Code ###
31 33 .vscode/
... ...
cloud/haikangface/.mvn/wrapper/MavenWrapperDownloader.java
1 1 /*
2   -Licensed to the Apache Software Foundation (ASF) under one
3   -or more contributor license agreements. See the NOTICE file
4   -distributed with this work for additional information
5   -regarding copyright ownership. The ASF licenses this file
6   -to you under the Apache License, Version 2.0 (the
7   -"License"); you may not use this file except in compliance
8   -with the License. You may obtain a copy of the License at
  2 + * Copyright 2007-present the original author or authors.
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * https://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
9 16  
10   - https://www.apache.org/licenses/LICENSE-2.0
11   -
12   -Unless required by applicable law or agreed to in writing,
13   -software distributed under the License is distributed on an
14   -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   -KIND, either express or implied. See the License for the
16   -specific language governing permissions and limitations
17   -under the License.
18   -*/
19   -
20   -import java.io.File;
21   -import java.io.FileInputStream;
22   -import java.io.FileOutputStream;
23   -import java.io.IOException;
24   -import java.net.URL;
25   -import java.nio.channels.Channels;
26   -import java.nio.channels.ReadableByteChannel;
  17 +import java.net.*;
  18 +import java.io.*;
  19 +import java.nio.channels.*;
27 20 import java.util.Properties;
28 21  
29 22 public class MavenWrapperDownloader {
30 23  
  24 + private static final String WRAPPER_VERSION = "0.5.6";
31 25 /**
32 26 * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
33 27 */
34   - private static final String DEFAULT_DOWNLOAD_URL =
35   - "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar";
  28 + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
  29 + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
36 30  
37 31 /**
38 32 * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
... ... @@ -80,13 +74,13 @@ public class MavenWrapperDownloader {
80 74 }
81 75 }
82 76 }
83   - System.out.println("- Downloading from: : " + url);
  77 + System.out.println("- Downloading from: " + url);
84 78  
85 79 File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
86 80 if (!outputFile.getParentFile().exists()) {
87 81 if (!outputFile.getParentFile().mkdirs()) {
88 82 System.out.println(
89   - "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'");
  83 + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
90 84 }
91 85 }
92 86 System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
... ... @@ -102,6 +96,16 @@ public class MavenWrapperDownloader {
102 96 }
103 97  
104 98 private static void downloadFileFromURL(String urlString, File destination) throws Exception {
  99 + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
  100 + String username = System.getenv("MVNW_USERNAME");
  101 + char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
  102 + Authenticator.setDefault(new Authenticator() {
  103 + @Override
  104 + protected PasswordAuthentication getPasswordAuthentication() {
  105 + return new PasswordAuthentication(username, password);
  106 + }
  107 + });
  108 + }
105 109 URL website = new URL(urlString);
106 110 ReadableByteChannel rbc;
107 111 rbc = Channels.newChannel(website.openStream());
... ...
cloud/haikangface/.mvn/wrapper/maven-wrapper.jar
No preview for this file type
cloud/haikangface/.mvn/wrapper/maven-wrapper.properties
1   -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip
  1 +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
  2 +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/CMSServer.java
... ... @@ -10,10 +10,12 @@ import com.sincere.haikangface.haikanglibs.HCEHomeAlarm;
10 10 import com.sincere.haikangface.haikanglibs.HCEHomeCMS;
11 11 import com.sincere.haikangface.haikanglibs.HCEHomeSS;
12 12 import com.sincere.haikangface.mqtt.MqtUtils;
  13 +import com.sincere.haikangface.mqtt.MqttManager;
13 14 import com.sincere.haikangface.utils.*;
14 15 import com.sincere.haikangface.xiananDao.SendRecordDao;
15 16 import com.sun.jna.NativeLong;
16 17 import com.sun.jna.Pointer;
  18 +import lombok.extern.slf4j.Slf4j;
17 19 import org.apache.http.util.TextUtils;
18 20 import org.springframework.beans.factory.annotation.Autowired;
19 21 import org.springframework.beans.factory.annotation.Value;
... ... @@ -36,6 +38,7 @@ import java.util.Map;
36 38 import java.util.regex.Pattern;
37 39  
38 40 @Component
  41 +@Slf4j
39 42 public class CMSServer implements ApplicationRunner {
40 43  
41 44 @Autowired
... ... @@ -50,9 +53,9 @@ public class CMSServer implements ApplicationRunner {
50 53  
51 54 //114.55.30.100
52 55 //120.26.116.253
53   - private String ip_cloud = "120.26.116.253";
54   - // private String ip_cloud = "172.16.2.56";
55   -// private String ip_cloud = "114.55.30.100";
  56 +// private String ip_cloud = "120.26.116.253";
  57 + private String ip_cloud = "172.16.2.53";
  58 + // private String ip_cloud = "114.55.30.100";
56 59 private String ip;
57 60  
58 61 {
... ... @@ -126,7 +129,7 @@ public class CMSServer implements ApplicationRunner {
126 129 public class FRegisterCallBack implements HCEHomeCMS.DEVICE_REGISTER_CB {
127 130 public boolean invoke(NativeLong lUserID, int dwDataType, Pointer pOutBuffer, int dwOutLen, HCEHomeCMS.NET_EHOME_SERVER_INFO pInBuffer, int dwInLen, Pointer pUser) {
128 131 String deviceId = "";
129   -// System.out.println("dwDataType:" + dwDataType);
  132 + System.out.println("dwDataType:" + dwDataType);
130 133 if (dwDataType == 0) {
131 134 HCEHomeCMS.NET_EHOME_DEV_REG_INFO strDevRegInfo = new HCEHomeCMS.NET_EHOME_DEV_REG_INFO();
132 135 strDevRegInfo.write();
... ... @@ -169,10 +172,12 @@ public class CMSServer implements ApplicationRunner {
169 172 // byte[] byIP = ip.getBytes();
170 173 byte[] byIP = ip_cloud.getBytes();
171 174 System.arraycopy(byIP, 0, pInBuffer.struUDPAlarmSever.szIP, 0, byIP.length);
  175 + // TODO: 2020/8/27 人脸机类型为0
172 176 pInBuffer.dwAlarmServerType = 0; //报警服务器类型:0- 只支持UDP协议上报,1- 支持UDP、TCP两种协议上报
173 177 pInBuffer.struTCPAlarmSever.wPort = 7661;
174 178 pInBuffer.struUDPAlarmSever.wPort = 7662;
175 179  
  180 + // TODO: 2020/8/27 人脸存储类型为3
176 181 pInBuffer.dwPicServerType = 3;
177 182 System.arraycopy(byIP, 0, pInBuffer.struPictureSever.szIP, 0, byIP.length);
178 183 pInBuffer.struPictureSever.wPort = 8081;
... ... @@ -296,6 +301,7 @@ public class CMSServer implements ApplicationRunner {
296 301 pFileName = pFileName.split("T")[0] + ".jpg";
297 302 isZhuaPai = true;
298 303 }
  304 +
299 305 String strFilePath = strPath + pFileName;
300 306 FileUtils.getInstance().writeLogs("文件名:" + pFileName, FileUtils.fileName);
301 307 //保存抓拍到的人脸图片,比对通过后的图片资源
... ... @@ -365,9 +371,11 @@ public class CMSServer implements ApplicationRunner {
365 371 }
366 372  
367 373 net_ehome_alarm_listen_param.struAddress.szIP = ip.getBytes();
  374 + // TODO: 2020/8/27 人脸端口号为7662
368 375 net_ehome_alarm_listen_param.struAddress.wPort = 7662;
369 376 net_ehome_alarm_listen_param.fnMsgCb = cbEHomeMsgCallBack;
370 377 net_ehome_alarm_listen_param.pUserData = null;
  378 + // TODO: 2020/8/27 人脸类型为1
371 379 net_ehome_alarm_listen_param.byProtocolType = 1; //协议类型:0- TCP,1- UDP
372 380 net_ehome_alarm_listen_param.byUseCmsPort = 0; //是否复用CMS端口:0- 不复用,非0- 复用
373 381 //如果复用cms端口,协议类型字段无效,此时AMS的本地监听信息struAddress填本地回环地址,
... ... @@ -378,18 +386,18 @@ public class CMSServer implements ApplicationRunner {
378 386 System.out.println("NET_EALARM_StartListen失败, error code:" + hCEhomeCMS.NET_ECMS_GetLastError());
379 387 return;
380 388 } else {
381   - /*复用CMS端口接收设备上传报警信息的时候需要调用以下接口配置
382   - HCEHomeCMS.NET_EHOME_AMS_ADDRESS struAMSAddr= new HCEHomeCMS.NET_EHOME_AMS_ADDRESS();
  389 + /*复用CMS端口接收设备上传报警信息的时候需要调用以下接口配置*/
  390 + /*HCEHomeCMS.NET_EHOME_AMS_ADDRESS struAMSAddr= new HCEHomeCMS.NET_EHOME_AMS_ADDRESS();
383 391 struAMSAddr.dwSize = struAMSAddr.size();
384 392 struAMSAddr.byEnable = 1;//是否启用:0-关闭CMS接收报警功能,1-开启CMS接收报警功能
385   - String strAmsAddr = "10.17.36.25";
  393 + String strAmsAddr = ip_cloud;
386 394 System.arraycopy(strAmsAddr.getBytes(), 0, struAMSAddr.struAddress.szIP, 0, strAmsAddr.length());
387 395 struAMSAddr.struAddress.wPort = 7662; //和报警服务器监听端口需要一致
388 396 struAMSAddr.write();
389 397  
390 398 if(!hCEhomeCMS.NET_ECMS_SetSDKLocalCfg(1, struAMSAddr.getPointer()))
391 399 {
392   - JOptionPane.showMessageDialog(null, "NET_ECMS_SetSDKLocalCfg failed, error code:" + hCEhomeCMS.NET_ECMS_GetLastError());
  400 + System.out.println("NET_ECMS_SetSDKLocalCfg failed, error code:" + hCEhomeCMS.NET_ECMS_GetLastError());
393 401 }*/
394 402 System.out.println("启动报警监听成功");
395 403 }
... ... @@ -412,7 +420,7 @@ public class CMSServer implements ApplicationRunner {
412 420 strXMLData.read();
413 421  
414 422 String strXML = new String(strXMLData.byValue);
415   -// System.out.println(strXML);
  423 + System.out.println(strXML);
416 424  
417 425 if (null == alarmUtils) {
418 426 alarmUtils = new AlarmUtils(deviceDao);
... ... @@ -496,6 +504,10 @@ public class CMSServer implements ApplicationRunner {
496 504 FileUtils.getInstance().writeLogs("card:" + card, FileUtils.faceSuccess);
497 505 }
498 506  
  507 + if (deviceID.startsWith("qj")) {//枪击 用来抓拍人脸考勤用
  508 + initQJ(deviceID, cardNo, studentBean == null);
  509 + }
  510 +
499 511 }
500 512  
501 513 } catch (Exception e) {
... ... @@ -503,8 +515,18 @@ public class CMSServer implements ApplicationRunner {
503 515 }
504 516 }
505 517  
506   - public void isTeacher(String cardNo, String deviceID) {
  518 + /**
  519 + * @param deviceID
  520 + * @param cardNo
  521 + * @param isTeacher true:教师 false:学生
  522 + */
  523 + private void initQJ(String deviceID, String cardNo, boolean isTeacher) {
  524 +
  525 +// MqtUtils.getInstance().sendMsg();
  526 +
  527 + }
507 528  
  529 + public void isTeacher(String cardNo, String deviceID) {
508 530  
509 531 List<String> devLists = userDao.getDeviceRoomRelation(deviceID);
510 532  
... ... @@ -512,14 +534,14 @@ public class CMSServer implements ApplicationRunner {
512 534  
513 535 StudentBean teacher = userDao.getTeacherWithCard(cardNo);
514 536 if (null != teacher) {
515   - String url = String.format("http://60.190.202.57:1000/api/RollCall/AddRollCallPersonnelRecord?userId=%s&deviceId=%s", teacher.getUser_id(), deviceID);
  537 + String url = String.format("http://campus.myjxt.com/api/RollCall/AddRollCallPersonnelRecord?userId=%s&deviceId=%s", teacher.getUser_id(), deviceID);
516 538  
517 539 RestTemplate restTemplate = new RestTemplate();
518 540  
519   -
520 541 String res = restTemplate.getForObject(url, String.class);
  542 + JSONObject jsonObject = JSON.parseObject(res);
521 543  
522   - System.out.println("result:" + res + "------url:" + url);
  544 + System.out.println("result:" + res + "------url:" + jsonObject.getBoolean("data"));
523 545  
524 546 }
525 547 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/async/SendUserAsync.java
... ... @@ -204,7 +204,7 @@ public class SendUserAsync {
204 204 String weekPlanTime = HKXmlUtils.getInstance().SetCardWeekPlanTime(stringBuffer.toString(), "" + week);
205 205 String serCardRightCfg = HKXmlUtils.getInstance().SetCardRightCfg(cardNum);
206 206 // log.error("serCardRightCfg:{}", serCardRightCfg);
207   - FileUtils.getInstance().writeLogs(weekPlanTime,"设置卡权限周计划时间.txt");
  207 + FileUtils.getInstance().writeLogs(weekPlanTime, "设置卡权限周计划时间.txt");
208 208 cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, weekPlanTime, "设置卡权限周计划时间");
209 209 cmsServer.SetCardWeekPlan(deviceId, cardNum, userType, serCardRightCfg, "设置卡权限");
210 210  
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/bean/face/WeekDay.java
... ... @@ -19,6 +19,7 @@ public class WeekDay implements Serializable {
19 19 private String userIds;
20 20  
21 21 private List<String> deviceIds;
  22 +
22 23 public List<String> getDeviceIds() {
23 24 return deviceIds;
24 25 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/control/FileControl.java
... ... @@ -54,7 +54,7 @@ public class FileControl {
54 54 public boolean sendPermiss(@RequestBody PermissionBean permissionBean) {
55 55 log.error("permissionBean:{}", JSON.toJSONString(permissionBean));
56 56 if (!StringUtils.isEmpty(permissionBean)) {
57   - return sendUserAsync.sendPermiss(permissionBean,1);
  57 + return sendUserAsync.sendPermiss(permissionBean, 1);
58 58 }
59 59 return false;
60 60 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/control/UserControl.java
... ... @@ -78,7 +78,7 @@ public class UserControl {
78 78 @ApiOperation("下发指定教师用户权限给设备")
79 79 public boolean sendUsersAndPermiss(@RequestBody UserAndPermission userAndPermission) {
80 80 log.error("sendUsersAndPermiss:{}", JSON.toJSONString(userAndPermission));
81   - FileUtils.getInstance().writeLogs(JSON.toJSONString(userAndPermission),"下发指定教师用户权限给设备.txt");
  81 + FileUtils.getInstance().writeLogs(JSON.toJSONString(userAndPermission), "下发指定教师用户权限给设备.txt");
82 82 PermissionBean permissionBean = new PermissionBean();
83 83 permissionBean.setSchoolId(userAndPermission.getSchoolId());
84 84 permissionBean.setUserType(String.valueOf(userAndPermission.getUserType()));
... ... @@ -91,8 +91,8 @@ public class UserControl {
91 91 @ApiOperation("测试教师点名")
92 92 public void isTeacher(@RequestParam("deviceId") String deviceId, @RequestParam("cardNo") String cardNo) {
93 93 try {
94   - cmsServer.isTeacher(cardNo,deviceId);
95   - }catch (Exception e){
  94 + cmsServer.isTeacher(cardNo, deviceId);
  95 + } catch (Exception e) {
96 96 e.printStackTrace();
97 97 }
98 98 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/dao/UserDao.java
... ... @@ -240,10 +240,10 @@ public interface UserDao {
240 240 TeacherBean getTeacherWithUserId(@Param("userId") String userId);
241 241  
242 242  
243   - List<String> getStudentWiSidAndSex(@Param("schoolId")String schoolId , @Param("sexs")List<String> sexs);
  243 + List<String> getStudentWiSidAndSex(@Param("schoolId") String schoolId, @Param("sexs") List<String> sexs);
244 244  
245 245  
246   - List<String> getDeviceRoomRelation(@Param("clint_id")String clint_id);
  246 + List<String> getDeviceRoomRelation(@Param("clint_id") String clint_id);
247 247  
248 248  
249 249 }
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/mqtt/MqtUtils.java
... ... @@ -20,9 +20,9 @@ public class MqtUtils {
20 20 mqttManager.init();
21 21 }
22 22  
23   - public void sendMsg(String msg) {
  23 + public void sendMsg(String deviceId, int cmd, String msg) {
24 24  
25   - mqttManager.sendMq("123456789", 51, msg);
  25 + mqttManager.sendMq(deviceId, cmd, msg);
26 26 }
27 27  
28 28  
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/utils/CompressPic.java
... ... @@ -55,7 +55,7 @@ public class CompressPic {
55 55 File targetFile = new File(targetPath);
56 56 if (!targetFile.exists()) targetFile.createNewFile();
57 57  
58   - if (width>height){
  58 + if (width > height) {
59 59 int width1 = width;
60 60 width = height;
61 61 height = width1;
... ...
cloud/haikangface/src/main/java/com/sincere/haikangface/utils/HttpUtil.java
... ... @@ -182,7 +182,7 @@ public class HttpUtil {
182 182  
183 183 HttpEntity<PermissionBean> httpEntity = new HttpEntity<>(permissionBean, headers);
184 184  
185   - System.out.println("PermissionBean:"+JSON.toJSONString(permissionBean));
  185 + System.out.println("PermissionBean:" + JSON.toJSONString(permissionBean));
186 186  
187 187 ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class);
188 188  
... ...
cloud/haikangface/src/main/resources/application.yaml
... ... @@ -10,10 +10,10 @@ spring:
10 10 password: RQminVCJota3H1u8bBYH
11 11 jdbc-url: jdbc:sqlserver://116.62.155.137:33419;database=SmartCampus
12 12 driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
13   -# username: SZJXTUSER
14   -# password: xst200919
15   -# jdbc-url: jdbc:sqlserver://60.190.202.57:14333;database=SmartCampusSZ
16   -# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
  13 + # username: SZJXTUSER
  14 + # password: xst200919
  15 + # jdbc-url: jdbc:sqlserver://60.190.202.57:14333;database=SmartCampusSZ
  16 + # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
17 17 xiaoan:
18 18 jdbc-url: jdbc:sqlserver://116.62.241.27:33419;database=xiaoanhxy
19 19 username: szjxtuser
... ...
cloud/pom.xml
... ... @@ -33,7 +33,7 @@
33 33 <module>haikang</module>
34 34 <!-- <module>dahua</module>-->
35 35 <!-- <module>consumer</module>-->
36   - <!-- <module>haikangface</module>-->
  36 + <module>haikangface</module>
37 37 <!-- <module>search_independence</module>-->
38 38 <!-- <module>search_smartCampus</module>-->
39 39 <!-- <module>search_xiaoan</module>-->
... ...