Browse Source

Merge branch 'dev' of ssh://10.10.100.21/source/smartschool-platform into dev

FANGLH 7 years ago
parent
commit
adcdd5b804
100 changed files with 892 additions and 2899 deletions
  1. 8 0
      applications/device/device-server/pom.xml
  2. 1 1
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/DeviceApplication.java
  3. 65 11
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/listener/AccessControlListener.java
  4. 6 0
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/mapper/DeviceMapper.java
  5. 38 0
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/po/Information.java
  6. 51 0
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/po/OutInRecord.java
  7. 128 1
      applications/device/device-server/src/main/resources/mapper/DeviceMapper.xml
  8. 0 1
      applications/pom.xml
  9. 1 1
      applications/school/school-api/src/main/java/com/usoftchina/smartschool/school/api/SchoolApi.java
  10. 4 0
      applications/school/school-dto/pom.xml
  11. 53 0
      applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/StudentDTO.java
  12. 21 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/controller/CurriculumController.java
  13. 19 4
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/CurriculumService.java
  14. 28 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/CurriculumServiceImpl.java
  15. 15 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/GradeServiceImpl.java
  16. 39 22
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/StudentServiceImpl.java
  17. 6 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/TeacherServiceImpl.java
  18. 20 15
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/ScoreServiceImpl.java
  19. 4 3
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/exception/BizExceptionCode.java
  20. 14 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/CurriculumMapper.java
  21. 1 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysStudentMapper.java
  22. 3 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysTeacherMapper.java
  23. 1 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxOaLeaveServiceImpl.java
  24. 15 9
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxUserServiceImpl.java
  25. 13 0
      applications/school/school-server/src/main/resources/mapper/CurriculumMapper.xml
  26. 2 2
      applications/school/school-server/src/main/resources/mapper/SysStudentMapper.xml
  27. 5 1
      applications/school/school-server/src/main/resources/mapper/SysTeacherMapper.xml
  28. 0 20
      applications/websocket/pom.xml
  29. 0 15
      applications/websocket/websocket-api/pom.xml
  30. 0 157
      applications/websocket/websocket-server/pom.xml
  31. 0 6
      applications/websocket/websocket-server/src/main/docker/Dockerfile
  32. 0 27
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/WebsocketApplication.java
  33. 0 28
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/configurer/FeignBeanFactoryPostProcessor.java
  34. 0 67
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/configurer/MybatisConfigurer.java
  35. 0 33
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/configurer/SwaggerConfig.java
  36. 0 16
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/configurer/WebSocketConfigurer.java
  37. 0 32
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/controller/IndexController.java
  38. 0 362
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/controller/WebSocketController.java
  39. 0 76
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/AbstractService.java
  40. 0 17
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/Mapper.java
  41. 0 16
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/ProjectConstant.java
  42. 0 44
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/Result.java
  43. 0 22
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/ResultCode.java
  44. 0 27
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/ResultGenerator.java
  45. 0 22
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/Service.java
  46. 0 22
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/ServiceException.java
  47. 0 8
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/dao/DeviceDOMapper.java
  48. 0 8
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/dao/OutInRecordDOMapper.java
  49. 0 8
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/dao/StudentDOMapper.java
  50. 0 56
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/model/Command.java
  51. 0 310
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/model/DeviceDO.java
  52. 0 200
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/model/OutInRecordDO.java
  53. 0 344
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/model/StudentDO.java
  54. 0 233
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/server/WebSocket.java
  55. 0 12
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/service/DeviceDOService.java
  56. 0 12
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/service/OutInRecordDOService.java
  57. 0 12
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/service/StudentDOService.java
  58. 0 24
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/service/impl/DeviceDOServiceImpl.java
  59. 0 24
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/service/impl/OutInRecordDOServiceImpl.java
  60. 0 22
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/service/impl/StudentDOServiceImpl.java
  61. 0 53
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/utils/ImgUtil.java
  62. 0 77
      applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/utils/WebSocketUtil.java
  63. 0 94
      applications/websocket/websocket-server/src/main/resources/application.yml
  64. BIN
      applications/websocket/websocket-server/src/main/resources/auth/pub.key
  65. 0 12
      applications/websocket/websocket-server/src/main/resources/config/application-dev.yml
  66. 0 23
      applications/websocket/websocket-server/src/main/resources/config/application-docker-cloud.yml
  67. 0 15
      applications/websocket/websocket-server/src/main/resources/config/application-docker-prod.yml
  68. 0 12
      applications/websocket/websocket-server/src/main/resources/config/application-docker-test.yml
  69. 0 10
      applications/websocket/websocket-server/src/main/resources/config/application-docker.yml
  70. 0 125
      applications/websocket/websocket-server/src/main/resources/logback-spring.xml
  71. 0 22
      applications/websocket/websocket-server/src/main/resources/mapper/DeviceDOMapper.xml
  72. 0 17
      applications/websocket/websocket-server/src/main/resources/mapper/OutInRecordDOMapper.xml
  73. 0 23
      applications/websocket/websocket-server/src/main/resources/mapper/StudentDOMapper.xml
  74. 4 0
      applications/wechat/wechat-api/pom.xml
  75. 14 0
      applications/wechat/wechat-api/src/main/java/com/usoftchina/smartschool/wechat/api/WechatApi.java
  76. 7 6
      applications/wechat/wechat-auth/src/main/java/com/usoftchina/smartschool/wechat/auth/interceptor/OpenApiAuthInterceptor.java
  77. 33 0
      applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/config/RabbitConfig.java
  78. 21 3
      applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/controller/WxPushController.java
  79. 2 0
      applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/po/MessageInfo.java
  80. 1 0
      applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/service/SendService.java
  81. 13 2
      applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/service/impl/WxPushServiceImpl.java
  82. 5 2
      applications/wechat/wechat-server/src/main/resources/application.yml
  83. 9 1
      applications/wechat/wechat-server/src/main/resources/config/application-docker-cloud.yml
  84. 64 0
      applications/wechat/wechat-server/src/test/java/com/usoftchina/smartschool/wechat/Test_service.java
  85. 0 6
      base-servers/gateway-server/src/main/resources/application.yml
  86. 5 0
      framework/core/src/main/java/com/usoftchina/smartschool/utils/DateUtils.java
  87. 2 0
      frontend/pc-web/app/util/BaseUtil.js
  88. 21 2
      frontend/pc-web/app/view/Interaction/homework/List.js
  89. 7 0
      frontend/pc-web/app/view/Interaction/homework/Release.js
  90. 40 18
      frontend/pc-web/app/view/Interaction/notice/List.js
  91. 2 2
      frontend/pc-web/app/view/Interaction/score/Detail.js
  92. 1 1
      frontend/pc-web/app/view/Interaction/score/DetailController.js
  93. 3 2
      frontend/pc-web/app/view/Interaction/score/List.js
  94. 17 5
      frontend/pc-web/app/view/Interaction/timetable/Detail.js
  95. 47 1
      frontend/pc-web/app/view/Interaction/timetable/DetailController.js
  96. 3 2
      frontend/pc-web/app/view/Interaction/timetable/List.js
  97. 4 1
      frontend/pc-web/app/view/basic/class/ClassDetail.js
  98. 2 2
      frontend/pc-web/app/view/basic/staff/StaffDetail.js
  99. 2 1
      frontend/pc-web/app/view/basic/student/StudentDetail.js
  100. 2 1
      frontend/pc-web/app/view/core/base/BasePanel.js

+ 8 - 0
applications/device/device-server/pom.xml

@@ -28,6 +28,10 @@
             <groupId>com.usoftchina.smartschool</groupId>
             <artifactId>file-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.usoftchina.smartschool</groupId>
+            <artifactId>wechat-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.mybatis.spring.boot</groupId>
             <artifactId>mybatis-spring-boot-starter</artifactId>
@@ -46,6 +50,10 @@
             <artifactId>pagehelper</artifactId>
             <version>RELEASE</version>
         </dependency>
+        <dependency>
+            <groupId>com.usoftchina.smartschool</groupId>
+            <artifactId>school-dto</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 1 - 1
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/DeviceApplication.java

@@ -14,7 +14,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
 @EnableEurekaClient
 @EnableAsync
 @EnableFeignClients({
-        "com.usoftchina.smartschool.file.api"
+        "com.usoftchina.smartschool.file.api","com.usoftchina.smartschool.wechat.api"
 })
 public class DeviceApplication {
     public static void main(String[] args) {

+ 65 - 11
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/listener/AccessControlListener.java

@@ -2,15 +2,23 @@ package com.usoftchina.smartschool.device.listener;
 
 import com.usoftchina.smartschool.base.Result;
 import com.usoftchina.smartschool.device.api.DeviceApi;
+import com.usoftchina.smartschool.device.dto.AccessControlInfo;
 import com.usoftchina.smartschool.device.dto.DeviceInfo;
 import com.usoftchina.smartschool.device.event.AccessControlEvent;
 import com.usoftchina.smartschool.device.mapper.DeviceMapper;
 import com.usoftchina.smartschool.device.po.Device;
 import com.usoftchina.smartschool.device.po.ImageFile;
+import com.usoftchina.smartschool.device.po.Information;
+import com.usoftchina.smartschool.device.po.OutInRecord;
 import com.usoftchina.smartschool.device.service.DeviceService;
 import com.usoftchina.smartschool.file.api.FileApi;
 import com.usoftchina.smartschool.file.dto.FileInfoDTO;
+import com.usoftchina.smartschool.school.dto.StudentDTO;
+import com.usoftchina.smartschool.utils.DateUtils;
 import com.usoftchina.smartschool.utils.StringUtils;
+import com.usoftchina.smartschool.wechat.api.WechatApi;
+import com.usoftchina.smartschool.wechat.dto.MessageInfoDTO;
+import org.apache.catalina.realm.LockOutRealm;
 import org.aspectj.util.FileUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,7 +30,9 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
+import java.text.DateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -32,15 +42,20 @@ import java.util.List;
 @Component
 public class AccessControlListener implements InitializingBean{
 
-    /*@Autowired
-    private FileApi fileApi;*/
+    @Autowired
+    private FileApi fileApi;
 
     @Autowired
     private DeviceApi deviceApi;
 
+    @Autowired
+    private WechatApi wechatApi;
+
     @Autowired
     private DeviceMapper deviceMapper;
 
+    final static String TEMPLATEID = "JcWRReMGC1odqcaAgXDfETv9sWwVbWLXc9KLEn_Nve0";
+
     private Logger logger = LoggerFactory.getLogger(AccessControlListener.class);
 
     /**
@@ -51,26 +66,65 @@ public class AccessControlListener implements InitializingBean{
     @Async
     @EventListener(AccessControlEvent.class)
     public void onAccessControlEvent(AccessControlEvent event) {
+        Long fileId = null;
+        String cardNo = event.getAccessControlInfo().getCardNo();
+        if (StringUtils.isEmpty(cardNo)) {
+            return;
+        }
+        /**
+         * 查询人员信息
+         */
+        List<Information> information = deviceMapper.selectInfoByCardNo(cardNo);
+        if (null == information || information.size() == 0) {
+            logger.error("学生信息不存在");
+            return;
+        }
         /**
          * 1、保存图片文件;
          */
         byte[] imageData = event.getAccessControlInfo().getImageData();
-        MultipartFile file = new ImageFile(imageData, "测试");
-        Result<FileInfoDTO> fileInfo = null;
-        try {
-           // fileInfo = fileApi.upload(0l, file);
-        }catch (Exception ex) {
+        if (null != imageData && imageData.length > 0) {
+            MultipartFile file = new ImageFile(imageData, information.get(0).getStuName());
+            Result<FileInfoDTO> fileInfo = null;
+            try {
+                fileInfo = fileApi.upload(0l, file);
+                fileId = fileInfo.getData().getId();
+            }catch (Exception ex) {
+                logger.error(ex.getMessage());
+            }
         }
         /**
          * 2、保存门禁出入记录;
          */
-        Long fileId = fileInfo.getData().getId();
-
-        logger.info(event.getAccessControlInfo().getCardNo());
+        int type = event.getAccessControlInfo().getEventType();
+        Information info = information.get(0);
+        OutInRecord record = new OutInRecord();
+        record.setClazz_id(info.getClazz_id());
+        record.setSchool_id(info.getSchoolId());
+        record.setClazz_name(info.getStuClass());
+        record.setSchool_id(info.getSchoolId());
+        record.setGrade_clazz(info.getStuClassnickname());
+        record.setGrade_name(info.getStuGrade());
+        record.setRecord_date(new Date());
+        record.setStu_sex(info.getStuSex());
+        record.setRecord_type(type);
+        record.setStu_id(info.getStuId());
+        record.setStu_number(info.getStuNumber());
+        record.setRecord_name(info.getStuName() + (type == 1 ? "进人" : "出去"));
+        deviceMapper.insertRecordSelective(record);
         /**
          * 3、推送消息到消息服务器(微信服务监听此消息发送微信消息)
          */
-
+        MessageInfoDTO msg = new MessageInfoDTO();
+        msg.setAppId(info.getAppId());
+        msg.setSecret(info.getSecret());
+        msg.setTouser(info.getOpenId());
+        msg.setTemplateId(TEMPLATEID);
+        msg.setTitle("出入校提醒");
+        msg.setKeyword1(info.getStuName());
+        msg.setKeyword2(DateUtils.format());
+        msg.setRemark("您好! 你的孩子: " + info.getStuName() + (type == 1 ? " 进人" : " 出去") + "学校");
+        wechatApi.sendMsg(msg);
     }
 
     @Override

+ 6 - 0
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/mapper/DeviceMapper.java

@@ -2,6 +2,8 @@ package com.usoftchina.smartschool.device.mapper;
 
 import com.usoftchina.smartschool.device.dto.DeviceInfo;
 import com.usoftchina.smartschool.device.po.Device;
+import com.usoftchina.smartschool.device.po.Information;
+import com.usoftchina.smartschool.device.po.OutInRecord;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -23,4 +25,8 @@ public interface DeviceMapper {
     void updateByPrimaryKeySelective(Device formdata);
 
     void deleteByPrimaryKey(Long id);
+
+    List<Information>selectInfoByCardNo(String cardNo);
+
+    void insertRecordSelective(OutInRecord record);
 }

+ 38 - 0
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/po/Information.java

@@ -0,0 +1,38 @@
+package com.usoftchina.smartschool.device.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author: guq
+ * @create: 2019-03-11 10:57
+ **/
+@Data
+public class Information implements Serializable{
+
+    private String appId;
+
+    private String secret;
+
+    private String openId;
+
+    private String stuName;
+
+    private Long stuId;
+
+    private Long schoolId;
+
+    private String stuNumber;
+
+    private Long clazz_id;
+
+    private String stuClass;
+
+    private String stuGrade;
+
+    private String stuClassnickname;
+
+    private int stuSex;
+
+}

+ 51 - 0
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/po/OutInRecord.java

@@ -0,0 +1,51 @@
+package com.usoftchina.smartschool.device.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author: guq
+ * @create: 2019-03-11 11:33
+ **/
+@Data
+public class OutInRecord implements Serializable{
+    private Long record_id;         //编号
+
+    private String record_name;     //记录名
+
+    private Date out_date;          //出校时间
+
+    private Date in_date;           //入校时间
+
+    private String record_details;  //详情
+
+    private String record_remarks;  //备注
+
+    private String device_id;       //设备标识
+
+    private Long stu_id;            //学生编号
+
+    private Long school_id;         //学校编号
+
+    private Integer stu_sex;        //学生性别
+
+    private String stu_number;      //学号
+
+    private String stu_name;	    //学生姓名
+
+    private Long grade_id;	        //年级编号
+
+    private String grade_name;	    //年级名
+
+    private Long clazz_id;	        //班级编号
+
+    private String clazz_name;	    //班级名
+
+    private String grade_clazz;	    //年级加班级名
+
+    private Integer record_type;
+
+    private Date record_date;
+}

+ 128 - 1
applications/device/device-server/src/main/resources/mapper/DeviceMapper.xml

@@ -90,7 +90,7 @@
         <if test="devicePassword != null" >
             devicePassword = #{devicePassword,jdbcType=VARCHAR},
         </if>
-        <if ktest="deviceIp != null" >
+        <if test="deviceIp != null" >
             deviceIp = #{deviceIp,jdbcType=VARCHAR},
         </if>
         <if test="deviceRemark != null" >k
@@ -107,4 +107,131 @@
         delete from device where deviceId = #{id}
     </delete>
 
+    <select id="selectInfoByCardNo" parameterType="string" resultMap="information">
+        select school_appid,school_secret,sys_parents.openid,sys_student.stu_name,sys_student.stu_id,sys_school.school_id,
+         stu_number,sys_student.clazz_id,stu_class,stu_grade,stu_classnickname,stu_sex from sys_student left join sys_school on sys_student.school_id=sys_school.school_id
+        left join sys_parents_stu on sys_student.stu_id=sys_parents_stu.stu_id left join sys_parents on sys_parents.parent_id =
+        sys_parents_stu.parent_id where stu_cardNo = #{cardNo}
+    </select>
+
+    <resultMap id="information" type="com.usoftchina.smartschool.device.po.Information" >
+        <result column="school_appid" property="appId" jdbcType="VARCHAR" />
+        <result column="school_secret" property="secret" jdbcType="VARCHAR" />
+        <result column="openid" property="openId" jdbcType="VARCHAR" />
+        <result column="stu_name" property="stuName" jdbcType="VARCHAR" />
+        <result column="stu_id" property="stuId" jdbcType="BIGINT"/>
+        <result column="school_id" property="schoolId" jdbcType="BIGINT"/>
+        <result column="stu_number" property="stuNumber" jdbcType="VARCHAR" />
+        <result column="clazz_id" property="clazz_id" jdbcType="BIGINT" />
+        <result column="stu_class" property="stuClass" jdbcType="VARCHAR" />
+        <result column="stu_grade" property="stuGrade" jdbcType="VARCHAR" />
+        <result column="stu_classnickname" property="stuClassnickname" jdbcType="VARCHAR"/>
+        <result column="stu_sex" property="stuSex" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <insert id="insertRecordSelective" parameterType="com.usoftchina.smartschool.device.po.OutInRecord" >
+        insert into out_in_record
+        <trim prefix="(" suffix=")" suffixOverrides="," >
+            <if test="record_name != null" >
+                record_name,
+            </if>
+            <if test="out_date != null" >
+                out_date,
+            </if>
+            <if test="in_date != null" >
+                in_date,
+            </if>
+            <if test="record_details != null" >
+                record_details,
+            </if>
+            <if test="record_remarks != null" >
+                record_remarks,
+            </if>
+            <if test="device_id != null" >
+                device_id,
+            </if>
+            <if test="stu_id != null" >
+                stu_id,
+            </if>
+            <if test="school_id != null" >
+                school_id,
+            </if>
+            <if test="stu_number != null" >
+                stu_number,
+            </if>
+            <if test="clazz_id != null" >
+                clazz_id,
+            </if>
+            <if test="clazz_name != null" >
+                clazz_name,
+            </if>
+            <if test="grade_name != null" >
+                grade_name,
+            </if>
+            <if test="grade_clazz != null" >
+                grade_clazz,
+            </if>
+            <if test="stu_sex != null" >
+                stu_sex,
+            </if>
+            <if test="record_type != null" >
+                record_type,
+            </if>
+            <if test="record_date != null" >
+                record_date,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides="," >
+            <if test="record_name != null" >
+                #{record_name,jdbcType=VARCHAR},
+            </if>
+            <if test="out_date != null" >
+                #{out_date,jdbcType=TIMESTAMP},
+            </if>
+            <if test="in_date != null" >
+                #{in_date,jdbcType=TIMESTAMP},
+            </if>
+            <if test="record_details != null" >
+                #{record_details,jdbcType=VARCHAR},
+            </if>
+            <if test="record_remarks != null" >
+                #{record_remarks,jdbcType=VARCHAR},
+            </if>
+            <if test="device_id != null" >
+                #{device_id,jdbcType=BIGINT},
+            </if>
+            <if test="stu_id != null" >
+                #{stu_id,jdbcType=BIGINT},
+            </if>
+            <if test="school_id != null" >
+                #{school_id,jdbcType=BIGINT},
+            </if>
+
+            <if test="stu_number != null" >
+                #{stu_number,jdbcType=VARCHAR},
+            </if>
+            <if test="clazz_id != null" >
+                #{clazz_id,jdbcType=BIGINT},
+            </if>
+            <if test="clazz_name != null" >
+                #{clazz_name,jdbcType=VARCHAR},
+            </if>
+            <if test="grade_name != null" >
+                #{grade_name,jdbcType=VARCHAR},
+            </if>
+            <if test="grade_clazz != null" >
+                #{grade_clazz,jdbcType=VARCHAR},
+            </if>
+            <if test="stu_sex != null" >
+                #{stu_sex,jdbcType=INTEGER},
+            </if>
+            <if test="record_type != null" >
+                #{record_type,jdbcType=INTEGER},
+            </if>
+            <if test="record_date != null" >
+                #{record_date,jdbcType=TIMESTAMP},
+            </if>
+        </trim>
+    </insert>
+
 </mapper>

+ 0 - 1
applications/pom.xml

@@ -14,7 +14,6 @@
     <modules>
         <module>school</module>
         <module>wechat</module>
-        <module>websocket</module>
         <module>device</module>
     </modules>
 

+ 1 - 1
applications/school/school-api/src/main/java/com/usoftchina/smartschool/school/api/SchoolApi.java

@@ -9,6 +9,6 @@ import org.springframework.web.bind.annotation.RequestParam;
 @FeignClient("school-server")
 public interface SchoolApi {
 
-    @GetMapping("/find")
+    @GetMapping("/school/find")
     public Result<SysSchoolDTO> find(@RequestParam("schoolName") String schoolName);
 }

+ 4 - 0
applications/school/school-dto/pom.xml

@@ -16,6 +16,10 @@
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
     </dependencies>
 
 

+ 53 - 0
applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/StudentDTO.java

@@ -0,0 +1,53 @@
+package com.usoftchina.smartschool.school.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author: guq
+ * @create: 2019-03-11 09:02
+ **/
+
+public class StudentDTO implements Serializable{
+    private Long stu_id;
+
+    private String stu_number;
+
+    private String stu_name;
+
+    private Date stu_enroll_date;
+
+    private Date stu_graduate_date;
+
+    private Date stu_birthday;
+
+    private Integer stu_age;
+
+    private Integer stu_sex;
+
+    private String stu_address;
+
+    private String stu_photo;
+
+    private Integer stu_status;
+
+    private Integer stu_is_write;
+
+    private String stu_remarks;
+
+    private Long clazz_id;
+
+    private Long school_id;
+
+    private String stu_classnickname;
+
+    private String stu_class;
+
+    private String stu_grade;
+
+    private String stu_native;
+
+    private String stu_nation;
+
+    private String stu_political;
+}

+ 21 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/controller/CurriculumController.java

@@ -5,6 +5,7 @@ import com.usoftchina.smartschool.base.Result;
 import com.usoftchina.smartschool.page.PageDefault;
 import com.usoftchina.smartschool.page.PageRequest;
 import com.usoftchina.smartschool.school.basic.service.CurriculumService;
+import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
 import com.usoftchina.smartschool.school.dto.CurriculumFormDTO;
 import com.usoftchina.smartschool.school.dto.CurriculumListDTO;
 import com.usoftchina.smartschool.school.dto.ListReqDTO;
@@ -51,10 +52,30 @@ public class CurriculumController {
         return Result.success();
     }
 
+    @PostMapping("/batchDelete")
+    public Result batchDelete(@RequestBody BatchDealBaseDTO baseDTOs){
+        curriculumService.batchDelete(baseDTOs);
+        return Result.success();
+    }
+
     //导入保存至列表
     @PostMapping("/saveToFormal")
     public Result saveToFormal(Integer id, boolean update) {
         curriculumService.saveToFormal(id, update);
         return Result.success();
     }
+
+    //发布接口
+    @PostMapping("/publish/{id}")
+    public Result publish(@PathVariable("id") Long id){
+        curriculumService.publish(id);
+        return Result.success();
+    }
+
+    //取消发布
+    @PostMapping("/republish/{id}")
+    public Result republish(@PathVariable("id") Long id){
+        curriculumService.republish(id);
+        return Result.success();
+    }
 }

+ 19 - 4
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/CurriculumService.java

@@ -2,10 +2,7 @@ package com.usoftchina.smartschool.school.basic.service;
 
 import com.github.pagehelper.PageInfo;
 import com.usoftchina.smartschool.page.PageRequest;
-import com.usoftchina.smartschool.school.dto.CurriculumFormDTO;
-import com.usoftchina.smartschool.school.dto.CurriculumListDTO;
-import com.usoftchina.smartschool.school.dto.DocBaseDTO;
-import com.usoftchina.smartschool.school.dto.ListReqDTO;
+import com.usoftchina.smartschool.school.dto.*;
 
 /**
  * @Author chenwei
@@ -46,10 +43,28 @@ public interface CurriculumService {
      */
     void deleteDetail(Long id);
 
+    /**
+     * 批量删除
+     * @param batchDealBaseDTO
+     */
+    void batchDelete(BatchDealBaseDTO batchDealBaseDTO);
+
     /**
      * 导入保存至列表
      * @param id
      * @param update
      */
     void saveToFormal(Integer id, boolean update);
+
+    /**
+     * 发布
+     * @param id
+     */
+    void publish(Long id);
+
+    /**
+     * 取消发布
+     * @param id
+     */
+    void republish(Long id);
 }

+ 28 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/CurriculumServiceImpl.java

@@ -203,6 +203,18 @@ public class CurriculumServiceImpl implements CurriculumService {
         messageLogService.deleteDetail(new DocBaseDTO(id, CODE, NAME));
     }
 
+    @Override
+    public void batchDelete(BatchDealBaseDTO batchDealBaseDTO){
+        if (null == batchDealBaseDTO || null == batchDealBaseDTO.getBaseDTOs() ||
+                batchDealBaseDTO.getBaseDTOs().size() == 0) {
+            return;
+        }
+
+        for (DocBaseDTO base : batchDealBaseDTO.getBaseDTOs()) {
+            delete(base.getId());
+        }
+    }
+
     @Override
     @Transactional
     public void saveToFormal(Integer id, boolean update){
@@ -264,4 +276,20 @@ public class CurriculumServiceImpl implements CurriculumService {
         }
         dataImportMapper.updateDataImport(id);
     }
+
+    @Override
+    public void publish(Long id) {
+        if(org.springframework.util.StringUtils.isEmpty(id) || "0".equals(id)) {
+            return;
+        }
+        curriculumMapper.updateByPublish(id);
+    }
+
+    @Override
+    public void republish(Long id) {
+        if(org.springframework.util.StringUtils.isEmpty(id) || "0".equals(id)) {
+            return;
+        }
+        curriculumMapper.updateByRepublish(id);
+    }
 }

