Bladeren bron

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

FANGLH 7 jaren geleden
bovenliggende
commit
dcc7a013ab
100 gewijzigde bestanden met toevoegingen van 3300 en 416 verwijderingen
  1. 155 0
      applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/CurriculumDTO.java
  2. 148 0
      applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/CurriculumDetailDTO.java
  3. 31 0
      applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/CurriculumFormDTO.java
  4. 153 0
      applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/CurriculumListDTO.java
  5. 6 4
      applications/school/school-server/pom.xml
  6. 9 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/SchoolApplication.java
  7. 16 4
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/controller/ClassController.java
  8. 60 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/controller/CurriculumController.java
  9. 3 6
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/controller/SchoolController.java
  10. 18 8
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/controller/StudentController.java
  11. 18 8
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/controller/TeacherController.java
  12. 5 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/ClassService.java
  13. 55 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/CurriculumService.java
  14. 5 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/StudentService.java
  15. 5 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/TeacherService.java
  16. 71 4
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/ClassServiceImpl.java
  17. 260 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/CurriculumServiceImpl.java
  18. 25 4
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/StudentServiceImpl.java
  19. 25 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/TeacherServiceImpl.java
  20. 31 5
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/controller/HomeWorkController.java
  21. 31 7
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/controller/NoticeController.java
  22. 15 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/HomeWorkService.java
  23. 14 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/NoticeService.java
  24. 68 4
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/HomeWorkServiceImpl.java
  25. 68 4
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/NoticeServiceImpl.java
  26. 84 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/controller/MessageLogController.java
  27. 20 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/service/MessageLogService.java
  28. 93 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/service/impl/MessageLogServiceImpl.java
  29. 2 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/exception/BizExceptionCode.java
  30. 59 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/interceptor/AuthRestInterceptor.java
  31. 85 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/CurriculumMapper.java
  32. 6 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/HomeWorkMapper.java
  33. 24 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/MessagelogMapper.java
  34. 5 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/NoticeMapper.java
  35. 3 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysClazzMapper.java
  36. 4 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysStudentMapper.java
  37. 2 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysTeacherMapper.java
  38. 93 12
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/Messagelog.java
  39. 49 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/Operation.java
  40. 40 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/OutInRecord.java
  41. 10 5
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxClazzCurriculumServiceImpl.java
  42. 7 6
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxOutInRecordServiceImpl.java
  43. 12 12
      applications/school/school-server/src/main/resources/application.yml
  44. 23 0
      applications/school/school-server/src/main/resources/config/application-docker-cloud.yml
  45. 239 0
      applications/school/school-server/src/main/resources/mapper/CurriculumMapper.xml
  46. 16 0
      applications/school/school-server/src/main/resources/mapper/HomeWorkMapper.xml
  47. 180 0
      applications/school/school-server/src/main/resources/mapper/MessagelogMapper.xml
  48. 16 0
      applications/school/school-server/src/main/resources/mapper/NotifyMapper.xml
  49. 7 2
      applications/school/school-server/src/main/resources/mapper/OutInRecordMapper.xml
  50. 4 0
      applications/school/school-server/src/main/resources/mapper/SysClazzMapper.xml
  51. 8 0
      applications/school/school-server/src/main/resources/mapper/SysStudentMapper.xml
  52. 4 0
      applications/school/school-server/src/main/resources/mapper/SysTeacherMapper.xml
  53. 71 0
      applications/school/school-server/src/test/java/com/usoftchina/smartschool/school/service/CurriculumServiceTest.java
  54. 23 0
      applications/websocket/websocket-server/src/main/resources/config/application-docker-cloud.yml
  55. 0 6
      applications/websocket/websocket-server/src/main/resources/config/application-docker-prod.yml
  56. 23 0
      applications/wechat/wechat-server/src/main/resources/config/application-docker-cloud.yml
  57. 0 6
      applications/wechat/wechat-server/src/main/resources/config/application-docker-prod.yml
  58. 3 0
      base-servers/account/account-api/src/main/java/com/usoftchina/smartschool/account/api/AccountApi.java
  59. 9 0
      base-servers/account/account-dto/src/main/java/com/usoftchina/smartschool/account/dto/AccountDTO.java
  60. 12 1
      base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/controller/AccountController.java
  61. 7 0
      base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/mapper/AccountMapper.java
  62. 7 0
      base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/service/AccountService.java
  63. 5 0
      base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/service/impl/AccountServiceImpl.java
  64. 23 0
      base-servers/account/account-server/src/main/resources/config/application-docker-cloud.yml
  65. 4 0
      base-servers/account/account-server/src/main/resources/mapper/AccountMapper.xml
  66. 0 4
      base-servers/auth/auth-dto/pom.xml
  67. 4 1
      base-servers/auth/auth-dto/src/main/java/com/usoftchina/smartschool/auth/jwt/JwtHelper.java
  68. 11 1
      base-servers/auth/auth-dto/src/main/java/com/usoftchina/smartschool/auth/jwt/JwtInfo.java
  69. 0 4
      base-servers/auth/auth-server/pom.xml
  70. 4 1
      base-servers/auth/auth-server/src/main/java/com/usoftchina/smartschool/auth/controller/AuthController.java
  71. 15 15
      base-servers/auth/auth-server/src/main/resources/application.yml
  72. 23 0
      base-servers/auth/auth-server/src/main/resources/config/application-docker-cloud.yml
  73. 3 0
      base-servers/eureka-server/src/main/resources/config/application-docker-cloud.yml
  74. 1 1
      base-servers/gateway-server/src/main/java/com/usoftchina/smartschool/gateway/config/AuthFilter.java
  75. 4 4
      base-servers/gateway-server/src/main/java/com/usoftchina/smartschool/gateway/interceptor/ServiceFeignInterceptor.java
  76. 0 12
      base-servers/gateway-server/src/main/resources/application.yml
  77. 7 0
      base-servers/gateway-server/src/main/resources/config/application-docker-cloud.yml
  78. 23 0
      base-servers/sms/sms-server/src/main/resources/config/application-docker-cloud.yml
  79. 1 1
      base-servers/sms/sms-server/src/main/resources/config/application-docker-dev.yml
  80. 1 1
      base-servers/sms/sms-server/src/main/resources/config/application-docker-prod.yml
  81. 32 1
      framework/test-starter/pom.xml
  82. 4 3
      frontend/pc-web/app/util/FormUtil.js
  83. 19 15
      frontend/pc-web/app/view/Interaction/access/List.js
  84. 157 0
      frontend/pc-web/app/view/Interaction/homework/List.js
  85. 17 59
      frontend/pc-web/app/view/Interaction/homework/Release.js
  86. 21 0
      frontend/pc-web/app/view/Interaction/homework/ReleaseController.js
  87. 7 29
      frontend/pc-web/app/view/Interaction/mailbox/List.js
  88. 157 0
      frontend/pc-web/app/view/Interaction/notice/List.js
  89. 16 61
      frontend/pc-web/app/view/Interaction/notice/SchoolNotice.js
  90. 21 0
      frontend/pc-web/app/view/Interaction/notice/SchoolNoticeController.js
  91. 24 36
      frontend/pc-web/app/view/Interaction/timetable/List.js
  92. 10 7
      frontend/pc-web/app/view/basic/staff/StaffDetail.js
  93. 8 0
      frontend/pc-web/app/view/basic/staff/StaffDetailController.js
  94. 41 13
      frontend/pc-web/app/view/basic/staff/StaffList.js
  95. 4 4
      frontend/pc-web/app/view/basic/student/StudentDetail.js
  96. 42 15
      frontend/pc-web/app/view/basic/student/StudentList.js
  97. 15 0
      frontend/pc-web/app/view/core/base/BasePanel.js
  98. 8 0
      frontend/pc-web/app/view/core/base/BasePanel.scss
  99. 19 11
      frontend/pc-web/app/view/core/form/FormPanelController.js
  100. 4 4
      frontend/pc-web/resources/json/navigation.json

+ 155 - 0
applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/CurriculumDTO.java