+ 15 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/GradeServiceImpl.java

@@ -40,6 +40,12 @@ public class GradeServiceImpl implements GradeService{
     @Autowired
     private SysStudentMapper sysStudentMapper;
 
+    @Autowired
+    private SysTeacherMapper sysTeacherMapper;
+
+    @Autowired
+    private HomeWorkMapper homeWorkMapper;
+
     @Override
     public TreeNode getSchoolTree() {
         Long school_id = BaseContextHolder.getSchoolId();
@@ -205,9 +211,17 @@ public class GradeServiceImpl implements GradeService{
         if (StringUtils.isEmpty(id)) {
             throw new BizException(BizExceptionCode.USELESS_DATA);
         }
-        if(sysStudentMapper.countStudent(id) > 0){
+        Integer check = 0;
+        //检测学生
+        check = sysStudentMapper.countStudent(id);
+        if(check > 0){
             throw new BizException(BizExceptionCode.EFFECTIVE_CLASS_DATA);
         }
+        //检测科目
+        check = sysTeacherMapper.checkTeacherSubjects(id);
+        if(check > 0){
+            throw new BizException(BizExceptionCode.EXISTS_TEACHER_SUBJECTS);
+        }
         sysClazzMapper.deleteByPrimaryKey(id);
     }
 

+ 39 - 22
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/StudentServiceImpl.java

@@ -5,6 +5,7 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.usoftchina.smartschool.account.api.AccountApi;
 import com.usoftchina.smartschool.account.dto.AccountRegDTO;
+import com.usoftchina.smartschool.base.Result;
 import com.usoftchina.smartschool.context.BaseContextHolder;
 import com.usoftchina.smartschool.exception.BizException;
 import com.usoftchina.smartschool.page.PageRequest;
@@ -17,6 +18,7 @@ import com.usoftchina.smartschool.school.mapper.DataImportMapper;
 import com.usoftchina.smartschool.school.mapper.SysStudentMapper;
 import com.usoftchina.smartschool.school.po.*;
 import com.usoftchina.smartschool.utils.CollectionUtils;
+import com.usoftchina.smartschool.utils.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -68,6 +70,7 @@ public class StudentServiceImpl implements StudentService{
     }
 
     @Override
+    @Transactional
     public DocBaseDTO saveFormData(StudentForm formdata) {
         if (null == formdata || null == formdata.getMain()){
             throw new BizException(BizExceptionCode.EMPTY_DATA);
@@ -91,9 +94,20 @@ public class StudentServiceImpl implements StudentService{
             if (null != items && items.size() > 0) {
                 Long pr_id = null;
                 for (SysParents item : items) {
+                    //自动创建家长账户
+                    if (!StringUtils.isEmpty(item.getPa_phone())) {
+                        Long userId = createAccount(item.getPa_phone());
+                        //构造家长更新对象
+                        item.setUser_id(userId);
+                    }
                     item.setSchool_id(schoolid);
-                    sysStudentMapper.insertparent(item);
-                    pr_id = item.getParent_id();
+                    SysParents sysParents = sysStudentMapper.selectParentByPhone(item.getPa_phone(), schoolid);
+                    if (ObjectUtils.isEmpty(sysParents)) {
+                        sysStudentMapper.insertparent(item);
+                        pr_id = item.getParent_id();
+                    }else {
+                        pr_id = sysParents.getParent_id();
+                    }
                     sysStudentMapper.insertrelation(id, pr_id, item.getPs_relation());
                 }
             }
@@ -118,27 +132,23 @@ public class StudentServiceImpl implements StudentService{
         //插入从表
         if (insertDetails.size() > 0) {
             Long pr_id = null;
-            List<SysParents> parentsList = new ArrayList<SysParents>();
             for (SysParents item : insertDetails) {
                 item.setSchool_id(schoolid);
-                sysStudentMapper.insertparent(item);
-                pr_id = item.getParent_id();
-                sysStudentMapper.insertrelation(id, pr_id, item.getPs_relation());
                 //自动创建家长账户
                 if (!StringUtils.isEmpty(item.getPa_phone())) {
-                    AccountRegDTO accountRegDTO = new AccountRegDTO();
-                    accountRegDTO.setUser_phone(item.getPa_phone());
-                    accountRegDTO.setUser_pass("111111");
-                    accountRegDTO.setRoleId(sysStudentMapper.selectRoleId());
-                    Long userId = accountApi.register(accountRegDTO).getData();
+                    Long userId = createAccount(item.getPa_phone());
                     //构造家长更新对象
-                    SysParents parent = new SysParents();
-                    parent.setParent_id(item.getParent_id());
-                    parent.setUser_id(userId);
-                    parentsList.add(parent);
+                    item.setUser_id(userId);
+                }
+                SysParents sysParents = sysStudentMapper.selectParentByPhone(item.getPa_phone(), schoolid);
+                if (ObjectUtils.isEmpty(sysParents)) {
+                    sysStudentMapper.insertparent(item);
+                    pr_id = item.getParent_id();
+                }else {
+                    pr_id = sysParents.getParent_id();
                 }
+                sysStudentMapper.insertrelation(id, pr_id, item.getPs_relation());
             }
-            sysStudentMapper.updateParents(parentsList);
         }
         //更新从表
         if (updateDetails.size() > 0) {
@@ -150,6 +160,18 @@ public class StudentServiceImpl implements StudentService{
         return new DocBaseDTO(id);
     }
 
+    private Long createAccount(String mobile){
+        AccountRegDTO accountRegDTO = new AccountRegDTO();
+        accountRegDTO.setUser_phone(mobile);
+        accountRegDTO.setUser_pass("111111");
+        accountRegDTO.setRoleId(sysStudentMapper.selectRoleId());
+        Result<Long> result = accountApi.register(accountRegDTO);
+        if (!result.isSuccess() && result.getCode() == 53000){
+            return accountApi.findByMobile(mobile).getData().getId();
+        }
+        return result.getData();
+    }
+
     @Override
     @Transactional
     public void saveToFormal(Integer id, boolean update) {
@@ -214,14 +236,9 @@ public class StudentServiceImpl implements StudentService{
                                 parent.setParents_status(1);
                                 //自动创建家长账户
                                 if (!StringUtils.isEmpty(detail.getPa_phone())) {
-                                    AccountRegDTO accountRegDTO = new AccountRegDTO();
-                                    accountRegDTO.setUser_phone(detail.getPa_phone());
-                                    accountRegDTO.setUser_pass("111111");
-                                    accountRegDTO.setRoleId(sysStudentMapper.selectRoleId());
-                                    Long userId = accountApi.register(accountRegDTO).getData();
+                                    Long userId = createAccount(detail.getPa_phone());
                                     parent.setUser_id(userId);
                                 }
-
                                 sysStudentMapper.insertparent(parent);
                             }
                             //插入学生与父母的关系

+ 6 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/TeacherServiceImpl.java

@@ -5,6 +5,7 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.usoftchina.smartschool.account.api.AccountApi;
 import com.usoftchina.smartschool.account.dto.AccountRegDTO;
+import com.usoftchina.smartschool.base.Result;
 import com.usoftchina.smartschool.context.BaseContextHolder;
 import com.usoftchina.smartschool.exception.BizException;
 import com.usoftchina.smartschool.page.PageRequest;
@@ -109,7 +110,11 @@ public class TeacherServiceImpl implements TeacherService{
         accountRegDTO.setUser_pass("111111");
         Long roleId = sysTeacherMapper.selectRoleId();
         accountRegDTO.setRoleId(roleId);
-        return accountApi.register(accountRegDTO).getData();
+        Result<Long> result = accountApi.register(accountRegDTO);
+        if (!result.isSuccess() && result.getCode() == 53000){
+            return accountApi.findByMobile(sysTeacher.getTeacher_phone()).getData().getId();
+        }
+        return result.getData();
     }
 
     @Override

+ 20 - 15
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/ScoreServiceImpl.java

@@ -129,22 +129,24 @@ public class ScoreServiceImpl implements ScoreService{
                 //转换字段
                 json = JSONObject.parseObject(main.getDd_maindata());
                 if (null != json) {
-                    if (!StringUtils.isEmpty(json.get("si_gradeclass"))) {
-                        String[] nicknames = json.get("si_gradeclass").toString().split("#");
-                        grade = nicknames[0];
-                        class_ = nicknames[1];
-                        //查询年级 班级id
-                        SysGrade sysGrade = sysGradeMapper.selectByName(grade, schoolId);
-                        if (null == sysGrade) {
-                            throw new BizException(BizExceptionCode.NONGRADE);
-                        }
-                        gradeId = sysGrade.getGrade_id();
-                        SysClazz clazz = sysClazzMapper.selectByName(class_, gradeId, schoolId);
-                        if (null == clazz) {
-                            throw new BizException(BizExceptionCode.NONCLAZZ);
-                        }
-                        classId = clazz.getClazz_id();
+                    //校验课程班级格式是否符合: 年级#班级
+                    if (StringUtils.isEmpty(json.get("si_gradeclass")) || !json.getString("si_gradeclass").contains("#")){
+                        throw new BizException(BizExceptionCode.USELESS_DATA);
+                    }
+                    String[] nicknames = json.get("si_gradeclass").toString().split("#");
+                    grade = nicknames[0];
+                    class_ = nicknames[1];
+                    //查询年级 班级id
+                    SysGrade sysGrade = sysGradeMapper.selectByName(grade, schoolId);
+                    if (null == sysGrade) {
+                        throw new BizException(BizExceptionCode.NONGRADE);
                     }
+                    gradeId = sysGrade.getGrade_id();
+                    SysClazz clazz = sysClazzMapper.selectByName(class_, gradeId, schoolId);
+                    if (null == clazz) {
+                        throw new BizException(BizExceptionCode.NONCLAZZ);
+                    }
+                    classId = clazz.getClazz_id();
                 }
 
                 ScoreImport scoreImport = JSONObject.parseObject(json.toJSONString(), ScoreImport.class);
@@ -163,6 +165,9 @@ public class ScoreServiceImpl implements ScoreService{
                     for (DataImportDetail dataDetail : data) {
                         ScoreImportdetail detail = JSONObject.parseObject(dataDetail.getDd_detaildata(), ScoreImportdetail.class);
                         if (null != detail) {
+                            if (StringUtils.isEmpty(detail.getSd_stu())) {
+                                throw new BizException(BizExceptionCode.USELESS_DATA);
+                            }
                             List<SysStudent> students = sysStudentMapper.selectByConditon("stu_name='" + detail.getSd_stu() + "' and clazz_id=" + classId, schoolId);
                             if (students.size() == 0) {
                                 throw new BizException(500006, "班级: " + class_ + " 不存在学生: " + detail.getSd_stu());

+ 4 - 3
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/exception/BizExceptionCode.java

@@ -13,7 +13,7 @@ public enum BizExceptionCode implements BaseExceptionCode {
     USELESS_DATA(50001, "无效数据"),
     BIZ_IMPORT_ERROREXCEL(500002, "请选用正确的导入模板"),
     EXISTS_STU(500003,"存在学生,无法删除"),
-    NONGRADE(500004, "年名称不存在"),
+    NONGRADE(500004, "年名称不存在"),
     NONCLAZZ(500005, "班级名称不存在"),
     REPEAT_TEACHER_NUMBER(500006, "教师工号重复"),
     NONSTU(500006, "学生不存在"),
@@ -24,6 +24,7 @@ public enum BizExceptionCode implements BaseExceptionCode {
     EXISTS_SUBJECT_TEACHER(5000012, "该课程存在班级与任课教师,禁止删除"),
     EXISTS_SCORE_PUBLISH(5000013, "存在已发布成绩,禁止删除"),
     EXISTS_CLASS(500011, "存在班级,无法删除"),
+    EXISTS_TEACHER_SUBJECTS(500012, "存在科目信息,无法删除"),
     REPEAT_GRADE_NAME(600001, "年级名称重复"),
     REPEAT_CLASS_NAME(600002, "班级名称重复"),
     REPEAT_STUDENT_NUMBER(600003, "学生学号不可重复"),
@@ -31,8 +32,8 @@ public enum BizExceptionCode implements BaseExceptionCode {
     TASK_RELEASE_STATUS(600005, "作业已发布无法更改"),
     COURSE_RELEASE_STATUS(600006, "课程表已生效,无法删除"),
     NOTICE_RELEASE_STATUS(600007, "学校发布已生效,无法删除"),
-    ILLEGAL_Gender(600007, "性别非法"),
-    ILLEGAL_MARRIAGE(600008, "婚姻状态非法"),
+    ILLEGAL_Gender(600007, "无效性别"),
+    ILLEGAL_MARRIAGE(600008, "婚姻状态无效"),
     NOT_EXISTS_SUBJECT(60005, "科目<u>%s</u>不存在");
 
 

+ 14 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/CurriculumMapper.java

@@ -84,4 +84,18 @@ public interface CurriculumMapper {
     void updateDetailSelective(List<CurriculumDetailDTO> curriculumDetailDTOList);
 
     int courseStatus(Long id);
+
+    /**
+     * 发布
+     * @param
+     * @return
+     */
+    int updateByPublish(Long id);
+
+    /**
+     * 取消发布
+     * @param
+     * @return
+     */
+    int updateByRepublish(Long id);
 }

+ 1 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysStudentMapper.java

@@ -69,7 +69,7 @@ public interface SysStudentMapper {
      * 班级组织:班级中学生的数量
      * @return
      */
-    int countStudent(@Param("clazz_id") Long clazz_id);
+    Integer countStudent(@Param("clazz_id") Long clazz_id);
 
     /**
      * 查找班级下的所有学生ID

+ 3 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysTeacherMapper.java

@@ -39,5 +39,7 @@ public interface SysTeacherMapper {
 
     SysTeacher selectNumberByKey(String teacher_number);
 
-    int checkTeacher(Long id);
+    int checkTeacher(@Param("teacher_id") Long teacher_id);
+
+    Integer checkTeacherSubjects(@Param("clazz_id") Long clazz_id);
 }

+ 1 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxOaLeaveServiceImpl.java

@@ -97,7 +97,7 @@ public class WxOaLeaveServiceImpl implements WxOaLeaveService {
                             if (ObjectUtils.isNotEmpty(templateDO)){
                                 String temLeave = templateDO.getTemLeave();
                                 try {
-                                    wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), teacherDO.getOpenid(), temLeave,"您好,学生的请假申请", stuName, date, leave.getLvDetails(), "-", "点击查看详情", wechatUrl + "/leavedetail/teacher/" + leave.getLvId());
+                                    wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), teacherDO.getOpenid(), temLeave,"您好,学生的请假申请", stuName+"", date+"", leave.getLvDetails()+"", "-", "点击查看详情", wechatUrl + "/leavedetail/teacher/" + leave.getLvId());
                                 }catch (Exception e){
                                     e.printStackTrace();
                                 }

+ 15 - 9
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxUserServiceImpl.java

@@ -309,16 +309,22 @@ public class WxUserServiceImpl implements WxUserService {
 								List<TeacherClazzDO> list = teacherClazzMapper.list(map);
 								if (ObjectUtils.isNotEmpty(studentDOS)){
 									List<TeacherDO> teacherDOS = new ArrayList<>();
-									for (TeacherClazzDO teacherClazzDO:list) {
-										Long teacherId1 = teacherClazzDO.getTeacherId();
-										if (ObjectUtils.isNotEmpty(teacherId1)){
-											TeacherDO teacherDO = teacherMapper.get(teacherId1);
-											Long userId = teacherDO.getUserId();
-											if (ObjectUtils.isNotEmpty(userId)){
-												UserDO userDO = userMapper.get(userId);
-												teacherDO.setUserPhone(userDO.getUserPhone());
+									if (ObjectUtils.isNotEmpty(list)){
+										for (TeacherClazzDO teacherClazzDO:list) {
+											Long teacherId1 = teacherClazzDO.getTeacherId();
+											if (ObjectUtils.isNotEmpty(teacherId1)){
+												TeacherDO teacherDO = teacherMapper.get(teacherId1);
+												if (ObjectUtils.isNotEmpty(teacherDO)){
+													Long userId = teacherDO.getUserId();
+													if (ObjectUtils.isNotEmpty(userId)){
+														UserDO userDO = userMapper.get(userId);
+														if (ObjectUtils.isNotEmpty(userDO)){
+															teacherDO.setUserPhone(userDO.getUserPhone());
+														}
+													}
+												}
+												teacherDOS.add(teacherDO);
 											}
-											teacherDOS.add(teacherDO);
 										}
 									}
 									clazzMap.put("studentDOS",removeDuplicate(studentDOS));

+ 13 - 0
applications/school/school-server/src/main/resources/mapper/CurriculumMapper.xml

@@ -263,4 +263,17 @@
     select count(1) from clazz_main_curriculum where mcur_status=1 and id=#{id}
   </select>
 
+  <update id="updateByPublish" parameterType="java.lang.Long">
+    update clazz_main_curriculum
+    set mcur_status = 1 ,
+      createTime = now()
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+
+  <update id="updateByRepublish" parameterType="java.lang.Long">
+    update clazz_main_curriculum
+    set mcur_status = 0
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+
 </mapper>

+ 2 - 2
applications/school/school-server/src/main/resources/mapper/SysStudentMapper.xml

@@ -476,7 +476,7 @@
     where stu_number = #{stu_number,jdbcType=VARCHAR}
   </select>
 
-  <select id="countStudent" resultType="int">
+  <select id="countStudent" resultType="Integer">
     select count(*) from sys_student
     <where>
       <if test="clazz_id != null">
@@ -486,6 +486,6 @@
   </select>
 
   <select id="selectIdByClazzId" resultType="string" parameterType="long">
-    SELECT stu_id FROM sys_student WHERE clazz_id = #{clazzId}
+    SELECT stu_id FROM student WHERE clazz_id = #{clazzId}
   </select>
 </mapper>

+ 5 - 1
applications/school/school-server/src/main/resources/mapper/SysTeacherMapper.xml

@@ -396,6 +396,10 @@ where sys_teacher_clazz.teacher_id=#{id}
   </select>
 
   <select id="checkTeacher" parameterType="long" resultType="int">
-    select count(*) from sys_teacher_clazz where  teacher_id= #{id}
+    select count(*) from sys_teacher_clazz where  teacher_id= #{teacher_id}
+  </select>
+
+  <select id="checkTeacherSubjects" parameterType="long" resultType="Integer">
+    select count(*) from sys_teacher_clazz where  clazz_id= #{clazz_id}
   </select>
 </mapper>

+ 0 - 20
applications/websocket/pom.xml

@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>applications</artifactId>
-        <groupId>com.usoftchina.smartschool</groupId>
-        <version>1.0.0-SNAPSHOT</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>websocket</artifactId>
-    <packaging>pom</packaging>
-    <modules>
-        <module>websocket-api</module>
-        <module>websocket-server</module>
-    </modules>
-
-
-</project>

+ 0 - 15
applications/websocket/websocket-api/pom.xml

@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>websocket</artifactId>
-        <groupId>com.usoftchina.smartschool</groupId>
-        <version>1.0.0-SNAPSHOT</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>websocket-api</artifactId>
-
-
-</project>

+ 0 - 157
applications/websocket/websocket-server/pom.xml

@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>websocket</artifactId>
-        <groupId>com.usoftchina.smartschool</groupId>
-        <version>1.0.0-SNAPSHOT</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>websocket-server</artifactId>
-
-    <dependencies>
-        <dependency>
-            <groupId>com.usoftchina.smartschool</groupId>
-            <artifactId>server-starter</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>com.usoftchina.smartschool</groupId>
-            <artifactId>core</artifactId>
-        </dependency>
-
-        <!--test-->
-        <dependency>
-            <groupId>com.usoftchina.smartschool</groupId>
-            <artifactId>test-starter</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <!-- db -->
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-        </dependency>
-    <!--    <dependency>
-            <groupId>org.mybatis.spring.boot</groupId>
-            <artifactId>mybatis-spring-boot-starter</artifactId>
-        </dependency>-->
-
-        <dependency>
-            <groupId>org.mybatis</groupId>
-            <artifactId>mybatis-spring</artifactId>
-            <version>1.3.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mybatis</groupId>
-            <artifactId>mybatis</artifactId>
-            <version>3.4.5</version>
-        </dependency>
-        <dependency>
-            <groupId>tk.mybatis</groupId>
-            <artifactId>mapper</artifactId>
-            <version>3.4.2</version>
-        </dependency>
-      <!--  <dependency>
-            <groupId>com.github.pagehelper</groupId>
-            <artifactId>pagehelper</artifactId>
-            <version>4.2.1</version>
-        </dependency>-->
-        <!-- sleuth -->
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-zipkin</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.amqp</groupId>
-            <artifactId>spring-rabbit</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>net.logstash.logback</groupId>
-            <artifactId>logstash-logback-encoder</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.github.pagehelper</groupId>
-            <artifactId>pagehelper-spring-boot-starter</artifactId>
-        </dependency>
-        <!-- feign -->
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-openfeign</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
-        </dependency>
-
-        <!--websocket-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-websocket</artifactId>
-        </dependency>
-        <!--lang3-->
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-            <version>3.6</version>
-        </dependency>
-
-        <!--集成swagger2 管理接口文档 -->
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>2.7.0</version>
-        </dependency>
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>2.7.0</version>
-        </dependency>
-
-        <!--spring-boot-devtools -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-devtools</artifactId>
-            <scope>runtime</scope>
-            <optional>true</optional>
-        </dependency>
-
-        <!--阿里 FastJson依赖 -->
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>fastjson</artifactId>
-            <version>1.2.44</version>
-        </dependency>
-        <!--单元测试-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <fork>true</fork>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>docker-maven-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>

+ 0 - 6
applications/websocket/websocket-server/src/main/docker/Dockerfile

@@ -1,6 +0,0 @@
-FROM frolvlad/alpine-oraclejdk8:slim
-VOLUME /tmp
-ADD websocket-server-1.0.0-SNAPSHOT.jar app.jar
-RUN sh -c 'touch /app.jar'
-ENV JAVA_OPTS=""
-ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

+ 0 - 27
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/WebsocketApplication.java

@@ -1,27 +0,0 @@
-package com.usoftchina.smartschool.websocket;
-
-import com.usoftchina.smartschool.websocket.server.WebSocket;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
-import org.springframework.cloud.openfeign.EnableFeignClients;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.annotation.ComponentScan;
-
-/**
- * @author: guq
- * @create: 2019-01-16 21:25
- **/
-@SpringBootApplication
-@MapperScan("com.usoftchina.smartschool.mapper")
-@EnableEurekaClient
-@EnableFeignClients("com.usoftchina.smartschool")
-@ComponentScan(basePackages = {"com.usoftchina.smartschool"})
-public class WebsocketApplication {
-    public static void main(String[] args) {
-        SpringApplication sa = new SpringApplication(WebsocketApplication.class);
-        ConfigurableApplicationContext configurableApplicationContext =  sa.run(args);
-        WebSocket.setApplicationContext(configurableApplicationContext);
-    }
-}

+ 0 - 28
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/configurer/FeignBeanFactoryPostProcessor.java

@@ -1,28 +0,0 @@
-package com.usoftchina.smartschool.websocket.configurer;
-
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.stereotype.Component;
-
-import java.util.Arrays;
-
-/**
- * Created by Arison on 2019/1/23.
- */
-@Component
-public class FeignBeanFactoryPostProcessor  implements BeanFactoryPostProcessor {
-
-    @Override
-    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
-        if (containsBeanDefinition(beanFactory, "feignContext", "eurekaAutoServiceRegistration")) {
-            BeanDefinition bd = beanFactory.getBeanDefinition("feignContext");
-            bd.setDependsOn("eurekaAutoServiceRegistration");
-        }
-    }
-
-    private boolean containsBeanDefinition(ConfigurableListableBeanFactory beanFactory, String... beans) {
-        return Arrays.stream(beans).allMatch(b -> beanFactory.containsBeanDefinition(b));
-    }
-}

+ 0 - 67
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/configurer/MybatisConfigurer.java

@@ -1,67 +0,0 @@
-package com.usoftchina.smartschool.websocket.configurer;
-
-import com.github.pagehelper.PageHelper;
-import org.apache.ibatis.plugin.Interceptor;
-import org.apache.ibatis.session.SqlSessionFactory;
-import org.mybatis.spring.SqlSessionFactoryBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
-import org.springframework.core.io.support.ResourcePatternResolver;
-import tk.mybatis.spring.mapper.MapperScannerConfigurer;
-
-import javax.sql.DataSource;
-import java.util.Properties;
-
-import static com.usoftchina.smartschool.websocket.core.ProjectConstant.MAPPER_INTERFACE_REFERENCE;
-import static com.usoftchina.smartschool.websocket.core.ProjectConstant.MAPPER_PACKAGE;
-import static com.usoftchina.smartschool.websocket.core.ProjectConstant.MODEL_PACKAGE;
-
-
-/**
- * Mybatis & Mapper & PageHelper 配置
- */
-@Configuration
-public class MybatisConfigurer {
-
-    @Bean
-    public SqlSessionFactory sqlSessionFactoryBean(DataSource dataSource) throws Exception {
-        SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
-        factory.setDataSource(dataSource);
-        factory.setTypeAliasesPackage(MODEL_PACKAGE);
-
-        //配置分页插件,详情请查阅官方文档
-//        PageHelper pageHelper = new PageHelper();
-//        Properties properties = new Properties();
-//        properties.setProperty("pageSizeZero", "true");//分页尺寸为0时查询所有纪录不再执行分页
-//        properties.setProperty("reasonable", "true");//页码<=0 查询第一页,页码>=总页数查询最后一页
-//        properties.setProperty("supportMethodsArguments", "true");//支持通过 Mapper 接口参数来传递分页参数
-//        pageHelper.setProperties(properties);
-//
-//        //添加插件
-//        factory.setPlugins(new Interceptor[]{pageHelper});
-
-        //添加XML目录
-        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
-        factory.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));
-        return factory.getObject();
-    }
-
-    @Bean
-    public MapperScannerConfigurer mapperScannerConfigurer() {
-        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
-        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean");
-        mapperScannerConfigurer.setBasePackage(MAPPER_PACKAGE);
-
-        //配置通用Mapper,详情请查阅官方文档
-        Properties properties = new Properties();
-        properties.setProperty("mappers", MAPPER_INTERFACE_REFERENCE);
-        properties.setProperty("notEmpty", "false");//insert、update是否判断字符串类型!='' 即 test="str != null"表达式内是否追加 and str != ''
-        properties.setProperty("IDENTITY", "MYSQL");
-        mapperScannerConfigurer.setProperties(properties);
-
-        return mapperScannerConfigurer;
-    }
-
-}
-

+ 0 - 33
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/configurer/SwaggerConfig.java

@@ -1,33 +0,0 @@
-package com.usoftchina.smartschool.websocket.configurer;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-@Configuration
-@EnableSwagger2
-public class SwaggerConfig {
-	@Bean
-    public Docket createRestApi(){
-        return new Docket(DocumentationType.SWAGGER_2)
-                .apiInfo(apiInfo())
-                .select()
-                .apis(RequestHandlerSelectors.basePackage("com.usoftchina.smartschool.websocket"))
-                .paths(PathSelectors.any())
-                .build();
-    }
-
-    private ApiInfo apiInfo(){
-        return new ApiInfoBuilder()
-        		.title("接口文档")     
-                .version("1.0")
-                .build();
-    }
-}

+ 0 - 16
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/configurer/WebSocketConfigurer.java

@@ -1,16 +0,0 @@
-package com.usoftchina.smartschool.websocket.configurer;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.socket.server.standard.ServerEndpointExporter;
-
-
-
-@Configuration
-public class WebSocketConfigurer {
-	
-	  @Bean  
-      public ServerEndpointExporter serverEndpointExporter() {  
-          return new ServerEndpointExporter();  
-	  }  
-}

+ 0 - 32
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/controller/IndexController.java

@@ -1,32 +0,0 @@
-package com.usoftchina.smartschool.websocket.controller;
-
-import com.alibaba.fastjson.JSON;
-import com.usoftchina.smartschool.websocket.dao.DeviceDOMapper;
-import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-
-/**
- * Created by Arison on 2019/1/23.
- */
-@Api(value = "设备业务", description = "设备业务首页")
-@RestController
-public class IndexController {
-
-    @Resource
-    public DeviceDOMapper deviceDOMapper;
-
-    @RequestMapping("/index")
-    public String index() {
-        return "index";
-    }
-
-    @RequestMapping("/")
-    public String home() {
-
-        return JSON.toJSONString( deviceDOMapper.selectAll());
-    }
-
-}

+ 0 - 362
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/controller/WebSocketController.java

@@ -1,362 +0,0 @@
-package com.usoftchina.smartschool.websocket.controller;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.net.DatagramPacket;
-import java.net.DatagramSocket;
-import java.net.InetAddress;
-import java.net.SocketException;
-import java.net.UnknownHostException;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.annotation.Resource;
-
-import com.usoftchina.smartschool.websocket.core.Result;
-import com.usoftchina.smartschool.websocket.core.ResultGenerator;
-import com.usoftchina.smartschool.websocket.dao.DeviceDOMapper;
-import com.usoftchina.smartschool.websocket.dao.OutInRecordDOMapper;
-import com.usoftchina.smartschool.websocket.dao.StudentDOMapper;
-import com.usoftchina.smartschool.websocket.model.Command;
-import com.usoftchina.smartschool.websocket.model.DeviceDO;
-import com.usoftchina.smartschool.websocket.model.StudentDO;
-import com.usoftchina.smartschool.websocket.server.WebSocket;
-import com.usoftchina.smartschool.websocket.utils.ImgUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import tk.mybatis.mapper.entity.Condition;
-import tk.mybatis.mapper.entity.Example.Criteria;
-
-@RestController
-@Api(value = "设备业务接口", description = "设备业务接口")
-@RequestMapping("/websocket")
-public class WebSocketController {
-
-	@Autowired
-	private WebSocket webSocketServer;
-	@Resource
-	public DeviceDOMapper deviceDOMapper;
-	@Resource
-	public StudentDOMapper studentDOMapper;
-	@Resource
-	public OutInRecordDOMapper outInRecordDOMapper;
-
-	@SuppressWarnings("static-access")
-	@ApiOperation(value = "向设备发送指令", notes = "")
-	@RequestMapping(value = "/send", method = RequestMethod.GET)
-	public Result send(@RequestParam String message, @RequestParam String ip) {
-		try {
-			webSocketServer.sendMessage(message, ip);
-		} catch (Exception e) {
-			return ResultGenerator.genFailResult("发送异常:" + e.toString());
-		}
-
-		return ResultGenerator.genSuccessResult("发送成功!");
-	}
-	@SuppressWarnings("static-access")
-	@ApiOperation(value = "查看已连接设备列表", notes = "")
-	@GetMapping("/list")
-	public Result list() {
-		String[] data = webSocketServer
-				.getSessionIP(webSocketServer.getSessionPool());
-		return ResultGenerator.genSuccessResult(data);
-	}
-
-	@ApiOperation(value = "设备列表", notes = "查看所有设备列表数据")
-	@GetMapping("/deviceList")
-	public Result getDeviceList(){
-		List<DeviceDO> data= deviceDOMapper.selectAll();
-		return ResultGenerator.genSuccessResult(data);
-	}
-
-	@ApiOperation(value = "删除设备", notes = "根据设备IP删除设备")
-	@DeleteMapping("/deleteDevice")
-	public Result deleteDevice(@RequestParam String ip){
-		Condition condition = new Condition(DeviceDO.class);
-		Criteria c1 = condition.createCriteria();
-		c1.andCondition("deviceIp=", ip);
-		int i=deviceDOMapper.deleteByCondition(condition);
-		return ResultGenerator.genSuccessResult(i);
-	}
-
-	@SuppressWarnings("static-access")
-	@ApiOperation(value = "设置单个设备超时时间", notes = "")
-	@GetMapping("/wsSetTimeOut")
-	public Result setTimeOut(@RequestParam long time, @RequestParam String ip) {
-		try {
-			webSocketServer.setSessionTimeOut(time, ip);
-		} catch (Exception e) {
-			return ResultGenerator.genFailResult("发生异常:" + e.toString());
-		}
-		return ResultGenerator.genSuccessResult("设置成功!");
-	}
-
-	@ApiOperation(value = "设备设置授权码", notes = "设备只有设置好授权码才能正常使用")
-	@SuppressWarnings("static-access")
-	@RequestMapping(value = "/wsSendAuthCode", method = RequestMethod.GET)
-	public Result sendAuthCode(@RequestParam String ip) {
-		String authCode = "{\"cmd\":\"16\",\"data\":\"cDjkGSV8arRqR92ZJOCRQBWU3qShbug2pw9vPb3fgHzJbd7Ka2jFaHXJgeXs8KHhCUaN3AVzjLeF\\nVU79aes8DEVtPUaQJ/2j/gFzWzPeN9nN7OtW4QElN4EHB44jnrH+N4PAhwsEKEtw3XRn5phwUABU\\nmclAmzm83osxyEUCMVM=\"}";
-		webSocketServer.sendMessage(authCode, ip);
-		return ResultGenerator.genSuccessResult("设置成功!");
-	}
-
-	@ApiOperation(value = "设备启动", notes = "设备UDP启动广播")
-	@GetMapping("/setUdp")
-	public Result sendUdp(@RequestParam(required = false) String message) {
-		String host = "255.255.255.255";
-		int port = 10085;
-		if (StringUtils.isEmpty(message)) {
-			// 本服务的ws服务地址
-			message = "10.1.80.196:9620";
-		}
-		try {
-			InetAddress adds = InetAddress.getByName(host);
-			@SuppressWarnings("resource")
-			DatagramSocket ds = new DatagramSocket();
-			DatagramPacket dp = new DatagramPacket(message.getBytes(),
-					message.length(), adds, port);
-			ds.send(dp);
-			return ResultGenerator.genSuccessResult("发送成功!");
-		} catch (UnknownHostException e) {
-			e.printStackTrace();
-		} catch (SocketException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
-			e.printStackTrace();
-		} finally {
-
-		}
-		return null;
-	}
-
-	/**
-	 * 断开ws连接
-	 * 
-	 * @param ip
-	 * @return
-	 */
-	@SuppressWarnings("static-access")
-	@ApiOperation(value = "断开设备连接", notes = "断开websocket连接")
-	@GetMapping("/wsClose")
-	public Result closeDevice(@RequestParam String ip) {
-		webSocketServer.close(ip);
-		return ResultGenerator.genSuccessResult("关闭成功!");
-	}
-
-	/**
-	 * 
-	 * 上传白名单
-	 * 
-	 * @return
-	 */
-	@ApiOperation(value = "上传学生头像", notes = "上传和更新学生头像")
-	@SuppressWarnings("static-access")
-	@RequestMapping(value = "/wsUploadPerson", method = RequestMethod.POST)
-	public Result wsUploadPerson(@RequestParam String studId,
-			@RequestParam String ip, @RequestParam MultipartFile file) {
-		FileOutputStream fos;
-		FileInputStream fs;
-		System.out.println("文件名:" + file.getOriginalFilename());
-		String filePath = "C://Users//Arison//Desktop//upload//"
-				+ file.getOriginalFilename();
-		try {
-			fos = new FileOutputStream(new File(filePath));
-			fs = (FileInputStream) file.getInputStream();
-			byte[] buffer = new byte[1024];
-			int len = 0;
-			while ((len = fs.read(buffer)) != -1) {
-				fos.write(buffer, 0, len);
-			}
-			fos.close();
-			fs.close();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		StudentDO stuDao = new StudentDO();
-		stuDao.setStuId(Long.valueOf(studId));
-		stuDao = studentDOMapper.selectOne(stuDao);
-		stuDao.setStuPhoto(filePath);
-		Condition condition = new Condition(DeviceDO.class);
-		Criteria c1 = condition.createCriteria();
-		c1.andCondition("stu_id=", studId);
-		studentDOMapper.updateByCondition(stuDao, condition);
-
-		String stuPhoto = filePath;
-
-		DeviceDO dModel = new DeviceDO();
-		dModel.setDeviceip(ip);
-		DeviceDO fModel = deviceDOMapper.selectOne(dModel);
-
-		System.out.println("存入头像:" + stuPhoto);
-
-		String serialnum = fModel.getSerialnumber();// 设备的序列号
-		String base64 = ImgUtil.imgToBaseStr(stuPhoto);// 图片的Base64图片
-		Map<String, Object> map = new HashMap<>();
-		map.put("code", stuDao.getStuId()); // 工号
-		map.put("name", stuDao.getStuName()); // 姓名
-		map.put("identity", String.valueOf(stuDao.getStuId())); // 身份证号
-		map.put("cardNum", stuDao.getStuId()); // IC卡编号
-		map.put("type", "1"); // 类型(1白名单,2黑名单)
-		map.put("image", base64); // 头像图片(Base64)
-		map.put("photoname", stuDao.getStuName()); // 入库相片名称
-		map.put("sex", "1"); // 性别(男,女)
-		map.put("organization", String.valueOf(stuDao.getSchoolId())); // 所属组织
-		map.put("position", "学生"); // 职位名称
-		map.put("mail", "784602719@qq.com"); // 邮箱
-		map.put("hiredate", stuDao.getStuEnrollDate().toString()); // 入校日期
-		map.put("entrancenum", "01"); // 门禁编号
-		map.put("serialNo", serialnum); // 序列号
-		map.put("time", String.valueOf(new Date().getTime())); // 创建时间
-
-		if (fModel.getIsonline() == 1 && fModel.getIsauthorized() == 1) {
-			webSocketServer.sendMessage(new Command<>("3", map).toJsonStr(),
-					fModel.getDeviceip());
-			return ResultGenerator.genSuccessResult("发送成功!");
-		} else {
-			return ResultGenerator.genSuccessResult("没有上线");
-		}
-
-	}
-
-	/**
-	 * 删除设备注册人员
-	 * 
-	 * @param ip
-	 * @param stuId
-	 * @return
-	 */
-	@ApiOperation(value = "删除设备学生人脸照", notes = "删除设备注册是白名单和黑名单人员")
-	@SuppressWarnings("static-access")
-	@GetMapping("/wsDeletePerson")
-	public Result wsDeletePerson(@RequestParam String ip,
-			@RequestParam String stuId) {
-		webSocketServer.sendMessage(new Command<>("9", stuId).toJsonStr(), ip);
-		return ResultGenerator.genSuccessResult("发送成功!");
-	}
-
-	/**
-	 * 刷新 设备的上传识别记录
-	 * 
-	 * @param ip
-	 * @return
-	 */
-	@ApiOperation(value = "获取设备识别记录", notes = "获取设备识别记录")
-	@SuppressWarnings("static-access")
-	@GetMapping("/wsGetPhotoHistory")
-	public Result wsGetPhotoHistory(@RequestParam String ip) {
-		webSocketServer.sendMessage(new Command<>("11").toJsonStr(), ip);
-		return ResultGenerator.genSuccessResult("发送成功!");
-	}
-
-	/**
-	 * 查询设备是否是手动还是自动
-	 * 
-	 * @param ip
-	 * @return
-	 */
-	@ApiOperation(value = "查询设备开闸模式", notes = "在设备表中更新开闸状态")
-	@SuppressWarnings("static-access")
-	@GetMapping("/wsGetDeviceModel")
-	public Result wsGetDeviceModel(@RequestParam String ip) {
-		webSocketServer.sendMessage(new Command<>("18").toJsonStr(), ip);
-		return ResultGenerator.genSuccessResult("发送成功!");
-	}
-
-	/**
-	 * 设置设备开闸模式
-	 * 
-	 * @param ip
-	 * @param auto
-	 * @return
-	 */
-	@SuppressWarnings("static-access")
-	@ApiOperation(value = "设置设备开闸模式", notes = "自动开闸yes  手动开闸no")
-	@GetMapping("/wsSetDeviceModel")
-	public Result wsSetDeviceModel(@RequestParam String ip,
-			@RequestParam String auto) {
-		Map<String, String> map = new HashMap<>();
-		DeviceDO dModel = new DeviceDO();
-		dModel.setDeviceip(ip);
-		DeviceDO fModel = deviceDOMapper.selectOne(dModel);
-		map.put("auto", auto); // 工号
-		map.put("serialNumber", String.valueOf(fModel.getSerialnumber())); // 设备唯一序列号
-		map.put("url", ""); // 办公检测接口
-		map.put("way", "0"); // 1 进,0 出
-		webSocketServer.sendMessage(new Command<>("17", map).toJsonStr(), ip);
-		return ResultGenerator.genSuccessResult("发送成功!");
-	}
-
-	/**
-	 * 远程设备开门
-	 * 
-	 * @param ip
-	 * @return
-	 */
-	@ApiOperation(value = "远程设备开门", notes = "")
-	@SuppressWarnings("static-access")
-	@GetMapping("/wsDeviceOpen")
-	public Result wsDeviceOpen(@RequestParam String ip) {
-		webSocketServer.sendMessage(new Command<>("12").toJsonStr(), ip);
-		return ResultGenerator.genSuccessResult("发送成功!");
-	}
-
-	/**
-	 * 远程设备关机
-	 * 
-	 * @param ip
-	 * @return
-	 */
-	@ApiOperation(value = "远程设备关机", notes = "")
-	@SuppressWarnings("static-access")
-	@GetMapping("/wsDeviceShutdown")
-	public Result wsDeviceShutdown(@RequestParam String ip) {
-		webSocketServer.sendMessage(new Command<>("13").toJsonStr(), ip);
-		return ResultGenerator.genSuccessResult("发送成功!");
-	}
-
-	/**
-	 * 远程设备重启
-	 * 
-	 * @param ip
-	 * @return
-	 */
-	@ApiOperation(value = "远程设备重启", notes = "")
-	@SuppressWarnings("static-access")
-	@GetMapping("/wsDeviceRestart")
-	public Result wsDeviceRestart(@RequestParam String ip) {
-		webSocketServer.sendMessage(new Command<>("14").toJsonStr(), ip);
-		return ResultGenerator.genSuccessResult("发送成功!");
-	}
-
-	/**
-	 * 手工添加设备
-	 * 
-	 * @return
-	 */
-	@ApiOperation(value = "添加设备", notes = "")
-	@PostMapping("/addDevice")
-	public Result addDevice(@RequestParam String devicename,
-			@RequestParam String serialnumber, @RequestParam String secretkey,
-			@RequestParam int schoolid) {
-		DeviceDO deviceDO = new DeviceDO();
-		deviceDO.setDevicename(devicename);
-		deviceDO.setSerialnumber(serialnumber);
-		deviceDO.setSecretkey(secretkey);
-		deviceDO.setIsonline(0);
-		deviceDO.setIsauthorized(0);
-		deviceDO.setIsautomatic(0);
-		deviceDO.setSchoolid(schoolid);
-		deviceDOMapper.insert(deviceDO);
-		return ResultGenerator.genSuccessResult("添加成功!");
-	}
-}

+ 0 - 76
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/AbstractService.java

@@ -1,76 +0,0 @@
-package com.usoftchina.smartschool.websocket.core;
-
-
-import org.apache.ibatis.exceptions.TooManyResultsException;
-import org.springframework.beans.factory.annotation.Autowired;
-import tk.mybatis.mapper.entity.Condition;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.ParameterizedType;
-import java.util.List;
-
-/**
- * 基于通用MyBatis Mapper插件的Service接口的实现
- */
-public abstract class AbstractService<T> implements Service<T> {
-
-    @Autowired
-    protected Mapper<T> mapper;
-
-    private Class<T> modelClass;    // 当前泛型真实类型的Class
-
-    @SuppressWarnings("unchecked")
-	public AbstractService() {
-        ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
-        modelClass = (Class<T>) pt.getActualTypeArguments()[0];
-    }
-
-    public void save(T model) {
-        mapper.insertSelective(model);
-    }
-
-    public void save(List<T> models) {
-        mapper.insertList(models);
-    }
-
-    public void deleteById(Integer id) {
-        mapper.deleteByPrimaryKey(id);
-    }
-
-    public void deleteByIds(String ids) {
-        mapper.deleteByIds(ids);
-    }
-
-    public void update(T model) {
-        mapper.updateByPrimaryKeySelective(model);
-    }
-
-    public T findById(Integer id) {
-        return mapper.selectByPrimaryKey(id);
-    }
-
-    @Override
-    public T findBy(String fieldName, Object value) throws TooManyResultsException {
-        try {
-            T model = modelClass.newInstance();
-            Field field = modelClass.getDeclaredField(fieldName);
-            field.setAccessible(true);
-            field.set(model, value);
-            return mapper.selectOne(model);
-        } catch (ReflectiveOperationException e) {
-            throw new ServiceException(e.getMessage(), e);
-        }
-    }
-
-    public List<T> findByIds(String ids) {
-        return mapper.selectByIds(ids);
-    }
-
-    public List<T> findByCondition(Condition condition) {
-        return mapper.selectByCondition(condition);
-    }
-
-    public List<T> findAll() {
-        return mapper.selectAll();
-    }
-}

+ 0 - 17
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/Mapper.java

@@ -1,17 +0,0 @@
-package com.usoftchina.smartschool.websocket.core;
-
-import tk.mybatis.mapper.common.BaseMapper;
-import tk.mybatis.mapper.common.ConditionMapper;
-import tk.mybatis.mapper.common.IdsMapper;
-import tk.mybatis.mapper.common.special.InsertListMapper;
-
-/**
- * 定制版MyBatis Mapper插件接口,如需其他接口参考官方文档自行添加。
- */
-public interface Mapper<T>
-        extends
-        BaseMapper<T>,
-        ConditionMapper<T>,
-        IdsMapper<T>,
-        InsertListMapper<T> {
-}

+ 0 - 16
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/ProjectConstant.java

@@ -1,16 +0,0 @@
-package com.usoftchina.smartschool.websocket.core;
-
-/**
- * 项目常量
- */
-public final class ProjectConstant {
-    public static final String BASE_PACKAGE = "com.usoftchina.smartschool.websocket";//项目基础包名称,根据自己公司的项目修改
-
-    public static final String MODEL_PACKAGE = BASE_PACKAGE + ".model";//Model所在包
-    public static final String MAPPER_PACKAGE = BASE_PACKAGE + ".dao";//Mapper所在包
-    public static final String SERVICE_PACKAGE = BASE_PACKAGE + ".service";//Service所在包
-    public static final String SERVICE_IMPL_PACKAGE = SERVICE_PACKAGE + ".impl";//ServiceImpl所在包
-    public static final String CONTROLLER_PACKAGE = BASE_PACKAGE + ".web";//Controller所在包
-
-    public static final String MAPPER_INTERFACE_REFERENCE = BASE_PACKAGE + ".core.Mapper";//Mapper插件基础接口的完全限定名
-}

+ 0 - 44
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/Result.java

@@ -1,44 +0,0 @@
-package com.usoftchina.smartschool.websocket.core;
-
-import com.alibaba.fastjson.JSON;
-
-/**
- * 统一API响应结果封装
- */
-public class Result {
-    private int code;
-    private String message;
-    private Object data;
-
-    public Result setCode(ResultCode resultCode) {
-        this.code = resultCode.code();
-        return this;
-    }
-
-    public int getCode() {
-        return code;
-    }
-
-    public String getMessage() {
-        return message;
-    }
-
-    public Result setMessage(String message) {
-        this.message = message;
-        return this;
-    }
-
-    public Object getData() {
-        return data;
-    }
-
-    public Result setData(Object data) {
-        this.data = data;
-        return this;
-    }
-
-    @Override
-    public String toString() {
-        return JSON.toJSONString(this);
-    }
-}

+ 0 - 22
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/ResultCode.java

@@ -1,22 +0,0 @@
-package com.usoftchina.smartschool.websocket.core;
-
-/**
- * 响应码枚举,参考HTTP状态码的语义
- */
-public enum ResultCode {
-    SUCCESS(200),//成功
-    FAIL(400),//失败
-    UNAUTHORIZED(401),//未认证(签名错误)
-    NOT_FOUND(404),//接口不存在
-    INTERNAL_SERVER_ERROR(500);//服务器内部错误
-
-    private final int code;
-
-    ResultCode(int code) {
-        this.code = code;
-    }
-
-    public int code() {
-        return code;
-    }
-}

+ 0 - 27
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/ResultGenerator.java

@@ -1,27 +0,0 @@
-package com.usoftchina.smartschool.websocket.core;
-
-/**
- * 响应结果生成工具
- */
-public class ResultGenerator {
-    private static final String DEFAULT_SUCCESS_MESSAGE = "SUCCESS";
-
-    public static Result genSuccessResult() {
-        return new Result()
-                .setCode(ResultCode.SUCCESS)
-                .setMessage(DEFAULT_SUCCESS_MESSAGE);
-    }
-
-    public static Result genSuccessResult(Object data) {
-        return new Result()
-                .setCode(ResultCode.SUCCESS)
-                .setMessage(DEFAULT_SUCCESS_MESSAGE)
-                .setData(data);
-    }
-
-    public static Result genFailResult(String message) {
-        return new Result()
-                .setCode(ResultCode.FAIL)
-                .setMessage(message);
-    }
-}

+ 0 - 22
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/Service.java

@@ -1,22 +0,0 @@
-package com.usoftchina.smartschool.websocket.core;
-
-import org.apache.ibatis.exceptions.TooManyResultsException;
-import tk.mybatis.mapper.entity.Condition;
-
-import java.util.List;
-
-/**
- * Service 层 基础接口,其他Service 接口 请继承该接口
- */
-public interface Service<T> {
-    void save(T model);//持久化
-    void save(List<T> models);//批量持久化
-    void deleteById(Integer id);//通过主鍵刪除
-    void deleteByIds(String ids);//批量刪除 eg:ids -> “1,2,3,4”
-    void update(T model);//更新
-    T findById(Integer id);//通过ID查找
-    T findBy(String fieldName, Object value) throws TooManyResultsException; //通过Model中某个成员变量名称(非数据表中column的名称)查找,value需符合unique约束
-    List<T> findByIds(String ids);//通过多个ID查找//eg:ids -> “1,2,3,4”
-    List<T> findByCondition(Condition condition);//根据条件查找
-    List<T> findAll();//获取所有
-}

+ 0 - 22
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/core/ServiceException.java

@@ -1,22 +0,0 @@
-package com.usoftchina.smartschool.websocket.core;
-
-/**
- * 服务(业务)异常如“ 账号或密码错误 ”,该异常只做INFO级别的日志记录 @see WebMvcConfigurer
- */
-public class ServiceException extends RuntimeException {
-    /**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ServiceException() {
-    }
-
-    public ServiceException(String message) {
-        super(message);
-    }
-
-    public ServiceException(String message, Throwable cause) {
-        super(message, cause);
-    }
-}

+ 0 - 8
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/dao/DeviceDOMapper.java

@@ -1,8 +0,0 @@
-package com.usoftchina.smartschool.websocket.dao;
-
-
-import com.usoftchina.smartschool.websocket.core.Mapper;
-import com.usoftchina.smartschool.websocket.model.DeviceDO;
-
-public interface DeviceDOMapper extends Mapper<DeviceDO> {
-}

+ 0 - 8
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/dao/OutInRecordDOMapper.java

@@ -1,8 +0,0 @@
-package com.usoftchina.smartschool.websocket.dao;
-
-
-import com.usoftchina.smartschool.websocket.core.Mapper;
-import com.usoftchina.smartschool.websocket.model.OutInRecordDO;
-
-public interface OutInRecordDOMapper extends Mapper<OutInRecordDO> {
-}

+ 0 - 8
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/dao/StudentDOMapper.java

@@ -1,8 +0,0 @@
-package com.usoftchina.smartschool.websocket.dao;
-
-
-import com.usoftchina.smartschool.websocket.core.Mapper;
-import com.usoftchina.smartschool.websocket.model.StudentDO;
-
-public interface StudentDOMapper extends Mapper<StudentDO> {
-}

+ 0 - 56
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/model/Command.java

@@ -1,56 +0,0 @@
-package com.usoftchina.smartschool.websocket.model;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.alibaba.fastjson.JSONObject;
-
-public class Command<T> {
-    private String cmd;
-    private T data = null;//返回数据
-
-    public Command(String cmd) {
-        this.cmd = cmd;
-    }
-
-    public Command(String cmd, T data) {
-        this.cmd = cmd;
-        this.data = data;
-    }
-
-    /**
-     * List装换Clist
-     *
-     * @param cmd
-     * @param list
-     * @return
-     */
-    @SuppressWarnings({"rawtypes", "unchecked"})
-	public static List<Command> toCommandList(String cmd, List list) {
-        List<Command> commandList = new ArrayList<>();
-        for (int i = 0; i < list.size(); i++) {
-            commandList.add(new Command(cmd, list.get(i)));
-        }
-        return commandList;
-    }
-
-    public String getCmd() {
-        return cmd;
-    }
-
-    public void setCmd(String cmd) {
-        this.cmd = cmd;
-    }
-
-    public T getData() {
-        return data;
-    }
-
-    public void setData(T data) {
-        this.data = data;
-    }
-
-    public String toJsonStr() {
-        return JSONObject.toJSONString(this);
-    }
-}

+ 0 - 310
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/model/DeviceDO.java

@@ -1,310 +0,0 @@
-package com.usoftchina.smartschool.websocket.model;
-
-import javax.persistence.*;
-
-@Table(name = "device")
-public class DeviceDO {
-    /**
-     * 设备ID,自增长
-     */
-    @Id
-    @Column(name = "deviceId")
-    private Integer deviceid;
-
-    /**
-     * 设备名称
-     */
-    @Column(name = "deviceName")
-    private String devicename;
-
-    /**
-     * 设备型号
-     */
-    @Column(name = "deviceModel")
-    private String devicemodel;
-
-    /**
-     * 设备序列号
-     */
-    @Column(name = "serialNumber")
-    private String serialnumber;
-
-    /**
-     * 设备IP
-     */
-    @Column(name = "deviceIp")
-    private String deviceip;
-
-    /**
-     * 设备版本号
-     */
-    private String version;
-
-    /**
-     * 设备Mac地址
-     */
-    @Column(name = "deviceMac")
-    private String devicemac;
-
-    /**
-     * 设备制造商
-     */
-    @Column(name = "deviceMaker")
-    private String devicemaker;
-
-    /**
-     * 设备秘钥
-     */
-    private String secretkey;
-
-    /**
-     * 是否授权   0 未授权,1 授权
-     */
-    @Column(name = "isAuthorized")
-    private Integer isauthorized;
-
-    /**
-     * 是否在线  0不在线  1在线
-     */
-    @Column(name = "isOnline")
-    private Integer isonline;
-
-    /**
-     * 是否自动开闸模式  0 手动  1 自动
-     */
-    @Column(name = "isAutomatic")
-    private Integer isautomatic;
-
-    @Column(name = "schoolId")
-    private Integer schoolid;
-
-    /**
-     * 获取设备ID,自增长
-     *
-     * @return deviceId - 设备ID,自增长
-     */
-    public Integer getDeviceid() {
-        return deviceid;
-    }
-
-    /**
-     * 设置设备ID,自增长
-     *
-     * @param deviceid 设备ID,自增长
-     */
-    public void setDeviceid(Integer deviceid) {
-        this.deviceid = deviceid;
-    }
-
-    /**
-     * 获取设备名称
-     *
-     * @return deviceName - 设备名称
-     */
-    public String getDevicename() {
-        return devicename;
-    }
-
-    /**
-     * 设置设备名称
-     *
-     * @param devicename 设备名称
-     */
-    public void setDevicename(String devicename) {
-        this.devicename = devicename;
-    }
-
-    /**
-     * 获取设备型号
-     *
-     * @return deviceModel - 设备型号
-     */
-    public String getDevicemodel() {
-        return devicemodel;
-    }
-
-    /**
-     * 设置设备型号
-     *
-     * @param devicemodel 设备型号
-     */
-    public void setDevicemodel(String devicemodel) {
-        this.devicemodel = devicemodel;
-    }
-
-    /**
-     * 获取设备序列号
-     *
-     * @return serialNumber - 设备序列号
-     */
-    public String getSerialnumber() {
-        return serialnumber;
-    }
-
-    /**
-     * 设置设备序列号
-     *
-     * @param serialnumber 设备序列号
-     */
-    public void setSerialnumber(String serialnumber) {
-        this.serialnumber = serialnumber;
-    }
-
-    /**
-     * 获取设备IP
-     *
-     * @return deviceIp - 设备IP
-     */
-    public String getDeviceip() {
-        return deviceip;
-    }
-
-    /**
-     * 设置设备IP
-     *
-     * @param deviceip 设备IP
-     */
-    public void setDeviceip(String deviceip) {
-        this.deviceip = deviceip;
-    }
-
-    /**
-     * 获取设备版本号
-     *
-     * @return version - 设备版本号
-     */
-    public String getVersion() {
-        return version;
-    }
-
-    /**
-     * 设置设备版本号
-     *
-     * @param version 设备版本号
-     */
-    public void setVersion(String version) {
-        this.version = version;
-    }
-
-    /**
-     * 获取设备Mac地址
-     *
-     * @return deviceMac - 设备Mac地址
-     */
-    public String getDevicemac() {
-        return devicemac;
-    }
-
-    /**
-     * 设置设备Mac地址
-     *
-     * @param devicemac 设备Mac地址
-     */
-    public void setDevicemac(String devicemac) {
-        this.devicemac = devicemac;
-    }
-
-    /**
-     * 获取设备制造商
-     *
-     * @return deviceMaker - 设备制造商
-     */
-    public String getDevicemaker() {
-        return devicemaker;
-    }
-
-    /**
-     * 设置设备制造商
-     *
-     * @param devicemaker 设备制造商
-     */
-    public void setDevicemaker(String devicemaker) {
-        this.devicemaker = devicemaker;
-    }
-
-    /**
-     * 获取设备秘钥
-     *
-     * @return secretkey - 设备秘钥
-     */
-    public String getSecretkey() {
-        return secretkey;
-    }
-
-    /**
-     * 设置设备秘钥
-     *
-     * @param secretkey 设备秘钥
-     */
-    public void setSecretkey(String secretkey) {
-        this.secretkey = secretkey;
-    }
-
-    /**
-     * 获取是否授权   0 未授权,1 授权
-     *
-     * @return isAuthorized - 是否授权   0 未授权,1 授权
-     */
-    public Integer getIsauthorized() {
-        return isauthorized;
-    }
-
-    /**
-     * 设置是否授权   0 未授权,1 授权
-     *
-     * @param isauthorized 是否授权   0 未授权,1 授权
-     */
-    public void setIsauthorized(Integer isauthorized) {
-        this.isauthorized = isauthorized;
-    }
-
-    /**
-     * 获取是否在线  0不在线  1在线
-     *
-     * @return isOnline - 是否在线  0不在线  1在线
-     */
-    public Integer getIsonline() {
-        return isonline;
-    }
-
-    /**
-     * 设置是否在线  0不在线  1在线
-     *
-     * @param isonline 是否在线  0不在线  1在线
-     */
-    public void setIsonline(Integer isonline) {
-        this.isonline = isonline;
-    }
-
-    /**
-     * 获取是否自动开闸模式  0 手动  1 自动
-     *
-     * @return isAutomatic - 是否自动开闸模式  0 手动  1 自动
-     */
-    public Integer getIsautomatic() {
-        return isautomatic;
-    }
-
-    /**
-     * 设置是否自动开闸模式  0 手动  1 自动
-     *
-     * @param isautomatic 是否自动开闸模式  0 手动  1 自动
-     */
-    public void setIsautomatic(Integer isautomatic) {
-        this.isautomatic = isautomatic;
-    }
-
-    /**
-     * @return schoolId
-     */
-    public Integer getSchoolid() {
-        return schoolid;
-    }
-
-    /**
-     * @param schoolid
-     */
-    public void setSchoolid(Integer schoolid) {
-        this.schoolid = schoolid;
-    }
-}

+ 0 - 200
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/model/OutInRecordDO.java

@@ -1,200 +0,0 @@
-package com.usoftchina.smartschool.websocket.model;
-
-import java.util.Date;
-import javax.persistence.*;
-
-@Table(name = "out_in_record")
-public class OutInRecordDO {
-    /**
-     * 编号
-     */
-    @Id
-    @Column(name = "record_id")
-    private Long recordId;
-
-    /**
-     * 记录名
-     */
-    @Column(name = "record_name")
-    private String recordName;
-
-    /**
-     * 出校时间
-     */
-    @Column(name = "out_date")
-    private Date outDate;
-
-    /**
-     * 入校时间
-     */
-    @Column(name = "in_date")
-    private Date inDate;
-
-    /**
-     * 详情
-     */
-    @Column(name = "record_details")
-    private String recordDetails;
-
-    /**
-     * 备注
-     */
-    @Column(name = "record_remarks")
-    private String recordRemarks;
-
-    /**
-     * 学生
-     */
-    @Column(name = "stu_id")
-    private Long stuId;
-
-    /**
-     * 学校
-     */
-    @Column(name = "school_id")
-    private Long schoolId;
-
-    /**
-     * 获取编号
-     *
-     * @return record_id - 编号
-     */
-    public Long getRecordId() {
-        return recordId;
-    }
-
-    /**
-     * 设置编号
-     *
-     * @param recordId 编号
-     */
-    public void setRecordId(Long recordId) {
-        this.recordId = recordId;
-    }
-
-    /**
-     * 获取记录名
-     *
-     * @return record_name - 记录名
-     */
-    public String getRecordName() {
-        return recordName;
-    }
-
-    /**
-     * 设置记录名
-     *
-     * @param recordName 记录名
-     */
-    public void setRecordName(String recordName) {
-        this.recordName = recordName;
-    }
-
-    /**
-     * 获取出校时间
-     *
-     * @return out_date - 出校时间
-     */
-    public Date getOutDate() {
-        return outDate;
-    }
-
-    /**
-     * 设置出校时间
-     *
-     * @param outDate 出校时间
-     */
-    public void setOutDate(Date outDate) {
-        this.outDate = outDate;
-    }
-
-    /**
-     * 获取入校时间
-     *
-     * @return in_date - 入校时间
-     */
-    public Date getInDate() {
-        return inDate;
-    }
-
-    /**
-     * 设置入校时间
-     *
-     * @param inDate 入校时间
-     */
-    public void setInDate(Date inDate) {
-        this.inDate = inDate;
-    }
-
-    /**
-     * 获取详情
-     *
-     * @return record_details - 详情
-     */
-    public String getRecordDetails() {
-        return recordDetails;
-    }
-
-    /**
-     * 设置详情
-     *
-     * @param recordDetails 详情
-     */
-    public void setRecordDetails(String recordDetails) {
-        this.recordDetails = recordDetails;
-    }
-
-    /**
-     * 获取备注
-     *
-     * @return record_remarks - 备注
-     */
-    public String getRecordRemarks() {
-        return recordRemarks;
-    }
-
-    /**
-     * 设置备注
-     *
-     * @param recordRemarks 备注
-     */
-    public void setRecordRemarks(String recordRemarks) {
-        this.recordRemarks = recordRemarks;
-    }
-
-    /**
-     * 获取学生
-     *
-     * @return stu_id - 学生
-     */
-    public Long getStuId() {
-        return stuId;
-    }
-
-    /**
-     * 设置学生
-     *
-     * @param stuId 学生
-     */
-    public void setStuId(Long stuId) {
-        this.stuId = stuId;
-    }
-
-    /**
-     * 获取学校
-     *
-     * @return school_id - 学校
-     */
-    public Long getSchoolId() {
-        return schoolId;
-    }
-
-    /**
-     * 设置学校
-     *
-     * @param schoolId 学校
-     */
-    public void setSchoolId(Long schoolId) {
-        this.schoolId = schoolId;
-    }
-}

+ 0 - 344
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/model/StudentDO.java

@@ -1,344 +0,0 @@
-package com.usoftchina.smartschool.websocket.model;
-
-import java.util.Date;
-import javax.persistence.*;
-
-@Table(name = "sys_student")
-public class StudentDO {
-    /**
-     * 编号
-     */
-    @Id
-    @Column(name = "stu_id")
-    private Long stuId;
-
-    /**
-     * 学号
-     */
-    @Column(name = "stu_number")
-    private String stuNumber;
-
-    /**
-     * 名字
-     */
-    @Column(name = "stu_name")
-    private String stuName;
-
-    /**
-     * 入学日期
-     */
-    @Column(name = "stu_enroll_date")
-    private Date stuEnrollDate;
-
-    /**
-     * 毕业时间
-     */
-    @Column(name = "stu_graduate_date")
-    private Date stuGraduateDate;
-
-    /**
-     * 生日
-     */
-    @Column(name = "stu_birthday")
-    private Date stuBirthday;
-
-    /**
-     * 年龄
-     */
-    @Column(name = "stu_age")
-    private Integer stuAge;
-
-    /**
-     * 性别   1男  2女
-     */
-    @Column(name = "stu_sex")
-    private Integer stuSex;
-
-    /**
-     * 地址
-     */
-    @Column(name = "stu_address")
-    private String stuAddress;
-
-    /**
-     * 头像
-     */
-    @Column(name = "stu_photo")
-    private String stuPhoto;
-
-    /**
-     * 状态   1正常   2冻结
-     */
-    @Column(name = "stu_status")
-    private Integer stuStatus;
-
-    /**
-     * 备注
-     */
-    @Column(name = "stu_remarks")
-    private String stuRemarks;
-
-    /**
-     * 班级
-     */
-    @Column(name = "clazz_id")
-    private Long clazzId;
-
-    /**
-     * 学校
-     */
-    @Column(name = "school_id")
-    private Long schoolId;
-
-    /**
-     * 获取编号
-     *
-     * @return stu_id - 编号
-     */
-    public Long getStuId() {
-        return stuId;
-    }
-
-    /**
-     * 设置编号
-     *
-     * @param stuId 编号
-     */
-    public void setStuId(Long stuId) {
-        this.stuId = stuId;
-    }
-
-    /**
-     * 获取学号
-     *
-     * @return stu_number - 学号
-     */
-    public String getStuNumber() {
-        return stuNumber;
-    }
-
-    /**
-     * 设置学号
-     *
-     * @param stuNumber 学号
-     */
-    public void setStuNumber(String stuNumber) {
-        this.stuNumber = stuNumber;
-    }
-
-    /**
-     * 获取名字
-     *
-     * @return stu_name - 名字
-     */
-    public String getStuName() {
-        return stuName;
-    }
-
-    /**
-     * 设置名字
-     *
-     * @param stuName 名字
-     */
-    public void setStuName(String stuName) {
-        this.stuName = stuName;
-    }
-
-    /**
-     * 获取入学日期
-     *
-     * @return stu_enroll_date - 入学日期
-     */
-    public Date getStuEnrollDate() {
-        return stuEnrollDate;
-    }
-
-    /**
-     * 设置入学日期
-     *
-     * @param stuEnrollDate 入学日期
-     */
-    public void setStuEnrollDate(Date stuEnrollDate) {
-        this.stuEnrollDate = stuEnrollDate;
-    }
-
-    /**
-     * 获取毕业时间
-     *
-     * @return stu_graduate_date - 毕业时间
-     */
-    public Date getStuGraduateDate() {
-        return stuGraduateDate;
-    }
-
-    /**
-     * 设置毕业时间
-     *
-     * @param stuGraduateDate 毕业时间
-     */
-    public void setStuGraduateDate(Date stuGraduateDate) {
-        this.stuGraduateDate = stuGraduateDate;
-    }
-
-    /**
-     * 获取生日
-     *
-     * @return stu_birthday - 生日
-     */
-    public Date getStuBirthday() {
-        return stuBirthday;
-    }
-
-    /**
-     * 设置生日
-     *
-     * @param stuBirthday 生日
-     */
-    public void setStuBirthday(Date stuBirthday) {
-        this.stuBirthday = stuBirthday;
-    }
-
-    /**
-     * 获取年龄
-     *
-     * @return stu_age - 年龄
-     */
-    public Integer getStuAge() {
-        return stuAge;
-    }
-
-    /**
-     * 设置年龄
-     *
-     * @param stuAge 年龄
-     */
-    public void setStuAge(Integer stuAge) {
-        this.stuAge = stuAge;
-    }
-
-    /**
-     * 获取性别   1男  2女
-     *
-     * @return stu_sex - 性别   1男  2女
-     */
-    public Integer getStuSex() {
-        return stuSex;
-    }
-
-    /**
-     * 设置性别   1男  2女
-     *
-     * @param stuSex 性别   1男  2女
-     */
-    public void setStuSex(Integer stuSex) {
-        this.stuSex = stuSex;
-    }
-
-    /**
-     * 获取地址
-     *
-     * @return stu_address - 地址
-     */
-    public String getStuAddress() {
-        return stuAddress;
-    }
-
-    /**
-     * 设置地址
-     *
-     * @param stuAddress 地址
-     */
-    public void setStuAddress(String stuAddress) {
-        this.stuAddress = stuAddress;
-    }
-
-    /**
-     * 获取头像
-     *
-     * @return stu_photo - 头像
-     */
-    public String getStuPhoto() {
-        return stuPhoto;
-    }
-
-    /**
-     * 设置头像
-     *
-     * @param stuPhoto 头像
-     */
-    public void setStuPhoto(String stuPhoto) {
-        this.stuPhoto = stuPhoto;
-    }
-
-    /**
-     * 获取状态   1正常   2冻结
-     *
-     * @return stu_status - 状态   1正常   2冻结
-     */
-    public Integer getStuStatus() {
-        return stuStatus;
-    }
-
-    /**
-     * 设置状态   1正常   2冻结
-     *
-     * @param stuStatus 状态   1正常   2冻结
-     */
-    public void setStuStatus(Integer stuStatus) {
-        this.stuStatus = stuStatus;
-    }
-
-    /**
-     * 获取备注
-     *
-     * @return stu_remarks - 备注
-     */
-    public String getStuRemarks() {
-        return stuRemarks;
-    }
-
-    /**
-     * 设置备注
-     *
-     * @param stuRemarks 备注
-     */
-    public void setStuRemarks(String stuRemarks) {
-        this.stuRemarks = stuRemarks;
-    }
-
-    /**
-     * 获取班级
-     *
-     * @return clazz_id - 班级
-     */
-    public Long getClazzId() {
-        return clazzId;
-    }
-
-    /**
-     * 设置班级
-     *
-     * @param clazzId 班级
-     */
-    public void setClazzId(Long clazzId) {
-        this.clazzId = clazzId;
-    }
-
-    /**
-     * 获取学校
-     *
-     * @return school_id - 学校
-     */
-    public Long getSchoolId() {
-        return schoolId;
-    }
-
-    /**
-     * 设置学校
-     *
-     * @param schoolId 学校
-     */
-    public void setSchoolId(Long schoolId) {
-        this.schoolId = schoolId;
-    }
-}

+ 0 - 233
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/server/WebSocket.java

@@ -1,233 +0,0 @@
-package com.usoftchina.smartschool.websocket.server;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.text.ParseException;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import javax.annotation.Resource;
-import javax.websocket.EncodeException;
-import javax.websocket.OnClose;
-import javax.websocket.OnError;
-import javax.websocket.OnMessage;
-import javax.websocket.OnOpen;
-import javax.websocket.Session;
-import javax.websocket.server.ServerEndpoint;
-
-import com.usoftchina.smartschool.websocket.dao.DeviceDOMapper;
-import com.usoftchina.smartschool.websocket.dao.OutInRecordDOMapper;
-import com.usoftchina.smartschool.websocket.model.Command;
-import com.usoftchina.smartschool.websocket.model.DeviceDO;
-import com.usoftchina.smartschool.websocket.model.OutInRecordDO;
-import com.usoftchina.smartschool.websocket.service.impl.DeviceDOServiceImpl;
-import com.usoftchina.smartschool.websocket.utils.ImgUtil;
-import com.usoftchina.smartschool.websocket.utils.WebSocketUtil;
-import org.apache.commons.lang3.time.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.socket.server.standard.SpringConfigurator;
-
-import com.alibaba.fastjson.JSON;
-
-
-import tk.mybatis.mapper.entity.Condition;
-import tk.mybatis.mapper.entity.Example.Criteria;
-
-@SuppressWarnings("unused")
-@ServerEndpoint(value = "/websocket" )
-//,configurator = SpringConfigurator.class
-@Component
-public class WebSocket {
-     
-	
-	//此处是解决无法注入的关键
-	private static ApplicationContext applicationContext;
-	@Autowired
-	public DeviceDOMapper deviceDOMapper;
-	@Autowired
-	public OutInRecordDOMapper outInRecordDOMapper;
-	@Autowired
-	public DeviceDOServiceImpl deviceDOService;
-	private static Map<String, Session> sessionPool = new HashMap<String, Session>();
-	private Session session;
-   
-	public WebSocket() {
-		super();
-	}
-
-	@OnOpen
-	public void onOpen(Session session) {
-		session.setMaxTextMessageBufferSize(10 * 1024 * 1024);
-		session.setMaxBinaryMessageBufferSize(10 * 1024 * 1024);
-		this.session = session;
-		deviceDOMapper= applicationContext.getBean(DeviceDOMapper.class);
-		deviceDOService=applicationContext.getBean(DeviceDOServiceImpl.class);
-		outInRecordDOMapper=applicationContext.getBean(OutInRecordDOMapper.class);
-		System.out.println("设备上线:" + WebSocketUtil.getRemoteAddressStr(session));	
-		sessionPool.put(WebSocketUtil.getRemoteIPAddress(session), session);
-	}
-
-	@OnClose
-	public void onClose() {
-	 System.out.println("设备下线:" + WebSocketUtil.getRemoteAddressStr(session));
-	 sessionPool.remove(WebSocketUtil.getRemoteIPAddress(session));
-	 
-	 DeviceDO dModel=	new DeviceDO();
-   	 dModel.setDeviceip(WebSocketUtil.getRemoteIPAddress(session));
-   	 DeviceDO fModel= deviceDOMapper.selectOne(dModel);
-   	 Condition condition = new Condition(DeviceDO.class);
-     Criteria c1 = condition.createCriteria();
-   	 if(fModel!=null){
-   	     c1.andCondition("serialNumber=",fModel.getSerialnumber());
-   		 fModel.setIsonline(0);//下线
-   		 fModel.setIsauthorized(0);
-   		 deviceDOMapper.updateByCondition(fModel, condition);
-   	 }
-   	 
-	}
-
-	@OnMessage
-	public void onMessage(String message, Session session) {
-		
-		String cmd=JSON.parseObject(message).getString("cmd");
-		switch (cmd) {
-			case "0" ://设备注册
-				System.out.println("来自设备 " + WebSocketUtil.getRemoteAddressStr(session)+ "的消息:\n" + message);
-				 sendMessage(new Command<>("6").toJsonStr(), WebSocketUtil.getRemoteIPAddress(session));
-				
-				 DeviceDO dModel=new DeviceDO();
-			   	 dModel.setSerialnumber(JSON.parseObject(message).getJSONObject("data").getString("serialNumber"));
-			   	 DeviceDO fModel= deviceDOMapper.selectOne(dModel);
-			   	 Condition condition = new Condition(DeviceDO.class);
-			     Criteria c1 = condition.createCriteria();
-			   	 if(fModel!=null){
-			   	     c1.andCondition("serialNumber=",fModel.getSerialnumber());
-			   	     fModel.setDeviceip(WebSocketUtil.getRemoteIPAddress(session));
-			   	     fModel.setDevicemac(JSON.parseObject(message).getJSONObject("data").getString("DeviceMac"));
-			   	     fModel.setDevicemaker(JSON.parseObject(message).getJSONObject("data").getString("DeviceMaker"));
-			   	     fModel.setVersion(JSON.parseObject(message).getJSONObject("data").getString("Version"));
-			   	     fModel.setDevicemodel(JSON.parseObject(message).getJSONObject("data").getString("DeviceModel"));
-			   		 fModel.setIsonline(1);
-			   		 fModel.setIsauthorized(1);
-			   		 deviceDOMapper.updateByCondition(fModel, condition);
-			   	 }
-				break;
-			case "1"://白名单列表
-				String identity=JSON.parseObject(message).getJSONObject("data").getString("identity");
-				String name=JSON.parseObject(message).getJSONObject("data").getString("name");
-				System.out.println("identity:"+identity+"  name:"+name);
-				break;
-			case "19"://进出入校通知
-				System.out.println("来自设备 " + WebSocketUtil.getRemoteAddressStr(session)+ "的消息:\n" + message);
-				 identity=JSON.parseObject(message).getJSONObject("data").getString("identity");
-				 name=JSON.parseObject(message).getJSONObject("data").getString("name");
-				 String photo=JSON.parseObject(message).getJSONObject("data").getString("photo");
-				 String time=JSON.parseObject(message).getJSONObject("data").getString("time");
-				 String serialNumber=JSON.parseObject(message).getJSONObject("data").getString("serialNumber");
-		    	 OutInRecordDO outModel=new OutInRecordDO();
-		    	 //DateUtils.parseDate("2019-08-12 08:00:12", "yyyy-MM-dd HH:mm:ss")
-				 outModel.setInDate(new Date(Long.valueOf(time)));
-				 ImgUtil.baseStrToImg(photo, "C://Users//Arison//Desktop//upload//liuie.jpg");
-		    	 outModel.setRecordDetails("C://Users//Arison//Desktop//upload//liuie.jpg");
-		    	 outModel.setRecordName("进校记录");
-		    	 outModel.setStuId(Long.valueOf(identity));
-		    	 outInRecordDOMapper.insert(outModel);
-				break;
-			case "11"://设备所有的识别记录
-				
-				
-				break;
-			case "100":
-                //{"cmd":"100","data":{"op":"3","serialNumber":"3100-1d17-72be-ed51-cac9","status":"ok"}}
-				String op=JSON.parseObject(message).getJSONObject("data").getString("op");
-			    String status=JSON.parseObject(message).getJSONObject("data").getString("status");
-			    switch (op) {
-					case "3" ://上传白名单设备响应
-						if ("ok".equals(status)) {
-							//更新学生表状态
-							
-							
-						}
-						break;
-
-					default :
-						break;
-				}
-				break;
-			default :
-				System.out.println("来自设备 " + WebSocketUtil.getRemoteAddressStr(session)+ "的消息:\n" + message);
-				break;
-		}
-	}
-
-	@OnError
-	public void onError(Session session, Throwable error) {
-		System.out.println("发生错误:" + WebSocketUtil.getRemoteAddressStr(session));
-	    error.printStackTrace();
-	}
-
-	public static synchronized int getOnlineCount() {
-		return sessionPool.size();
-	}
-
-	public synchronized static void sendMessage(String message, String ip) {
-		Session s = sessionPool.get(ip);
-		synchronized (s) {
-			if (s != null) {
-				try {
-					System.out.println("服务器向" + ip + "发送消息:" + message);
-//					s.getBasicRemote()
-//							.sendBinary(ByteBuffer.wrap(message.getBytes()));
-					s.getBasicRemote().sendText(message);
-
-				} catch (Exception e) {
-					e.printStackTrace();
-				}
-			}
-		}
-
-	}
-	
-	public synchronized static  void close( String ip){
-		Session s = sessionPool.get(ip);
-		try {
-			s.close();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
-
-	public synchronized static void setSessionTimeOut(long time, String ip) {
-		Session s = sessionPool.get(ip);
-		s.setMaxIdleTimeout(time);
-	}
-
-	public static String[] getSessionIP(Map<String, Session> map) {
-		StringBuilder str = new StringBuilder();
-		for (Entry<String, Session> entry : map.entrySet()) {
-			str.append(entry.getKey() + ",");
-		}
-
-		if (StringUtils.isEmpty(str.toString())) {
-			return new String[]{};
-		}
-		return str.toString().split(",");
-	}
-
-	public static Map<String, Session> getSessionPool() {
-		return sessionPool;
-	}
-
-	public static void setApplicationContext(
-			ApplicationContext applicationContext) {
-		WebSocket.applicationContext = applicationContext;
-	}
-
-	
-}

+ 0 - 12
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/service/DeviceDOService.java

@@ -1,12 +0,0 @@
-package com.usoftchina.smartschool.websocket.service;
-
-
-import com.usoftchina.smartschool.websocket.core.Service;
-import com.usoftchina.smartschool.websocket.model.DeviceDO;
-
-/**
- * Created by CodeGenerator on 2019/01/18.
- */
-public interface DeviceDOService extends Service<DeviceDO> {
-
-}

+ 0 - 12
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/service/OutInRecordDOService.java

@@ -1,12 +0,0 @@
-package com.usoftchina.smartschool.websocket.service;
-
-
-import com.usoftchina.smartschool.websocket.core.Service;
-import com.usoftchina.smartschool.websocket.model.OutInRecordDO;
-
-/**
- * Created by CodeGenerator on 2019/01/18.
- */
-public interface OutInRecordDOService extends Service<OutInRecordDO> {
-
-}

+ 0 - 12
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/service/StudentDOService.java

@@ -1,12 +0,0 @@
-package com.usoftchina.smartschool.websocket.service;
-
-
-import com.usoftchina.smartschool.websocket.core.Service;
-import com.usoftchina.smartschool.websocket.model.StudentDO;
-
-/**
- * Created by CodeGenerator on 2019/01/18.
- */
-public interface StudentDOService extends Service<StudentDO> {
-
-}

+ 0 - 24
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/service/impl/DeviceDOServiceImpl.java

@@ -1,24 +0,0 @@
-package com.usoftchina.smartschool.websocket.service.impl;
-
-
-
-import com.usoftchina.smartschool.websocket.core.AbstractService;
-import com.usoftchina.smartschool.websocket.dao.DeviceDOMapper;
-import com.usoftchina.smartschool.websocket.model.DeviceDO;
-import com.usoftchina.smartschool.websocket.service.DeviceDOService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.annotation.Resource;
-
-
-/**
- * Created by CodeGenerator on 2019/01/18.
- */
-@Service
-@Transactional
-public class DeviceDOServiceImpl extends AbstractService<DeviceDO> implements DeviceDOService {
-    @Resource
-    private DeviceDOMapper deviceMapper;
-
-}

+ 0 - 24
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/service/impl/OutInRecordDOServiceImpl.java

@@ -1,24 +0,0 @@
-package com.usoftchina.smartschool.websocket.service.impl;
-
-
-
-import com.usoftchina.smartschool.websocket.core.AbstractService;
-import com.usoftchina.smartschool.websocket.dao.OutInRecordDOMapper;
-import com.usoftchina.smartschool.websocket.model.OutInRecordDO;
-import com.usoftchina.smartschool.websocket.service.OutInRecordDOService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.annotation.Resource;
-
-
-/**
- * Created by CodeGenerator on 2019/01/18.
- */
-@Service
-@Transactional
-public class OutInRecordDOServiceImpl extends AbstractService<OutInRecordDO> implements OutInRecordDOService {
-    @Resource
-    private OutInRecordDOMapper outInRecordMapper;
-
-}

+ 0 - 22
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/service/impl/StudentDOServiceImpl.java

@@ -1,22 +0,0 @@
-package com.usoftchina.smartschool.websocket.service.impl;
-
-import com.usoftchina.smartschool.websocket.core.AbstractService;
-import com.usoftchina.smartschool.websocket.dao.StudentDOMapper;
-import com.usoftchina.smartschool.websocket.model.StudentDO;
-import com.usoftchina.smartschool.websocket.service.StudentDOService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.annotation.Resource;
-
-
-/**
- * Created by CodeGenerator on 2019/01/18.
- */
-@Service
-@Transactional
-public class StudentDOServiceImpl extends AbstractService<StudentDO> implements StudentDOService {
-    @Resource
-    private StudentDOMapper sysStudentMapper;
-
-}

+ 0 - 53
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/utils/ImgUtil.java

@@ -1,53 +0,0 @@
-package com.usoftchina.smartschool.websocket.utils;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Base64;
-
-import org.apache.commons.lang3.StringUtils;
-
-public class ImgUtil {
-
-    public static boolean baseStrToImg(String baseStr, String imgFilePath) {
-        if (StringUtils.isBlank(baseStr)) {// 图像数据为空
-            return false;
-        }
-        try {
-            // Base64解码
-            byte[] bytes = Base64.getMimeDecoder().decode(baseStr);
-            for (int i = 0; i < bytes.length; ++i) {
-                if (bytes[i] < 0) {// 调整异常数据
-                    bytes[i] += 256;
-                }
-            }
-            // 生成jpeg图片
-            OutputStream out = new FileOutputStream(imgFilePath);
-            out.write(bytes);
-            out.flush();
-            out.close();
-            return true;
-        }
-        catch (Exception e) {
-            return false;
-        }
-    }
-
-    public static String imgToBaseStr(String imgFilePath) {
-        InputStream in = null;
-        byte[] data = null;
-        try {
-            in = new FileInputStream(imgFilePath);
-            data = new byte[in.available()];
-            in.read(data);
-            in.close();
-        }
-        catch (IOException e) {
-            e.printStackTrace();
-        }
-        return Base64.getMimeEncoder().encodeToString(data);
-    }
-}
-
-

+ 0 - 77
applications/websocket/websocket-server/src/main/java/com/usoftchina/smartschool/websocket/utils/WebSocketUtil.java

@@ -1,77 +0,0 @@
-package com.usoftchina.smartschool.websocket.utils;
-
-import java.lang.reflect.Field;
-import java.net.InetSocketAddress;
-
-import javax.websocket.RemoteEndpoint.Async;
-import javax.websocket.Session;
-
-public class WebSocketUtil {
-	
-	public static String getRemoteIPAddress(Session session) {
-		if (session == null) {
-			return null;
-		}
-		Async async = session.getAsyncRemote();
-		
-		//在Tomcat 8.0.x版本有效
-//		InetSocketAddress addr = (InetSocketAddress) getFieldInstance(async,"base#sos#socketWrapper#socket#sc#remoteAddress");
-		//在Tomcat 8.5以上版本有效
-		InetSocketAddress addr = (InetSocketAddress) getFieldInstance(async,"base#socketWrapper#socket#sc#remoteAddress");
-		return addr.getHostName();
-	}
-	
-	public static String getRemoteAddressStr(Session session) {
-		if (session == null) {
-			return null;
-		}
-		Async async = session.getAsyncRemote();
-		
-		//在Tomcat 8.0.x版本有效
-//		InetSocketAddress addr = (InetSocketAddress) getFieldInstance(async,"base#sos#socketWrapper#socket#sc#remoteAddress");
-		//在Tomcat 8.5以上版本有效
-		InetSocketAddress addr = (InetSocketAddress) getFieldInstance(async,"base#socketWrapper#socket#sc#remoteAddress");
-		return addr.toString().split("/")[1];
-	}
-
-	
-	public static InetSocketAddress getRemoteAddress(Session session) {
-		if (session == null) {
-			return null;
-		}
-		Async async = session.getAsyncRemote();
-		
-		//在Tomcat 8.0.x版本有效
-//		InetSocketAddress addr = (InetSocketAddress) getFieldInstance(async,"base#sos#socketWrapper#socket#sc#remoteAddress");
-		//在Tomcat 8.5以上版本有效
-		InetSocketAddress addr = (InetSocketAddress) getFieldInstance(async,"base#socketWrapper#socket#sc#remoteAddress");
-		return addr;
-	}
-
-	private static Object getFieldInstance(Object obj, String fieldPath) {
-		String fields[] = fieldPath.split("#");
-		for (String field : fields) {
-			obj = getField(obj, obj.getClass(), field);
-			if (obj == null) {
-				return null;
-			}
-		}
-
-		return obj;
-	}
-
-	private static Object getField(Object obj, Class<?> clazz, String fieldName) {
-		for (; clazz != Object.class; clazz = clazz.getSuperclass()) {
-			try {
-				Field field;
-				field = clazz.getDeclaredField(fieldName);
-				field.setAccessible(true);
-				return field.get(obj);
-			} catch (Exception e) {
-			}
-		}
-
-		return null;
-	}
-
-}

+ 0 - 94
applications/websocket/websocket-server/src/main/resources/application.yml

@@ -1,94 +0,0 @@
-spring:
-  application:
-    name: websocket-server
-  devtools:
-    restart:
-       enabled: false
-  security:
-    user:
-      name: admin
-      password: select111***
-  datasource:
-    driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://10.10.100.166:3306/smart_campus?characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
-    username: root
-    password: select111***
-    hikari:
-      minimum-idle: 5
-      maximum-pool-size: 50
-      idle-timeout: 30000
-      max-lifetime: 1800000
-      connection-timeout: 30000
-  messages:
-    basename: i18n/messages
-    encoding: UTF-8
-  rabbitmq:
-    host: 10.10.100.166
-    port: 3306
-    virtual-host: school
-    username: school
-    password: select111***
-  zipkin:
-    sender:
-      type: rabbit
-    locator:
-      discovery:
-        enabled: true
-  sleuth:
-    sampler:
-      probability: 1.0
-  redis:
-    host: 10.10.100.166
-    port: 6379
-  profiles:
-    active: dev
-eureka:
-  instance:
-    leaseRenewalIntervalInSeconds: 10
-    health-check-url-path: /actuator/health
-    status-page-url-path: /actuator/info
-    metadata-map:
-      user.name: ${spring.security.user.name}
-      user.password: ${spring.security.user.password}
-  client:
-    registryFetchIntervalSeconds: 5
-    serviceUrl:
-      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@10.1.81.61:8510/eureka/
-management:
-  endpoints:
-    web:
-      exposure:
-        include: "*"
-  endpoint:
-    health:
-      show-details: always
-server:
-  port: 9620
-  tomcat:
-    uri-encoding: UTF-8
-info:
-  name: '@project.artifactId@'
-  description: '@project.description@'
-  version: '@project.version@'
-  spring-boot-version: '@spring.boot.version@'
-  spring-cloud-version: '@spring.cloud.version@'
-mybatis:
-  type-aliases-package: com.usoftchina.smartschool.po
-  mapper-locations: classpath:mapper/*.xml
-auth:
-  public-key: auth/pub.key
-ribbon:
-  ReadTimeout: 10000
-  ConnectTimeout: 10000
-feign:
-  hystrix:
-    enabled: true
-hystrix:
-    command:
-        default:
-            execution:
-              timeout:
-                enabled: true
-              isolation:
-                    thread:
-                        timeoutInMilliseconds: 4000

BIN
applications/websocket/websocket-server/src/main/resources/auth/pub.key


+ 0 - 12
applications/websocket/websocket-server/src/main/resources/config/application-dev.yml

@@ -1,12 +0,0 @@
-eureka:
-  instance:
-    leaseRenewalIntervalInSeconds: 10
-    health-check-url-path: /actuator/health
-    status-page-url-path: /actuator/info
-    metadata-map:
-      user.name: ${spring.security.user.name}
-      user.password: ${spring.security.user.password}
-  client:
-    registryFetchIntervalSeconds: 5
-    serviceUrl:
-      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:9500/eureka/

+ 0 - 23
applications/websocket/websocket-server/src/main/resources/config/application-docker-cloud.yml

@@ -1,23 +0,0 @@
-eureka:
-  instance:
-    hostname: smartschool-websocket-server
-    prefer-ip-address: false
-  client:
-    serviceUrl:
-      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@smartschool-eureka-server:9500/eureka/
-spring:
-  redis:
-    host: 172.27.0.13
-    port: 6379
-    password: select111***
-  datasource:
-      driver-class-name: com.mysql.jdbc.Driver
-      url: jdbc:mysql://172.27.0.15:3306/smart_campus?characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
-      username: root
-      password: select111***
-      hikari:
-        minimum-idle: 5
-        maximum-pool-size: 50
-        idle-timeout: 30000
-        max-lifetime: 1800000
-        connection-timeout: 30000

+ 0 - 15
applications/websocket/websocket-server/src/main/resources/config/application-docker-prod.yml

@@ -1,15 +0,0 @@
-eureka:
-  instance:
-    hostname: smartschool-websocket-server
-    prefer-ip-address: false
-  client:
-    serviceUrl:
-      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@smartschool-eureka-server:9500/eureka/
-spring:
-  datasource:
-    url: jdbc:mysql://10.10.100.166:3306/smart_campus?characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
-    username: root
-    password: select111***
-  redis:
-    host: 10.10.100.166
-    port: 6379

+ 0 - 12
applications/websocket/websocket-server/src/main/resources/config/application-docker-test.yml

@@ -1,12 +0,0 @@
-eureka:
-  instance:
-    hostname: saas-sale-server-test
-    prefer-ip-address: false
-  client:
-    serviceUrl:
-      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
-spring:
-  rabbitmq:
-    virtual-host: test
-server:
-  port: 8835

+ 0 - 10
applications/websocket/websocket-server/src/main/resources/config/application-docker.yml

@@ -1,10 +0,0 @@
-eureka:
-  instance:
-    hostname: saas-sale-server
-    prefer-ip-address: false
-  client:
-    serviceUrl:
-      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
-spring:
-  rabbitmq:
-    virtual-host: docker

+ 0 - 125
applications/websocket/websocket-server/src/main/resources/logback-spring.xml

@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration>
-    <include resource="org/springframework/boot/logging/logback/base.xml" />
-    <jmxConfigurator/>
-
-    <!--
-    %m
-    输出代码中指定的消息
-    %p
-    输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
-    %r
-    输出自应用启动到输出该log信息耗费的毫秒数
-    %c
-    输出所属的类目,通常就是所在类的全名
-    %t
-    输出产生该日志事件的线程名
-    %n
-    输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
-    %d
-    输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},
-    输出类似:2002年10月18日 22:10:28,921
-    %l
-    输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
-    -->
-
-    <springProperty scope="context" name="log.path" source="logging.path" defaultValue="/var/log/smartschool/websocket-server"/>
-    <springProperty scope="context" name="spring.application.name" source="spring.application.name" defaultValue="websocket-server"/>
-    <springProperty scope="context" name="spring.profiles.active" source="spring.profiles.active" defaultValue="dev"/>
-    <springProperty scope="context" name="common-pattern" source="logging.common-pattern" defaultValue="%d{yyyy-MM-dd HH:mm:ss.SSS}:[%5p] [%t:%r] [%C{1}:%M:%L] --> %m%n"/>
-    <springProperty scope="context" name="log.level.console" source="logging.level.console" defaultValue="INFO"/>
-    <springProperty scope="context" name="log.destination" source="logging.destination" defaultValue="10.1.81.1:5000"/>
-
-    <contextName>${spring.application.name}-${spring.profiles.active}-logback</contextName>
-
-    <appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
-        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>${log.level.console}</level>
-        </filter>
-        <encoder>
-            <pattern>${common-pattern}</pattern>
-        </encoder>
-    </appender>
-
-    <appender name="ROOT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${log.path}/root.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${log.path}/%d{yyyy-MM}/root-%d{yyyy-MM-dd}-%i.log.gz</fileNamePattern>
-            <maxFileSize>128MB</maxFileSize>
-            <maxHistory>7</maxHistory>
-            <totalSizeCap>20GB</totalSizeCap>
-        </rollingPolicy>
-        <encoder>
-            <pattern>${common-pattern}</pattern>
-        </encoder>
-    </appender>
-
-    <!-- Appender to log in a JSON format -->
-    <appender name="JSON_APPENDER" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
-        <destination>${log.destination}</destination>
-        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
-            <providers>
-                <pattern>
-                    <pattern>
-                        {
-                        "severity": "%level",
-                        "service": "${spring.application.name:-}",
-                        "trace": "%X{X-B3-TraceId:-}",
-                        "span": "%X{X-B3-SpanId:-}",
-                        "parent": "%X{X-B3-ParentSpanId:-}",
-                        "exportable": "%X{X-Span-Export:-}",
-                        "pid": "${PID:-}",
-                        "thread": "%thread",
-                        "class": "%logger{40}",
-                        "rest": "%message"
-                        }
-                    </pattern>
-                </pattern>
-            </providers>
-        </encoder>
-    </appender>
-
-    <logger name="org.springframework" level="INFO"/>
-    <logger name="com.usoftchina.smartschool" level="INFO"/>
-
-    <springProfile name="dev">
-        <root level="INFO">
-            <appender-ref ref="CONSOLE_APPENDER"/>
-        </root>
-    </springProfile>
-
-    <springProfile name="test">
-        <root level="INFO">
-            <appender-ref ref="CONSOLE_APPENDER"/>
-            <appender-ref ref="ROOT_APPENDER"/>
-        </root>
-    </springProfile>
-
-    <springProfile name="docker">
-        <logger name="org.springframework" level="WARN"/>
-        <logger name="com.usoftchina.smartschool" level="WARN"/>
-        <root level="WARN">
-            <appender-ref ref="CONSOLE_APPENDER"/>
-            <appender-ref ref="JSON_APPENDER"/>
-        </root>
-    </springProfile>
-
-    <springProfile name="docker-test">
-        <logger name="org.springframework" level="WARN"/>
-        <logger name="com.usoftchina.smartschool" level="WARN"/>
-        <root level="WARN">
-            <appender-ref ref="CONSOLE_APPENDER"/>
-            <appender-ref ref="JSON_APPENDER"/>
-        </root>
-    </springProfile>
-
-    <springProfile name="docker-prod">
-        <logger name="org.springframework" level="WARN"/>
-        <logger name="com.usoftchina.smartschool" level="WARN"/>
-        <root level="WARN">
-            <appender-ref ref="CONSOLE_APPENDER"/>
-            <appender-ref ref="JSON_APPENDER"/>
-        </root>
-    </springProfile>
-
-</configuration>

+ 0 - 22
applications/websocket/websocket-server/src/main/resources/mapper/DeviceDOMapper.xml

@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.company.project.dao.DeviceDOMapper">
-  <resultMap id="BaseResultMap" type="com.usoftchina.smartschool.websocket.model.DeviceDO">
-    <!--
-      WARNING - @mbg.generated
-    -->
-    <id column="deviceId" jdbcType="INTEGER" property="deviceid" />
-    <result column="deviceName" jdbcType="VARCHAR" property="devicename" />
-    <result column="deviceModel" jdbcType="VARCHAR" property="devicemodel" />
-    <result column="serialNumber" jdbcType="VARCHAR" property="serialnumber" />
-    <result column="deviceIp" jdbcType="VARCHAR" property="deviceip" />
-    <result column="version" jdbcType="VARCHAR" property="version" />
-    <result column="deviceMac" jdbcType="VARCHAR" property="devicemac" />
-    <result column="deviceMaker" jdbcType="VARCHAR" property="devicemaker" />
-    <result column="secretkey" jdbcType="VARCHAR" property="secretkey" />
-    <result column="isAuthorized" jdbcType="INTEGER" property="isauthorized" />
-    <result column="isOnline" jdbcType="INTEGER" property="isonline" />
-    <result column="isAutomatic" jdbcType="INTEGER" property="isautomatic" />
-    <result column="schoolId" jdbcType="INTEGER" property="schoolid" />
-  </resultMap>
-</mapper>

+ 0 - 17
applications/websocket/websocket-server/src/main/resources/mapper/OutInRecordDOMapper.xml

@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.company.project.dao.OutInRecordDOMapper">
-  <resultMap id="BaseResultMap" type="com.usoftchina.smartschool.websocket.model.OutInRecordDO">
-    <!--
-      WARNING - @mbg.generated
-    -->
-    <id column="record_id" jdbcType="BIGINT" property="recordId" />
-    <result column="record_name" jdbcType="VARCHAR" property="recordName" />
-    <result column="out_date" jdbcType="TIMESTAMP" property="outDate" />
-    <result column="in_date" jdbcType="TIMESTAMP" property="inDate" />
-    <result column="record_details" jdbcType="VARCHAR" property="recordDetails" />
-    <result column="record_remarks" jdbcType="VARCHAR" property="recordRemarks" />
-    <result column="stu_id" jdbcType="BIGINT" property="stuId" />
-    <result column="school_id" jdbcType="BIGINT" property="schoolId" />
-  </resultMap>
-</mapper>

+ 0 - 23
applications/websocket/websocket-server/src/main/resources/mapper/StudentDOMapper.xml

@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.company.project.dao.StudentDOMapper">
-  <resultMap id="BaseResultMap" type="com.usoftchina.smartschool.websocket.model.StudentDO">
-    <!--
-      WARNING - @mbg.generated
-    -->
-    <id column="stu_id" jdbcType="BIGINT" property="stuId" />
-    <result column="stu_number" jdbcType="VARCHAR" property="stuNumber" />
-    <result column="stu_name" jdbcType="VARCHAR" property="stuName" />
-    <result column="stu_enroll_date" jdbcType="DATE" property="stuEnrollDate" />
-    <result column="stu_graduate_date" jdbcType="DATE" property="stuGraduateDate" />
-    <result column="stu_birthday" jdbcType="DATE" property="stuBirthday" />
-    <result column="stu_age" jdbcType="INTEGER" property="stuAge" />
-    <result column="stu_sex" jdbcType="INTEGER" property="stuSex" />
-    <result column="stu_address" jdbcType="VARCHAR" property="stuAddress" />
-    <result column="stu_photo" jdbcType="VARCHAR" property="stuPhoto" />
-    <result column="stu_status" jdbcType="INTEGER" property="stuStatus" />
-    <result column="stu_remarks" jdbcType="VARCHAR" property="stuRemarks" />
-    <result column="clazz_id" jdbcType="BIGINT" property="clazzId" />
-    <result column="school_id" jdbcType="BIGINT" property="schoolId" />
-  </resultMap>
-</mapper>

+ 4 - 0
applications/wechat/wechat-api/pom.xml

@@ -20,5 +20,9 @@
             <groupId>com.usoftchina.smartschool</groupId>
             <artifactId>core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.usoftchina.smartschool</groupId>
+            <artifactId>wechat-dto</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 14 - 0
applications/wechat/wechat-api/src/main/java/com/usoftchina/smartschool/wechat/api/WechatApi.java

@@ -0,0 +1,14 @@
+package com.usoftchina.smartschool.wechat.api;
+
+import com.usoftchina.smartschool.base.Result;
+import com.usoftchina.smartschool.wechat.dto.MessageInfoDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+@FeignClient(name = "wechat-server")
+public interface WechatApi {
+
+    @PostMapping("/send/Message")
+    public Result sendMsg(@RequestBody MessageInfoDTO info);
+}

+ 7 - 6
applications/wechat/wechat-auth/src/main/java/com/usoftchina/smartschool/wechat/auth/interceptor/OpenApiAuthInterceptor.java

@@ -18,6 +18,7 @@ import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.net.URLDecoder;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -62,18 +63,18 @@ public class OpenApiAuthInterceptor extends HandlerInterceptorAdapter{
                 logger.info("servletPath:{}", servletPath);
 
                 boolean check = false;
+                schoolName = URLDecoder.decode(schoolName);
                 //获取密钥
                 Result<SysSchoolDTO> result = schoolApi.find(schoolName);
-                if (result.isSuccess()) {
+                if (result.isSuccess() && null != result.getData()) {
                     String localSign = null;
                     //TransfersContextHodler.setB2bCompanyId(companyResult.getData().getId());
                     localSign = result.getData().getSchool_accesssecret() == null ? HmacUtils.encode(urlMessage) :
                                 HmacUtils.encode(urlMessage, result.getData().getSchool_accesssecret());
-
-                    if (servletPath.indexOf("b2b") > -1) {
-                        logger.info("自己生产的sign:{}-----传入的sign:{}", localSign, sign);
-                        check = sign.equals(localSign);
-                    }
+                    //if (servletPath.indexOf("") > -1) {
+                    logger.info("自己生产的sign:{}-----传入的sign:{}", localSign, sign);
+                    check = sign.equals(localSign);
+                  //  }
 
                     if (check) {
                         String timestamp = request.getParameter(openApiConfig.getTimestampParam());

+ 33 - 0
applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/config/RabbitConfig.java

@@ -2,6 +2,13 @@ package com.usoftchina.smartschool.wechat.config;
 
 
 import org.springframework.amqp.core.*;
+import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.core.RabbitAdmin;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.amqp.support.converter.ContentTypeDelegatingMessageConverter;
+import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
+import org.springframework.amqp.support.converter.MessageConverter;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -70,4 +77,30 @@ public class RabbitConfig {
     Binding delayBind(Queue createDelayQueue, TopicExchange createExchange) {
         return BindingBuilder.bind(createDelayQueue).to(createExchange).with(delayKey);
     }
+
+    @Bean
+    public RabbitAdmin rabbitTemplate(ConnectionFactory connectionFactory) {
+        return new RabbitAdmin(connectionFactory);
+    }
+
+    @Bean
+    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, MessageConverter messageConverter) {
+        RabbitTemplate template = new RabbitTemplate(connectionFactory);
+        template.setMessageConverter(messageConverter);
+        return template;
+    }
+
+    @Bean
+    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory, MessageConverter messageConverter) {
+        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
+        factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
+        factory.setConnectionFactory(connectionFactory);
+        factory.setMessageConverter(messageConverter);
+        return factory;
+    }
+
+    @Bean
+    public MessageConverter messageConverter() {
+        return new ContentTypeDelegatingMessageConverter(new Jackson2JsonMessageConverter());
+    }
 }

+ 21 - 3
applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/controller/WxPushController.java

@@ -1,6 +1,8 @@
 package com.usoftchina.smartschool.wechat.controller;
 
 import com.usoftchina.smartschool.wechat.auth.annotation.IgnoreOpenApiAuth;
+import com.usoftchina.smartschool.wechat.dto.MessageInfoDTO;
+import com.usoftchina.smartschool.wechat.service.SendService;
 import com.usoftchina.smartschool.wechat.service.WxPushService;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,12 +16,28 @@ import org.springframework.web.bind.annotation.*;
 @IgnoreOpenApiAuth
 public class WxPushController {
 
-    @Autowired
-    private WxPushService wxPushService;
+  /*  @Autowired
+    private WxPushService wxPushService;*/
+  @Autowired
+  private SendService sendService;
 
     @GetMapping("/wxpush")
     public String wxPush(String appId, String secret, String openid, String templateId, String title, String keyword1, String keyword2, String keyword3, String keyword4, String remark, String url){
-        return wxPushService.wxPush(appId, secret,openid, templateId, title, keyword1, keyword2, keyword3, keyword4, remark, url);
+        MessageInfoDTO msg = new MessageInfoDTO();
+        msg.setAppId(appId);
+        msg.setSecret(secret);
+        msg.setTouser(openid);
+        msg.setTemplateId(templateId);
+        msg.setTitle(title);
+        msg.setKeyword2(keyword1);
+        msg.setKeyword2(keyword2);
+        msg.setKeyword3(keyword3);
+        msg.setKeyword4(keyword4);
+        msg.setRemark(remark);
+        msg.setUrl(url);
+        sendService.sendMessage(msg);
+        return "已推送";
+        //return wxPushService.wxPush(appId, secret,openid, templateId, title, keyword1, keyword2, keyword3, keyword4, remark, url);
     };
 
 }

+ 2 - 0
applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/po/MessageInfo.java

@@ -47,6 +47,8 @@ public class MessageInfo implements Serializable {
 
     private String keyword5;
 
+    private String keyword6;
+
     private String remark;
 
     private String url;

+ 1 - 0
applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/service/SendService.java

@@ -143,6 +143,7 @@ public class SendService {
         messagelog.setMessage(JsonUtils.toJsonString(msgPackage));
         messagelog.setMsgId(messageId);
         messagelog.setStatus(Status.FAILURE.getDisplay());
+        messagelog.setRetry(msgPackage.getRetry());
         brokerMessageLogMapper.insertSelective(messagelog);
     }
 }

+ 13 - 2
applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/service/impl/WxPushServiceImpl.java

@@ -2,12 +2,14 @@ package com.usoftchina.smartschool.wechat.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.github.kevinsawicki.http.HttpRequest;
+import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
 import com.usoftchina.smartschool.base.Result;
 import com.usoftchina.smartschool.wechat.po.MessageInfo;
 import com.usoftchina.smartschool.wechat.service.WxPushService;
 import com.usoftchina.smartschool.wechat.wxUtils.ObjectUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
@@ -44,13 +46,13 @@ public class WxPushServiceImpl implements WxPushService{
                 params.put("grant_type", "client_credential");
                 HttpRequest httpRequest= HttpRequest.get(WECHATURL + "/token",params,false);
                 String content=httpRequest.body();
-                System.err.println("getWxAccessTokenContent======"+content);
+                logger.info("context={}", content);
                 String token= JSON.parseObject(content).getString("access_token");
                 HttpRequest hRequest=  HttpRequest.post(WECHATURL + "/message/template/send?access_token="+token)
                         .header("Content-Type", "application/json")
                         .send(json.getBytes());
                 String result= hRequest.body();
-                System.err.println("WxPushResult======="+result);
+                logger.info("result={}", result);
 
 			/*if(JSON.parseObject(result).getInteger("errcode")==0&&JSON.parseObject(result).getString("errmsg").equals("ok")){
 				return "推送成功!";
@@ -86,6 +88,7 @@ public class WxPushServiceImpl implements WxPushService{
                     + "\"keyword2\":{\"value\":\"" + info.getKeyword2() + "\",\"color\":\"#173177\"},"
                     + "\"keyword3\":{\"value\":\"" + info.getKeyword3() + "\",\"color\":\"#173177\"},"
                     + "\"keyword4\":{\"value\":\"" + info.getKeyword4() + "\",\"color\":\"#173177\"},"
+                    + "\"keyword5\":{\"value\":\"" + info.getKeyword5() + "\",\"color\":\"#173177\"},"
                     + "\"remark\":{\"value\":\"" + info.getRemark() + "\",\"color\":\"#173177\"}}}";
 
             HashMap<String, Object> params=new HashMap<>();
@@ -94,12 +97,20 @@ public class WxPushServiceImpl implements WxPushService{
             params.put("grant_type", "client_credential");
             HttpRequest httpRequest= HttpRequest.get(WECHATURL + "/token",params,false);
             String content=httpRequest.body();
+            logger.info("context={}", content);
             String token= JSON.parseObject(content).getString("access_token");
             HttpRequest hRequest=  HttpRequest.post(WECHATURL + "/message/template/send?access_token="+token)
                     .header("Content-Type", "application/json")
                     .send(json.getBytes());
             String result= hRequest.body();
             logger.info("result={}", result);
+            /**
+              result={"errcode":0,"errmsg":"ok","msgid":716510485381890048}
+             */
+           /* if ("ok".equals(JSON.parseObject(result).getString("errmsg"))) {
+                return Result.success();
+            }
+            return Result.error(JSON.parseObject(result).getString("errmsg"));*/
             if (result.equals("error")) {
                 Result.error(result);
             }

+ 5 - 2
applications/wechat/wechat-server/src/main/resources/application.yml

@@ -99,5 +99,8 @@ school:
     delayQueue: school-delay-queue
     activeKey: school-active-key.*
     delayKey: school-delay-key.*
-    delayTime: 20000
-    retry: 2
+    delayTime: 60000
+    retry: 2
+mybatis:
+  type-aliases-package: com.usoftchina.smartschool.wechat.po
+  mapper-locations: classpath:mapper/*.xml

+ 9 - 1
applications/wechat/wechat-server/src/main/resources/config/application-docker-cloud.yml

@@ -20,4 +20,12 @@ spring:
         maximum-pool-size: 50
         idle-timeout: 30000
         max-lifetime: 1800000
-        connection-timeout: 30000
+        connection-timeout: 30000
+  rabbitmq:
+      host: 127.0.0.1
+      port: 5672
+      virtual-host: school
+      username: saas
+      password: select123***
+      publisher-returns: true
+      publisher-confirms: true

+ 64 - 0
applications/wechat/wechat-server/src/test/java/com/usoftchina/smartschool/wechat/Test_service.java

@@ -0,0 +1,64 @@
+package com.usoftchina.smartschool.wechat;
+
+import com.usoftchina.smartschool.utils.BeanMapper;
+import com.usoftchina.smartschool.utils.DateUtils;
+import com.usoftchina.smartschool.wechat.dto.MessageInfoDTO;
+import com.usoftchina.smartschool.wechat.po.MessageInfo;
+import com.usoftchina.smartschool.wechat.po.MessagePackage;
+import com.usoftchina.smartschool.wechat.service.SendService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author: guq
+ * @create: 2019-03-11 16:41
+ **/
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class Test_service {
+
+    @Autowired
+    private SendService sendService;
+
+    final static String TEMPLATEID = "JcWRReMGC1odqcaAgXDfETv9sWwVbWLXc9KLEn_Nve0";
+
+    @Test
+    public void testa_sendMsg() {
+        MessageInfoDTO msg = new MessageInfoDTO();
+        msg.setAppId("wxbc1f8607137d3b8a");
+        msg.setSecret("cadf13c4e21c2c122cb2341b341e5c22");
+        msg.setTouser("o8lZ9uGFfByUEGOk-xMwmajgmjt4");
+        msg.setTemplateId(TEMPLATEID);
+        msg.setTitle("出入校提醒");
+        msg.setKeyword1("小明");
+        msg.setKeyword2(DateUtils.format());
+        msg.setRemark("您好! 你的孩子: 小明已经进入校园");
+        sendService.sendMessage(msg);
+    }
+
+    @Test
+    public void testb_sendDelayMsg() {
+        MessageInfo msg = new MessageInfo();
+        msg.setAppId("wxbc1f8607137d3b8a");
+        msg.setSecret("cadf13c4e21c2c122cb2341b341e5c22");
+        msg.setTouser("o8lZ9uGFfByUEGOk-xMwmajgmjt4");
+        msg.setTemplateId(TEMPLATEID);
+        msg.setTitle("出入校提醒");
+        msg.setKeyword1("小明123");
+        msg.setKeyword2(DateUtils.format());
+        msg.setRemark("您好! 你的孩子: 小明123已经进入校园");
+        List<MessageInfo> data = new ArrayList<MessageInfo>();
+        data.add(msg);
+        MessagePackage mp = new MessagePackage(data);
+        mp.setRetry(1);
+        sendService.sendDelayMessage(mp);
+    }
+
+
+}

+ 0 - 6
base-servers/gateway-server/src/main/resources/application.yml

@@ -32,12 +32,6 @@ spring:
         - Path=/api/school/**
         filters:
         - RewritePath=/api/school/(?<segment>.*), /$\{segment}
-      - id: WEBSOCKET-SERVER
-        uri: lb://WEBSOCKET-SERVER
-        predicates:
-        - Path=/api/websocket/**
-        filters:
-        - RewritePath=/api/websocket/(?<segment>.*), /$\{segment}
       - id: WECHAT-SERVER
         uri: lb://WECHAT-SERVER
         predicates:

+ 5 - 0
framework/core/src/main/java/com/usoftchina/smartschool/utils/DateUtils.java

@@ -31,6 +31,11 @@ public class DateUtils {
         return sdf.format(date);
     }
 
+    public static String format() {
+        Date date = new Date();
+        return YMD_HMS.format(date);
+    }
+
     public static Date parse(String date, String f) {
         if (date == null) {
             return new Date();

+ 2 - 0
frontend/pc-web/app/util/BaseUtil.js

@@ -14,6 +14,7 @@ Ext.define('school.util.BaseUtil', {
             var panel = mainTab.query('[tabId="' + id + '"]')[0];
             if (!panel) {
                 panel = Ext.create('school.view.core.tab.Panel', {
+                    tooltip: title,
                     tabId: id,
                     title: title,
                     viewType: xtype,
@@ -52,6 +53,7 @@ Ext.define('school.util.BaseUtil', {
             var currentTab = this.getCurrentTab();
             currentTab.tabId = id;
             currentTab.setTitle(title);
+            currentTab.setTooltip(title);
         },
 
         /**

+ 21 - 2
frontend/pc-web/app/view/Interaction/homework/List.js

@@ -68,12 +68,31 @@ Ext.define('school.view.interaction.homework.List', {
                     fields: ['name', 'value'],
                     data: [
                         ['已发布', 1],
-                        ['未发布', 0]
+                        ['未发布', 2]
                     ]
                 }),
                 minChars: 0,
-                queryMode: 'local'
+                queryMode: 'local',
+                listeners: {
+                    select: function (combo, record, e) {
+                        let condatefield = combo.up('form').down('condatefield')
+                        if (record.data.value == 1) {
+                            condatefield.setHidden(false);
+                            condatefield.ignore = false;
+                        } else {
+                            condatefield.setHidden(true);
+                            condatefield.ignore = true;
+                        }
+                    },
+                    clear: function (combo) {
+                        let condatefield = combo.up('form').down('condatefield')
+                        condatefield.setHidden(true);
+                        condatefield.ignore = true;
+                    }
+                }
             }, {
+                hidden: true,
+                ignore: true,
                 xtype: 'condatefield',
                 name: 'publish_date',
                 fieldLabel: '发布时间',

+ 7 - 0
frontend/pc-web/app/view/Interaction/homework/Release.js

@@ -135,6 +135,13 @@ Ext.define('school.view.interaction.homework.Release', {
                 bind: {
                     hidden: '{!showDeleteBtn || !task_id || task_status == 1}'
                 },
+            }, {
+                apply: true,
+                text: '保存',
+                bind: {
+                    hidden: '{!showSaveBtn || task_status == 1}',
+                    disabled: '{!base.valid}'
+                }
             }],
             toolBtns: [{
                 xtype: 'button',

+ 40 - 18
frontend/pc-web/app/view/Interaction/notice/List.js

@@ -9,13 +9,13 @@ Ext.define('school.view.interaction.notice.List', {
     dataUrl: '/api/school/notice/list',
     _title: '学校通知',
 
-    initComponent: function() {
+    initComponent: function () {
         var me = this;
         Ext.apply(this, {
             searchField: [{
                 xtype: 'textfield',
                 name: 'keyword',
-                fieldLabel:'关键字',
+                fieldLabel: '关键字',
                 getCondition: function (value) {
                     return ' (notify_title like\'%' + value + '%\' or notify_details like \'%' + value + '%\') ';
                 }
@@ -33,17 +33,39 @@ Ext.define('school.view.interaction.notice.List', {
                 clearable: true,
                 store: Ext.create('Ext.data.ArrayStore', {
                     fields: ['name', 'value'],
-                    data: [['已发布', 1], ['未发布', 2]]
+                    data: [
+                        ['已发布', 1],
+                        ['未发布', 2]
+                    ]
                 }),
                 minChars: 0,
-                queryMode: 'local'
+                queryMode: 'local',
+                listeners: {
+                    select: function (combo, record, e) {
+                        let condatefield = combo.up('form').down('condatefield')
+                        if (record.data.value == 1) {
+                            condatefield.setHidden(false);
+                            condatefield.ignore = false;
+                        } else {
+                            condatefield.setHidden(true);
+                            condatefield.ignore = true;
+                        }
+                    },
+                    clear: function (combo) {
+                        let condatefield = combo.up('form').down('condatefield')
+                        condatefield.setHidden(true);
+                        condatefield.ignore = true;
+                    }
+                }
             }, {
+                hidden: true,
+                ignore: true,
                 xtype: 'condatefield',
                 name: 'publish_date',
                 fieldLabel: '发布时间',
                 columnWidth: 0.5
             }],
-        
+
             gridConfig: {
                 addTitle: '学校通知',
                 addXtype: 'interaction-notice-schoolnotice',
@@ -56,33 +78,33 @@ Ext.define('school.view.interaction.notice.List', {
                 totalProperty: 'data.total',
                 actionColumn: [],
                 selModel: {
-                    checkOnly:true,
-                    type:'checkboxmodel',
-                    mode : "MULTI" ,
-                    ignoreRightMouseSelection : false
+                    checkOnly: true,
+                    type: 'checkboxmodel',
+                    mode: "MULTI",
+                    ignoreRightMouseSelection: false
                 },
                 hiddenTools: false,
                 toolBtns: [{
                     xtype: 'button',
                     text: '新增',
-                    handler: function() {
+                    handler: function () {
                         school.util.BaseUtil.openTab('interaction-notice-schoolnotice', '新增学校通知', 'interaction-notice-schoolnotice-add');
                     }
                 }, {
                     xtype: 'button',
                     text: '删除',
-                    handler: function() {
+                    handler: function () {
                         let grid = this.up('grid'),
-                        selectedRecords = grid.getSelection();
+                            selectedRecords = grid.getSelection();
                         let data;
 
-                        data = selectedRecords.map(function(r) {
+                        data = selectedRecords.map(function (r) {
                             return {
                                 id: r.get('notify_id')
                             };
                         });
 
-                        if(data.length == 0) {
+                        if (data.length == 0) {
                             school.util.BaseUtil.showErrorToast('请先勾选需要删除的记录');
                             return;
                         }
@@ -95,17 +117,17 @@ Ext.define('school.view.interaction.notice.List', {
                             params: JSON.stringify({
                                 baseDTOs: data
                             })
-                        }).then(function(res) {
+                        }).then(function (res) {
                             grid.setLoading(false);
                             school.util.BaseUtil.showSuccessToast('成功删除' + data.length + '条记录');
                             grid.store.loadPage(grid.store.currentPage);
-                        }).catch(function(e) {
+                        }).catch(function (e) {
                             grid.setLoading(false);
                             school.util.BaseUtil.showErrorToast('删除失败: ' + e.message);
                         });
                     }
                 }],
-                columns : [{
+                columns: [{
                     text: 'id',
                     dataIndex: 'notify_id',
                     hidden: true
@@ -134,7 +156,7 @@ Ext.define('school.view.interaction.notice.List', {
                     text: '发布状态',
                     dataIndex: 'notify_status',
                     width: 120,
-                    renderer: function(v) {
+                    renderer: function (v) {
                         return !!v ? (v == 2 ? '未发布' : '已发布') : '未发布'
                     }
                 }, {

+ 2 - 2
frontend/pc-web/app/view/Interaction/score/Detail.js

@@ -9,7 +9,7 @@ Ext.define('school.view.interaction.score.Detail', {
     _idField: 'si_id',
     _codeField: null,
 
-    // _readUrl: 'http://10.1.80.47:9520/api/school/score/read',
+    // _readUrl: 'http://10.1.80.36:9520/api/school/score/read',
     _readUrl: '/api/school/score/read',
     // _saveUrl: 'http://10.1.80.47:9520/api/school/score/save',
     // _saveUrl: '/api/sale/sss/update',
@@ -71,7 +71,7 @@ Ext.define('school.view.interaction.score.Detail', {
                 rowViewModel: {},
                 columns: [{
                     text: '学生编号',
-                    dataIndex: 'sd_id'
+                    dataIndex: 'sd_stuNumber'
                 }, {
                     text: '姓名',
                     dataIndex: 'sd_stu'

+ 1 - 1
frontend/pc-web/app/view/Interaction/score/DetailController.js

@@ -9,7 +9,7 @@ Ext.define('school.view.interaction.score.DetailController', {
         form.initId = id;
         school.util.FormUtil.loadData(form).then(function(data) {
             var newId = form.xtype + '-' + id;
-            var newTitle = form._title + '(' + data.main.si_id + ')';
+            var newTitle = form._title + '(' + data.main.si_examtitle + ')';
     
             school.util.BaseUtil.refreshTabTitle(newId, newTitle);
         });

+ 3 - 2
frontend/pc-web/app/view/Interaction/score/List.js

@@ -66,7 +66,7 @@ Ext.define('school.view.interaction.score.List', {
                 addTitle: '成绩录入',
                 addXtype: 'interaction-score-detail',
                 idField: 'si_id',
-                codeField: 'si_id',
+                codeField: 'si_examtitle',
                 detailField: '',
                 dataUrl: me.dataUrl,
                 rootProperty: 'data.list',
@@ -137,7 +137,8 @@ Ext.define('school.view.interaction.score.List', {
                     hidden: true
                 }, {
                     text: '考试标题',
-                    dataIndex: 'si_examtitle'
+                    dataIndex: 'si_examtitle',
+                    width: 200
                 }, {
                     text: '考试时间',
                     dataIndex: 'si_examdate',

+ 17 - 5
frontend/pc-web/app/view/Interaction/timetable/Detail.js

@@ -350,11 +350,23 @@ Ext.define('school.view.interaction.timetable.Detail', {
                     hidden: true
                 }]
             }],
-            // toolBtns: [{
-            //     xtype: 'button',
-            //     text: '发布',
-            //     handler: 'onPublish'
-            // }]
+            toolBtns: [{
+                xtype: 'button',
+                text: '启用',
+                hidden: true,
+                bind: {
+                    hidden: '{!id || status == 1}'
+                },
+                handler: 'onPublish'
+            }, {
+                xtype: 'button',
+                text: '禁用',
+                hidden: true,
+                bind: {
+                    hidden: '{!id || status == 0}'
+                },
+                handler: 'onRePublish'
+            }]
         });
         this.callParent();
     },

+ 47 - 1
frontend/pc-web/app/view/Interaction/timetable/DetailController.js

@@ -9,9 +9,55 @@ Ext.define('school.view.interaction.timetable.DetailController', {
         form.initId = id;
         school.util.FormUtil.loadData(form).then(function(data) {
             var newId = form.xtype + '-' + data.main.id;
-            var newTitle = form._title + '(' + data.main.id + ')';
+            var newTitle = form._title + '(' + data.main.name + ')';
     
             school.util.BaseUtil.refreshTabTitle(newId, newTitle);
         });
     },
+
+    onPublish: function() {
+        let me = this,
+        view = me.getView(),
+        viewModel = me.getViewModel(),
+        id = viewModel.data.id;
+        view.setLoading(true);
+        school.util.BaseUtil.request({
+            // url: 'http://10.1.80.180:9520/api/school/curriculum/publish/' + id,
+            url: '/api/school/curriculum/publish/' + id,
+            method: 'POST'
+        })
+        .then(function() {
+            view.setLoading(false);
+            school.util.BaseUtil.showSuccessToast('启用成功');
+            viewModel.set('status', 1);
+            me.refresh();
+        })
+        .catch(function(e) {
+            view.setLoading(false);
+            school.util.BaseUtil.showErrorToast('启用失败: ' + e.message);
+        });
+    },
+
+    onRePublish: function() {
+        let me = this,
+        view = me.getView(),
+        viewModel = me.getViewModel(),
+        id = viewModel.data.id;
+        view.setLoading(true);
+        school.util.BaseUtil.request({
+            // url: 'http://10.1.80.180:9520/api/school/curriculum/republish/' + id,
+            url: '/api/school/curriculum/republish/' + id,
+            method: 'POST'
+        })
+        .then(function() {
+            view.setLoading(false);
+            school.util.BaseUtil.showSuccessToast('禁用成功');
+            viewModel.set('status', 0);
+            me.refresh();
+        })
+        .catch(function(e) {
+            view.setLoading(false);
+            school.util.BaseUtil.showErrorToast('禁用失败: ' + e.message);
+        });
+    },
 });

+ 3 - 2
frontend/pc-web/app/view/Interaction/timetable/List.js

@@ -106,7 +106,7 @@ Ext.define('school.view.interaction.timetable.List', {
                 addTitle: '课程表',
                 addXtype: 'interaction-timetable-detail',
                 idField: 'id',
-                codeField: 'id',
+                codeField: 'name',
                 detailField: 'name',
                 dataUrl: me.dataUrl,
                 caller: null,
@@ -156,7 +156,8 @@ Ext.define('school.view.interaction.timetable.List', {
 
                         grid.setLoading(true);
                         school.util.BaseUtil.request({
-                            url: '/api/school/curriculum/deleteDetail',
+                            // url: 'http://10.1.80.36:9520/api/school/curriculum/batchDelete',
+                            url: '/api/school/curriculum/batchDelete',
                             method: 'POST',
                             params: JSON.stringify({
                                 baseDTOs: data

+ 4 - 1
frontend/pc-web/app/view/basic/class/ClassDetail.js

@@ -81,7 +81,10 @@ Ext.define('school.view.basic.class.ClassDetail', {
                     dataIndex: 'stu_name'
                 }, {
                     text: '性别',
-                    dataIndex: 'stu_sex'
+                    dataIndex: 'stu_sex',
+                    renderer: function(v, m , r) {
+                        return v == 1 ? '男' : (v == 0 ? '女' : '未知')
+                    }
                 }, {
                     text: '出生日期',
                     dataIndex: 'stu_birthday',

+ 2 - 2
frontend/pc-web/app/view/basic/staff/StaffDetail.js

@@ -113,13 +113,13 @@ Ext.define('school.view.basic.staff.StaffDetail', {
                 xtype: 'textfield',
                 name: 'teacher_major',
                 fieldLabel: '专业',
+                editable: true,
                 allowBlank: false
             }, {
                 xtype: 'textfield',
                 name: 'teacher_address',
                 fieldLabel: '现居住址',
-                columnWidth: 0.5,
-                allowBlank: false
+                columnWidth: 0.5
             }, {
                 name: "detailGridField",
                 xtype: "detailGridField",

+ 2 - 1
frontend/pc-web/app/view/basic/student/StudentDetail.js

@@ -15,7 +15,7 @@ Ext.define('school.view.basic.student.StudentDetail', {
     _auditdateField: null,
     // _readUrl: 'http://10.1.80.47:9560/student/read',
     _readUrl: '/api/school/student/read',
-    // _saveUrl: 'http://10.1.80.47:9560/student/save',
+    // _saveUrl: 'http://10.1.80.36:9520/api/school/student/save',
     _saveUrl: '/api/school/student/save',
     // _deleteUrl: 'http://10.1.80.47:9560/student/delete',
     _deleteUrl: '/api/school/student/delete',
@@ -167,6 +167,7 @@ Ext.define('school.view.basic.student.StudentDetail', {
                 }, {
                     text: '联系电话',
                     dataIndex: 'pa_phone',
+                    width: 180,
                     editor: {
                         xtype: 'numberfield'
                     }

+ 2 - 1
frontend/pc-web/app/view/core/base/BasePanel.js

@@ -130,11 +130,12 @@ Ext.define('school.view.core.base.BasePanel', {
         for(let i = 0; i < items.length; i++) {
             var item = items[i];
             var field = item.name,
+            ignore = item.ignore,
             func = item.getCondition,
             value = item.value,
             condition;
 
-            if(value !== undefined && value !== null && value !== ''){
+            if(!ignore && value !== undefined && value !== null && value !== ''){
                 if(typeof func == 'function') {
                     condition = {
                         type: 'condition',

Some files were not shown because too many files changed in this diff