@@ -0,0 +1,155 @@
+package com.usoftchina.smartschool.school.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description 课程表主表DTO
+ * @Author chenwei
+ * @Date 2019/02/15
+ */
+public class CurriculumDTO implements Serializable {
+
+    /**
+     * id
+     */
+    private Long id;
+    /**
+     * 编号
+     */
+    private String code;
+    /**
+     * 学期名称
+     */
+    private String termName;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 学期开始日期
+     */
+    private Date termStart;
+    /**
+     * 学期结束日期
+     */
+    private Date termEnd;
+    /**
+     * 周 数
+     */
+    private Long weekNum;
+    /**
+     * 创建人名称
+     */
+    private String creatorName;
+    /**
+     * 创建日期
+     */
+    private Date createTime;
+    /**
+     * 班级Id
+     */
+    private String clazzId;
+    /**
+     * 年级
+     */
+    private String gradeId;
+
+    public String getGradeId() {
+        return gradeId;
+    }
+
+    public void setGradeId(String gradeId) {
+        this.gradeId = gradeId;
+    }
+
+    private String status;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getClazzId() {
+        return clazzId;
+    }
+
+    public void setClazzId(String clazzId) {
+        this.clazzId = clazzId;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getTermName() {
+        return termName;
+    }
+
+    public void setTermName(String termName) {
+        this.termName = termName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Date getTermStart() {
+        return termStart;
+    }
+
+    public void setTermStart(Date termStart) {
+        this.termStart = termStart;
+    }
+
+    public Date getTermEnd() {
+        return termEnd;
+    }
+
+    public void setTermEnd(Date termEnd) {
+        this.termEnd = termEnd;
+    }
+
+    public Long getWeekNum() {
+        return weekNum;
+    }
+
+    public void setWeekNum(Long weekNum) {
+        this.weekNum = weekNum;
+    }
+
+    public String getCreatorName() {
+        return creatorName;
+    }
+
+    public void setCreatorName(String creatorName) {
+        this.creatorName = creatorName;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 148 - 0
applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/CurriculumDetailDTO.java

@@ -0,0 +1,148 @@
+package com.usoftchina.smartschool.school.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description 课程表明细DTO
+ * @Author chenwei
+ * @Date 2019/02/15
+ */
+public class CurriculumDetailDTO implements Serializable {
+
+    private Long id;
+    private int lessons;
+    private String mon;
+    private String tues;
+    private String wed;
+    private String thur;
+    private String fri;
+    private String sat;
+    private String startTime;
+    private String endTime;
+    private int status;
+    private String remarks;
+    private int clazzId;
+    private int schoolId;
+    private Long mId;
+
+    public Long getmId() {
+        return mId;
+    }
+
+    public void setmId(Long mId) {
+        this.mId = mId;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public int getLessons() {
+        return lessons;
+    }
+
+    public void setLessons(int lessons) {
+        this.lessons = lessons;
+    }
+
+    public String getMon() {
+        return mon;
+    }
+
+    public void setMon(String mon) {
+        this.mon = mon;
+    }
+
+    public String getTues() {
+        return tues;
+    }
+
+    public void setTues(String tues) {
+        this.tues = tues;
+    }
+
+    public String getWed() {
+        return wed;
+    }
+
+    public void setWed(String wed) {
+        this.wed = wed;
+    }
+
+    public String getThur() {
+        return thur;
+    }
+
+    public void setThur(String thur) {
+        this.thur = thur;
+    }
+
+    public String getFri() {
+        return fri;
+    }
+
+    public void setFri(String fri) {
+        this.fri = fri;
+    }
+
+    public String getSat() {
+        return sat;
+    }
+
+    public void setSat(String sat) {
+        this.sat = sat;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public int getStatus() {
+        return status;
+    }
+
+    public void setStatus(int status) {
+        this.status = status;
+    }
+
+    public String getRemarks() {
+        return remarks;
+    }
+
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+
+    public int getClazzId() {
+        return clazzId;
+    }
+
+    public void setClazzId(int clazzId) {
+        this.clazzId = clazzId;
+    }
+
+    public int getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(int schoolId) {
+        this.schoolId = schoolId;
+    }
+}

+ 31 - 0
applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/CurriculumFormDTO.java

@@ -0,0 +1,31 @@
+package com.usoftchina.smartschool.school.dto;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description 课程表主从表数据
+ * @Author chenwei
+ * @Date 2019/02/15
+ */
+public class CurriculumFormDTO implements Serializable {
+
+    private CurriculumDTO main;
+    private List<CurriculumDetailDTO> items;
+
+    public CurriculumDTO getMain() {
+        return main;
+    }
+
+    public void setMain(CurriculumDTO main) {
+        this.main = main;
+    }
+
+    public List<CurriculumDetailDTO> getItems() {
+        return items;
+    }
+
+    public void setItems(List<CurriculumDetailDTO> items) {
+        this.items = items;
+    }
+}

+ 153 - 0
applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/dto/CurriculumListDTO.java

@@ -0,0 +1,153 @@
+package com.usoftchina.smartschool.school.dto;
+
+import java.io.Serializable;
+
+/**
+ * @Description 课程表列表DTO
+ * @Author chenwei
+ * @Date 2019/02/15
+ */
+public class CurriculumListDTO implements Serializable {
+
+    private String id;
+    /**
+     * 学校名称
+     */
+    private String schoolName;
+    /**
+     * 学校ID
+     */
+    private String schoolId;
+    /**
+     * 年级
+     */
+    private String gradeName;
+    /**
+     * 年级ID
+     */
+    private String gradeId;
+    /**
+     * 班级
+     */
+    private String clazzName;
+    /**
+     * 班级ID
+     */
+    private String clazzId;
+    /**
+     * 使用状态, 1:使用   2:草稿
+     */
+    private String status;
+    /**
+     * 学期名称
+     */
+    private String termName;
+    /**
+     * 课表名称
+     */
+    private String name;
+    /**
+     * 学期开始
+     */
+    private String termStart;
+    /**
+     * 学期结束
+     */
+    private String termEnd;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getTermName() {
+        return termName;
+    }
+
+    public void setTermName(String termName) {
+        this.termName = termName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getTermStart() {
+        return termStart;
+    }
+
+    public void setTermStart(String termStart) {
+        this.termStart = termStart;
+    }
+
+    public String getTermEnd() {
+        return termEnd;
+    }
+
+    public void setTermEnd(String termEnd) {
+        this.termEnd = termEnd;
+    }
+
+    public String getSchoolName() {
+        return schoolName;
+    }
+
+    public void setSchoolName(String schoolName) {
+        this.schoolName = schoolName;
+    }
+
+    public String getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(String schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public String getGradeName() {
+        return gradeName;
+    }
+
+    public void setGradeName(String gradeName) {
+        this.gradeName = gradeName;
+    }
+
+    public String getGradeId() {
+        return gradeId;
+    }
+
+    public void setGradeId(String gradeId) {
+        this.gradeId = gradeId;
+    }
+
+    public String getClazzName() {
+        return clazzName;
+    }
+
+    public void setClazzName(String clazzName) {
+        this.clazzName = clazzName;
+    }
+
+    public String getClazzId() {
+        return clazzId;
+    }
+
+    public void setClazzId(String clazzId) {
+        this.clazzId = clazzId;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}

+ 6 - 4
applications/school/school-server/pom.xml

@@ -44,10 +44,7 @@
             <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>
@@ -116,6 +113,11 @@
             <artifactId>json-lib</artifactId>
             <classifier>jdk15</classifier>
         </dependency>
+      <dependency>
+        <groupId>com.usoftchina.smartschool</groupId>
+        <artifactId>auth-dto</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+      </dependency>
     </dependencies>
 
     <build>

+ 9 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/SchoolApplication.java

@@ -1,13 +1,14 @@
 package com.usoftchina.smartschool.school;
 
+import com.usoftchina.smartschool.school.interceptor.AuthRestInterceptor;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
-import org.springframework.context.annotation.ComponentScan;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
 /**
@@ -23,6 +24,7 @@ public class SchoolApplication extends WebMvcConfigurerAdapter{
     public static void main(String[] args) {
         SpringApplication.run(SchoolApplication.class, args);
     }
+
     @Override
     public void addCorsMappings(CorsRegistry registry) {
 
@@ -32,4 +34,10 @@ public class SchoolApplication extends WebMvcConfigurerAdapter{
                 .allowedOrigins("*")
                 .allowedMethods("*");
     }
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry){
+        registry.addInterceptor(new AuthRestInterceptor()).addPathPatterns("/**");
+        super.addInterceptors(registry);
+    }
 }

+ 16 - 4
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/controller/ClassController.java

@@ -2,11 +2,10 @@ package com.usoftchina.smartschool.school.basic.controller;
 
 import com.usoftchina.smartschool.base.Result;
 import com.usoftchina.smartschool.school.basic.service.ClassService;
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.po.ClassForm;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author: guq
@@ -19,9 +18,22 @@ public class ClassController {
     @Autowired
     private ClassService classService;
 
-    @RequestMapping("/read/{id}")
+    @GetMapping("/read/{id}")
     public Result getClass(@PathVariable("id") Long id) {
         ClassForm classForm = classService.getFormdata(id);
         return Result.success(classForm);
     }
+
+    @PostMapping("/save")
+    public Result getFormData(@RequestBody ClassForm form) {
+        DocBaseDTO formData = classService.saveFormData(form);
+        return Result.success(formData);
+    }
+
+    @PostMapping("/delete/{id}")
+    public Result delete(@PathVariable("id") Long id) {
+        classService.delete(id);
+        return Result.success();
+    }
+
 }

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

@@ -0,0 +1,60 @@
+package com.usoftchina.smartschool.school.basic.controller;
+
+import com.github.pagehelper.PageInfo;
+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.CurriculumFormDTO;
+import com.usoftchina.smartschool.school.dto.CurriculumListDTO;
+import com.usoftchina.smartschool.school.dto.ListReqDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Description 课程表
+ * @Author chenwei
+ * @Date 2019/02/15
+ */
+@RestController
+@RequestMapping("/curriculum")
+public class CurriculumController {
+
+    @Autowired
+    private CurriculumService curriculumService;
+
+    @GetMapping("/list")
+    public Result list(@PageDefault PageRequest page, ListReqDTO listReqDTO){
+        PageInfo<CurriculumListDTO> pageInfo = curriculumService.selectAll(page, listReqDTO);
+        return Result.success(pageInfo);
+    }
+
+    @GetMapping("/read/{id}")
+    public Result read(@PathVariable("id") Long id){
+        return Result.success(curriculumService.read(id));
+    }
+
+    @PostMapping("/save")
+    public Result save(@RequestBody CurriculumFormDTO curriculumFormDTO){
+        return Result.success(curriculumService.save(curriculumFormDTO));
+    }
+
+    @PostMapping("/delete/{id}")
+    public Result delete(@PathVariable("id") Long id){
+        curriculumService.delete(id);
+        return Result.success();
+    }
+
+    @PostMapping("/deleteDetail/{id}")
+    public Result deleteDetail(@PathVariable("id") Long id){
+        curriculumService.deleteDetail(id);
+        return Result.success();
+    }
+
+    //导入保存至列表
+    @PostMapping("/saveToFormal")
+    public Result saveToFormal(Integer id, boolean update) {
+        curriculumService.saveToFormal(id, update);
+        return Result.success();
+    }
+}

+ 3 - 6
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/controller/SchoolController.java

@@ -4,10 +4,7 @@ import com.usoftchina.smartschool.base.Result;
 import com.usoftchina.smartschool.school.basic.service.SchoolService;
 import com.usoftchina.smartschool.school.po.SysSchool;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * 学校信息
@@ -21,13 +18,13 @@ public class SchoolController {
     @Autowired
     private SchoolService schoolService;
 
-    @RequestMapping("/read/{id}")
+    @GetMapping("/read/{id}")
     public Result getFormData(@PathVariable("id") Long id) {
         SysSchool school = schoolService.getFormData(id);
         return Result.success(school);
     }
 
-    @RequestMapping("/save")
+    @PostMapping("/save")
     public Result saveFormData(@RequestBody SysSchool school) {
         schoolService.saveFormData(school);
         return Result.success();

+ 18 - 8
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/controller/StudentController.java

@@ -6,16 +6,14 @@ 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.StudentService;
+import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
 import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.dto.ListReqDTO;
 import com.usoftchina.smartschool.school.po.StudentForm;
 import com.usoftchina.smartschool.school.po.SysSchool;
 import com.usoftchina.smartschool.school.po.SysStudent;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author: guq
@@ -28,28 +26,40 @@ public class StudentController {
     @Autowired
     private StudentService studentService;
 
-    @RequestMapping("/list")
+    @GetMapping("/list")
     public Result getList(@PageDefault PageRequest page, ListReqDTO listReqDTO) {
         PageInfo<SysStudent> student = studentService.getListData(page, listReqDTO);
         return Result.success(student);
     }
 
-    @RequestMapping("/read/{id}")
+    @GetMapping("/read/{id}")
     public Result getFormData(@PathVariable("id") Long id) {
          StudentForm formData = studentService.getFormData(id);
         return Result.success(formData);
     }
 
-    @RequestMapping("/save")
+    @PostMapping("/save")
     public Result getFormData(@RequestBody StudentForm form) {
         DocBaseDTO formData = studentService.saveFormData(form);
         return Result.success(formData);
     }
 
     //导入保存至列表
-    @RequestMapping("/saveToFormal")
+    @PostMapping("/saveToFormal")
     public Result saveToFormal(Integer id, boolean update) {
         studentService.saveToFormal(id, update);
         return Result.success();
     }
+
+    @PostMapping("/delete/{id}")
+    public Result delete(@PathVariable("id") Long id) {
+        studentService.delete(id);
+        return Result.success();
+    }
+
+    @PostMapping("/batchDelete")
+    public Result batchDelete(@RequestBody BatchDealBaseDTO baseDTOs) {
+        studentService.batchDelete(baseDTOs);
+        return Result.success();
+    }
 }

+ 18 - 8
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/controller/TeacherController.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.TeacherService;
+import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
 import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.dto.ListReqDTO;
 import com.usoftchina.smartschool.school.po.StudentForm;
@@ -12,10 +13,7 @@ import com.usoftchina.smartschool.school.po.SysStudent;
 import com.usoftchina.smartschool.school.po.SysTeacher;
 import com.usoftchina.smartschool.school.po.TeacherForm;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author: guq
@@ -28,28 +26,40 @@ public class TeacherController {
     @Autowired
     private TeacherService teacherService;
 
-    @RequestMapping("/list")
+    @GetMapping("/list")
     public Result getList(@PageDefault PageRequest page, ListReqDTO listReqDTO) {
         PageInfo<SysTeacher> teacher = teacherService.getListData(page, listReqDTO);
         return Result.success(teacher);
     }
 
-    @RequestMapping("/read/{id}")
+    @GetMapping("/read/{id}")
     public Result getFormData(@PathVariable("id") Long id) {
         TeacherForm formData = teacherService.getFormData(id);
         return Result.success(formData);
     }
 
-    @RequestMapping("/save")
+    @PostMapping("/save")
     public Result getFormData(@RequestBody SysTeacher teacher) {
         DocBaseDTO formData = teacherService.saveFormData(teacher);
         return Result.success(formData);
     }
 
     //导入保存至列表
-    @RequestMapping("/saveToFormal")
+    @PostMapping("/saveToFormal")
     public Result saveToFormal(Integer id, boolean update) {
         teacherService.saveToFormal(id, update);
         return Result.success();
     }
+
+    @PostMapping("/delete/{id}")
+    public Result delete(@PathVariable("id") Long id) {
+        teacherService.delete(id);
+        return Result.success();
+    }
+
+    @PostMapping("/batchDelete")
+    public Result batchDelete(@RequestBody BatchDealBaseDTO baseDTOs) {
+        teacherService.batchDelete(baseDTOs);
+        return Result.success();
+    }
 }

+ 5 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/ClassService.java

@@ -1,7 +1,12 @@
 package com.usoftchina.smartschool.school.basic.service;
 
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.po.ClassForm;
 
 public interface ClassService {
     ClassForm getFormdata(Long id);
+
+    DocBaseDTO saveFormData(ClassForm form);
+
+    void delete(Long id);
 }

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

@@ -0,0 +1,55 @@
+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;
+
+/**
+ * @Author chenwei
+ * @Date 2019/02/15
+ */
+public interface CurriculumService {
+    /**
+     * 查询课表信息(列表)
+     * @param page
+     * @param listReqDTO
+     * @return
+     */
+    PageInfo<CurriculumListDTO> selectAll(PageRequest page, ListReqDTO listReqDTO);
+
+    /**
+     * 学校->年级->班 课程表
+     * @param id
+     * @return
+     */
+    CurriculumFormDTO read(Long id);
+
+    /**
+     * 新增/更新 课表
+     * @param curriculumFormDTO
+     * @return
+     */
+    DocBaseDTO save(CurriculumFormDTO curriculumFormDTO);
+
+    /**
+     * 删除学校->年级->班 课表
+     * @param id
+     */
+    void delete(Long id);
+
+    /**
+     * 删除课表明细
+     * @param id
+     */
+    void deleteDetail(Long id);
+
+    /**
+     * 导入保存至列表
+     * @param id
+     * @param update
+     */
+    void saveToFormal(Integer id, boolean update);
+}

+ 5 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/StudentService.java

@@ -2,6 +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.BatchDealBaseDTO;
 import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.dto.ListReqDTO;
 import com.usoftchina.smartschool.school.po.StudentForm;
@@ -15,4 +16,8 @@ public interface StudentService {
     DocBaseDTO saveFormData(StudentForm form);
 
     void saveToFormal(Integer id, boolean update);
+
+    void delete(Long id);
+
+    void batchDelete(BatchDealBaseDTO baseDTOs);
 }

+ 5 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/TeacherService.java

@@ -2,6 +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.BatchDealBaseDTO;
 import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.dto.ListReqDTO;
 import com.usoftchina.smartschool.school.po.SysTeacher;
@@ -15,4 +16,8 @@ public interface TeacherService {
     DocBaseDTO saveFormData(SysTeacher teacher);
 
     void saveToFormal(Integer id, boolean update);
+
+    void delete(Long id);
+
+    void batchDelete(BatchDealBaseDTO baseDTOs);
 }

+ 71 - 4
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/ClassServiceImpl.java

@@ -3,16 +3,16 @@ package com.usoftchina.smartschool.school.basic.service.impl;
 import com.usoftchina.smartschool.context.BaseContextHolder;
 import com.usoftchina.smartschool.exception.BizException;
 import com.usoftchina.smartschool.school.basic.service.ClassService;
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.exception.BizExceptionCode;
 import com.usoftchina.smartschool.school.mapper.SysClazzMapper;
 import com.usoftchina.smartschool.school.mapper.SysStudentMapper;
-import com.usoftchina.smartschool.school.po.ClassForm;
-import com.usoftchina.smartschool.school.po.SysClazz;
-import com.usoftchina.smartschool.school.po.SysStudent;
-import com.usoftchina.smartschool.school.po.TeacherDetail;
+import com.usoftchina.smartschool.school.po.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -43,4 +43,71 @@ public class ClassServiceImpl implements ClassService{
         cf.setItems2(teacherDetails);
         return cf;
     }
+
+    @Override
+    public DocBaseDTO saveFormData(ClassForm formdata) {
+        if (null == formdata || null == formdata.getMain()){
+            throw new BizException(BizExceptionCode.EMPTY_DATA);
+        }
+        SysClazz clazz = formdata.getMain();
+        List<SysStudent> students = formdata.getItems1();
+        Long id = clazz.getClazz_id();
+        Long school_id = BaseContextHolder.getSchoolId();
+        school_id = 1l;
+
+        //插入从表数据
+        List<SysStudent> insertDetails = new ArrayList<>();
+        //更新从表数据
+        List<SysStudent> updateDetails = new ArrayList<>();
+        //新增
+        if (StringUtils.isEmpty(id) || "0".equals(id.toString())) {
+            clazz.setClazz_status(1);
+            sysClazzMapper.insertSelective(clazz);
+            for (SysStudent student : students) {
+                student.setClazz_id(clazz.getClazz_id());
+                student.setStu_status(1);
+                student.setSchool_id(school_id);
+                sysStudentMapper.insertSelective(student);
+            }
+            return new DocBaseDTO(clazz.getClazz_id());
+        }
+        //更新
+        sysClazzMapper.updateByPrimaryKeySelective(clazz);
+        //更新明细
+        for (SysStudent detail : students) {
+            detail.setClazz_id(clazz.getClazz_id());
+            if (StringUtils.isEmpty(detail.getStu_id()) || "0".equals(detail.getStu_id().toString())) {
+                insertDetails.add(detail);
+            } else {
+                updateDetails.add(detail);
+            }
+        }
+        //插入从表
+        if (insertDetails.size() > 0) {
+            Long pr_id = null;
+            for (SysStudent item : insertDetails) {
+                item.setSchool_id(school_id);
+                sysStudentMapper.insertSelective(item);
+            }
+        }
+        //更新从表
+        if (updateDetails.size() > 0) {
+            for (SysStudent item : updateDetails) {
+                sysStudentMapper.updateByPrimaryKeySelective(item);
+            }
+        }
+        return new DocBaseDTO(clazz.getClazz_id());
+    }
+
+    @Override
+    public void delete(Long id) {
+        if (null == id || "0".equals(id)) {
+            return;
+        }
+        Integer count = sysStudentMapper.checkStu(id);
+        if (count > 0) {
+            throw new BizException(BizExceptionCode.EXISTS_STU);
+        }
+        sysClazzMapper.deleteByPrimaryKey(id);
+    }
 }

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

@@ -0,0 +1,260 @@
+package com.usoftchina.smartschool.school.basic.service.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.smartschool.context.BaseContextHolder;
+import com.usoftchina.smartschool.exception.BizException;
+import com.usoftchina.smartschool.page.PageRequest;
+import com.usoftchina.smartschool.school.basic.service.CurriculumService;
+import com.usoftchina.smartschool.school.common.service.MessageLogService;
+import com.usoftchina.smartschool.school.dto.*;
+import com.usoftchina.smartschool.school.exception.BizExceptionCode;
+import com.usoftchina.smartschool.school.mapper.CurriculumMapper;
+import com.usoftchina.smartschool.school.mapper.DataImportMapper;
+import com.usoftchina.smartschool.school.mapper.SysClazzMapper;
+import com.usoftchina.smartschool.school.mapper.SysGradeMapper;
+import com.usoftchina.smartschool.school.po.DataImportDetail;
+import com.usoftchina.smartschool.school.po.SubjectDO;
+import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
+import com.usoftchina.smartschool.school.wxschool.utils.StringUtils;
+import com.usoftchina.smartschool.utils.CollectionUtils;
+import com.usoftchina.smartschool.utils.JsonUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.Map.Entry;
+
+/**
+ * @Description 课程表
+ * @Author chenwei
+ * @Date 2019/02/15
+ */
+@Service
+public class CurriculumServiceImpl implements CurriculumService {
+
+    @Autowired
+    private CurriculumMapper curriculumMapper;
+    @Autowired
+    private DataImportMapper dataImportMapper;
+    @Autowired
+    private SysGradeMapper sysGradeMapper;
+    @Autowired
+    private SysClazzMapper sysClazzMapper;
+    @Autowired
+    private MessageLogService messageLogService;
+
+    private static final String CODE = "Curriculum";
+    private static final String NAME = "课程表";
+
+    @Override
+    public PageInfo<CurriculumListDTO> selectAll(PageRequest page, ListReqDTO listReqDTO) {
+        PageHelper.startPage(page.getNumber(), page.getSize());
+        //condition语句
+        String condition = listReqDTO.getFinalCondition();
+        if(condition == null){
+            condition = "1=1";
+        }
+        Long schoolId = BaseContextHolder.getSchoolId();
+        List<CurriculumListDTO> curriculumListDTO = curriculumMapper.selectByCondition(condition, schoolId);
+        PageInfo<CurriculumListDTO> pageInfo = new PageInfo<CurriculumListDTO>(curriculumListDTO);
+        return pageInfo;
+    }
+
+    @Override
+    public CurriculumFormDTO read(Long id) {
+        CurriculumFormDTO curriculumFormDTO = new CurriculumFormDTO();
+        curriculumFormDTO.setMain(curriculumMapper.selectMain(id));
+        List<CurriculumDetailDTO> curriculumDetailDTOList = curriculumMapper.selectItems(id);
+        List<SubjectDO> subjectDOList = curriculumMapper.selectSubject(BaseContextHolder.getSchoolId());
+        for (SubjectDO subjectDO : subjectDOList){
+            for (CurriculumDetailDTO curriculumDetailDTO : curriculumDetailDTOList){
+                convertToChinese(curriculumDetailDTO, subjectDO);
+            }
+        }
+        curriculumFormDTO.setItems(curriculumDetailDTOList);
+        return curriculumFormDTO;
+    }
+
+    /**
+     * 课程表ID转中文
+     * @param curriculumDetailDTO
+     * @param subjectDO
+     */
+    private void convertToChinese(CurriculumDetailDTO curriculumDetailDTO, SubjectDO subjectDO) {
+        if (curriculumDetailDTO.getMon().equals(subjectDO.getSubjectId().toString())){
+            curriculumDetailDTO.setMon(subjectDO.getSubjectName());
+        }
+        if (curriculumDetailDTO.getTues().equals(subjectDO.getSubjectId().toString())){
+            curriculumDetailDTO.setTues(subjectDO.getSubjectName());
+        }
+        if (curriculumDetailDTO.getThur().equals(subjectDO.getSubjectId().toString())){
+            curriculumDetailDTO.setThur(subjectDO.getSubjectName());
+        }
+        if (curriculumDetailDTO.getWed().equals(subjectDO.getSubjectId().toString())){
+            curriculumDetailDTO.setWed(subjectDO.getSubjectName());
+        }
+        if (curriculumDetailDTO.getFri().equals(subjectDO.getSubjectId().toString())){
+            curriculumDetailDTO.setFri(subjectDO.getSubjectName());
+        }
+        if (curriculumDetailDTO.getSat().equals(subjectDO.getSubjectId().toString())){
+            curriculumDetailDTO.setSat(subjectDO.getSubjectName());
+        }
+    }
+
+    /**
+     * 课程表中文转ID
+     * @param curriculumDetailDTO
+     * @param subjectDO
+     */
+    private void convertToId(CurriculumDetailDTO curriculumDetailDTO, SubjectDO subjectDO) {
+        if (curriculumDetailDTO.getMon().equals(subjectDO.getSubjectName())){
+            curriculumDetailDTO.setMon(subjectDO.getSubjectId().toString());
+        }
+        if (curriculumDetailDTO.getTues().equals(subjectDO.getSubjectName())){
+            curriculumDetailDTO.setTues(subjectDO.getSubjectId().toString());
+        }
+        if (curriculumDetailDTO.getThur().equals(subjectDO.getSubjectName())){
+            curriculumDetailDTO.setThur(subjectDO.getSubjectId().toString());
+        }
+        if (curriculumDetailDTO.getWed().equals(subjectDO.getSubjectName())){
+            curriculumDetailDTO.setWed(subjectDO.getSubjectId().toString());
+        }
+        if (curriculumDetailDTO.getFri().equals(subjectDO.getSubjectName())){
+            curriculumDetailDTO.setFri(subjectDO.getSubjectId().toString());
+        }
+        if (curriculumDetailDTO.getSat().equals(subjectDO.getSubjectName())){
+            curriculumDetailDTO.setSat(subjectDO.getSubjectId().toString());
+        }
+    }
+
+    @Override
+    public DocBaseDTO save(CurriculumFormDTO curriculumFormDTO) {
+        if (ObjectUtils.isEmpty(curriculumFormDTO)) {
+            throw new BizException(BizExceptionCode.EMPTY_DATA);
+        }
+        CurriculumDTO main = curriculumFormDTO.getMain();
+        List<CurriculumDetailDTO> items = curriculumFormDTO.getItems();
+        //查询课表科目信息
+        List<SubjectDO> subjectDOList = curriculumMapper.selectSubject(BaseContextHolder.getSchoolId());
+        if (null != main.getId() && 0 != main.getId()){
+            Long gradeId = sysGradeMapper.selectByName(main.getGradeId(), BaseContextHolder.getSchoolId()).getGrade_id();
+            Long clazzId = sysClazzMapper.selectByName(main.getClazzId(), gradeId).getClazz_id();
+            main.setCreateTime(new Date());
+            main.setClazzId(String.valueOf(clazzId));
+            main.setGradeId(String.valueOf(gradeId));
+            main.setCreatorName(BaseContextHolder.getUserName());
+            //保存主表
+            curriculumMapper.insertSelective(main);
+            Long mId = main.getId();
+            //保存明细表
+            if (!CollectionUtils.isEmpty(items)) {
+                //修改明细数据为科目对应的ID
+                for (SubjectDO subjectDO : subjectDOList) {
+                    for (CurriculumDetailDTO curriculumDetailDTO : items) {
+                        curriculumDetailDTO.setmId(mId);
+                        convertToId(curriculumDetailDTO, subjectDO);
+                    }
+                }
+                curriculumMapper.insertDetailSelective(items);
+                messageLogService.save(new DocBaseDTO(mId, CODE, NAME));
+            }
+        }else {
+            //更新主表
+            curriculumMapper.updateByPrimaryKeySelective(main);
+            if (!CollectionUtils.isEmpty(items)) {
+                List<CurriculumDetailDTO> insertList = new ArrayList<CurriculumDetailDTO>();
+                List<CurriculumDetailDTO> updateList = new ArrayList<CurriculumDetailDTO>();
+                for (CurriculumDetailDTO curriculumDetailDTO : items){
+                    for (SubjectDO subjectDO : subjectDOList) {
+                        convertToId(curriculumDetailDTO, subjectDO);
+                        if (curriculumDetailDTO.getId() != null && 0 != curriculumDetailDTO.getId()) {
+                            updateList.add(curriculumDetailDTO);
+                        } else {
+                            insertList.add(curriculumDetailDTO);
+                        }
+                    }
+                }
+                if (insertList.size() > 0) {
+                    curriculumMapper.insertDetailSelective(insertList);
+                }
+                if (updateList.size() > 0) {
+                    curriculumMapper.updateDetailSelective(updateList);
+                }
+            }
+            messageLogService.save(new DocBaseDTO(main.getId(), CODE, NAME));
+        }
+        return new DocBaseDTO(main.getId(), CODE, NAME);
+    }
+
+    @Override
+    @Transactional
+    public void delete(Long id) {
+        curriculumMapper.deleteDetailByMainId(id);
+        curriculumMapper.delete(id);
+        messageLogService.delete(new DocBaseDTO(id, CODE, NAME));
+    }
+
+    @Override
+    public void deleteDetail(Long id) {
+        curriculumMapper.deleteDetail(id);
+        messageLogService.deleteDetail(new DocBaseDTO(id, CODE, NAME));
+    }
+
+    @Override
+    public void saveToFormal(Integer id, boolean update){
+        if (null == id || "0".equals(id)) {
+            return;
+        }
+        Long schoolId = BaseContextHolder.getSchoolId();
+        List<DataImportDetail> details = dataImportMapper.selectDataById(id);
+        List<CurriculumDTO> mainList = new ArrayList<CurriculumDTO>();
+        if (!CollectionUtils.isEmpty(details)){
+            Map<String, List<DataImportDetail>> datas = CollectionUtils.groupBy(details, DataImportDetail::getDd_codevalue);
+            Iterator<Entry<String, List<DataImportDetail>>> it = datas.entrySet().iterator();
+            while (it.hasNext()) {
+                Entry<String, List<DataImportDetail>> entry = it.next();
+                String key = entry.getKey();
+                //校验课程班级格式是否符合: 年级#班级
+                if (StringUtils.isEmpty(key) || !key.contains("#")){
+                    throw new BizException(BizExceptionCode.USELESS_DATA);
+                }
+                String[] keys = key.split("#");
+                String grade = keys[0], clazz = keys[1];
+                Long gradeId = sysGradeMapper.selectByName(grade, schoolId).getGrade_id();
+                Long clazzId = sysClazzMapper.selectByName(clazz, gradeId).getClazz_id();
+                List<DataImportDetail> dataImportDetailList = entry.getValue();
+                if (dataImportDetailList.size() > 0) {
+                    for (DataImportDetail dataImportDetail : dataImportDetailList) {
+                        DataImportDetail singleDataImportDetail = dataImportMapper.selectMainBycode(key, id, schoolId);
+                        CurriculumDTO curriculumDTO = JsonUtils.fromJsonString(singleDataImportDetail.getDd_maindata(), CurriculumDTO.class);
+                        List<CurriculumDetailDTO> curriculumDetailDTOList = JsonUtils.fromJsonArray(dataImportDetail.getDd_detaildata(), CurriculumDetailDTO.class);
+                        //更新数据,将中文转换成ID
+                        curriculumDTO.setStatus("1");
+                        curriculumDTO.setCreateTime(new Date());
+                        curriculumDTO.setClazzId(String.valueOf(clazzId));
+                        //插入主表数据
+                        curriculumMapper.insertSelective(curriculumDTO);
+                        Long mainId = curriculumDTO.getId();
+                        //插入明细表数据
+                        //1. 替换课程名称为ID
+                        List<SubjectDO> subjectDOList = curriculumMapper.selectSubject(schoolId);
+                        for (SubjectDO subjectDO : subjectDOList){
+                            curriculumDetailDTOList.forEach(curriculumDetailDTO -> {
+                                curriculumDetailDTO.setmId(mainId);
+                                curriculumDetailDTO.setStatus(1);
+                                curriculumDetailDTO.setSchoolId(schoolId.intValue());
+                                curriculumDetailDTO.setClazzId(clazzId.intValue());
+                                convertToId(curriculumDetailDTO, subjectDO);
+                            });
+                        }
+                        //2. 插入
+                        curriculumMapper.insertDetailSelective(curriculumDetailDTOList);
+                    }
+                }
+            }
+        }
+        dataImportMapper.updateDataImport(id);
+    }
+}

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

@@ -7,6 +7,7 @@ import com.usoftchina.smartschool.context.BaseContextHolder;
 import com.usoftchina.smartschool.exception.BizException;
 import com.usoftchina.smartschool.page.PageRequest;
 import com.usoftchina.smartschool.school.basic.service.StudentService;
+import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
 import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.dto.ListReqDTO;
 import com.usoftchina.smartschool.school.exception.BizExceptionCode;
@@ -109,7 +110,7 @@ public class StudentServiceImpl implements StudentService{
         //插入从表
         if (insertDetails.size() > 0) {
             Long pr_id = null;
-            for (SysParents item : items) {
+            for (SysParents item : insertDetails) {
                 item.setSchool_id(schoolid);
                 sysStudentMapper.insertparent(item);
                 pr_id = item.getParent_id();
@@ -119,12 +120,11 @@ public class StudentServiceImpl implements StudentService{
         //更新从表
         if (updateDetails.size() > 0) {
             sysStudentMapper.updateParents(updateDetails);
-            for (SysParents item : items) {
+            for (SysParents item : updateDetails) {
                 sysStudentMapper.updateRelation(item.getParent_id(), id, item.getPr_relation());
             }
         }
-
-        return null;
+        return new DocBaseDTO(id, null, "student");
     }
 
     @Override
@@ -207,4 +207,25 @@ public class StudentServiceImpl implements StudentService{
             dataImportMapper.updateDataImport(id);
         }
     }
+
+    @Override
+    public void delete(Long id) {
+        if (null == id || "0".equals(id)) {
+            return;
+        }
+        sysStudentMapper.deleteByPrimaryKey(id);
+        sysStudentMapper.deleteRelation(id);
+    }
+
+    @Override
+    public void batchDelete(BatchDealBaseDTO baseDTOs) {
+        if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
+                baseDTOs.getBaseDTOs().size() == 0) {
+            return;
+        }
+
+        for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
+            delete(base.getId());
+        }
+    }
 }

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

@@ -7,6 +7,7 @@ import com.usoftchina.smartschool.context.BaseContextHolder;
 import com.usoftchina.smartschool.exception.BizException;
 import com.usoftchina.smartschool.page.PageRequest;
 import com.usoftchina.smartschool.school.basic.service.TeacherService;
+import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
 import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.dto.ListReqDTO;
 import com.usoftchina.smartschool.school.exception.BizExceptionCode;
@@ -70,10 +71,11 @@ public class TeacherServiceImpl implements TeacherService{
             throw new BizException(BizExceptionCode.EMPTY_DATA);
         }
         Long school_id = BaseContextHolder.getSchoolId();
+        school_id = 1l;
         formdata.setSchool_id(school_id);
         formdata.setTeacher_status(1);
         //新增教师
-        if (StringUtils.isEmpty(formdata.getSchool_id()) || "0".equals(formdata.getSchool_id().toString())) {
+        if (StringUtils.isEmpty(formdata.getTeacher_id()) || "0".equals(formdata.getTeacher_id().toString())) {
             sysTeacherMapper.insertSelective(formdata);
 
         } else {
@@ -90,6 +92,7 @@ public class TeacherServiceImpl implements TeacherService{
             return;
         }
         Long schoolId = BaseContextHolder.getSchoolId();
+        schoolId = 1l;
         List<DataImportDetail> details = dataImportMapper.selectDataById(id);
         List<SysTeacher> teachers = new ArrayList<>();
         SysTeacher teacher =null;
@@ -126,4 +129,25 @@ public class TeacherServiceImpl implements TeacherService{
         }
     }
 
+    @Override
+    @Transactional
+    public void delete(Long id) {
+        if (null == id || "0".equals(id)) {
+            return;
+        }
+        sysTeacherMapper.deleteByPrimaryKey(id);
+        sysTeacherMapper.deleteRelation(id);
+    }
+
+    @Override
+    public void batchDelete(BatchDealBaseDTO baseDTOs) {
+        if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
+                baseDTOs.getBaseDTOs().size() == 0) {
+            return;
+        }
+
+        for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
+            delete(base.getId());
+        }
+    }
 }

+ 31 - 5
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/controller/HomeWorkController.java

@@ -1,13 +1,16 @@
 package com.usoftchina.smartschool.school.business.controller;
 
+import com.github.pagehelper.PageInfo;
 import com.usoftchina.smartschool.base.Result;
+import com.usoftchina.smartschool.page.PageDefault;
+import com.usoftchina.smartschool.page.PageRequest;
 import com.usoftchina.smartschool.school.business.service.HomeWorkService;
+import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
+import com.usoftchina.smartschool.school.dto.ListReqDTO;
 import com.usoftchina.smartschool.school.po.HomeWork;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author: guq
@@ -22,8 +25,31 @@ public class HomeWorkController {
 
     @PostMapping("/save")
     public Result save(@RequestBody HomeWork data) {
-        homeWorkService.save(data);
+        DocBaseDTO docBaseDTO = homeWorkService.save(data);
+        return Result.success(docBaseDTO);
+    }
+
+    @GetMapping("/list")
+    public Result getList(@PageDefault PageRequest page, ListReqDTO listReqDTO) {
+        PageInfo<HomeWork> record = homeWorkService.getListData(page, listReqDTO);
+        return Result.success(record);
+    }
+
+    @GetMapping("/read/{id}")
+    public Result getFormdata(@PathVariable("id") Long id) {
+        HomeWork formdata = homeWorkService.getFormdata(id);
+        return Result.success(formdata);
+    }
+
+    @PostMapping("/delete/{id}")
+    public Result delete(@PathVariable("id") Long id) {
+        homeWorkService.delete(id);
         return Result.success();
     }
 
+    @PostMapping("/batchDelete")
+    public Result batchDelete(@RequestBody BatchDealBaseDTO baseDTOs) {
+        homeWorkService.batchDelete(baseDTOs);
+        return Result.success();
+    }
 }

+ 31 - 7
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/controller/NoticeController.java

@@ -1,15 +1,17 @@
 package com.usoftchina.smartschool.school.business.controller;
 
+import com.github.pagehelper.PageInfo;
 import com.usoftchina.smartschool.base.Result;
+import com.usoftchina.smartschool.page.PageDefault;
+import com.usoftchina.smartschool.page.PageRequest;
 import com.usoftchina.smartschool.school.business.service.NoticeService;
+import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
 import com.usoftchina.smartschool.school.dto.DocBaseDTO;
+import com.usoftchina.smartschool.school.dto.ListReqDTO;
 import com.usoftchina.smartschool.school.po.Notify;
-import com.usoftchina.smartschool.school.po.NotifyDO;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
 
 /**
  * @author: guq
@@ -24,9 +26,31 @@ public class NoticeController {
 
     @PostMapping("/save")
     public Result save(@RequestBody Notify data) {
-        noticeService.save(data);
-        return Result.success();
+        DocBaseDTO baseDTO = noticeService.save(data);
+        return Result.success(baseDTO);
+    }
+
+    @GetMapping("/list")
+    public Result getList(@PageDefault PageRequest page, ListReqDTO listReqDTO) {
+        PageInfo<Notify> record = noticeService.getListData(page, listReqDTO);
+        return Result.success(record);
+    }
+
+    @GetMapping("/read/{id}")
+    public Result getFormdata(@PathVariable("id") Long id) {
+        Notify formdata = noticeService.getFormdata(id);
+        return Result.success(formdata);
     }
 
+    @PostMapping("/delete/{id}")
+    public Result delete(@PathVariable("id") Long id) {
+        noticeService.delete(id);
+        return Result.success();
+    }
 
+    @PostMapping("/batchDelete")
+    public Result batchDelete(@RequestBody BatchDealBaseDTO baseDTOs) {
+        noticeService.batchDelete(baseDTOs);
+        return Result.success();
+    }
 }

+ 15 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/HomeWorkService.java

@@ -1,7 +1,21 @@
 package com.usoftchina.smartschool.school.business.service;
 
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.smartschool.page.PageRequest;
+import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
+import com.usoftchina.smartschool.school.dto.ListReqDTO;
 import com.usoftchina.smartschool.school.po.HomeWork;
+import com.usoftchina.smartschool.school.po.Notify;
 
 public interface HomeWorkService {
-    void save(HomeWork data);
+    DocBaseDTO save(HomeWork data);
+
+    PageInfo<HomeWork> getListData(PageRequest page, ListReqDTO listReqDTO);
+
+    void delete(Long id);
+
+    void batchDelete(BatchDealBaseDTO baseDTOs);
+
+    HomeWork getFormdata(Long id);
 }

+ 14 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/NoticeService.java

@@ -1,8 +1,21 @@
 package com.usoftchina.smartschool.school.business.service;
 
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.smartschool.page.PageRequest;
+import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
+import com.usoftchina.smartschool.school.dto.ListReqDTO;
 import com.usoftchina.smartschool.school.po.Notify;
 
 public interface NoticeService {
 
-    void save(Notify data);
+    DocBaseDTO save(Notify data);
+
+    PageInfo<Notify> getListData(PageRequest page, ListReqDTO listReqDTO);
+
+    Notify getFormdata(Long id);
+
+    void delete(Long id);
+
+    void batchDelete(BatchDealBaseDTO baseDTOs);
 }

+ 68 - 4
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/HomeWorkServiceImpl.java

@@ -1,13 +1,22 @@
 package com.usoftchina.smartschool.school.business.service.impl;
 
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.smartschool.context.BaseContextHolder;
 import com.usoftchina.smartschool.exception.BizException;
+import com.usoftchina.smartschool.page.PageRequest;
 import com.usoftchina.smartschool.school.business.service.HomeWorkService;
+import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
+import com.usoftchina.smartschool.school.dto.ListReqDTO;
 import com.usoftchina.smartschool.school.exception.BizExceptionCode;
 import com.usoftchina.smartschool.school.mapper.HomeWorkMapper;
 import com.usoftchina.smartschool.school.po.HomeWork;
-import com.usoftchina.smartschool.school.wxschool.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.List;
 
 /**
  * @author: guq
@@ -20,10 +29,65 @@ public class HomeWorkServiceImpl implements HomeWorkService{
     private HomeWorkMapper homeWorkMapper;
 
     @Override
-    public void save(HomeWork formdata) {
-        if (StringUtils.isArray(formdata)){
+    public DocBaseDTO save(HomeWork formdata) {
+        if (StringUtils.isEmpty(formdata)){
             throw new BizException(BizExceptionCode.EMPTY_DATA);
         }
-        homeWorkMapper.insertSelective(formdata);
+        Long school_id = BaseContextHolder.getSchoolId();
+        school_id = 1l;
+        formdata.setSchool_id(school_id);
+        //新增
+        if (StringUtils.isEmpty(formdata.getTask_id()) || "0".equals(formdata.getTask_id().toString())) {
+            homeWorkMapper.insertSelective(formdata);
+
+        } else {
+            //更新
+            homeWorkMapper.updateByPrimaryKeySelective(formdata);
+        }
+        return new DocBaseDTO(formdata.getTask_id());
+    }
+
+    @Override
+    public PageInfo<HomeWork> getListData(PageRequest page, ListReqDTO listReqDTO) {
+        PageHelper.startPage(page.getNumber(), page.getSize());
+        Long schoolId = BaseContextHolder.getSchoolId();
+        schoolId = 1l;
+        //condition语句
+        String condition = listReqDTO.getFinalCondition();
+        if(condition == null){
+            condition = "1=1";
+        }
+        List<HomeWork> data = homeWorkMapper.selectByConditon(condition, schoolId);
+        PageInfo<HomeWork> list = new PageInfo<>(data);
+        return list;
+    }
+
+    @Override
+    public void delete(Long id) {
+        if (StringUtils.isEmpty(id) || "0".equals(id)) {
+            return;
+        }
+        homeWorkMapper.deleteByPrimaryKey(id);
+    }
+
+    @Override
+    public void batchDelete(BatchDealBaseDTO baseDTOs) {
+        if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
+                baseDTOs.getBaseDTOs().size() == 0) {
+            return;
+        }
+
+        for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
+            delete(base.getId());
+        }
+    }
+
+    @Override
+    public HomeWork getFormdata(Long id) {
+        if (StringUtils.isEmpty(id) || "0".equals(id)) {
+            throw new BizException(BizExceptionCode.USELESS_DATA);
+        }
+        HomeWork data = homeWorkMapper.selectByPrimaryKey(id);
+        return data;
     }
 }

+ 68 - 4
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/NoticeServiceImpl.java

@@ -1,14 +1,23 @@
 package com.usoftchina.smartschool.school.business.service.impl;
 
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.smartschool.context.BaseContextHolder;
 import com.usoftchina.smartschool.exception.BizException;
+import com.usoftchina.smartschool.page.PageRequest;
 import com.usoftchina.smartschool.school.business.service.NoticeService;
+import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
+import com.usoftchina.smartschool.school.dto.ListReqDTO;
 import com.usoftchina.smartschool.school.exception.BizExceptionCode;
 import com.usoftchina.smartschool.school.mapper.NoticeMapper;
 import com.usoftchina.smartschool.school.po.Notify;
-import com.usoftchina.smartschool.school.wxschool.utils.StringUtils;
+import com.usoftchina.smartschool.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @author: guq
  * @create: 2019-02-15 09:54
@@ -20,10 +29,65 @@ public class NoticeServiceImpl implements NoticeService{
     private NoticeMapper noticeMapper;
 
     @Override
-    public void save(Notify formdata) {
-        if (StringUtils.isArray(formdata)){
+    public DocBaseDTO save(Notify formdata) {
+        if (StringUtils.isEmpty(formdata)){
             throw new BizException(BizExceptionCode.EMPTY_DATA);
         }
-        noticeMapper.insertSelective(formdata);
+        Long school_id = BaseContextHolder.getSchoolId();
+        school_id = 1l;
+        formdata.setSchool_id(school_id);
+        //新增
+        if (StringUtils.isEmpty(formdata.getNotify_id()) || "0".equals(formdata.getNotify_id().toString())) {
+            noticeMapper.insertSelective(formdata);
+
+        } else {
+            //更新
+            noticeMapper.updateByPrimaryKeySelective(formdata);
+        }
+        return new DocBaseDTO(formdata.getNotify_id());
+    }
+
+    @Override
+    public PageInfo<Notify> getListData(PageRequest page, ListReqDTO listReqDTO) {
+        PageHelper.startPage(page.getNumber(), page.getSize());
+        Long schoolId = BaseContextHolder.getSchoolId();
+        schoolId = 1l;
+        //condition语句
+        String condition = listReqDTO.getFinalCondition();
+        if(condition == null){
+            condition = "1=1";
+        }
+        List<Notify> data = noticeMapper.selectByConditon(condition, schoolId);
+        PageInfo<Notify> list = new PageInfo<>(data);
+        return list;
+    }
+
+    @Override
+    public Notify getFormdata(Long id) {
+        if (StringUtils.isEmpty(id) || "0".equals(id)) {
+            throw new BizException(BizExceptionCode.USELESS_DATA);
+        }
+        Notify data = noticeMapper.selectByPrimaryKey(id);
+        return data;
+    }
+
+    @Override
+    public void delete(Long id) {
+        if (StringUtils.isEmpty(id) || "0".equals(id)) {
+            return;
+        }
+        noticeMapper.deleteByPrimaryKey(id);
+    }
+
+    @Override
+    public void batchDelete(BatchDealBaseDTO baseDTOs) {
+        if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
+                baseDTOs.getBaseDTOs().size() == 0) {
+            return;
+        }
+
+        for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
+            delete(base.getId());
+        }
     }
 }

+ 84 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/controller/MessageLogController.java

@@ -1,8 +1,92 @@
 package com.usoftchina.smartschool.school.common.controller;
 
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.smartschool.base.Result;
+import com.usoftchina.smartschool.page.PageRequest;
+import com.usoftchina.smartschool.school.common.service.MessageLogService;
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
+import com.usoftchina.smartschool.school.dto.ListReqDTO;
+import com.usoftchina.smartschool.school.po.Messagelog;
+import com.usoftchina.smartschool.school.po.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
 /**
  * @author: guq
  * @create: 2019-01-23 16:23
  **/
+@RestController
+@RequestMapping("/messagelog")
 public class MessageLogController {
+
+    @Autowired
+    private MessageLogService messageLogService;
+
+    /**
+     * @param page
+     * @param req
+     * @return
+     */
+    @GetMapping("/list")
+    public Result<PageInfo<Messagelog>> getListData(PageRequest page, ListReqDTO req) {
+        PageInfo<Messagelog> listData = messageLogService.getListData(page, req);
+        return Result.success(listData);
+    }
+
+    @RequestMapping("/save")
+    public void save(@RequestBody DocBaseDTO baseDTO) {
+        // Create the deferredResult and initiate a callback object, task, with it
+       /* DeferredResult<String> deferredResult = new DeferredResult<>();
+        CompletableFuture.supplyAsync(() -> messageLogService.save(baseDTO))
+                .whenCompleteAsync((result, throwable) -> deferredResult.setResult(result));
+        return deferredResult;*/
+        messageLogService.save(baseDTO);
+    }
+
+    @RequestMapping("/update")
+    public void update(@RequestBody DocBaseDTO baseDTO) {
+        // Create the deferredResult and initiate a callback object, task, with it
+       /* DeferredResult<String> deferredResult = new DeferredResult<>();
+        CompletableFuture.supplyAsync(() -> messageLogService.update(baseDTO))
+                .whenCompleteAsync((result, throwable) -> deferredResult.setResult(result));
+        return deferredResult;*/
+        messageLogService.update(baseDTO);
+    }
+
+    @RequestMapping("/delete")
+    public void delete(@RequestBody DocBaseDTO baseDTO) {
+        // Create the deferredResult and initiate a callback object, task, with it
+        /*DeferredResult<String> deferredResult = new DeferredResult<>();
+        CompletableFuture.supplyAsync(() -> messageLogService.delete(baseDTO))
+                .whenCompleteAsync((result, throwable) -> deferredResult.setResult(result));
+        return deferredResult;*/
+        messageLogService.delete(baseDTO);
+    }
+
+    @RequestMapping("/deleteDetail")
+    public void deleteDetail(@RequestBody DocBaseDTO baseDTO) {
+        // Create the deferredResult and initiate a callback object, task, with it
+        /*DeferredResult<String> deferredResult = new DeferredResult<>();
+        CompletableFuture.supplyAsync(() -> messageLogService.deleteDetail(baseDTO))
+                .whenCompleteAsync((result, throwable) -> deferredResult.setResult(result));
+        return deferredResult;*/
+        messageLogService.deleteDetail(baseDTO);
+    }
+
+    /**
+     * 自定义的Log
+     * @param baseDTO
+     * @param operation
+     */
+    @RequestMapping("/customizeLog")
+    public void customizeLog(@RequestBody DocBaseDTO baseDTO, @RequestParam Operation operation) {
+        // Create the deferredResult and initiate a callback object, task, with it
+        /*DeferredResult<String> deferredResult = new DeferredResult<>();
+        System.out.println(operation.getTitle() + "  : " + operation.getResult());
+        CompletableFuture.supplyAsync(() -> messageLogService.customizeLog(baseDTO, operation))
+                .whenCompleteAsync((result, throwable) -> deferredResult.setResult(result));
+        return deferredResult;*/
+        messageLogService.customizeLog(baseDTO, operation);
+    }
+
 }

+ 20 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/service/MessageLogService.java

@@ -1,8 +1,28 @@
 package com.usoftchina.smartschool.school.common.service;
 
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.smartschool.page.PageRequest;
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
+import com.usoftchina.smartschool.school.dto.ListReqDTO;
+import com.usoftchina.smartschool.school.po.Messagelog;
+import com.usoftchina.smartschool.school.po.Operation;
+
 /**
  * @author: guq
  * @create: 2019-01-23 16:23
  **/
 public interface MessageLogService {
+
+    String save(DocBaseDTO baseDTO);
+
+    String update(DocBaseDTO baseDTO);
+
+    String delete(DocBaseDTO baseDTO);
+
+    String deleteDetail(DocBaseDTO baseDTO);
+
+    String customizeLog(DocBaseDTO baseDTO, Operation operation);
+
+    PageInfo<Messagelog> getListData(PageRequest page, ListReqDTO req);
+
 }

+ 93 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/service/impl/MessageLogServiceImpl.java

@@ -1,11 +1,104 @@
 package com.usoftchina.smartschool.school.common.service.impl;
 
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.smartschool.context.BaseContextHolder;
+import com.usoftchina.smartschool.page.PageRequest;
 import com.usoftchina.smartschool.school.common.service.MessageLogService;
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
+import com.usoftchina.smartschool.school.dto.ListReqDTO;
+import com.usoftchina.smartschool.school.mapper.MessagelogMapper;
+import com.usoftchina.smartschool.school.po.Messagelog;
+import com.usoftchina.smartschool.school.po.Operation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.MessageSource;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
 
 /**
  * @author: guq
  * @create: 2019-01-23 16:24
  **/
+@Service
 public class MessageLogServiceImpl implements MessageLogService{
+    @Autowired
+    private MessageSource messageSource;
+    @Autowired
+    private MessagelogMapper messagelogMapper;
+
+    @Override
+    public String save(DocBaseDTO baseDTO) {
+        return log(Operation.SAVE, baseDTO);
+
+    }
+
+    @Override
+    public String update(DocBaseDTO baseDTO) {
+        return log(Operation.UPDATE, baseDTO);
+    }
+
+    @Override
+    public String delete(DocBaseDTO baseDTO) {
+        return log(Operation.DELETE, baseDTO);
+    }
+
+    @Override
+    public String deleteDetail(DocBaseDTO baseDTO) {
+        return log(Operation.DELETEDETAIL, baseDTO);
+    }
+
+    @Override
+    public String customizeLog(DocBaseDTO baseDTO, Operation operation) {
+        return log(operation, baseDTO);
+    }
+
+    @Override
+    public PageInfo<Messagelog> getListData(PageRequest page, ListReqDTO req) {
+        //设置默认分页
+        if (null == page || page.getSize() == 0 || page.getNumber() == 0) {
+            page = new PageRequest();
+            page.setNumber(1);
+            page.setSize(10);
+        }
+        PageHelper.startPage(page.getNumber(), page.getSize());
+        //查询数据
+        List<Messagelog> lists = getListByMode(req);
+        //取分页信息
+        PageInfo<Messagelog> pageInfo = new PageInfo<Messagelog>(lists);
+        return pageInfo;
+    }
+
+    private String log(Operation operation, DocBaseDTO baseDTO) {
+        String language = "zh_CN";
+        Messagelog msg = new Messagelog();
+        msg.setMl_caller(baseDTO.getName());
+        msg.setMl_name(baseDTO.getName());
+        msg.setMl_content(operation.getTitle());
+        msg.setMl_result(operation.getResult());
+        msg.setMl_code(baseDTO.getCode());
+        msg.setSchool_id(BaseContextHolder.getSchoolId());
+        msg.setCreateTime(new Date());
+        msg.setCreatorName(BaseContextHolder.getUserName());
+        msg.setMl_keyvalue(baseDTO.getId());
+        msg.setMl_man(BaseContextHolder.getUserName());
+        messagelogMapper.insert(msg);
+        return "success";
+    }
 
+    private List<Messagelog> getListByMode(ListReqDTO req) {
+        List<Messagelog> list = null;
+        Long companyId = BaseContextHolder.getCompanyId();
+        String con = req.getFinalCondition();
+        if (null == con) {
+            con = "1=1";
+        }
+        if (null == req || StringUtils.isEmpty(req.getMode()) || "MAIN".equals(req.getMode())) {
+            list = messagelogMapper.selectMessageLog(con, companyId);
+        }
+        return list;
+    }
 }

+ 2 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/exception/BizExceptionCode.java

@@ -8,8 +8,9 @@ import com.usoftchina.smartschool.exception.BaseExceptionCode;
  **/
 public enum BizExceptionCode implements BaseExceptionCode {
 
-    BIZ_IMPORT_ERROREXCEL(500002, "导入内容错误"),
+    BIZ_IMPORT_ERROREXCEL(500002, "请选用正确的导入模板"),
     EMPTY_DATA(76100,"数据为空,请填写后再保存"),
+    EXISTS_STU(500003,"该班级存在学生,无法删除"),
     USELESS_DATA(50001, "无效数据");
 
     private int code;

+ 59 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/interceptor/AuthRestInterceptor.java

@@ -0,0 +1,59 @@
+package com.usoftchina.smartschool.school.interceptor;
+
+import com.usoftchina.smartschool.auth.jwt.JwtHelper;
+import com.usoftchina.smartschool.auth.jwt.JwtInfo;
+import com.usoftchina.smartschool.context.BaseContextHolder;
+import com.usoftchina.smartschool.utils.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Enumeration;
+
+/**
+ * @author chenwei
+ * @date 2019/2/18
+ */
+@Component
+@Configuration
+public class AuthRestInterceptor extends HandlerInterceptorAdapter {
+
+    private static final Logger logger = LoggerFactory.getLogger(AuthRestInterceptor.class);
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        if (handler instanceof HandlerMethod) {
+            HandlerMethod handlerMethod = (HandlerMethod) handler;
+            String token = null;
+            Enumeration<String> headers = request.getHeaders("Authorization");
+            while(headers.hasMoreElements()){
+                //取最后一个元素
+                token = headers.nextElement();
+            }
+            if (!StringUtils.isEmpty(token)) {
+                JwtInfo infoFromToken = JwtHelper.getInfoFromToken(token, "auth/pub.key");
+                BaseContextHolder.setAppId(infoFromToken.getAppId());
+                BaseContextHolder.setUserId(infoFromToken.getUserId());
+                BaseContextHolder.setUserName(infoFromToken.getUserName());
+                BaseContextHolder.setSchoolId(infoFromToken.getSchool_id());
+                BaseContextHolder.setToken(token);
+                logger.info("request={} school_id={} token={} \\r\\n userName={}  ", request.getRequestURI(),
+                        infoFromToken.getSchool_id(), token, infoFromToken.getUserName());
+            }
+        } else {
+            // no mapping
+        }
+        return super.preHandle(request, response, handler);
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+        BaseContextHolder.remove();
+        super.afterCompletion(request, response, handler, ex);
+    }
+}

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

@@ -0,0 +1,85 @@
+package com.usoftchina.smartschool.school.mapper;
+
+import com.usoftchina.smartschool.school.dto.CurriculumDTO;
+import com.usoftchina.smartschool.school.dto.CurriculumDetailDTO;
+import com.usoftchina.smartschool.school.dto.CurriculumListDTO;
+import com.usoftchina.smartschool.school.po.SubjectDO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface CurriculumMapper {
+
+    /**
+     * 按条件查找列表数据
+     * @param condition
+     * @param schoolId
+     * @return
+     */
+    List<CurriculumListDTO> selectByCondition(@Param("condition") String condition, @Param("schoolId") Long schoolId);
+
+    /**
+     * 查询课程表主表数据
+     * @param id
+     * @return
+     */
+    CurriculumDTO selectMain(Long id);
+
+    /**
+     * 查询课程表明细表数据
+     * @param id
+     * @return
+     */
+    List<CurriculumDetailDTO> selectItems(Long id);
+
+    /**
+     * 查询学校科目名称
+     * @param school_id
+     * @return
+     */
+    List<SubjectDO> selectSubject(@Param("school_id") Long school_id);
+
+    /**
+     * 删除班级课程表
+     * @param id
+     */
+    void delete(Long id);
+
+    /**
+     * 通过主表ID删除明细
+     * @param id
+     */
+    void deleteDetailByMainId(Long id);
+
+    /**
+     * 删除课程表明细行
+     * @param id
+     */
+    void deleteDetail(@Param("id") Long id);
+
+    /**
+     * 课程表主表信息保存
+     * @param curriculumDTO
+     */
+    void insertSelective(CurriculumDTO curriculumDTO);
+
+    /**
+     * 课程明细表保存
+     * @param curriculumDetailDTOList
+     */
+    void insertDetailSelective(List<CurriculumDetailDTO> curriculumDetailDTOList);
+
+    /**
+     * 更新课程表主表信息
+     * @param curriculumDTO
+     */
+    void updateByPrimaryKeySelective(CurriculumDTO curriculumDTO);
+
+    /**
+     * 课程明细表更新
+     * @param curriculumDetailDTOList
+     */
+    void updateDetailSelective(List<CurriculumDetailDTO> curriculumDetailDTOList);
+}

+ 6 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/HomeWorkMapper.java

@@ -2,6 +2,10 @@ package com.usoftchina.smartschool.school.mapper;
 
 import com.usoftchina.smartschool.school.po.HomeWork;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import java.util.List;
 
 @Mapper
 public interface HomeWorkMapper {
@@ -19,4 +23,6 @@ public interface HomeWorkMapper {
     int updateByPrimaryKeyWithBLOBs(HomeWork record);
 
     int updateByPrimaryKey(HomeWork record);
+
+    List<HomeWork> selectByConditon(@Param("con") String condition, @Param("school_id") Long schoolId);
 }

+ 24 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/MessagelogMapper.java

@@ -0,0 +1,24 @@
+package com.usoftchina.smartschool.school.mapper;
+
+import com.usoftchina.smartschool.school.po.Messagelog;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface MessagelogMapper{
+    int deleteByPrimaryKey(Integer ml_id);
+
+    int insert(Messagelog record);
+
+    int insertSelective(Messagelog record);
+
+    Messagelog selectByPrimaryKey(Integer ml_id);
+
+    int updateByPrimaryKeySelective(Messagelog record);
+
+    int updateByPrimaryKey(Messagelog record);
+
+    List<Messagelog> selectMessageLog(@Param("con") String con, @Param("companyId") Long companyId);
+}

+ 5 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/NoticeMapper.java

@@ -2,6 +2,9 @@ package com.usoftchina.smartschool.school.mapper;
 
 import com.usoftchina.smartschool.school.po.Notify;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 @Mapper
 public interface NoticeMapper {
@@ -19,4 +22,6 @@ public interface NoticeMapper {
     int updateByPrimaryKeyWithBLOBs(Notify record);
 
     int updateByPrimaryKey(Notify record);
+
+    List<Notify> selectByConditon(@Param("con") String con, @Param("school_id") Long schoolId);
 }

+ 3 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysClazzMapper.java

@@ -3,6 +3,7 @@ package com.usoftchina.smartschool.school.mapper;
 import com.usoftchina.smartschool.school.po.SysClazz;
 import com.usoftchina.smartschool.school.po.TeacherDetail;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -23,4 +24,6 @@ public interface SysClazzMapper {
     List<SysClazz> selectBygrade(Long id);
 
     List<TeacherDetail> selectTeacher(Long id);
+
+    SysClazz selectByName(@Param("name") String name, @Param("gradeId") Long gradeId);
 }

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

@@ -38,4 +38,8 @@ public interface SysStudentMapper {
     SysParents selectParentByPhone(@Param("phone") String phone, @Param("schoolId") Long schoolId );
 
     void insertrelationDetail(@Param("id") Long id, @Param("pr_id") Long pr_id, @Param("relation") String relation);
+
+    void deleteRelation(Long id);
+
+    Integer checkStu(Long id);
 }

+ 2 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysTeacherMapper.java

@@ -28,4 +28,6 @@ public interface SysTeacherMapper {
     List<TeacherDetail> selectDetail(Long id);
 
     SysTeacher selectByPhone(@Param("phone") String phone, @Param("school_id") Long school_id);
+
+    void deleteRelation(Long id);
 }

+ 93 - 12
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/Messagelog.java

@@ -1,15 +1,10 @@
 package com.usoftchina.smartschool.school.po;
 
-
-import lombok.Data;
-
-import java.io.Serializable;
 import java.util.Date;
 
-@Data
-public class Messagelog implements Serializable{
+public class Messagelog {
 
-    private Integer ml_id;
+    private Long id;
 
     private String ml_code;
 
@@ -19,18 +14,104 @@ public class Messagelog implements Serializable{
 
     private String ml_caller;
 
+    public String getMl_name() {
+        return ml_name;
+    }
+
+    public void setMl_name(String ml_name) {
+        this.ml_name = ml_name;
+    }
+
     private String ml_man;
 
-    private Integer school_id;
+    private String ml_name;
 
-    private Date createTime;
+    public Long getMl_keyvalue() {
+        return ml_keyvalue;
+    }
 
-    private Integer creatorId;
+    public void setMl_keyvalue(Long ml_keyvalue) {
+        this.ml_keyvalue = ml_keyvalue;
+    }
 
-    private Integer ml_keyvalue;
+    private Long ml_keyvalue;
 
-    private String ml_name;
+    private Long school_id;
+
+    private Date createTime;
 
     private String creatorName;
 
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getSchool_id() {
+        return school_id;
+    }
+
+    public void setSchool_id(Long school_id) {
+        this.school_id = school_id;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getCreatorName() {
+        return creatorName;
+    }
+
+    public void setCreatorName(String creatorName) {
+        this.creatorName = creatorName;
+    }
+
+    public String getMl_code() {
+        return ml_code;
+    }
+
+    public void setMl_code(String ml_code) {
+        this.ml_code = ml_code == null ? null : ml_code.trim();
+    }
+
+    public String getMl_content() {
+        return ml_content;
+    }
+
+    public void setMl_content(String ml_content) {
+        this.ml_content = ml_content == null ? null : ml_content.trim();
+    }
+
+    public String getMl_result() {
+        return ml_result;
+    }
+
+    public void setMl_result(String ml_result) {
+        this.ml_result = ml_result == null ? null : ml_result.trim();
+    }
+
+    public String getMl_caller() {
+        return ml_caller;
+    }
+
+    public void setMl_caller(String ml_caller) {
+        this.ml_caller = ml_caller == null ? null : ml_caller.trim();
+    }
+
+    public String getMl_man() {
+        return ml_man;
+    }
+
+    public void setMl_man(String ml_man) {
+        this.ml_man = ml_man == null ? null : ml_man.trim();
+    }
+
 }

+ 49 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/Operation.java

@@ -0,0 +1,49 @@
+package com.usoftchina.smartschool.school.po;
+
+public enum Operation {
+
+    /**
+     * 新增
+     */
+    SAVE("保存操作", "保存成功"),
+    /**
+     * 修改
+     */
+    UPDATE("更新操作", "更新成功"),
+    /**
+     * 删除
+     */
+    DELETE("删除操作", "删除成功"),
+    /**
+     * 删除明细
+     */
+    DELETEDETAIL("删除明细操作", "删除明细成功");
+
+    private final String title;
+    private final String result;
+
+    private Operation(String title, String result) {
+        this.title = title;
+        this.result = result;
+    }
+
+    /**
+     * 操作描述
+     *
+     * @param
+     * @return
+     */
+    public String getTitle() {
+        return this.title;
+    }
+
+    /**
+     * 操作描述
+     *
+     * @param
+     * @return
+     */
+    public String getResult() {
+        return this.result;
+    }
+}

+ 40 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/OutInRecord.java

@@ -22,6 +22,46 @@ public class OutInRecord implements Serializable{
 
     private Long school_id;
 
+    private String stu_name;
+
+    private Integer stu_sex;
+
+    private String stu_number;
+
+    private String clazz_name;
+
+    public String getStu_name() {
+        return stu_name;
+    }
+
+    public void setStu_name(String stu_name) {
+        this.stu_name = stu_name;
+    }
+
+    public Integer getStu_sex() {
+        return stu_sex;
+    }
+
+    public void setStu_sex(Integer stu_sex) {
+        this.stu_sex = stu_sex;
+    }
+
+    public String getStu_number() {
+        return stu_number;
+    }
+
+    public void setStu_number(String stu_number) {
+        this.stu_number = stu_number;
+    }
+
+    public String getClazz_name() {
+        return clazz_name;
+    }
+
+    public void setClazz_name(String clazz_name) {
+        this.clazz_name = clazz_name;
+    }
+
     public Long getRecord_id() {
         return record_id;
     }

+ 10 - 5
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxClazzCurriculumServiceImpl.java

@@ -1,17 +1,22 @@
 package com.usoftchina.smartschool.school.wxschool.basic.service.impl;
 
+import com.usoftchina.smartschool.school.po.ClazzCurriculumDO;
 import com.usoftchina.smartschool.school.po.TeacherClazzDO;
 import com.usoftchina.smartschool.school.po.TeacherDO;
-import com.usoftchina.smartschool.school.wxschool.mapper.*;
-import com.usoftchina.smartschool.school.po.ClazzCurriculumDO;
-import com.usoftchina.smartschool.school.po.StudentDO;
 import com.usoftchina.smartschool.school.wxschool.basic.service.WxClazzCurriculumService;
+import com.usoftchina.smartschool.school.wxschool.mapper.WxClazzCurriculumMapper;
+import com.usoftchina.smartschool.school.wxschool.mapper.WxSubjectMapper;
+import com.usoftchina.smartschool.school.wxschool.mapper.WxTeacherClazzMapper;
+import com.usoftchina.smartschool.school.wxschool.mapper.WxTeacherMapper;
 import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 
 @Service
@@ -73,7 +78,7 @@ public class WxClazzCurriculumServiceImpl implements WxClazzCurriculumService {
 		List<Map<String,Object>> curTuess = new ArrayList<>();
 		List<Map<String,Object>> curWeds = new ArrayList<>();
 		SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
-		dateFormat.setTimeZone(TimeZone.getTimeZone("GMT-6"));
+		//dateFormat.setTimeZone(TimeZone.getTimeZone("GMT-6"));
 		for (ClazzCurriculumDO cc:curricula) {
 			Long curFri = cc.getCurFri();
 			//System.err.println(cc.getCurStartTime());

+ 7 - 6
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxOutInRecordServiceImpl.java

@@ -13,8 +13,9 @@ import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 
 @Service
@@ -43,7 +44,7 @@ public class WxOutInRecordServiceImpl implements WxOutInRecordService {
 		Integer pageStart = (pageIndex-1)*pageSize;
 		Map<String, Object> map = new HashMap<>();
 		List<OutInRecordDO> outInRecordDOS = outInRecordMapper.selectOutInRecordDOListByStuId(stuId, pageStart, pageSize);
-		List<Map<String, Object>> maps = new ArrayList<>();
+		//List<Map<String, Object>> maps = new ArrayList<>();
 		if (ObjectUtils.isNotEmpty(outInRecordDOS)){
 			Long stuId1 = outInRecordDOS.get(0).getStuId();
 			StudentDO studentDO = studentMapper.get(stuId1);
@@ -52,7 +53,7 @@ public class WxOutInRecordServiceImpl implements WxOutInRecordService {
 			map1.put("clazzName",clazzDO.getClazzName());
 			map1.put("gradeName",gradeMapper.get(clazzDO.getGradeId()).getGradeName());
 			map.put("student",map1);
-			for (OutInRecordDO oi:outInRecordDOS) {
+			/*for (OutInRecordDO oi:outInRecordDOS) {
 				Map<String, Object> toMap = JavaBeanUtil.convertBeanToMap(oi);
 				SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
 				dateFormat.setTimeZone(TimeZone.getTimeZone("GMT-6"));
@@ -63,9 +64,9 @@ public class WxOutInRecordServiceImpl implements WxOutInRecordService {
 					toMap.put("outDate",dateFormat.format(oi.getOutDate()));
 				}
 				maps.add(toMap);
-			}
+			}*/
 		}
-		map.put("outInRecordDOS",maps);
+		map.put("outInRecordDOS",outInRecordDOS);
 		return map;
 	}
 

+ 12 - 12
applications/school/school-server/src/main/resources/application.yml

@@ -21,18 +21,18 @@ spring:
   messages:
     basename: i18n/messages
     encoding: UTF-8
-  rabbitmq:
-    host: 10.10.100.166
-    port: 3306
-    virtual-host: school
-    username: root
-    password: select111***
-  zipkin:
-    sender:
-      type: rabbit
-    locator:
-      discovery:
-        enabled: true
+#  rabbitmq:
+#    host: 10.10.100.166
+#    port: 3306
+#    virtual-host: school
+#    username: root
+#    password: select111***
+#  zipkin:
+#    sender:
+#      type: rabbit
+#    locator:
+#      discovery:
+#        enabled: true
   sleuth:
     sampler:
       probability: 1.0

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

@@ -0,0 +1,23 @@
+eureka:
+  instance:
+    hostname: smartschool-school-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

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

@@ -0,0 +1,239 @@
+<?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.usoftchina.smartschool.school.mapper.CurriculumMapper" >
+  <resultMap id="CurriculumDetailDTOMap" type="com.usoftchina.smartschool.school.dto.CurriculumDetailDTO">
+    <id column="cur_id" property="id" jdbcType="INTEGER" />
+    <result column="cur_lessons" property="lessons" jdbcType="INTEGER" />
+    <result column="cur_mon" property="mon" jdbcType="VARCHAR" />
+    <result column="cur_tues" property="tues" jdbcType="VARCHAR" />
+    <result column="cur_wed" property="wed" jdbcType="VARCHAR" />
+    <result column="cur_thur" property="thur" jdbcType="VARCHAR" />
+    <result column="cur_fri" property="fri" jdbcType="VARCHAR" />
+    <result column="cur_sat" property="sat" jdbcType="VARCHAR" />
+    <result column="cur_status" property="status" jdbcType="INTEGER" />
+    <result column="cur_remarks" property="remarks" jdbcType="VARCHAR" />
+    <result column="cur_start_time" property="startTime" jdbcType="TIME" />
+    <result column="cur_end_time" property="endTime" jdbcType="TIME" />
+    <result column="clazz_id" property="clazzId" jdbcType="INTEGER" />
+    <result column="school_id" property="schoolId" jdbcType="INTEGER" />
+    <result column="cur_mid" property="mId" jdbcType="INTEGER" />
+  </resultMap>
+
+  <resultMap id="CurriculumDTOMap" type="com.usoftchina.smartschool.school.dto.CurriculumDTO">
+    <id column="id" property="id" jdbcType="INTEGER" />
+    <result column="mcur_code" property="code" jdbcType="VARCHAR" />
+    <result column="mcur_term_name" property="termName" jdbcType="VARCHAR" />
+    <result column="mcur_name" property="name" jdbcType="VARCHAR" />
+    <result column="mcur_term_start" property="termStart" jdbcType="TIMESTAMP" />
+    <result column="mcur_term_end" property="termEnd" jdbcType="TIMESTAMP" />
+    <result column="mcur_weeknum" property="weekNum" jdbcType="INTEGER" />
+    <result column="creatorName" property="creatorName" jdbcType="VARCHAR" />
+    <result column="createTime" property="createTime" jdbcType="TIMESTAMP" />
+    <result column="mcur_status" property="status" jdbcType="VARCHAR" />
+    <!--<result column="school_id" property="" jdbcType="VARCHAR" />-->
+    <result column="clazz_id" property="clazzId" jdbcType="VARCHAR" />
+    <result column="grade_id" property="gradeId" jdbcType="VARCHAR" />
+  </resultMap>
+
+  <select id="selectByCondition" resultType="com.usoftchina.smartschool.school.dto.CurriculumListDTO">
+    select mcur.id id, school.school_name schoolName, grade.grade_name gradeName, clazz.clazz_name clazzName, mcur_status status, mcur.school_id schoolId, mcur.clazz_id clazzId, clazz.grade_id gradeId,
+    mcur.mcur_term_name termName, mcur.mcur_name name, mcur.mcur_term_start termStart, mcur.mcur_term_end termEnd
+    from clazz_main_curriculum mcur
+    left join sys_clazz clazz on mcur.clazz_id = clazz.clazz_id
+    left join sys_grade grade on clazz.grade_id = grade.grade_id
+    left join sys_school school on school.school_id = mcur.school_id
+    <where>
+      <if test="condition != null">
+        ${condition}
+      </if>
+      <if test="schoolId != null">
+        and mcur.school_id = #{schoolId}
+      </if>
+    </where>
+  </select>
+
+  <select id="selectMain" resultMap="CurriculumDTOMap">
+    select * from clazz_main_curriculum where id = #{id}
+  </select>
+
+  <select id="selectItems" resultMap="CurriculumDetailDTOMap">
+    select * from clazz_curriculum where cur_mid = #{id}
+  </select>
+
+  <select id="selectSubject" resultType="com.usoftchina.smartschool.school.po.SubjectDO">
+    select * from subject where school_id = #{school_id}
+  </select>
+
+  <delete id="delete">
+    delete from clazz_main_curriculum where id = #{id}
+  </delete>
+
+  <delete id="deleteDetailByMainId">
+    delete from clazz_curriculum where cur_mid = #{id}
+  </delete>
+
+  <delete id="deleteDetail">
+    DELETE FROM clazz_curriculum where cur_id = #{id}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.usoftchina.smartschool.school.dto.CurriculumDTO">
+    <selectKey  resultType="java.lang.Long" keyProperty="id">
+      SELECT LAST_INSERT_ID() AS ID
+    </selectKey>
+    INSERT INTO clazz_main_curriculum
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="code != null">
+        mcur_code,
+      </if>
+      <if test="termName != null">
+        mcur_term_name,
+      </if>
+      <if test="name != null">
+        mcur_name,
+      </if>
+      <if test="termStart != null">
+        mcur_term_start,
+      </if>
+      <if test="termEnd != null">
+        mcur_term_end,
+      </if>
+      <if test="weekNum != null">
+        mcur_weeknum,
+      </if>
+      <if test="creatorName != null">
+        creatorName,
+      </if>
+      <if test="createTime != null">
+        createTime,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="code != null">
+        #{code, jdbcType=VARCHAR},
+      </if>
+      <if test="termName != null">
+        #{termName, jdbcType=VARCHAR},
+      </if>
+      <if test="name != null">
+        #{name, jdbcType=VARCHAR},
+      </if>
+      <if test="termStart != null">
+        #{termStart, jdbcType=TIMESTAMP},
+      </if>
+      <if test="termEnd != null">
+        #{termEnd, jdbcType=TIMESTAMP},
+      </if>
+      <if test="weekNum != null">
+        #{weekNum, jdbcType=INTEGER},
+      </if>
+      <if test="creatorName != null">
+        #{creatorName, jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        #{createTime, jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+
+  <insert id="insertDetailSelective" parameterType="java.util.List">
+    insert into clazz_curriculum
+    (cur_lessons,cur_mon,cur_tues,cur_wed,
+    cur_thur,cur_fri,cur_sat,cur_start_time,cur_end_time,
+    cur_status,cur_remarks,clazz_id,school_id,cur_mid
+    ) values
+    <foreach collection="list" item="item" index="index" open="" close="" separator=",">
+      (
+        #{lessons, jdbcType=INTEGER},#{mon,jdbcType=INTEGER},#{tues,jdbcType=INTEGER},#{wed,jdbcType=INTEGER},
+        #{thur,jdbcType=INTEGER},#{fri,jdbcType=INTEGER},#{sat,jdbcType=INTEGER},#{startTime,jdbcType=TIME},
+        #{endTime,jdbcType=TIME},#{status,jdbcType=INTEGER},#{remarks,jdbcType=VARCHAR},#{clazzId,jdbcType=INTEGER},
+        #{schoolId,jdbcType=INTEGER},#{mId,jdbcType=INTEGER},
+      )
+    </foreach>
+  </insert>
+
+  <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.smartschool.school.dto.CurriculumDTO" >
+    update clazz_main_curriculum
+    <set >
+      <if test="mcur_code != null" >
+        mcur_code = #{code,jdbcType=VARCHAR},
+      </if>
+      <if test="mcur_term_name != null" >
+        mcur_term_name = #{termName,jdbcType=VARCHAR},
+      </if>
+      <if test="mcur_name != null" >
+        mcur_name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="mcur_term_start != null" >
+        mcur_term_start = #{termStart,jdbcType=TIMESTAMP},
+      </if>
+      <if test="mcur_term_end != null" >
+        mcur_term_end = #{termEnd,jdbcType=TIMESTAMP},
+      </if>
+      <if test="mcur_weeknum != null" >
+        mcur_weeknum = #{weekNum,jdbcType=INTEGER},
+      </if>
+      <if test="creatorName != null" >
+        creatorName = #{creatorName,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null" >
+        createTime = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="clazzId != null" >
+        clazz_id = #{clazzId,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+
+  <update id="updateDetailSelective" parameterType="com.usoftchina.smartschool.school.dto.CurriculumDetailDTO">
+    <foreach collection="list" item="item" index="index" separator=";">
+      update clazz_curriculum
+      <set>
+        <if test="item.lessons != null and lessons != 0">
+          cur_lessons = #{item.lession, jdbcType=INTEGER},
+        </if>
+        <if test="item.mon != null">
+          cur_mon = #{item.mon, jdbcType=VARCHAR},
+        </if>
+        <if test="item.tues != null">
+          cur_tues = #{item.tues, jdbcType=VARCHAR},
+        </if>
+        <if test="item.wed != null">
+          cur_wed = #{item.wed, jdbcType=VARCHAR},
+        </if>
+        <if test="item.thur != null">
+          cur_thur = #{item.thur, jdbcType=VARCHAR},
+        </if>
+        <if test="item.fri != null">
+          cur_fri = #{item.fri, jdbcType=VARCHAR},
+        </if>
+        <if test="item.sat != null">
+          cur_sat = #{item.sat, jdbcType=VARCHAR},
+        </if>
+        <if test="item.startTime != null">
+          cur_start_time = #{item.startTime, jdbcType=VARCHAR},
+        </if>
+        <if test="item.endTime != null">
+          cur_end_time = #{item.endTime, jdbcType=TIME},
+        </if>
+        <if test="item.status != null">
+          cur_status = #{item.status, jdbcType=TIME},
+        </if>
+        <if test="item.remarks != null">
+          cur_remarks = #{item.remarks, jdbcType=VARCHAR},
+        </if>
+        <if test="item.clazzId != null">
+          clazz_id = #{item.clazzId, jdbcType=INTEGER},
+        </if>
+        <if test="item.schoolId != null">
+          school_id = #{item.schoolId, jdbcType=INTEGER},
+        </if>
+        <if test="item.mId != null">
+          cur_mid = #{item.mId, jdbcType=INTEGER},
+        </if>
+      </set>
+      WHERE cur_id= #{item.id,jdbcType=INTEGER}
+    </foreach>
+  </update>
+
+</mapper>

+ 16 - 0
applications/school/school-server/src/main/resources/mapper/HomeWorkMapper.xml

@@ -39,6 +39,9 @@
       )
   </insert>
   <insert id="insertSelective" parameterType="com.usoftchina.smartschool.school.po.HomeWork" >
+    <selectKey  resultType="java.lang.Long" keyProperty="task_id">
+      SELECT LAST_INSERT_ID() AS ID
+    </selectKey>
     insert into task_notify
     <trim prefix="(" suffix=")" suffixOverrides="," >
       <if test="subject_id != null" >
@@ -177,4 +180,17 @@
       school_id = #{school_id,jdbcType=BIGINT}
     where task_id = #{task_id,jdbcType=BIGINT}
   </update>
+
+  <select id="selectByConditon" resultMap="BaseResultMap">
+    select * from task_notify
+    <where>
+      <if test="con != null">
+        ${con}
+      </if>
+      <if test="school_id != null">
+        and school_id=#{school_id}
+      </if>
+    </where>
+    ORDER BY task_id DESC
+  </select>
 </mapper>

+ 180 - 0
applications/school/school-server/src/main/resources/mapper/MessagelogMapper.xml

@@ -0,0 +1,180 @@
+<?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.usoftchina.smartschool.school.mapper.MessagelogMapper" >
+  <resultMap id="BaseResultMap" type="com.usoftchina.smartschool.school.po.Messagelog" >
+    <id column="ml_id" property="id" jdbcType="INTEGER" />
+    <result column="ml_code" property="ml_code" jdbcType="VARCHAR" />
+    <result column="ml_content" property="ml_content" jdbcType="VARCHAR" />
+    <result column="ml_result" property="ml_result" jdbcType="VARCHAR" />
+    <result column="ml_caller" property="ml_caller" jdbcType="VARCHAR" />
+    <result column="ml_name" property="ml_name" jdbcType="VARCHAR" />
+    <result column="ml_man" property="ml_man" jdbcType="VARCHAR" />
+    <result column="school_id" property="school_id" jdbcType="INTEGER" />
+    <result column="createTime" property="createTime" jdbcType="TIMESTAMP" />
+    <result column="createName" property="creatorName" jdbcType="VARCHAR" />
+    <result column="ml_keyvalue" property="ml_keyvalue" jdbcType="INTEGER" />
+  </resultMap>
+
+  <sql id="Base_Column_List" >
+    ml_id, ml_code, ml_content, ml_result, ml_caller, ml_man, school_id, createTime,
+    createName,ml_name,ml_keyvalue
+  </sql>
+
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
+    select 
+    <include refid="Base_Column_List" />
+    from messagelog
+    where ml_id = #{id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
+    delete from messagelog
+    where ml_id = #{id,jdbcType=INTEGER}
+  </delete>
+
+  <insert id="insert" parameterType="com.usoftchina.smartschool.school.po.Messagelog" >
+    insert into messagelog ( ml_code, ml_content,
+      ml_result, ml_caller, ml_man, 
+      companyId, createTime, creatorId, 
+      updateTime, updaterId,ml_keyvalue,ml_name)
+    values (#{ml_code,jdbcType=VARCHAR}, #{ml_content,jdbcType=VARCHAR},
+      #{ml_result,jdbcType=VARCHAR}, #{ml_caller,jdbcType=VARCHAR}, #{ml_man,jdbcType=VARCHAR}, 
+      #{companyId,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, #{creatorId,jdbcType=INTEGER}, 
+      #{updateTime,jdbcType=TIMESTAMP}, #{updaterId,jdbcType=INTEGER},#{ml_keyvalue,jdbcType=INTEGER},#{ml_name,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.usoftchina.smartschool.school.po.Messagelog" >
+    insert into messagelog
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        ml_id,
+      </if>
+      <if test="ml_code != null" >
+        ml_code,
+      </if>
+      <if test="ml_content != null" >
+        ml_content,
+      </if>
+      <if test="ml_result != null" >
+        ml_result,
+      </if>
+      <if test="ml_caller != null" >
+        ml_caller,
+      </if>
+      <if test="ml_man != null" >
+        ml_man,
+      </if>
+      <if test="companyId != null" >
+        companyId,
+      </if>
+      <if test="createTime != null" >
+        createTime,
+      </if>
+      <if test="creatorId != null" >
+        creatorId,
+      </if>
+      <if test="updateTime != null" >
+        updateTime,
+      </if>
+      <if test="updaterId != null" >
+        updaterId,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=INTEGER},
+      </if>
+      <if test="ml_code != null" >
+        #{ml_code,jdbcType=VARCHAR},
+      </if>
+      <if test="ml_content != null" >
+        #{ml_content,jdbcType=VARCHAR},
+      </if>
+      <if test="ml_result != null" >
+        #{ml_result,jdbcType=VARCHAR},
+      </if>
+      <if test="ml_caller != null" >
+        #{ml_caller,jdbcType=VARCHAR},
+      </if>
+      <if test="ml_man != null" >
+        #{ml_man,jdbcType=VARCHAR},
+      </if>
+      <if test="companyId != null" >
+        #{companyId,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null" >
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="creatorId != null" >
+        #{creatorId,jdbcType=INTEGER},
+      </if>
+      <if test="updateTime != null" >
+        #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updaterId != null" >
+        #{updaterId,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+
+  <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.smartschool.school.po.Messagelog" >
+    update messagelog
+    <set >
+      <if test="ml_code != null" >
+        ml_code = #{ml_code,jdbcType=VARCHAR},
+      </if>
+      <if test="ml_content != null" >
+        ml_content = #{ml_content,jdbcType=VARCHAR},
+      </if>
+      <if test="ml_result != null" >
+        ml_result = #{ml_result,jdbcType=VARCHAR},
+      </if>
+      <if test="ml_caller != null" >
+        ml_caller = #{ml_caller,jdbcType=VARCHAR},
+      </if>
+      <if test="ml_man != null" >
+        ml_man = #{ml_man,jdbcType=VARCHAR},
+      </if>
+      <if test="companyId != null" >
+        companyId = #{companyId,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null" >
+        createTime = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="creatorId != null" >
+        creatorId = #{creatorId,jdbcType=INTEGER},
+      </if>
+      <if test="updateTime != null" >
+        updateTime = #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updaterId != null" >
+        updaterId = #{updaterId,jdbcType=INTEGER},
+      </if>
+    </set>
+    where ml_id = #{id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.usoftchina.smartschool.school.po.Messagelog" >
+    update messagelog
+    set ml_code = #{ml_code,jdbcType=VARCHAR},
+      ml_content = #{ml_content,jdbcType=VARCHAR},
+      ml_result = #{ml_result,jdbcType=VARCHAR},
+      ml_caller = #{ml_caller,jdbcType=VARCHAR},
+      ml_man = #{ml_man,jdbcType=VARCHAR},
+      companyId = #{companyId,jdbcType=INTEGER},
+      createTime = #{createTime,jdbcType=TIMESTAMP},
+      creatorId = #{creatorId,jdbcType=INTEGER},
+      updateTime = #{updateTime,jdbcType=TIMESTAMP},
+      updaterId = #{updaterId,jdbcType=INTEGER}
+    where ml_id = #{id,jdbcType=INTEGER}
+  </update>
+  <select id="selectMessageLog" resultMap="BaseResultMap">
+    select  *  from messagelog
+    <where>
+      <if test="con != null">
+        ${con}
+      </if>
+      <if test="companyId != null">
+        and  companyId = #{companyId}
+      </if>
+    </where>
+    order by ml_id DESC
+  </select>
+</mapper>

+ 16 - 0
applications/school/school-server/src/main/resources/mapper/NotifyMapper.xml

@@ -37,6 +37,9 @@
       )
   </insert>
   <insert id="insertSelective" parameterType="com.usoftchina.smartschool.school.po.Notify" >
+    <selectKey  resultType="java.lang.Long" keyProperty="notify_id">
+      SELECT LAST_INSERT_ID() AS ID
+    </selectKey>
     insert into notify
     <trim prefix="(" suffix=")" suffixOverrides="," >
       <if test="notify_title != null" >
@@ -174,4 +177,17 @@
       school_id = #{school_id,jdbcType=BIGINT}
     where notify_id = #{notify_id,jdbcType=BIGINT}
   </update>
+
+  <select id="selectByConditon" resultMap="BaseResultMap">
+    select * from notify
+    <where>
+      <if test="con != null">
+        ${con}
+      </if>
+      <if test="school_id != null">
+        and school_id=#{school_id}
+      </if>
+    </where>
+    ORDER BY notify_id DESC
+  </select>
 </mapper>

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

@@ -10,6 +10,10 @@
     <result column="record_remarks" property="record_remarks" jdbcType="VARCHAR" />
     <result column="stu_id" property="stu_id" jdbcType="BIGINT" />
     <result column="school_id" property="school_id" jdbcType="BIGINT" />
+    <result column="clazz_name" property="clazz_name" jdbcType="VARCHAR"/>
+    <result column="stu_name" property="stu_name" jdbcType="VARCHAR"/>
+    <result column="stu_sex" property="stu_sex" jdbcType="INTEGER"/>
+    <result column="stu_number" property="stu_number" jdbcType="VARCHAR"/>
   </resultMap>
   <sql id="Base_Column_List" >
     record_id, record_name, out_date, in_date, record_details, record_remarks,
@@ -128,13 +132,14 @@
   </update>
 
   <select id="selectByConditon" resultMap="BaseResultMap">
-    select * from out_in_record
+    select * from out_in_record left join sys_student on out_in_record.stu_id = sys_student.stu_id
+    left join sys_clazz on sys_student.clazz_id = sys_clazz.clazz_id
     <where>
       <if test="con != null">
         ${con}
       </if>
       <if test="school_id != null">
-        and school_id=#{school_id}
+        and out_in_record.school_id=#{school_id}
       </if>
     </where>
     ORDER BY record_id DESC

+ 4 - 0
applications/school/school-server/src/main/resources/mapper/SysClazzMapper.xml

@@ -106,6 +106,10 @@
     select * from sys_clazz where grade_id = #{id}
   </select>
 
+  <select id="selectByName" resultMap="BaseResultMap">
+    select * from sys_clazz where grade_id = #{gradeId} and clazz_name = #{name} and s
+  </select>
+
   <resultMap id="teacherMap" type="com.usoftchina.smartschool.school.po.TeacherDetail" >
     <result column="teacher" property="teacher" jdbcType="VARCHAR" />
     <result column="grade" property="grade" jdbcType="VARCHAR" />

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

@@ -349,4 +349,12 @@
   <insert id="insertrelationDetail">
      insert into sys_parents_stu (stu_id,parent_id,ps_relation) VALUES (#{id},#{pr_id},#{relation})
   </insert>
+
+  <delete id="deleteRelation" parameterType="long">
+    delete  from sys_parents_stu where stu_id = #{id}
+  </delete>
+
+  <select id="checkStu" parameterType="long" resultType="integer">
+    select count(1) from sys_student where clazz_id=#{id}
+  </select>
 </mapper>

+ 4 - 0
applications/school/school-server/src/main/resources/mapper/SysTeacherMapper.xml

@@ -316,4 +316,8 @@ where sys_teacher_clazz.teacher_id=#{id}
   <select id="selectByPhone" resultMap="BaseResultMap">
     select * from sys_teacher where teacher_phone=#{phone} and school_id=#{school_id}
   </select>
+
+  <delete id="deleteRelation">
+    delete from sys_teacher_clazz where teacher_id=#{teacher_id}
+  </delete>
 </mapper>

+ 71 - 0
applications/school/school-server/src/test/java/com/usoftchina/smartschool/school/service/CurriculumServiceTest.java

@@ -0,0 +1,71 @@
+package com.usoftchina.smartschool.school.service;
+
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.smartschool.context.BaseContextHolder;
+import com.usoftchina.smartschool.page.PageRequest;
+import com.usoftchina.smartschool.school.basic.service.CurriculumService;
+import com.usoftchina.smartschool.school.dto.CurriculumFormDTO;
+import com.usoftchina.smartschool.school.dto.CurriculumListDTO;
+import com.usoftchina.smartschool.school.dto.ListReqDTO;
+import com.usoftchina.smartschool.utils.JsonUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+/**
+ * @Description
+ * @Author chenwei
+ * @Date 2019/02/19
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringBootTest
+@EnableAutoConfiguration
+public class CurriculumServiceTest {
+
+    @Autowired
+    private CurriculumService curriculumService;
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(CurriculumServiceTest.class);
+
+    @Test
+    public void testA_selectAll(){
+        LOGGER.info("===============test selectAll start==============");
+        PageRequest pageRequest = new PageRequest(1, 8);
+        BaseContextHolder.setSchoolId(1);
+        PageInfo<CurriculumListDTO> pageInfo = curriculumService.selectAll(pageRequest, new ListReqDTO());
+        LOGGER.info("pageInfo={}", JsonUtils.toJsonString(pageInfo));
+        LOGGER.info("===============test selectAll end================");
+
+    }
+
+    @Test
+    public void testB_read(){
+        LOGGER.info("===============test read start==============");
+        CurriculumFormDTO curriculumFormDTO = curriculumService.read(1L);
+        LOGGER.info("curriculumFormDTO={}", JsonUtils.toJsonString(curriculumFormDTO));
+        LOGGER.info("===============test read end================");
+    }
+
+    @Test
+    public void testC_save(){
+        LOGGER.info("===============test save start==============");
+        LOGGER.info("===============test save end================");
+    }
+
+    @Test
+    public void testE_delete(){
+        LOGGER.info("===============test delete start==============");
+        LOGGER.info("===============test delete end================");
+    }
+
+    @Test
+    public void testF_deleteDetail(){
+        LOGGER.info("===============test deleteDetail start==============");
+        LOGGER.info("===============test deleteDetail end================");
+    }
+}

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

@@ -0,0 +1,23 @@
+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 - 6
applications/websocket/websocket-server/src/main/resources/config/application-docker-prod.yml

@@ -6,12 +6,6 @@ eureka:
     serviceUrl:
       defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@smartschool-eureka-server:9500/eureka/
 spring:
-  rabbitmq:
-    host: 10.10.100.166
-    port: 5672
-    virtual-host: school
-    username: school
-    password: select123***
   datasource:
     url: jdbc:mysql://10.10.100.166:3306/smart_campus?characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
     username: root

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

@@ -0,0 +1,23 @@
+eureka:
+  instance:
+    hostname: smartschool-wechat-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 - 6
applications/wechat/wechat-server/src/main/resources/config/application-docker-prod.yml

@@ -6,12 +6,6 @@ eureka:
     serviceUrl:
       defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@smartschool-eureka-server:9500/eureka/
 spring:
-  rabbitmq:
-    host: 10.10.100.166
-    port: 5672
-    virtual-host: school
-    username: school
-    password: select123***
   datasource:
     url: jdbc:mysql://10.10.100.166:3306/smart_campus?characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
     username: root

+ 3 - 0
base-servers/account/account-api/src/main/java/com/usoftchina/smartschool/account/api/AccountApi.java

@@ -18,4 +18,7 @@ public interface AccountApi {
 
     @GetMapping(value = "/account/pwd/check")
     Result<AccountDTO> checkPwd(@RequestParam(value = "username") String username, @RequestParam(value = "password") String password);
+
+    @GetMapping("/account/getUsername")
+    Result<String> getUsername(@RequestParam(value = "schoolId") Long schoolId, @RequestParam(value = "userId") Long userId);
 }

+ 9 - 0
base-servers/account/account-dto/src/main/java/com/usoftchina/smartschool/account/dto/AccountDTO.java

@@ -16,6 +16,15 @@ public class AccountDTO implements Serializable {
     private String salt;
     private List<RoleDTO> roleMaps;
     private Long school_id;
+    private String username;
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
 
     public Long getId() {
         return id;

+ 12 - 1
base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/controller/AccountController.java

@@ -73,7 +73,18 @@ public class AccountController {
         if (!checked){
             return Result.error(ExceptionCode.USER_PWD_ERROR);
         }
-        return Result.success(accountService.findByMobile(username));
+        return Result.success(accountDTO);
+    }
+
+    /**
+     * 查询教师表,获取教师姓名
+     * @param schoolId
+     * @param userId
+     * @return
+     */
+    @GetMapping("/getUsername")
+    public Result<String> getUsername(Long schoolId, Long userId){
+        return Result.success(accountService.getUsername(schoolId, userId));
     }
 
     /**

+ 7 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/mapper/AccountMapper.java

@@ -48,4 +48,11 @@ public interface AccountMapper {
      */
     Account selectByMobile(@Param("mobile") String mobile);
 
+    /**
+     * 查找教师姓名
+     * @param schoolId
+     * @param userId
+     * @return
+     */
+    String selectTeacherName(@Param("schoolId") Long schoolId, @Param("userId") Long userId);
 }

+ 7 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/service/AccountService.java

@@ -56,4 +56,11 @@ public interface AccountService {
      */
     boolean checkPwd(String username, String plainPassword);
 
+    /**
+     * 获取教师姓名
+     * @param schoolId
+     * @param userId
+     * @return
+     */
+    String getUsername(Long schoolId, Long userId);
 }

+ 5 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/service/impl/AccountServiceImpl.java

@@ -67,4 +67,9 @@ public class AccountServiceImpl implements AccountService {
         Account account = accountMapper.selectByMobile(username);
         return getEncryptedPassword(plainPassword, account.getSalt()).equals(account.getUser_pass());
     }
+
+    @Override
+    public String getUsername(Long schoolId, Long userId){
+        return accountMapper.selectTeacherName(schoolId, userId);
+    }
 }

+ 23 - 0
base-servers/account/account-server/src/main/resources/config/application-docker-cloud.yml

@@ -0,0 +1,23 @@
+eureka:
+  instance:
+    hostname: smartschool-school-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

+ 4 - 0
base-servers/account/account-server/src/main/resources/mapper/AccountMapper.xml

@@ -49,4 +49,8 @@
   <update id="updateByPrimaryKeySelective">
 
   </update>
+
+  <select id="selectTeacherName" resultType="string">
+    select teacher_name from sys_teacher where school_id = #{schoolId} and user_id = #{userId}
+  </select>
 </mapper>

+ 0 - 4
base-servers/auth/auth-dto/pom.xml

@@ -39,10 +39,6 @@
       <groupId>joda-time</groupId>
       <artifactId>joda-time</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.springframework.cloud</groupId>
-      <artifactId>spring-cloud-starter-bus-amqp</artifactId>
-    </dependency>
     <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>javax.servlet-api</artifactId>

+ 4 - 1
base-servers/auth/auth-dto/src/main/java/com/usoftchina/smartschool/auth/jwt/JwtHelper.java

@@ -40,6 +40,8 @@ public class JwtHelper {
                             .claim("appId", jwtInfo.getAppId())
                             .claim("userId", jwtInfo.getUserId())
                             .claim("userName", jwtInfo.getUserName())
+                            .claim("school_id", jwtInfo.getSchool_id())
+                            .claim("mobile", jwtInfo.getMobile())
                             .setExpiration(DateTime.now().plusSeconds(expire).toDate())
                             // 设置算法(必须)
                             .signWith(SignatureAlgorithm.RS256, RsaUtils.getPrivateKey(priKeyPath))
@@ -96,7 +98,8 @@ public class JwtHelper {
                 ObjectUtils.getStringValue(body.get("appId")),
                 ObjectUtils.getLongValue(body.get("school_id")),
                 ObjectUtils.getLongValue(body.get("userId")),
-                ObjectUtils.getStringValue(body.get("userName"))
+                ObjectUtils.getStringValue(body.get("userName")),
+                ObjectUtils.getStringValue(body.get("mobile"))
         );
     }
 }

+ 11 - 1
base-servers/auth/auth-dto/src/main/java/com/usoftchina/smartschool/auth/jwt/JwtInfo.java

@@ -11,15 +11,25 @@ public class JwtInfo implements Serializable{
     private Long school_id;
     private Long userId;
     private String userName;
+    private String mobile;
 
     public JwtInfo() {
     }
 
-    public JwtInfo(String appId, Long school_id, Long userId, String userName) {
+    public JwtInfo(String appId, Long school_id, Long userId, String userName, String mobile) {
         this.appId = appId;
         this.school_id = school_id;
         this.userId = userId;
         this.userName = userName;
+        this.mobile = mobile;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
     }
 
     public String getAppId() {

+ 0 - 4
base-servers/auth/auth-server/pom.xml

@@ -45,10 +45,6 @@
       <groupId>io.springfox</groupId>
       <artifactId>springfox-swagger2</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.springframework.amqp</groupId>
-      <artifactId>spring-rabbit</artifactId>
-    </dependency>
     <!-- test -->
     <dependency>
       <groupId>com.usoftchina.smartschool</groupId>

+ 4 - 1
base-servers/auth/auth-server/src/main/java/com/usoftchina/smartschool/auth/controller/AuthController.java

@@ -9,6 +9,7 @@ import com.usoftchina.smartschool.auth.jwt.JwtInfo;
 import com.usoftchina.smartschool.auth.jwt.JwtToken;
 import com.usoftchina.smartschool.base.Result;
 import com.usoftchina.smartschool.utils.BeanMapper;
+import com.usoftchina.smartschool.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -49,7 +50,9 @@ public class AuthController {
             AccountDTO accountDTO = result.getData();
             Long school_id = accountDTO.getRoleMaps().stream().filter(roleDTO -> "教师".equals(roleDTO.getRole_name())).findFirst().get().getSchool_id();
             accountDTO.setSchool_id(school_id);
-            JwtInfo jwtInfo = new JwtInfo("school", school_id, accountDTO.getId(), accountDTO.getUser_phone());
+            String realName = accountApi.getUsername(school_id, accountDTO.getId()).getData();
+            accountDTO.setUsername(realName);
+            JwtInfo jwtInfo = new JwtInfo("school", school_id, accountDTO.getId(), StringUtils.isEmpty(realName) ? accountDTO.getUser_phone() : realName, accountDTO.getUser_phone());
             JwtToken jwtToken = JwtHelper.generateToken(jwtInfo, privateKeyPath, expire);
             TokenDTO tokenDTO = BeanMapper.map(jwtToken, TokenDTO.class);
             // 登录日志

+ 15 - 15
base-servers/auth/auth-server/src/main/resources/application.yml

@@ -21,21 +21,21 @@ spring:
   messages:
     basename: i18n/messages
     encoding: UTF-8
-  rabbitmq:
-    host: 10.10.100.166
-    port: 3306
-    virtual-host: school
-    username: root
-    password: select111***
-  zipkin:
-    sender:
-      type: rabbit
-    locator:
-      discovery:
-        enabled: true
-  sleuth:
-    sampler:
-      probability: 1.0
+#  rabbitmq:
+#    host: 10.10.100.166
+#    port: 3306
+#    virtual-host: school
+#    username: root
+#    password: select111***
+#  zipkin:
+#    sender:
+#      type: rabbit
+#    locator:
+#      discovery:
+#        enabled: true
+#  sleuth:
+#    sampler:
+#      probability: 1.0
   redis:
     host: 10.1.81.62
     port: 6379

+ 23 - 0
base-servers/auth/auth-server/src/main/resources/config/application-docker-cloud.yml

@@ -0,0 +1,23 @@
+eureka:
+  instance:
+    hostname: smartschool-school-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

+ 3 - 0
base-servers/eureka-server/src/main/resources/config/application-docker-cloud.yml

@@ -0,0 +1,3 @@
+eureka:
+  instance:
+    hostname: smartschool-eureka-server

+ 1 - 1
base-servers/gateway-server/src/main/java/com/usoftchina/smartschool/gateway/config/AuthFilter.java

@@ -53,7 +53,7 @@ public class AuthFilter implements GlobalFilter, Ordered {
                 BaseContextHolder.setUserName(jwt.getUserName());
                 BaseContextHolder.setSchoolId(jwt.getSchool_id());
                 BaseContextHolder.setToken(token);
-                AccountDTO accountDTO = accountApi.findByMobile(jwt.getUserName()).getData();
+                AccountDTO accountDTO = accountApi.findByMobile(jwt.getMobile()).getData();
                 if (null == accountDTO) {
                     throw new BizException(ExceptionCode.USER_NOT_EXIST);
                 }

+ 4 - 4
base-servers/gateway-server/src/main/java/com/usoftchina/smartschool/gateway/interceptor/ServiceFeignInterceptor.java

@@ -11,18 +11,18 @@ import org.springframework.beans.factory.annotation.Autowired;
  * @date 2018/10/2
  */
 public class ServiceFeignInterceptor implements RequestInterceptor {
-   /* @Autowired
-    private AuthConfig authConfig;*/
+    @Autowired
+    private AuthConfig authConfig;
 
     public ServiceFeignInterceptor() {
     }
 
     @Override
     public void apply(RequestTemplate requestTemplate) {
-        //requestTemplate.header(authConfig.getAuthHeader(), BaseContextHolder.getToken());
+        requestTemplate.header(authConfig.getAuthHeader(), BaseContextHolder.getToken());
     }
 
     public void setAuthConfig(AuthConfig authConfig) {
-       // this.authConfig = authConfig;
+        this.authConfig = authConfig;
     }
 }

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

@@ -11,18 +11,6 @@ spring:
     user:
       name: admin
       password: select111***
-  rabbitmq:
-    host: 10.10.100.166
-    port: 5672
-    virtual-host: school
-    username: school
-    password: select123***
-  zipkin:
-    sender:
-      type: rabbit
-    locator:
-      discovery:
-        enabled: true
   sleuth:
     sampler:
       probability: 1.0

+ 7 - 0
base-servers/gateway-server/src/main/resources/config/application-docker-cloud.yml

@@ -0,0 +1,7 @@
+eureka:
+  instance:
+    hostname: smartschool-gateway-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@smartschool-eureka-server:9500/eureka/

+ 23 - 0
base-servers/sms/sms-server/src/main/resources/config/application-docker-cloud.yml

@@ -0,0 +1,23 @@
+eureka:
+  instance:
+    hostname: smartschool-sms-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

+ 1 - 1
base-servers/sms/sms-server/src/main/resources/config/application-docker-dev.yml

@@ -1,6 +1,6 @@
 eureka:
   instance:
-    hostname: saas-sms-server-dev
+    hostname: smartschool-sms-server-dev
     prefer-ip-address: false
   client:
     serviceUrl:

+ 1 - 1
base-servers/sms/sms-server/src/main/resources/config/application-docker-prod.yml

@@ -1,6 +1,6 @@
 eureka:
   instance:
-    hostname: saas-sms-server
+    hostname: smartschool-sms-server
     prefer-ip-address: false
   client:
     serviceUrl:

+ 32 - 1
framework/test-starter/pom.xml

@@ -10,6 +10,37 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>test-starter</artifactId>
-
+    <dependencies>
+        <dependency>
+          <groupId>org.springframework.boot</groupId>
+          <artifactId>spring-boot-starter-test</artifactId>
+        </dependency>
+        <dependency>
+          <groupId>com.usoftchina.smartschool</groupId>
+          <artifactId>core</artifactId>
+        </dependency>
+        <dependency>
+          <groupId>org.springframework</groupId>
+          <artifactId>spring-web</artifactId>
+          <scope>compile</scope>
+          <optional>true</optional>
+        </dependency>
+        <dependency>
+          <groupId>javax.servlet</groupId>
+          <artifactId>javax.servlet-api</artifactId>
+          <scope>compile</scope>
+          <optional>true</optional>
+        </dependency>
+        <dependency>
+          <groupId>com.fasterxml.jackson.core</groupId>
+          <artifactId>jackson-core</artifactId>
+          <scope>provided</scope>
+        </dependency>
+        <dependency>
+          <groupId>com.fasterxml.jackson.core</groupId>
+          <artifactId>jackson-databind</artifactId>
+          <scope>provided</scope>
+        </dependency>
+    </dependencies>
 
 </project>

+ 4 - 3
frontend/pc-web/app/util/FormUtil.js

@@ -327,13 +327,13 @@ Ext.define('school.util.FormUtil', {
             form.setLoading(true);
             if(form.initId && form.initId!=0) {
                 let url = form._readUrl + '/' + form.initId;
-                school.util.BaseUtil.request({url })
+                return school.util.BaseUtil.request({url })
                 .then(function(res) {
                     form.setLoading(false);
                     if(res.success) {
                         let d = res.data;
                         let o = {
-                            main: d.main
+                            main: d.main || d // 返回数据可能没有主从表格式
                         };
                         if(d.hasOwnProperty('items')) {
                             o.detail0 = d.items;
@@ -346,6 +346,7 @@ Ext.define('school.util.FormUtil', {
                         }
                         form.initFormData(o);
                         form.fireEvent('load', form, o);
+                        return o;
                     }
                 })
                 .catch(function(e) {
@@ -353,7 +354,7 @@ Ext.define('school.util.FormUtil', {
                     school.util.BaseUtil.showErrorToast('读取单据数据错误: ' + e.message);
                 });
             }else {
-                new Ext.Promise(function (resolve, reject) {
+                return new Ext.Promise(function (resolve, reject) {
                     form.setLoading(false);
                     let viewModel = form.getViewModel();
                     let detailGrids = form.query('detailGridField');

+ 19 - 15
frontend/pc-web/app/view/Interaction/access/List.js

@@ -5,7 +5,7 @@ Ext.define('school.view.interaction.access.List', {
     extend: 'school.view.core.base.BasePanel',
     xtype: 'interaction-access-list',
 
-    dataUrl: '/api/interaction/access/list',
+    dataUrl: '/api/school/record/list',
     initComponent: function () {
         var me = this;
         Ext.apply(this, {
@@ -13,11 +13,6 @@ Ext.define('school.view.interaction.access.List', {
                 xtype: 'textfield',
                 name: 'keyword',
                 fieldLabel: '姓名'
-            }, {
-                xtype: 'condatefield',
-                name: 'term',
-                columnWidth: 0.5,
-                fieldLabel: '日期'
             }],
 
             caller: null,
@@ -46,14 +41,15 @@ Ext.define('school.view.interaction.access.List', {
                 hiddenTools: true,
                 toolBtns: [],
                 columns: [{
-                    text: '头像',
-                    dataIndex: 'portrait'
+                    text: 'id',
+                    dataIndex: 'record_id',
+                    hidden: true
                 }, {
-                    text: '姓名',
-                    dataIndex: 'name'
+                    text: '类型',
+                    dataIndex: 'record_name'
                 }, {
-                    text: '性别',
-                    dataIndex: 'sex'
+                    text: '学生',
+                    dataIndex: 'stu_id'
                 }, {
                     text: '班级',
                     dataIndex: 'class'
@@ -65,10 +61,18 @@ Ext.define('school.view.interaction.access.List', {
                     dataIndex: 'state'
                 }, {
                     text: '时间',
-                    dataIndex: 'time',
+                    dataIndex: 'in_date',
                     xtype: 'datecolumn',
-                    format: 'Y-m-d H:i'
-                }, ]
+                    format: 'Y-m-d H:i:s',
+                    width: 150,
+                    renderer: function(v, m, r) {
+                        if(r.get('record_name') == '入校记录') {
+                            return r.get('in_date');
+                        }else {
+                            return r.get('out_date');
+                        }
+                    }
+                }]
             },
         });
         this.callParent(arguments);

+ 157 - 0
frontend/pc-web/app/view/Interaction/homework/List.js

@@ -0,0 +1,157 @@
+/**
+ * 作业发布
+ */
+Ext.define('school.view.interaction.homework.List', {
+    extend: 'school.view.core.base.BasePanel',
+    xtype: 'interaction-homework-list',
+
+    // dataUrl: 'http://10.1.80.47:9560/homework/list',
+    dataUrl: '/api/school/homework/list',
+    _title: '作业发布',
+
+    initComponent: function() {
+        var me = this;
+        Ext.apply(this, {
+            searchField: [{
+                xtype: 'textfield',
+                name: 'creator',
+                fieldLabel: '发布人'
+            }, {
+                xtype: 'datefield',
+                name: 'createTime',
+                fieldLabel: '发布时间'
+            }, {
+                xtype: 'textfield',
+                name: 'keyword',
+                fieldLabel:'关键字'
+            }],
+        
+            gridConfig: {
+                addTitle: '作业发布',
+                addXtype: 'interaction-homework-release',
+                idField: 'task_id',
+                codeField: null,
+                dataUrl: me.dataUrl,
+                caller: null,
+                rootProperty: 'data.list',
+                totalProperty: 'data.total',
+                actionColumn: [],
+                selModel: {
+                    checkOnly:true,
+                    type:'checkboxmodel',
+                    mode : "MULTI" ,
+                    ignoreRightMouseSelection : false
+                },
+                hiddenTools: false,
+                toolBtns: [{
+                    xtype: 'button',
+                    text: '删除'
+                }, {
+                    xtype: 'button',
+                    text: '新增',
+                    handler: function() {
+                        school.util.BaseUtil.openTab('interaction-homework-release', '新增作业', 'interaction-homework-release-add');
+                    }
+                }],
+                columns : [{
+                    text: 'id',
+                    dataIndex: 'task_id',
+                    hidden: true
+                }, {
+                    text: '标题',
+                    dataIndex: 'task_title',
+                    width: 120,
+                    tdCls: 'x-detail-column',
+                    listeners: {
+                        click: function(view, td, row, col, e, record, tr, eOpts, event) {
+                            let gridConfig = me.gridConfig;
+                            school.util.BaseUtil.openTab(gridConfig.addXtype, gridConfig.addTitle + '(' + record.get('task_title') + ')', gridConfig.addXtype + '-' + record.get(gridConfig.idField), {
+                                initId: record.get(gridConfig.idField)
+                            });
+                        }
+                    }
+                }, {
+                    text: '内容',
+                    dataIndex: 'task_context',
+                    width: 300
+                }, {
+                    text: '通知人',
+                    dataIndex: 'task_notifier'
+                }, {
+                    text: '发布人',
+                    dataIndex: 'task_creator',
+                    width: 150
+                }, {
+                    text: '发布时间',
+                    dataIndex: 'start_date',
+                    width: 120
+                },]
+            },
+        });
+        this.callParent(arguments);
+    },
+
+    /**
+     * 处理部分字段值
+     */
+    getConditionValue: function (field, value) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            conditionValue;
+        if (me.isContainsAny(xtypes, ['datefield'])) {
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d H:i:s');
+        } else if (me.isContainsAny(xtypes, ['conmonthfield'])) {
+            var from = value.from,
+                to = value.to;
+
+            conditionValue = from + ',' + to;
+        } else if (me.isContainsAny(xtypes, ['condatefield'])) {
+            var from = value.from,
+                to = value.to;
+
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d 00:00:00') + ',' + Ext.Date.format(new Date(to), 'Y-m-d 23:59:59');
+        } else if (me.isContainsAny(xtypes, ['dbfindtrigger'])) {
+            conditionValue = value;
+        } else if (me.isContainsAny(xtypes, ['combobox', 'combo'])) {
+            conditionValue = value;
+        } else if (me.isContainsAny(xtypes, ['multicombo'])) {
+            conditionValue = value.map ? value.map(function (v) {
+                return v.value;
+            }).join(',') : '';
+        } else {
+            conditionValue = value;
+        }
+
+        return conditionValue;
+    },
+
+    getExtraParams: function(store, op, condition) {
+        var temp = {};
+
+        for(let x = 0; x < condition.length; x++) {
+            let c = condition[x];
+            if(c.field == 'keyword') {
+                temp.keyword = c.value;
+            }else if(c.field == 'date') {
+                temp.fromDate = new Date(c.value.split(',')[0]).getTime();
+                temp.endDate = new Date(c.value.split(',')[1]).getTime();
+            }else if(c.field == 'quoted') {
+                temp.quoted = c.value == 'all' ? null : c.value;
+            }else if(c.field == 'closed') {
+                // temp.endDate = c.value == 'all' ? null : (
+                //     c.value == '0' ? 
+                // );
+            }
+        }
+        let obj = {
+            pageNumber: store.exportNumber?store.exportNumber:op._page,
+            pageSize: store.exportPageSize?store.exportPageSize:store.pageSize
+        };
+        for(let k in temp) {
+            if(!!temp[k]) {
+                obj[k] = temp[k];
+            }
+        }
+        return obj;
+     },
+});

+ 17 - 59
frontend/pc-web/app/view/Interaction/homework/Release.js

@@ -5,100 +5,58 @@ Ext.define('school.view.interaction.homework.Release', {
     extend: 'school.view.core.form.FormPanel',
     xtype: 'interaction-homework-release',
 
-    // controller: 'purchase-purchase-formpanel',
+    controller: 'interaction-homework-release',
     // viewModel: 'purchase-purchase-formpanel',
 
     //字段属性
     _title: '作业发布',
-    _idField: 'id',
-    _codeField: 'pu_code',
-    _statusField: 'pu_status',
-    _statusCodeField: 'pu_statuscode',
-    _auditmanField: 'pu_auditman',
-    _auditdateField: 'pu_auditdate',
-    _relationColumn: 'pd_puid',
-    _readUrl: '/api/purchase/purchase/read',
-    _saveUrl: '/api/purchase/purchase/save',
-    _auditUrl: '/api/purchase/purchase/audit',
-    _unAuditUrl: '/api/purchase/purchase/unAudit',
-    _deleteUrl: '/api/purchase/purchase/delete',
-    _turnInUrl: '/api/purchase/purchase/turnProdin',
+    _idField: 'task_id',
+    _codeField: null,
+    // _readUrl: 'http://10.1.80.47:9560/homework/read',
+    _readUrl: '/api/school/homework/read',
+    // _saveUrl: 'http://10.1.80.47:9560/homework/save',
+    _saveUrl: '/api/school/homework/save',
+    _deleteUrl: '/api/school/homework/delete',
     initId: 0,
     initComponent: function () {
         Ext.apply(this, {
             defaultItems: [{
                 xtype: 'hidden',
-                name: 'id',
+                name: 'task_id',
                 fieldLabel: 'id'
             }, {
                 xtype: "textfield",
-                name: "Publisher",
+                name: "task_creator",
                 fieldLabel: "发布人",
                 columnWidth: 0.5
             }, {
                 xtype: 'datefield',
-                name: 'startDate',
+                name: 'start_date',
                 fieldLabel: '开始时间',
                 columnWidth: 0.5,
                 defaultValue: new Date()
             }, {
-                xtype: 'combobox',
-                name: 'Notifications',
+                xtype: 'textfield',
+                name: 'task_notifier',
                 fieldLabel: '通知人',
+                maxLength: 500,
                 columnWidth: 0.5,
-                queryMode: 'local',
-                displayField: 'name',
-                valueField: 'abbr',
-                store:Ext.create('Ext.data.Store', {
-                    fields: ['abbr', 'name'],
-                    data : [
-                        {"abbr":"AL", "name":"Alabama"},
-                        {"abbr":"AK", "name":"Alaska"},
-                        {"abbr":"AZ", "name":"Arizona"}
-                    ]
-                })
             }, {
                 xtype: 'datefield',
-                name: 'endDate',
+                name: 'end_date',
                 fieldLabel: '截止时间',
                 columnWidth: 0.5
             }, {
                 xtype: "textfield",
-                name: "title",
+                name: "task_title",
                 fieldLabel: "标题",
                 columnWidth: 1
             }, {
                 xtype: "textareafield",
-                name: 'content',
+                name: 'task_context',
                 fieldLabel: "内容",
                 columnWidth: 1,
                 height: 250
-            }],
-            toolBtns: [{
-                xtype: 'button',
-                text: '发布',
-                handler: function() {
-                    let form = this.up('form');
-                    let values = form.getSaveData().main;
-                    form.setLoading(true);
-                    school.util.BaseUtil.request({
-                        // url: 'http://10.1.80.47:9560/homework/save',
-                        url: '/api/school/homework/save',
-                        method: 'POST',
-                        params: JSON.stringify({
-                            task_title: values.title,
-                            start_date: values.startDate,
-                            end_date: values.endDate,
-                            task_context: values.content
-                        })
-                    }).then(function(res) {
-                        form.setLoading(false);
-                        school.util.BaseUtil.showSuccessToast('发布成功');
-                    }).catch(function(e) {
-                        form.setLoading(false);
-                        school.util.BaseUtil.showErrorToast('发布失败: ' + e.message);
-                    });
-                }
             }]
         });
         this.callParent();

+ 21 - 0
frontend/pc-web/app/view/Interaction/homework/ReleaseController.js

@@ -0,0 +1,21 @@
+Ext.define('school.view.interaction.homework.ReleaseController', {
+    extend: 'school.view.core.form.FormPanelController',
+    alias: 'controller.interaction-homework-release',
+
+    getMySaveParams: function(params) {
+        return params.main;
+    },
+
+    onAfterSave: function(localJson) {
+        var form = this.getView();
+        var id = localJson.data.id;
+        var code = localJson.data.code;
+        form.initId = id;
+        school.util.FormUtil.loadData(form).then(function(data) {
+            var newId = form.xtype + '-' + data.main.task_id;
+            var newTitle = form._title + '(' + data.main.task_title + ')';
+    
+            school.util.BaseUtil.refreshTabTitle(newId, newTitle);
+        });
+    },
+});

+ 7 - 29
frontend/pc-web/app/view/Interaction/mailbox/List.js

@@ -5,7 +5,7 @@ Ext.define('school.view.interaction.mailbox.List', {
     extend: 'school.view.core.base.BasePanel',
     xtype: 'interaction-mailbox-list',
 
-    dataUrl: '/api/interaction/mailbox/list',
+    dataUrl: '/api/school/principal/list',
     initComponent: function() {
         var me = this;
         Ext.apply(this, {
@@ -13,21 +13,8 @@ Ext.define('school.view.interaction.mailbox.List', {
                 xtype: 'textfield',
                 name: 'keyword',
                 fieldLabel: '关键字'
-            }, {
-                xtype: 'condatefield',
-                name: 'term',
-                columnWidth: 0.5,
-                fieldLabel: '日期'
             }],
 
-            caller: null,
-            _formXtype: null,
-            _title: null,
-            _deleteUrl: null,
-            _batchOpenUrl: null,
-            _batchCloseUrl: null,
-            _batchDeleteUrl: null,
-        
             gridConfig: {
                 idField: null,
                 codeField: null,
@@ -55,30 +42,21 @@ Ext.define('school.view.interaction.mailbox.List', {
                     text: '删除'
                 }],
                 columns : [{
-                    text: '编号',
-                    dataIndex: 'code',
-                    width: 150
-                }, {
                     text: '标题',
-                    dataIndex: 'name',
+                    dataIndex: 'mailboxTitle',
                     width: 120
                 }, {
                     text: '内容',
-                    dataIndex: 'gender',
-                    width: 120
-                }, {
-                    text: '附件',
-                    dataIndex: 'grade'
+                    dataIndex: 'mailboxContext',
+                    width: 300
                 }, {
+                    xtype: 'datecolumn',
                     text: '日期',
-                    dataIndex: 'class'
+                    dataIndex: 'createDate'
                 }, {
                     text: '提出人',
-                    dataIndex: 'birth',
+                    dataIndex: 'mailboxCreator',
                     width: 120
-                }, {
-                    text: '处理',
-                    dataIndex: 'open'
                 }]
             },
         });

+ 157 - 0
frontend/pc-web/app/view/Interaction/notice/List.js

@@ -0,0 +1,157 @@
+/**
+ * 学校通知
+ */
+Ext.define('school.view.interaction.notice.List', {
+    extend: 'school.view.core.base.BasePanel',
+    xtype: 'interaction-notice-list',
+
+    // dataUrl: 'http://10.1.80.47:9560/notice/list',
+    dataUrl: '/api/school/notice/list',
+    _title: '学校通知',
+
+    initComponent: function() {
+        var me = this;
+        Ext.apply(this, {
+            searchField: [{
+                xtype: 'textfield',
+                name: 'creator',
+                fieldLabel: '发布人'
+            }, {
+                xtype: 'datefield',
+                name: 'createTime',
+                fieldLabel: '发布时间'
+            }, {
+                xtype: 'textfield',
+                name: 'keyword',
+                fieldLabel:'关键字'
+            }],
+        
+            gridConfig: {
+                addTitle: '学校通知',
+                addXtype: 'interaction-notice-schoolnotice',
+                idField: 'notify_id',
+                codeField: null,
+                detailField: 'notify_title',
+                dataUrl: me.dataUrl,
+                caller: null,
+                rootProperty: 'data.list',
+                totalProperty: 'data.total',
+                actionColumn: [],
+                selModel: {
+                    checkOnly:true,
+                    type:'checkboxmodel',
+                    mode : "MULTI" ,
+                    ignoreRightMouseSelection : false
+                },
+                hiddenTools: false,
+                toolBtns: [{
+                    xtype: 'button',
+                    text: '删除'
+                }, {
+                    xtype: 'button',
+                    text: '新增',
+                    handler: function() {
+                        school.util.BaseUtil.openTab('interaction-notice-schoolnotice', '新增学校通知', 'interaction-notice-schoolnotice-add');
+                    }
+                }],
+                columns : [{
+                    text: 'id',
+                    dataIndex: 'notify_id',
+                    hidden: true
+                }, {
+                    text: '标题',
+                    dataIndex: 'notify_title',
+                    width: 120,
+                    tdCls: 'x-detail-column',
+                    listeners: {
+                        click: function(view, td, row, col, e, record, tr, eOpts, event) {
+                            let gridConfig = me.gridConfig;
+                            school.util.BaseUtil.openTab(gridConfig.addXtype, gridConfig.addTitle + '(' + record.get('notify_title') + ')', gridConfig.addXtype + record.get(gridConfig.idField), {
+                                initId: record.get(gridConfig.idField)
+                            });
+                        }
+                    }
+                }, {
+                    text: '内容',
+                    dataIndex: 'notify_details',
+                    width: 300
+                }, {
+                    text: '发布人',
+                    dataIndex: 'notify_creator',
+                    width: 150
+                }, {
+                    xtype: 'datecolumn',
+                    formate: 'Y-m-d H:i:s',
+                    text: '发布时间',
+                    dataIndex: 'create_date',
+                    width: 120
+                }]
+            },
+        });
+        this.callParent(arguments);
+    },
+
+    /**
+     * 处理部分字段值
+     */
+    getConditionValue: function (field, value) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            conditionValue;
+        if (me.isContainsAny(xtypes, ['datefield'])) {
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d H:i:s');
+        } else if (me.isContainsAny(xtypes, ['conmonthfield'])) {
+            var from = value.from,
+                to = value.to;
+
+            conditionValue = from + ',' + to;
+        } else if (me.isContainsAny(xtypes, ['condatefield'])) {
+            var from = value.from,
+                to = value.to;
+
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d 00:00:00') + ',' + Ext.Date.format(new Date(to), 'Y-m-d 23:59:59');
+        } else if (me.isContainsAny(xtypes, ['dbfindtrigger'])) {
+            conditionValue = value;
+        } else if (me.isContainsAny(xtypes, ['combobox', 'combo'])) {
+            conditionValue = value;
+        } else if (me.isContainsAny(xtypes, ['multicombo'])) {
+            conditionValue = value.map ? value.map(function (v) {
+                return v.value;
+            }).join(',') : '';
+        } else {
+            conditionValue = value;
+        }
+
+        return conditionValue;
+    },
+
+    getExtraParams: function(store, op, condition) {
+        var temp = {};
+
+        for(let x = 0; x < condition.length; x++) {
+            let c = condition[x];
+            if(c.field == 'keyword') {
+                temp.keyword = c.value;
+            }else if(c.field == 'date') {
+                temp.fromDate = new Date(c.value.split(',')[0]).getTime();
+                temp.endDate = new Date(c.value.split(',')[1]).getTime();
+            }else if(c.field == 'quoted') {
+                temp.quoted = c.value == 'all' ? null : c.value;
+            }else if(c.field == 'closed') {
+                // temp.endDate = c.value == 'all' ? null : (
+                //     c.value == '0' ? 
+                // );
+            }
+        }
+        let obj = {
+            pageNumber: store.exportNumber?store.exportNumber:op._page,
+            pageSize: store.exportPageSize?store.exportPageSize:store.pageSize
+        };
+        for(let k in temp) {
+            if(!!temp[k]) {
+                obj[k] = temp[k];
+            }
+        }
+        return obj;
+     },
+});

+ 16 - 61
frontend/pc-web/app/view/Interaction/notice/SchoolNotice.js

@@ -5,92 +5,47 @@ Ext.define('school.view.interaction.notice.SchoolNotice', {
     extend: 'school.view.core.form.FormPanel',
     xtype: 'interaction-notice-schoolnotice',
 
-    // controller: 'purchase-purchase-formpanel',
+    controller: 'interaction-notice-schoolnotice',
     // viewModel: 'purchase-purchase-formpanel',
 
     //字段属性
     _title: '学校通知',
-    _idField: 'id',
-    _codeField: 'pu_code',
-    _statusField: 'pu_status',
-    _statusCodeField: 'pu_statuscode',
-    _auditmanField: 'pu_auditman',
-    _auditdateField: 'pu_auditdate',
-    _relationColumn: 'pd_puid',
-    _readUrl: '/api/purchase/purchase/read',
-    _saveUrl: '/api/purchase/purchase/save',
-    _auditUrl: '/api/purchase/purchase/audit',
-    _unAuditUrl: '/api/purchase/purchase/unAudit',
-    _deleteUrl: '/api/purchase/purchase/delete',
-    _turnInUrl: '/api/purchase/purchase/turnProdin',
+    _idField: 'notify_id',
+    _codeField: null,
+    // _readUrl: 'http://10.1.80.47:9560/notice/read',
+    _readUrl: '/api/school/notice/read',
+    // _saveUrl: 'http://10.1.80.47:9560/notice/save',
+    _saveUrl: '/api/school/notice/save',
+    _deleteUrl: '/api/school/notice/delete',
     initId: 0,
     initComponent: function () {
         Ext.apply(this, {
             defaultItems: [{
                 xtype: 'hidden',
-                name: 'id',
+                name: 'notify_id',
                 fieldLabel: 'id'
             }, {
                 xtype: "textfield",
-                name: "Publisher",
+                name: "notify_creator",
                 fieldLabel: "发布人",
                 columnWidth: 0.5
             }, {
-                xtype: 'textfield',
-                name: 'time',
+                xtype: 'datefield',
+                name: 'create_date',
                 fieldLabel: '发布时间',
-                columnWidth: 0.5
-            }, {
-                xtype: 'combobox',
-                name: 'Notifications',
-                fieldLabel: '通知人',
                 columnWidth: 0.5,
-                queryMode: 'local',
-                displayField: 'name',
-                valueField: 'abbr',
-                forceSelection: 'true',//阻止输入非列表内容
-                store:Ext.create('Ext.data.Store', {
-                    fields: ['abbr', 'name'],
-                    data : [
-                        {"abbr":"AL", "name":"Alabama"},
-                        {"abbr":"AK", "name":"Alaska"},
-                        {"abbr":"AZ", "name":"Arizona"}
-                    ]
-                })
+                formatter: 'Y-m-d H:i:s'
             }, {
                 xtype: "textfield",
-                name: "title",
+                name: "notify_title",
                 fieldLabel: "标题",
                 columnWidth: 1
             }, {
                 xtype: "textareafield",//文本域
-                name: 'content',
+                name: 'notify_details',
                 fieldLabel: "内容",
+                height: 300,
                 columnWidth: 1,
-            }],
-            toolBtns: [{
-                xtype: 'button',
-                text: '发布',
-                handler: function() {
-                    let form = this.up('form');
-                    let values = form.getValues();
-                    form.setLoading(true);
-                    school.util.BaseUtil.request({
-                        // url: 'http://10.1.80.47:9560/notice/save',
-                        url: '/api/school/notice/save',
-                        method: 'POST',
-                        params: JSON.stringify({
-                            notify_title: values.title,
-                            notify_details: values.content
-                        })
-                    }).then(function(res) {
-                        form.setLoading(false);
-                        school.util.BaseUtil.showSuccessToast('发布成功');
-                    }).catch(function(e) {
-                        form.setLoading(false);
-                        school.util.BaseUtil.showErrorToast('发布失败: ' + e.message);
-                    });
-                }
             }]
         });
         this.callParent();

+ 21 - 0
frontend/pc-web/app/view/Interaction/notice/SchoolNoticeController.js

@@ -0,0 +1,21 @@
+Ext.define('school.view.interaction.notice.SchoolNoticeController', {
+    extend: 'school.view.core.form.FormPanelController',
+    alias: 'controller.interaction-notice-schoolnotice',
+
+    getMySaveParams: function(params) {
+        return params.main;
+    },
+
+    onAfterSave: function(localJson) {
+        var form = this.getView();
+        var id = localJson.data.id;
+        var code = localJson.data.code;
+        form.initId = id;
+        school.util.FormUtil.loadData(form).then(function(data) {
+            var newId = form.xtype + '-' + id;
+            var newTitle = form._title + '(' + data.main.notify_title + ')';
+    
+            school.util.BaseUtil.refreshTabTitle(newId, newTitle);
+        });
+    },
+});

+ 24 - 36
frontend/pc-web/app/view/Interaction/timetable/List.js

@@ -7,7 +7,8 @@ Ext.define('school.view.interaction.timetable.List', {
 
     controller: 'interaction-timetable-list',
 
-    dataUrl: '/api/interaction/timetable/list',
+    // dataUrl: 'http://10.1.80.36:9520/api/school/curriculum/list',
+    dataUrl: '/api/school/curriculum/list',
     initComponent: function() {
         var me = this;
         Ext.apply(this, {
@@ -34,9 +35,11 @@ Ext.define('school.view.interaction.timetable.List', {
             _batchDeleteUrl: null,
         
             gridConfig: {
-                idField: null,
+                addTitle: '课程表',
+                addXtype: 'interaction-timetable-detail',
+                idField: 'notify_id',
                 codeField: null,
-                statusCodeField: null,
+                detailField: 'notify_title',
                 dataUrl: me.dataUrl,
                 caller: null,
                 rootProperty: 'data.list',
@@ -51,54 +54,39 @@ Ext.define('school.view.interaction.timetable.List', {
                 hiddenTools: false,
                 toolBtns: [{
                     xtype: 'button',
-                    text: '下载模板'
-                }, {
-                    xtype: 'button',
-                    text: '上传课表'
+                    text: '删除'
                 }, {
                     xtype: 'button',
-                    text: '添加',
+                    text: '新增',
                     handler: 'onAddClick'
-                }, {
-                    xtype: 'button',
-                    text: '删除'
                 }],
                 columns : [{
-                    text: '编号',
-                    dataIndex: 'code',
-                    width: 150
-                }, {
-                    text: '学期',
+                    text: '课表名称',
                     dataIndex: 'name',
-                    width: 120
-                }, {
-                    text: '性别',
-                    dataIndex: 'gender',
-                    width: 120
+                    width: 120,
+                    tdCls: 'x-detail-column',
+                    listeners: {
+                        click: function(view, td, row, col, e, record, tr, eOpts, event) {
+                            let gridConfig = me.gridConfig;
+                            school.util.BaseUtil.openTab(gridConfig.addXtype, gridConfig.addTitle + '(' + record.get('name') + ')', gridConfig.addXtype + record.get(gridConfig.idField), {
+                                initId: record.get(gridConfig.idField)
+                            });
+                        }
+                    }
                 }, {
                     text: '年级',
-                    dataIndex: 'grade'
+                    dataIndex: 'gradeName'
                 }, {
                     text: '班级',
-                    dataIndex: 'class'
+                    dataIndex: 'clazzName'
                 }, {
-                    text: '出生日期',
-                    dataIndex: 'birth',
+                    text: '期',
+                    dataIndex: 'termName',
                     width: 120
-                }, {
-                    text: '年龄',
-                    dataIndex: 'open'
                 }, {
                     text: '状态',
                     dataIndex: 'status'
-                }],
-                listeners: {
-                    itemclick: function(view, record, item, index, e, eOpts) {
-                        school.util.BaseUtil.openTab('interaction-timetable-detail', '课程表', 'interaction-timetable-detail'+record.get('id'), {
-                            initId: record.get('id')
-                        }); 
-                    }
-                }
+                }]
             },
         });
         this.callParent(arguments);

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

@@ -2,8 +2,7 @@ Ext.define('school.view.basic.staff.StaffDetail', {
     extend: 'school.view.core.form.FormPanel',
     xtype: 'basic-staff-staffdetail',
 
-    // controller: 'sale-b2b-purchasedetail',
-    // viewModel: 'sale-b2b-purchasedetail',
+    controller: 'basic-staff-staffdetail',
 
     //字段属性
     _title: '教职工信息',
@@ -13,17 +12,21 @@ Ext.define('school.view.basic.staff.StaffDetail', {
     _statusCodeField: null,
     _auditmanField: null,
     _auditdateField: null,
-    // _readUrl: 'http://10.1.80.35:8560/api/sale/saledown/read',
     _readUrl: '/api/school/teacher/read',
-    // _saveUrl: 'http://10.1.80.35:8560/api/sale/saledown/update',
-    _saveUrl: '/api/sale/saledown/update',
-    // _toSaleUrl: 'http://10.1.80.35:8560/api/sale/saledown/toSale',
-    _toSaleUrl: '/api/sale/saledown/toSale',
+    // _saveUrl: 'http://10.1.80.47:9560/teacher/save',
+    _saveUrl: '/api/school/teacher/save',
+    // _deleteUrl: 'http://10.1.80.47:9560/teacher/delete',
+    _deleteUrl: '/api/school/teacher/delete',
+    // _saveUrl: '/api/sale/saledown/update',
     initId: 0,
 
     initComponent: function () {
         Ext.apply(this, {
             defaultItems: [{
+                xtype: 'hidden',
+                name: 'teacher_id',
+                fieldLabel: 'id',
+            },{
                 xtype: 'textfield',
                 name: 'teacher_number',
                 fieldLabel: '工号'

+ 8 - 0
frontend/pc-web/app/view/basic/staff/StaffDetailController.js

@@ -0,0 +1,8 @@
+Ext.define('school.view.basic.staff.StaffDetailController', {
+    extend: 'school.view.core.form.FormPanelController',
+    alias: 'controller.basic-staff-staffdetail',
+
+    getMySaveParams: function(params) {
+        return params.main;
+    }
+});

+ 41 - 13
frontend/pc-web/app/view/basic/staff/StaffList.js

@@ -9,6 +9,7 @@ Ext.define('school.view.basic.staff.StaffList', {
     _title: '教职工信息导入',
     caller: 'Teacher',
     pathKey: 'teacher',
+    
 
     initComponent: function() {
         var me = this;
@@ -28,11 +29,12 @@ Ext.define('school.view.basic.staff.StaffList', {
             }],
         
             gridConfig: {
-                idField: null,
-                codeField: null,
-                statusCodeField: null,
+                addTitle: '教职工信息',
+                addXtype: 'basic-staff-staffdetail',
+                idField: 'teacher_id',
+                codeField: 'teacher_number',
+                detailField: 'teacher_number',
                 dataUrl: me.dataUrl,
-                caller: null,
                 rootProperty: 'data.list',
                 totalProperty: 'data.total',
                 actionColumn: [],
@@ -58,7 +60,40 @@ Ext.define('school.view.basic.staff.StaffList', {
                     text: '一键开通'
                 }, {
                     xtype: 'button',
-                    text: '删除'
+                    text: '删除',
+                    handler: function() {
+                        let grid = this.up('grid'),
+                        selectedRecords = grid.getSelection();
+                        let data;
+
+                        data = selectedRecords.map(function(r) {
+                            return {
+                                id: r.get('teacher_id')
+                            };
+                        });
+
+                        if(data.length == 0) {
+                            school.util.BaseUtil.showErrorToast('请先勾选需要删除的记录');
+                            return;
+                        }
+
+                        grid.setLoading(true);
+                        school.util.BaseUtil.request({
+                            // url: 'http://10.1.80.47:9560/teacher/batchDelete',
+                            url: '/api/school/teacher/batchDelete',
+                            method: 'POST',
+                            params: JSON.stringify({
+                                baseDTOs: data
+                            })
+                        }).then(function(res) {
+                            grid.setLoading(false);
+                            school.util.BaseUtil.showSuccessToast('成功删除' + data.length + '条记录');
+                            grid.store.loadPage(grid.store.currentPage);
+                        }).catch(function(e) {
+                            grid.setLoading(false);
+                            school.util.BaseUtil.showErrorToast('删除失败: ' + e.message);
+                        });
+                    }
                 }, {
                     xtype: 'button',
                     text: '新增',
@@ -97,14 +132,7 @@ Ext.define('school.view.basic.staff.StaffList', {
                 }, {
                     text: '状态',
                     dataIndex: 'teacher_status'
-                }],
-                listeners: {
-                    itemclick: function(view, record, item, index, e, eOpts) {
-                        school.util.BaseUtil.openTab('basic-staff-staffdetail', '教职工信息(' + record.get('teacher_number') + ')', 'basic-staff-staffdetail'+record.get('teacher_id'), {
-                            initId: record.get('teacher_id')
-                        });
-                    }
-                }
+                }]
             },
         });
         this.callParent(arguments);

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

@@ -15,10 +15,10 @@ Ext.define('school.view.basic.student.StudentDetail', {
     _auditdateField: null,
     // _readUrl: 'http://10.1.80.35:8560/api/sale/saledown/read',
     _readUrl: '/api/school/student/read',
-    // _saveUrl: 'http://10.1.80.35:8560/api/sale/saledown/update',
-    _saveUrl: '/api/sale/saledown/update',
-    // _toSaleUrl: 'http://10.1.80.35:8560/api/sale/saledown/toSale',
-    _toSaleUrl: '/api/sale/saledown/toSale',
+    // _saveUrl: 'http://10.1.80.47:9560/student/save',
+    _saveUrl: '/api/school/student/save',
+    // _deleteUrl: 'http://10.1.80.47:9560/student/delete',
+    _deleteUrl: '/api/school/student/delete',
     initId: 0,
 
     initComponent: function () {

+ 42 - 15
frontend/pc-web/app/view/basic/student/StudentList.js

@@ -36,9 +36,11 @@ Ext.define('school.view.basic.student.StudentList', {
             }],
         
             gridConfig: {
-                idField: null,
-                codeField: null,
-                statusCodeField: null,
+                addTitle: '学生信息',
+                addXtype: 'basic-student-studentdetail',
+                idField: 'stu_id',
+                codeField: 'stu_number',
+                detailField: 'stu_number',
                 dataUrl: me.dataUrl,
                 caller: null,
                 rootProperty: 'data.list',
@@ -66,13 +68,46 @@ Ext.define('school.view.basic.student.StudentList', {
                     text: '一键开通'
                 }, {
                     xtype: 'button',
-                    text: '添加',
+                    text: '删除',
                     handler: function() {
-                        school.util.BaseUtil.openTab('basic-student-studentdetail', '新增学生信息', 'basic-student-studentdetail-add');
+                        let grid = this.up('grid'),
+                        selectedRecords = grid.getSelection();
+                        let data;
+
+                        data = selectedRecords.map(function(r) {
+                            return {
+                                id: r.get('stu_id')
+                            };
+                        });
+
+                        if(data.length == 0) {
+                            school.util.BaseUtil.showErrorToast('请先勾选需要删除的记录');
+                            return;
+                        }
+
+                        grid.setLoading(true);
+                        school.util.BaseUtil.request({
+                            // url: 'http://10.1.80.47:9560/student/batchDelete',
+                            url: '/api/school/student/batchDelete',
+                            method: 'POST',
+                            params: JSON.stringify({
+                                baseDTOs: data
+                            })
+                        }).then(function(res) {
+                            grid.setLoading(false);
+                            school.util.BaseUtil.showSuccessToast('成功删除' + data.length + '条记录');
+                            grid.store.loadPage(grid.store.currentPage);
+                        }).catch(function(e) {
+                            grid.setLoading(false);
+                            school.util.BaseUtil.showErrorToast('删除失败: ' + e.message);
+                        });
                     }
                 }, {
                     xtype: 'button',
-                    text: '删除'
+                    text: '新增',
+                    handler: function() {
+                        school.util.BaseUtil.openTab('basic-student-studentdetail', '新增学生信息', 'basic-student-studentdetail-add');
+                    }
                 }],
                 columns : [{
                     text: 'id',
@@ -121,15 +156,7 @@ Ext.define('school.view.basic.student.StudentList', {
                 }, {
                     text: '状态',
                     dataIndex: 'stu_status'
-                }],
-                listeners: {
-                    itemclick: function(view, record, item, index, e, eOpts) {
-                        let number = record.get('stu_number');
-                        school.util.BaseUtil.openTab('basic-student-studentdetail', '学生信息' + '(' + number + ')', 'basic-student-studentdetail'+record.get('stu_id'), {
-                            initId: record.get('stu_id')
-                        });
-                    }
-                }
+                }]
             },
         });
         this.callParent(arguments);

+ 15 - 0
frontend/pc-web/app/view/core/base/BasePanel.js

@@ -25,6 +25,10 @@ Ext.define('school.view.core.base.BasePanel', {
     searchField:[],
     gridColumns: [],
 
+    addTitle: '',
+    addXtype: '',
+    idField: '',
+    codeField: '',
     deleteMoreMsg: '确认删除所选单据?',
     deleteOneMsg: '确认删除该单据?',
 
@@ -39,6 +43,17 @@ Ext.define('school.view.core.base.BasePanel', {
             xtype: 'core-base-gridpanel',
             padding: '8 12',
             _columns: gridColumns.map(function(c) {
+                if(c.dataIndex == gridConfig.detailField) {
+                    c.listeners = c.listeners || {};
+                    if(!c.listeners['click']) {
+                        c.tdCls = c.tdCls ? (c.tdCls + ' x-detail-column') : 'x-detail-column'
+                        c.listeners['click'] = function(view, td, row, col, e, record, tr, eOpts, event) {
+                            school.util.BaseUtil.openTab(gridConfig.addXtype, gridConfig.addTitle + '(' + record.get(gridConfig.codeField) + ')', gridConfig.addXtype + record.get(gridConfig.idField), {
+                                initId: record.get(gridConfig.idField)
+                            });
+                        };
+                    }
+                }
                 return Object.assign({}, c);
             }),
         };

+ 8 - 0
frontend/pc-web/app/view/core/base/BasePanel.scss

@@ -30,6 +30,14 @@
     }
 }
 .core-base-gridpanel{
+
+    .x-detail-column {
+        .x-grid-cell-inner {
+            color: #3e80f6;
+            cursor: pointer;
+        }
+    }
+
     .x-grid-body{
         border:1px solid #abdaff !important;
         border-top-width: 0 !important;

+ 19 - 11
frontend/pc-web/app/view/core/form/FormPanelController.js

@@ -190,22 +190,13 @@ Ext.define('school.view.core.form.FormPanelController', {
         form.setLoading(true);
         school.util.BaseUtil.request({
             url: form._saveUrl,
-            params: JSON.stringify(params),
+            params: JSON.stringify(me.getMySaveParams(params)),
             method: 'POST',
         })
         .then(function(localJson) {
             form.setLoading(false);
             if(localJson.success){
-                var id = localJson.data.id;
-                var code = localJson.data.code;
-                form.initId = id;
-                school.util.FormUtil.loadData(form);
-
-                var newId = form.xtype + '-' + id;
-                var newTitle = form._title + '(' + code + ')';
-
-                school.util.BaseUtil.refreshTabTitle(newId, newTitle);
-
+                me.onAfterSave(localJson);
                 school.util.BaseUtil.showSuccessToast('保存成功');
                 form.fireEvent('aftersave', true, form, localJson);
             }
@@ -216,6 +207,23 @@ Ext.define('school.view.core.form.FormPanelController', {
             form.fireEvent('aftersave', false, form);
         });
     },
+    
+    getMySaveParams: function(params) {
+        return params;
+    },
+
+    onAfterSave: function(localJson) {
+        var form = this.getView();
+        var id = localJson.data.id;
+        var code = localJson.data.code;
+        form.initId = id;
+        school.util.FormUtil.loadData(form);
+
+        var newId = form.xtype + '-' + id;
+        var newTitle = form._title + '(' + code + ')';
+
+        school.util.BaseUtil.refreshTabTitle(newId, newTitle);
+    },
 
     onAudit: function(){
         var me = this,

+ 4 - 4
frontend/pc-web/resources/json/navigation.json

@@ -38,13 +38,13 @@
     "text": "家校互动",
     "iconCls": "x-ss ss-nav-interaction",
     "items": [{
-        "id": "interaction-notice-schoolnotice", 
+        "id": "interaction-notice-list", 
         "text": "学校通知",
-        "view": "interaction-notice-schoolnotice"
+        "view": "interaction-notice-list"
     }, {
-        "id": "interaction-homework-release",
+        "id": "interaction-homework-list",
         "text": "作业发布",
-        "view": "interaction-homework-release"
+        "view": "interaction-homework-list"
     }, {
         "id": "interaction-timetable-list",
         "text": "课程表",