Bläddra i källkod

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

FANGLH 7 år sedan
förälder
incheckning
e87b34ba3c
100 ändrade filer med 1572 tillägg och 545 borttagningar
  1. 1 0
      applications/device/device-client/src/main/java/com/usoftchina/smartschool/device/client/DeviceClientApplication.java
  2. 5 1
      applications/device/device-client/src/main/java/com/usoftchina/smartschool/device/client/init/IcCardInitializer.java
  3. 10 4
      applications/device/device-client/src/main/java/com/usoftchina/smartschool/device/client/listener/AccessControlListener.java
  4. 3 3
      applications/device/device-client/src/main/resources/application.yml
  5. 1 11
      applications/device/device-client/src/main/resources/logback-spring.xml
  6. 1 1
      applications/device/device-core/src/main/java/com/usoftchina/smartschool/device/context/SpringContextHolder.java
  7. 0 0
      applications/device/device-core/src/main/resources/messages.properties
  8. 2 0
      applications/device/device-core/src/main/resources/messages_zh_CN.properties
  9. 7 17
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/lib/DahuaLibrary.java
  10. 10 10
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/service/DahuaDataAnalyzeService.java
  11. 1 1
      applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/service/DahuaDeviceService.java
  12. 0 1
      applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/dto/AccessControlInfo.java
  13. 7 6
      applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/event/AccessControlEvent.java
  14. 3 1
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/mapper/IcCardMapper.java
  15. 20 13
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/service/impl/AccessControlServiceImpl.java
  16. 34 30
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/service/impl/IcCardServiceImpl.java
  17. 1 1
      applications/device/device-server/src/main/resources/mapper/IcCardMapper.xml
  18. 22 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/controller/CurriculumController.java
  19. 12 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/CurriculumService.java
  20. 17 2
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/ClassServiceImpl.java
  21. 39 6
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/CurriculumServiceImpl.java
  22. 39 5
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/GradeServiceImpl.java
  23. 9 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/SchoolServiceImpl.java
  24. 9 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/SchoolTemplateServiceImpl.java
  25. 36 2
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/StudentServiceImpl.java
  26. 23 3
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/SubjectServiceImpl.java
  27. 23 2
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/TeacherServiceImpl.java
  28. 13 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/controller/ScoreController.java
  29. 11 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/ScoreService.java
  30. 24 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/HomeWorkServiceImpl.java
  31. 42 23
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/NoticeServiceImpl.java
  32. 135 2
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/ScoreServiceImpl.java
  33. 5 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/exception/BizExceptionCode.java
  34. 33 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/interceptor/ServiceFeignInterceptor.java
  35. 22 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/CurriculumMapper.java
  36. 1 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/NoticeMapper.java
  37. 14 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/ScoreMapper.java
  38. 2 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SubjectMapper.java
  39. 2 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysClazzMapper.java
  40. 25 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/SysStudentMapper.java
  41. 3 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/HomeworkNoticer.java
  42. 2 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/NotifyDO.java
  43. 8 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/Operation.java
  44. 20 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/OutInRecord.java
  45. 2 2
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SchoolNoticer.java
  46. 24 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SchoolTemplateDO.java
  47. 9 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SysStudent.java
  48. 2 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/TaskNotifyDO.java
  49. 5 15
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/TemplateDO.java
  50. 18 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/controller/WxTaskNotifyController.java
  51. 1 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/WxNotifyService.java
  52. 3 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/WxTaskNotifyService.java
  53. 9 14
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxMeetingServiceImpl.java
  54. 94 79
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxNotifyServiceImpl.java
  55. 29 41
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxOaApproveServiceImpl.java
  56. 8 10
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxOaLeaveServiceImpl.java
  57. 5 11
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxPrincipalMailboxServiceImpl.java
  58. 16 16
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxStuScoreServiceImpl.java
  59. 80 52
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxTaskNotifyServiceImpl.java
  60. 33 22
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxVoteServiceImpl.java
  61. 2 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/mapper/WxNotifyMapper.java
  62. 2 2
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/mapper/WxNotifyrecordsMapper.java
  63. 2 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/mapper/WxStudentMapper.java
  64. 3 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/mapper/WxSubjectMapper.java
  65. 1 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/mapper/WxTaskNotifyMapper.java
  66. 5 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/mapper/WxTeacherMapper.java
  67. 4 4
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/mapper/WxTemplateMapper.java
  68. 66 52
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/oaBean/Manager.java
  69. 9 12
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/support/RemindTask.java
  70. 1 4
      applications/school/school-server/src/main/resources/application.yml
  71. 4 1
      applications/school/school-server/src/main/resources/config/application-dev.yml
  72. 10 1
      applications/school/school-server/src/main/resources/mapper/CurriculumMapper.xml
  73. 2 1
      applications/school/school-server/src/main/resources/mapper/HomeWorkMapper.xml
  74. 31 5
      applications/school/school-server/src/main/resources/mapper/NotifyMapper.xml
  75. 2 0
      applications/school/school-server/src/main/resources/mapper/OutInRecordMapper.xml
  76. 3 0
      applications/school/school-server/src/main/resources/mapper/SchoolTemplateMapper.xml
  77. 100 0
      applications/school/school-server/src/main/resources/mapper/ScoreMapper.xml
  78. 4 0
      applications/school/school-server/src/main/resources/mapper/SubjectMapper.xml
  79. 4 0
      applications/school/school-server/src/main/resources/mapper/SysClazzMapper.xml
  80. 39 2
      applications/school/school-server/src/main/resources/mapper/SysStudentMapper.xml
  81. 12 2
      applications/school/school-server/src/main/resources/mapper/WxNotifyMapper.xml
  82. 4 0
      applications/school/school-server/src/main/resources/mapper/WxStudentMapper.xml
  83. 4 0
      applications/school/school-server/src/main/resources/mapper/WxSubjectMapper.xml
  84. 23 6
      applications/school/school-server/src/main/resources/mapper/WxTaskNotifyMapper.xml
  85. 8 0
      applications/school/school-server/src/main/resources/mapper/WxTeacherMapper.xml
  86. 2 7
      applications/school/school-server/src/main/resources/mapper/WxTemplateMapper.xml
  87. 8 0
      applications/wechat/wechat-dto/src/main/java/com/usoftchina/smartschool/wechat/dto/TransferDTO.java
  88. 5 0
      base-servers/account/account-server/pom.xml
  89. 3 4
      base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/controller/AccountController.java
  90. 56 0
      base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/interceptor/AuthRestInterceptor.java
  91. 23 0
      base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/interceptor/InterceptorConfig.java
  92. 33 0
      base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/interceptor/ServiceFeignInterceptor.java
  93. BIN
      base-servers/account/account-server/src/main/resources/auth/pub.key
  94. 1 1
      base-servers/account/account-server/src/main/resources/config/application-docker-cloud.yml
  95. 16 1
      base-servers/account/account-server/src/main/resources/mapper/AccountMapper.xml
  96. 1 1
      base-servers/auth/auth-server/src/main/resources/config/application-docker-cloud.yml
  97. 1 1
      base-servers/file/file-server-fdfs/src/main/resources/application.yml
  98. 16 22
      base-servers/file/file-server-qcloud/src/main/resources/config/application-docker-cloud.yml
  99. 20 1
      base-servers/file/file-server/src/main/java/com/usoftchina/smartschool/file/controller/FileController.java
  100. 7 0
      base-servers/file/file-server/src/main/java/com/usoftchina/smartschool/file/mapper/FileInfoMapper.java

+ 1 - 0
applications/device/device-client/src/main/java/com/usoftchina/smartschool/device/client/DeviceClientApplication.java

@@ -1,6 +1,7 @@
 package com.usoftchina.smartschool.device.client;
 
 import com.usoftchina.smartschool.device.client.config.DeviceServerProperties;
+import com.usoftchina.smartschool.device.context.SpringContextHolder;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;

+ 5 - 1
applications/device/device-client/src/main/java/com/usoftchina/smartschool/device/client/init/IcCardInitializer.java

@@ -24,7 +24,11 @@ public class IcCardInitializer implements CommandLineRunner {
     public void run(String... args) throws Exception {
         IcCard card = icCardService.find();
         if (null != card) {
-            dynamicDataSourceRegister.createDataSource(card);
+            try {
+                dynamicDataSourceRegister.createDataSource(card);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
         }
     }
 }

+ 10 - 4
applications/device/device-client/src/main/java/com/usoftchina/smartschool/device/client/listener/AccessControlListener.java

@@ -3,6 +3,7 @@ package com.usoftchina.smartschool.device.client.listener;
 import com.usoftchina.smartschool.device.client.po.AccessControl;
 import com.usoftchina.smartschool.device.client.service.AccessControlService;
 import com.usoftchina.smartschool.device.dto.AccessControlInfo;
+import com.usoftchina.smartschool.device.dto.DeviceInfo;
 import com.usoftchina.smartschool.device.event.AccessControlEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,16 +32,21 @@ public class AccessControlListener {
     @EventListener(AccessControlEvent.class)
     public void onAccessControlEvent(AccessControlEvent event) {
         AccessControlInfo info = event.getAccessControlInfo();
-        AccessControl accessControl = accessControlService.findById(event.getDeviceId());
+        DeviceInfo device = event.getDevice();
+        AccessControl accessControl = accessControlService.findById(device.getId());
         // 通过门禁设备绑定的访问类型,来设置本次事件的访问类型
         if (accessControl.isEntryType()) {
             info.setEventType(AccessControlInfo.EventType.ENTRY);
         } else {
             info.setEventType(AccessControlInfo.EventType.EXIT);
         }
-        if(logger.isDebugEnabled()) {
-            logger.debug(info.toString());
+        if (logger.isDebugEnabled()) {
+            logger.debug("Device[{}] Port[{}] AccessControlEvent[{}]", device.getIp(), device.getPort(), info.toString());
+        }
+        try {
+            accessControlService.saveRecord(info);
+        } catch (Exception e) {
+            logger.error("Save AccessControlRecord Error", e);
         }
-        accessControlService.saveRecord(info);
     }
 }

+ 3 - 3
applications/device/device-client/src/main/resources/application.yml

@@ -4,10 +4,10 @@ device:
     connect-time: 10000
   server:
   # 门禁事件的服务端接口
-    accessControlEvent: https://school-api.ubtob.com/api/device/accesscontrol/event
+    accessControlEvent: https://school-api.ydyhz.com/api/device/accesscontrol/event
   # IC卡传输的服务端接口
   icCard:
-    icCardUrl: https://school-api.ubtob.com/api/device/iccard/consume/record
+    icCardUrl: https://school-api.ydyhz.com/api/device/iccard/consume/record
 server:
   tomcat:
     uri-encoding: UTF-8
@@ -32,4 +32,4 @@ spring:
 logging:
   path: ${user.home}/.device-client/logs/
   level:
-    com.usoftchina.smartschool.device.client: debug
+    com.usoftchina.smartschool: debug

+ 1 - 11
applications/device/device-client/src/main/resources/logback-spring.xml

@@ -31,15 +31,6 @@
 
     <contextName>${spring.application.name}-${spring.profiles.active}-logback</contextName>
 
-    <appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
-        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>${log.level.console}</level>
-        </filter>
-        <encoder>
-            <pattern>${common-pattern}</pattern>
-        </encoder>
-    </appender>
-
     <appender name="ROOT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${log.path}/root.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
@@ -56,9 +47,8 @@
     <logger name="org.springframework" level="INFO"/>
     <logger name="com.usoftchina.smartschool" level="DEBUG"/>
 
-    <root level="WARN">
+    <root level="INFO">
         <appender-ref ref="ROOT_APPENDER"/>
-        <appender-ref ref="CONSOLE_APPENDER"/>
     </root>
 
 </configuration>

+ 1 - 1
applications/device/device-core/src/main/java/com/usoftchina/smartschool/device/context/SpringContextHolder.java

@@ -36,6 +36,6 @@ public class SpringContextHolder {
 
     public static String getMessage(String code, Object[] args, Locale locale) {
         Assert.notNull(context, "spring context not ready");
-        return context.getMessage(code, args, locale);
+        return context.getMessage(code, args, code, locale);
     }
 }

+ 0 - 0
applications/device/device-core/src/main/resources/message_zh_CN.properties → applications/device/device-core/src/main/resources/messages.properties


+ 2 - 0
applications/device/device-core/src/main/resources/messages_zh_CN.properties

@@ -0,0 +1,2 @@
+ERROR_UNKNOWN=\u672a\u77e5\u5f02\u5e38
+ERROR_IP_PORT_EXIST=IP\u548c\u7aef\u53e3\u5df2\u5b58\u5728

+ 7 - 17
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/lib/DahuaLibrary.java

@@ -1467,30 +1467,20 @@ public interface DahuaLibrary extends Library {
         public String toString() {
             return "DEV_EVENT_ACCESS_CTL_INFO{" +
                     "nChannelID=" + nChannelID +
-                    ", szName=" + new String(szName) +
+                    ", szName=" + new String(szName).trim() +
                     ", PTS=" + PTS +
                     ", UTC=" + UTC +
                     ", nEventID=" + nEventID +
-                    ", stuObject=" + stuObject +
-                    ", stuFileInfo=" + stuFileInfo +
                     ", emEventType=" + emEventType +
                     ", bStatus=" + bStatus +
                     ", emCardType=" + emCardType +
                     ", emOpenMethod=" + emOpenMethod +
-                    ", szCardNo=" + new String(szCardNo) +
-                    ", szPwd=" + new String(szPwd) +
-                    ", szReaderID=" + new String(szReaderID) +
-                    ", szUserID=" + new String(szUserID) +
-                    ", szSnapURL=" + new String(szSnapURL) +
-                    ", nErrorCode=" + nErrorCode +
-                    ", nPunchingRecNo=" + nPunchingRecNo +
-                    ", nNumbers=" + nNumbers +
-                    ", byImageIndex=" + byImageIndex +
-                    ", dwSnapFlagMask=" + dwSnapFlagMask +
-                    ", emAttendanceState=" + emAttendanceState +
-                    ", szClassNumber=" + new String(szClassNumber) +
-                    ", szPhoneNumber=" + new String(szPhoneNumber) +
-                    ", szCardName=" + new String(szCardName, DEFAULT_CHARSET) +
+                    ", szCardNo=" + new String(szCardNo).trim() +
+                    ", szUserID=" + new String(szUserID).trim() +
+                    ", szSnapURL=" + new String(szSnapURL).trim() +
+                    ", szClassNumber=" + new String(szClassNumber).trim() +
+                    ", szPhoneNumber=" + new String(szPhoneNumber).trim() +
+                    ", szCardName=" + new String(szCardName, DEFAULT_CHARSET).trim() +
                     ", uSimilarity=" + (uSimilarity & 0x0ffffffff) +
                     '}';
         }

+ 10 - 10
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/service/DahuaDataAnalyzeService.java

@@ -9,6 +9,7 @@ import com.usoftchina.smartschool.device.dahua.lib.DahuaLibrary.*;
 import com.usoftchina.smartschool.device.dahua.lib.DahuaSdk;
 import com.usoftchina.smartschool.device.dahua.lib.DahuaSdkException;
 import com.usoftchina.smartschool.device.dto.AccessControlInfo;
+import com.usoftchina.smartschool.device.dto.DeviceInfo;
 import com.usoftchina.smartschool.device.event.AccessControlEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -39,14 +40,14 @@ public class DahuaDataAnalyzeService {
     /**
      * 启动智能数据监听
      *
-     * @param deviceId 门禁设备ID
+     * @param device 门禁设备
      * @param loginHandle 登录句柄
      */
-    public void startListen(String deviceId, NativeLong loginHandle) {
+    public void startListen(DeviceInfo device, NativeLong loginHandle) {
         long key = loginHandle.longValue();
         if (key != 0 && !analyzerHandles.containsKey(key)) {
             NativeLong lAnalyzerHandle = sdk.getInstance().CLIENT_RealLoadPictureEx(loginHandle, 0,
-                    DahuaEvents.EVENT_IVS_ALL, true, new AnalyzerDataCallBack(deviceId),
+                    DahuaEvents.EVENT_IVS_ALL, true, new AnalyzerDataCallBack(device),
                     new NativeLong(), null);
             analyzerHandles.put(key, lAnalyzerHandle);
         }
@@ -56,11 +57,11 @@ public class DahuaDataAnalyzeService {
      * 智能分析数据回调
      */
     class AnalyzerDataCallBack implements fAnalyzerDataCallBack {
-        private final String deviceId;
+        private final DeviceInfo device;
 
-        public AnalyzerDataCallBack(String deviceId) {
+        public AnalyzerDataCallBack(DeviceInfo device) {
             super();
-            this.deviceId = deviceId;
+            this.device = device;
         }
 
         @Override
@@ -73,18 +74,17 @@ public class DahuaDataAnalyzeService {
                 case DahuaEvents.EVENT_IVS_ACCESS_CTL:
                     DEV_EVENT_ACCESS_CTL_INFO info = new DEV_EVENT_ACCESS_CTL_INFO(pAlarmInfo);
                     if (logger.isDebugEnabled()) {
-                        logger.debug(info.toString());
+                        logger.debug("Device[{}] Port[{}] CallBack[{}]", device.getIp(), device.getPort(), info.toString());
                     }
                     AccessControlInfo accessControlInfo = new AccessControlInfo();
                     if (dwBufSize > 0) {
                         accessControlInfo.setImageData(pBuffer.getByteArray(0, dwBufSize));
                     }
-                    accessControlInfo.setCardNo(new String(info.szCardNo));
+                    accessControlInfo.setCardNo(new String(info.szCardNo).trim());
                     accessControlInfo.setEventType(convertEventType(info.emEventType));
                     accessControlInfo.setOpenMethod(convertOpenMethod(info.emOpenMethod));
                     accessControlInfo.setEventTime(info.UTC.toDate());
-                    SpringContextHolder.getContext().publishEvent(new AccessControlEvent(this,
-                            deviceId, accessControlInfo));
+                    SpringContextHolder.getContext().publishEvent(new AccessControlEvent(this, device, accessControlInfo));
                     // 其他地方可通过监听 AccessControlEvent 来扩展
                     break;
                 /**

+ 1 - 1
applications/device/device-sdk-dahua/src/main/java/com/usoftchina/smartschool/device/dahua/service/DahuaDeviceService.java

@@ -44,7 +44,7 @@ public class DahuaDeviceService implements DeviceApi {
             NativeLong loginHandle = login(info.getIp(), info.getPort(), info.getUsername(), info.getPassword());
             loginHandles.put(id, loginHandle);
             // 开启智能事件监听
-            dataAnalyzeService.startListen(info.getId(), loginHandle);
+            dataAnalyzeService.startListen(info, loginHandle);
         }
     }
 

+ 0 - 1
applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/dto/AccessControlInfo.java

@@ -82,7 +82,6 @@ public class AccessControlInfo implements Serializable {
                 "eventTime=" + eventTime +
                 ", eventType=" + eventType +
                 ", cardNo='" + cardNo + '\'' +
-                ", imageData=" + Arrays.toString(imageData) +
                 ", openMethod=" + openMethod +
                 '}';
     }

+ 7 - 6
applications/device/device-sdk/src/main/java/com/usoftchina/smartschool/device/event/AccessControlEvent.java

@@ -1,6 +1,7 @@
 package com.usoftchina.smartschool.device.event;
 
 import com.usoftchina.smartschool.device.dto.AccessControlInfo;
+import com.usoftchina.smartschool.device.dto.DeviceInfo;
 import org.springframework.context.ApplicationEvent;
 
 /**
@@ -11,22 +12,22 @@ import org.springframework.context.ApplicationEvent;
  */
 public class AccessControlEvent extends ApplicationEvent {
 
-    private final String deviceId;
+    private final DeviceInfo device;
     private final AccessControlInfo accessControlInfo;
 
-    public AccessControlEvent(Object source, String deviceId, AccessControlInfo accessControlInfo) {
+    public AccessControlEvent(Object source, DeviceInfo device, AccessControlInfo accessControlInfo) {
         super(source);
-        this.deviceId = deviceId;
+        this.device = device;
         this.accessControlInfo = accessControlInfo;
     }
 
     /**
-     * 产生事件的门禁设备ID
+     * 产生事件的门禁设备
      *
      * @return
      */
-    public String getDeviceId() {
-        return deviceId;
+    public DeviceInfo getDevice() {
+        return device;
     }
 
     public AccessControlInfo getAccessControlInfo() {

+ 3 - 1
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/mapper/IcCardMapper.java

@@ -4,6 +4,8 @@ import com.usoftchina.smartschool.school.dto.SysSchoolDTO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * @Author ChenWei
  * @Date 2019/03/12
@@ -11,7 +13,7 @@ import org.apache.ibatis.annotations.Param;
 @Mapper
 public interface IcCardMapper {
 
-    String SelectParentOpenId(@Param("code") String code, @Param("schoolId") Long schoolId);
+    List<String> SelectParentOpenId(@Param("code") String code, @Param("schoolId") Long schoolId);
 
     SysSchoolDTO getSchoolIdByName(@Param("name") String name);
 

+ 20 - 13
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/service/impl/AccessControlServiceImpl.java

@@ -12,18 +12,19 @@ import com.usoftchina.smartschool.device.service.AccessControlService;
 import com.usoftchina.smartschool.file.api.FileApi;
 import com.usoftchina.smartschool.file.api.util.ByteArrayMultipartFile;
 import com.usoftchina.smartschool.file.dto.FileInfoDTO;
-import com.usoftchina.smartschool.file.dto.ImageFile;
 import com.usoftchina.smartschool.school.enums.NoticeTemplate;
 import com.usoftchina.smartschool.utils.DateUtils;
 import com.usoftchina.smartschool.utils.StringUtils;
 import com.usoftchina.smartschool.wechat.api.WechatApi;
 import com.usoftchina.smartschool.wechat.dto.MessageInfoDTO;
+import com.usoftchina.smartschool.wechat.dto.TransferDTO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -77,7 +78,6 @@ public class AccessControlServiceImpl implements AccessControlService{
          */
         byte[] imageData = info.getImageData();
         if (null != imageData && imageData.length > 0) {
-            ImageFile file = new ImageFile(information.get(0).getStuName(), imageData);
             Result<FileInfoDTO> fileInfo = null;
             try {
                 fileInfo = fileApi.upload(0L, new ByteArrayMultipartFile("file", information.get(0).getStuName() + ".jpg", "application/jpeg", imageData));
@@ -115,17 +115,24 @@ public class AccessControlServiceImpl implements AccessControlService{
             logger.error("模板未配置");
             return;
         }
-        MessageInfoDTO msg = new MessageInfoDTO();
-        msg.setUrl(wechatBaseUrl + "/accessnoticedetail/" + record.getRecord_id());
-        msg.setAppId(studentInfo.getAppId());
-        msg.setSecret(studentInfo.getSecret());
-        msg.setTouser(studentInfo.getOpenId());
-        msg.setTemplateId(schoolTemplate.getSt_templateid());
-        msg.setTitle((type == 1 ? "入" : "出") + "校提醒");
-        msg.setKeyword1(studentInfo.getStuName());
-        msg.setKeyword2(DateUtils.format());
-        msg.setRemark("您好! 你的孩子: " + studentInfo.getStuName() + (type == 1 ? " 进入" : " 离开") + "学校");
-        wechatApi.sendMsg(msg);
+        //支持发送多个人员
+        List<MessageInfoDTO> msgs = new ArrayList<>();
+        information.forEach(data -> {
+            MessageInfoDTO msg = new MessageInfoDTO();
+            msg.setUrl(wechatBaseUrl + "/accessnoticedetail/" + record.getRecord_id());
+            msg.setAppId(data.getAppId());
+            msg.setSecret(data.getSecret());
+            msg.setTouser(data.getOpenId());
+            msg.setTemplateId(schoolTemplate.getSt_templateid());
+            msg.setTitle((type == 1 ? "入" : "出") + "校提醒");
+            msg.setKeyword1(studentInfo.getStuName());
+            msg.setKeyword2(DateUtils.format());
+            msg.setRemark("您好! 您的孩子" + data.getStuName() + (type == 1 ? "进入" : "离开") + "学校");
+            msgs.add(msg);
+        });
+        if (msgs.size() > 0) {
+            wechatApi.largeMessages(new TransferDTO(msgs));
+        }
     }
 
     /**

+ 34 - 30
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/service/impl/IcCardServiceImpl.java

@@ -8,6 +8,7 @@ import com.usoftchina.smartschool.device.po.Transaction;
 import com.usoftchina.smartschool.device.service.IcCardService;
 import com.usoftchina.smartschool.school.dto.SysSchoolDTO;
 import com.usoftchina.smartschool.school.enums.NoticeTemplate;
+import com.usoftchina.smartschool.utils.CollectionUtils;
 import com.usoftchina.smartschool.utils.ObjectUtils;
 import com.usoftchina.smartschool.utils.http.HmacUtils;
 import com.usoftchina.smartschool.wechat.api.WechatApi;
@@ -61,36 +62,39 @@ public class IcCardServiceImpl implements IcCardService {
                 String oldType = accTransDetail.getAccTransType();
                 accTransDetail.setAccTransType(Transaction.getName(accTransDetail.getAccTransType()));
                 //构造messageInfo对象
-                String openId = icCardMapper.SelectParentOpenId(accTransDetail.getEmpNo(), schoolId);
-                if(!StringUtils.hasText(openId)){
-                    MessageInfoDTO messageInfo = new MessageInfoDTO();
-                    messageInfo.setMsgId(accTransDetail.getGuid());
-                    sb.append(accTransDetail.getGuid() + ",");
-                    messageInfo.setTouser(openId);
-                    messageInfo.setAppId(appId);
-                    messageInfo.setSecret(secret);
-                    messageInfo.setTemplateId(templateId);
-                    String accNo = accTransDetail.getAccNo();
-                    String cardNo = StringUtils.isEmpty(accNo) ? null : accNo.substring(accTransDetail.getAccNo().length() - 4);
-                    String header = "您好,您的小孩" + accTransDetail.getEmpName() + "在校的校园卡(卡号:*** " + cardNo + ")发生如下交易";
-                    messageInfo.setTitle(header);
-                    Date accTransDay = accTransDetail.getAccTransDay();
-                    if (null != accTransDay) {
-                        messageInfo.setKeyword1(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(accTransDetail.getAccTransDay()));
-                    }
-                    if (Integer.parseInt(oldType) > 15) {
-                        messageInfo.setKeyword2(String.format("%.2f", accTransDetail.getoMoneyValue()));
-                    } else {
-                        messageInfo.setKeyword2(String.format("%.2f", accTransDetail.getiMoneyValue()));
-                    }
-                    messageInfo.setKeyword3(accTransDetail.getAccTransType());
-                    messageInfo.setKeyword4(String.format("%.2f", accTransDetail.getCardMoneyValue()));
-                    messageInfo.setRemark("感谢您使用!");
-                    messageInfoList.add(messageInfo);
-                }else {
-                    logger.info("GUID={}未找到对应的推送人", accTransDetail.getGuid());
+                List<String> openIds = icCardMapper.SelectParentOpenId(accTransDetail.getEmpNo(), schoolId);
+                if (!CollectionUtils.isEmpty(openIds)) {
+                    openIds.forEach(openId -> {
+                        if (StringUtils.hasText(openId)) {
+                            MessageInfoDTO messageInfo = new MessageInfoDTO();
+                            messageInfo.setMsgId(accTransDetail.getGuid());
+                            sb.append(accTransDetail.getGuid() + ",");
+                            messageInfo.setTouser(openId);
+                            messageInfo.setAppId(appId);
+                            messageInfo.setSecret(secret);
+                            messageInfo.setTemplateId(templateId);
+                            String accNo = accTransDetail.getAccNo();
+                            String cardNo = StringUtils.isEmpty(accNo) ? null : accNo.substring(accTransDetail.getAccNo().length() - 4);
+                            String header = "您好,您孩子" + accTransDetail.getEmpName() + "的校园卡(卡号:*** " + cardNo + ")发生如下交易";
+                            messageInfo.setTitle(header);
+                            Date accTransDay = accTransDetail.getAccTransDay();
+                            if (null != accTransDay) {
+                                messageInfo.setKeyword1(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(accTransDetail.getAccTransDay()));
+                            }
+                            if (Integer.parseInt(oldType) > 15) {
+                                messageInfo.setKeyword2(String.format("%.2f", accTransDetail.getoMoneyValue()));
+                            } else {
+                                messageInfo.setKeyword2(String.format("%.2f", accTransDetail.getiMoneyValue()));
+                            }
+                            messageInfo.setKeyword3(accTransDetail.getAccTransType());
+                            messageInfo.setKeyword4(String.format("%.2f", accTransDetail.getCardMoneyValue()));
+                            messageInfo.setRemark("谢谢使用!");
+                            messageInfoList.add(messageInfo);
+                        } else {
+                            logger.info("GUID={}未找到对应的推送人", accTransDetail.getGuid());
+                        }
+                    });
                 }
-
             });
             //3.传输
             Result result = wechatApi.sendOutMessages(JSON.toJSONString(messageInfoList));
@@ -117,7 +121,7 @@ public class IcCardServiceImpl implements IcCardService {
                 }
             }*/
         }else {
-            logger.error("对应学校名{}或学校{}未找到",sysSchoolDTO.getSchool_name(),sysSchoolDTO.getSchool_id());
+            logger.error("对应学校{}未找到",school);
         }
         return null;
     }

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

@@ -15,7 +15,7 @@
       (SELECT stu_id FROM sys_student WHERE stu_number = #{code} and school_id = #{schoolId})
     )
     and school_id=#{schoolId}
-    and   ifnull(openid,'')  != ''  limit 0,1
+    and   ifnull(openid,'')  != ''
   </select>
 
   <select id="selectTemplateId" resultType="string">

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

@@ -72,10 +72,32 @@ public class CurriculumController {
         return Result.success();
     }
 
+    /**
+     * 批量发布
+     * @param batchDealBaseDTO
+     * @return
+     */
+    @PostMapping("/batchPublish")
+    public Result batchPublish(@RequestBody BatchDealBaseDTO batchDealBaseDTO){
+        curriculumService.batchPublish(batchDealBaseDTO);
+        return Result.success();
+    }
+
     //取消发布
     @PostMapping("/republish/{id}")
     public Result republish(@PathVariable("id") Long id){
         curriculumService.republish(id);
         return Result.success();
     }
+
+    /**
+     * 批量取消发布
+     * @param batchDealBaseDTO
+     * @return
+     */
+    @PostMapping("/batchRepublish")
+    public Result batchRepublish(@RequestBody BatchDealBaseDTO batchDealBaseDTO){
+        curriculumService.batchRepublish(batchDealBaseDTO);
+        return Result.success();
+    }
 }

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

@@ -62,9 +62,21 @@ public interface CurriculumService {
      */
     void publish(Long id);
 
+    /**
+     * 批量发布
+     * @param batchDealBaseDTO
+     */
+    void batchPublish(BatchDealBaseDTO batchDealBaseDTO);
+
     /**
      * 取消发布
      * @param id
      */
     void republish(Long id);
+
+    /**
+     * 批量取消发布
+     * @param batchDealBaseDTO
+     */
+    void batchRepublish(BatchDealBaseDTO batchDealBaseDTO);
 }

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

@@ -3,6 +3,7 @@ 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.common.service.MessageLogService;
 import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.exception.BizExceptionCode;
 import com.usoftchina.smartschool.school.mapper.SysClazzMapper;
@@ -32,6 +33,11 @@ public class ClassServiceImpl implements ClassService{
     private SysStudentMapper sysStudentMapper;
     @Autowired
     private SysTeacherMapper sysTeacherMapper;
+    @Autowired
+    private MessageLogService messageLogService;
+
+    private static final String CODE = "Class";
+    private static final String NAME = "班级资料";
 
     @Override
     public ClassForm getFormdata(Long id) {
@@ -69,6 +75,7 @@ public class ClassServiceImpl implements ClassService{
         //更新从表数据
         List<SysTeacherClazz> updateDetails = new ArrayList<>();
         //新增
+        DocBaseDTO docBaseDTO = null;
         if (StringUtils.isEmpty(id) || "0".equals(id.toString())) {
             clazz.setClazz_status(1);
             clazz.setClazz_nickname(clazz.getClazz_grade() + clazz.getClazz_name());
@@ -78,7 +85,9 @@ public class ClassServiceImpl implements ClassService{
                 teacher.setClazz_id(clazz.getClazz_id());
                 sysClazzMapper.insertTeacher(teacher);
             }
-            return new DocBaseDTO(clazz.getClazz_id());
+            docBaseDTO = new DocBaseDTO(clazz.getClazz_id(), CODE, NAME);
+            messageLogService.save(docBaseDTO);
+            return docBaseDTO;
         }
         //更新
         sysClazzMapper.updateByPrimaryKeySelective(clazz);
@@ -109,7 +118,9 @@ public class ClassServiceImpl implements ClassService{
                 sysClazzMapper.updateTeacher(item);
             }
         }
-        return new DocBaseDTO(clazz.getClazz_id());
+        docBaseDTO = new DocBaseDTO(clazz.getClazz_id(), CODE, NAME);
+        messageLogService.update(docBaseDTO);
+        return docBaseDTO;
     }
 
     @Override
@@ -133,12 +144,16 @@ public class ClassServiceImpl implements ClassService{
         if (check > 0) {
             throw new BizException(BizExceptionCode.EXISTS_CURRICULUM);
         }
+        DocBaseDTO docBaseDTO = new DocBaseDTO(id, CODE, NAME);
         sysClazzMapper.deleteByPrimaryKey(id);
         sysStudentMapper.deleteTeacher(id);
+        messageLogService.delete(docBaseDTO);
     }
 
     @Override
     public void deleteDetail(Long id) {
+        DocBaseDTO docBaseDTO = new DocBaseDTO(id, CODE, NAME);
         sysTeacherMapper.deleteDetail(id);
+        messageLogService.deleteDetail(docBaseDTO);
     }
 }

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

@@ -15,6 +15,7 @@ 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.Operation;
 import com.usoftchina.smartschool.school.po.SubjectDO;
 import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
 import com.usoftchina.smartschool.school.wxschool.utils.StringUtils;
@@ -181,7 +182,7 @@ public class CurriculumServiceImpl implements CurriculumService {
                     curriculumMapper.updateDetailSelective(updateList);
                 }
             }
-            messageLogService.save(new DocBaseDTO(main.getId(), CODE, NAME));
+            messageLogService.update(new DocBaseDTO(main.getId(), CODE, NAME));
         }
         return new DocBaseDTO(main.getId(), CODE, NAME);
     }
@@ -302,18 +303,50 @@ public class CurriculumServiceImpl implements CurriculumService {
 
     @Override
     public void publish(Long id) {
-        if(org.springframework.util.StringUtils.isEmpty(id) || "0".equals(id)) {
-            return;
+        if(null == id || 0 == id) {
+            throw new BizException(BizExceptionCode.USELESS_DATA);
         }
+        //同一个班级只允许有一张有效的课表
+        String clazzId = curriculumMapper.selectMain(id).getClazzId();
+        curriculumMapper.updateMainBeforePublish(clazzId);
+        curriculumMapper.updateDetailBeforePublish(clazzId);
+
         curriculumMapper.updateByPublish(id);
-        curriculumMapper.updateByPublishFrom(id);
+        curriculumMapper.updateByPublishFrom(id, 1L);
+        DocBaseDTO docBaseDTO = new DocBaseDTO(id, CODE,  NAME);
+        messageLogService.customizeLog(docBaseDTO, Operation.PUBLISH);
+    }
+
+    @Override
+    public void batchPublish(BatchDealBaseDTO batchDealBaseDTO) {
+        List<DocBaseDTO> docBaseDTOList = batchDealBaseDTO.getBaseDTOs();
+        if (CollectionUtils.isEmpty(docBaseDTOList)) {
+            throw new BizException(BizExceptionCode.USELESS_DATA);
+        }
+        for (DocBaseDTO docBaseDTO : docBaseDTOList) {
+            publish(docBaseDTO.getId());
+        }
     }
 
     @Override
     public void republish(Long id) {
-        if(org.springframework.util.StringUtils.isEmpty(id) || "0".equals(id)) {
-            return;
+        if(null == id || 0 == id) {
+            throw new BizException(BizExceptionCode.USELESS_DATA);
         }
         curriculumMapper.updateByRepublish(id);
+        curriculumMapper.updateByPublishFrom(id, 0L);
+        DocBaseDTO docBaseDTO = new DocBaseDTO(id, CODE,  NAME);
+        messageLogService.customizeLog(docBaseDTO, Operation.REPUBLISH);
+    }
+
+    @Override
+    public void batchRepublish(BatchDealBaseDTO batchDealBaseDTO) {
+        List<DocBaseDTO> docBaseDTOList = batchDealBaseDTO.getBaseDTOs();
+        if (CollectionUtils.isEmpty(docBaseDTOList)) {
+            throw new BizException(BizExceptionCode.USELESS_DATA);
+        }
+        for (DocBaseDTO docBaseDTO : docBaseDTOList) {
+            republish(docBaseDTO.getId());
+        }
     }
 }

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

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.usoftchina.smartschool.context.BaseContextHolder;
 import com.usoftchina.smartschool.exception.BizException;
 import com.usoftchina.smartschool.school.basic.service.GradeService;
+import com.usoftchina.smartschool.school.common.service.MessageLogService;
 import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.exception.BizExceptionCode;
 import com.usoftchina.smartschool.school.mapper.*;
@@ -46,6 +47,12 @@ public class GradeServiceImpl implements GradeService{
     @Autowired
     private HomeWorkMapper homeWorkMapper;
 
+    @Autowired
+    private MessageLogService messageLogService;
+
+    private static final String CODE = "Grade";
+    private static final String NAME = "年级资料";
+
     @Override
     public TreeNode getSchoolTree() {
         Long school_id = BaseContextHolder.getSchoolId();
@@ -152,6 +159,12 @@ public class GradeServiceImpl implements GradeService{
                 throw new BizException(12345, err.toString());
             }
             for (SysClazz  cla : clazzes) {
+                Integer check = 0;
+                //检测班级
+                check = sysClazzMapper.countClazz(cla.getClazz_name(), cla.getClazz_grade() ,schoolId);
+                if (check > 0) {
+                    throw new BizException(BizExceptionCode.EXISTS_CLAZZ);
+                }
                 sysClazzMapper.insertSelective(cla);
             }
             dataImportMapper.updateDataImport(id);
@@ -173,7 +186,9 @@ public class GradeServiceImpl implements GradeService{
             throw new BizException(BizExceptionCode.REPEAT_GRADE_NAME);
         }
         sysGradeMapper.insertGrade(sysGrade);
-        return new DocBaseDTO(sysGrade.getGrade_id());
+        DocBaseDTO docBaseDTO = new DocBaseDTO(sysGrade.getGrade_id(), CODE,  NAME);
+        messageLogService.save(docBaseDTO);
+        return docBaseDTO;
     }
 
     @Override
@@ -191,7 +206,8 @@ public class GradeServiceImpl implements GradeService{
         sysClazz.setClazz_grade(gradeData.getGrade_name());
         sysClazz.setClazz_nickname(gradeData.getGrade_name()+sysClazz.getClazz_name());
         sysClazzMapper.insertSelective(sysClazz);
-        return new DocBaseDTO(sysClazz.getClazz_id());
+        DocBaseDTO docBaseDTO = new DocBaseDTO(sysClazz.getClazz_id(), "Class", "班级资料");
+        return docBaseDTO;
     }
 
     @Override
@@ -205,7 +221,9 @@ public class GradeServiceImpl implements GradeService{
         if (check > 0) {
             throw new BizException(BizExceptionCode.EXISTS_CLASS);
         }
+        DocBaseDTO docBaseDTO = new DocBaseDTO(id, CODE,  NAME);
         sysGradeMapper.deleteByPrimaryKey(id);
+        messageLogService.delete(docBaseDTO);
     }
 
     @Override
@@ -224,17 +242,19 @@ public class GradeServiceImpl implements GradeService{
         if (check > 0) {
             throw new BizException(BizExceptionCode.EXISTS_TEACHER);
         }
-        //课表检测
+        //检测课表发布
         check = sysStudentMapper.repeatCurriculum(id);
         if (check > 0) {
             throw new BizException(BizExceptionCode.EXISTS_CURRICULUM);
         }
-        //检测科目
+        //检测作业发布
         check = homeWorkMapper.homeWorkRelease(id);
         if(check > 0){
             throw new BizException(BizExceptionCode.HOMEWORK_RELEASE);
         }
+        DocBaseDTO docBaseDTO = new DocBaseDTO(id, "Class", "班级资料");
         sysClazzMapper.deleteByPrimaryKey(id);
+        messageLogService.delete(docBaseDTO);
     }
 
     @Override
@@ -242,8 +262,15 @@ public class GradeServiceImpl implements GradeService{
         if (StringUtils.isEmpty(grade)) {
             throw new BizException(BizExceptionCode.USELESS_DATA);
         }
+        //名称发生修改时,更新对应的学生信息教师信息中的年级名称
+        SysGrade oldGrade = sysGradeMapper.selectByPrimaryKey(grade.getGrade_id());
+        if (!oldGrade.getGrade_name().equals(grade.getGrade_name())) {
+            List<SysClazz> clazzList = sysClazzMapper.selectBygrade(grade.getGrade_id());
+            sysStudentMapper.updateGradeName(grade.getGrade_name(), clazzList);
+        }
+        DocBaseDTO docBaseDTO = new DocBaseDTO(grade.getGrade_id(), CODE,  NAME);
         sysGradeMapper.updateByPrimaryKeySelective(grade);
-
+        messageLogService.update(docBaseDTO);
     }
 
     @Override
@@ -251,6 +278,13 @@ public class GradeServiceImpl implements GradeService{
         if (StringUtils.isEmpty(sysClass)) {
             throw new BizException(BizExceptionCode.USELESS_DATA);
         }
+        //名称发生修改时,更新对应的学生信息教师信息中的班级名称
+        SysClazz oldClazz = sysClazzMapper.selectByPrimaryKey(sysClass.getClazz_id());
+        if (!oldClazz.getClazz_name().equals(sysClass.getClazz_name())) {
+            sysStudentMapper.updateClazzName(sysClass.getClazz_name(), sysClass.getClazz_id());
+        }
+        DocBaseDTO docBaseDTO = new DocBaseDTO(sysClass.getClazz_id(), "Class", "班级资料");
         sysClazzMapper.updateByPrimaryKeySelective(sysClass);
+        messageLogService.update(docBaseDTO);
     }
 }

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

@@ -3,6 +3,8 @@ 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.SchoolService;
+import com.usoftchina.smartschool.school.common.service.MessageLogService;
+import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.exception.BizExceptionCode;
 import com.usoftchina.smartschool.school.mapper.SysSchoolMapper;
 import com.usoftchina.smartschool.school.po.SysSchool;
@@ -20,6 +22,12 @@ public class SchoolServiceImpl implements SchoolService {
     @Autowired
     private SysSchoolMapper sysSchoolMapper;
 
+    @Autowired
+    private MessageLogService messageLogService;
+
+    private static final String CODE = "School";
+    private static final String NAME = "学校信息";
+
     @Override
     public SysSchool getFormData(Long id) {
         if (null == id || "0".equals(id)) {
@@ -36,6 +44,7 @@ public class SchoolServiceImpl implements SchoolService {
             throw new BizException(BizExceptionCode.USELESS_DATA);
         }
         sysSchoolMapper.updateByPrimaryKeySelective(school);
+        messageLogService.update(new DocBaseDTO(school.getSchool_id(), CODE, NAME));
     }
 
     @Override

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

@@ -6,6 +6,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.SchoolTemplateService;
+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.exception.BizExceptionCode;
@@ -31,6 +32,12 @@ public class SchoolTemplateServiceImpl implements SchoolTemplateService {
     @Autowired
     private SchoolTemplateMapper schoolTemplateMapper;
 
+    @Autowired
+    private MessageLogService messageLogService;
+
+    private static final String CODE = "SchoolTemplate";
+    private static final String NAME = "消息模板";
+
     @Override
     public PageInfo<SchoolTemplate> getListData(PageRequest page, ListReqDTO listReqDTO) {
         PageHelper.startPage(page.getNumber(), page.getSize());
@@ -64,9 +71,11 @@ public class SchoolTemplateServiceImpl implements SchoolTemplateService {
         //新增
         if (StringUtils.isEmpty(formdata.getSt_id()) || "0".equals(formdata.getSt_id().toString())) {
             schoolTemplateMapper.insertSelective(formdata);
+            messageLogService.save(new DocBaseDTO(formdata.getSt_id(), CODE, NAME));
         } else {
             //更新
             schoolTemplateMapper.updateByPrimaryKeySelective(formdata);
+            messageLogService.update(new DocBaseDTO(formdata.getSt_id(), CODE, NAME));
         }
         return new DocBaseDTO(formdata.getSt_id());
     }

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

@@ -10,11 +10,14 @@ 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.common.service.MessageLogService;
 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.DataImportMapper;
+import com.usoftchina.smartschool.school.mapper.SysClazzMapper;
+import com.usoftchina.smartschool.school.mapper.SysGradeMapper;
 import com.usoftchina.smartschool.school.mapper.SysStudentMapper;
 import com.usoftchina.smartschool.school.po.*;
 import com.usoftchina.smartschool.utils.CollectionUtils;
@@ -41,6 +44,15 @@ public class StudentServiceImpl implements StudentService{
     private DataImportMapper dataImportMapper;
     @Autowired
     private AccountApi accountApi;
+    @Autowired
+    private SysGradeMapper sysGradeMapper;
+    @Autowired
+    private SysClazzMapper sysClazzMapper;
+    @Autowired
+    private MessageLogService messageLogService;
+
+    private static final String CODE = "Student";
+    private static final String NAME = "学生信息";
 
     @Override
     public PageInfo<SysStudent> getListData(PageRequest page, ListReqDTO listReqDTO) {
@@ -113,7 +125,9 @@ public class StudentServiceImpl implements StudentService{
                     sysStudentMapper.insertrelation(id, pr_id, item.getPs_relation());
                 }
             }
-            return new DocBaseDTO(id, null, "student");
+            DocBaseDTO docBaseDTO = new DocBaseDTO(id, CODE,  NAME);
+            messageLogService.save(docBaseDTO);
+            return docBaseDTO;
         }
         //更新学生
         if(sysStudentMapper.count(student.getStu_number(), student.getSchool_id()) > 0 &&
@@ -156,10 +170,19 @@ public class StudentServiceImpl implements StudentService{
         if (updateDetails.size() > 0) {
             sysStudentMapper.updateParents(updateDetails);
             for (SysParents item : updateDetails) {
+                SysParents sysParents = sysStudentMapper.selectParentByPhone(item.getPa_phone(), schoolid);
+                if (ObjectUtils.isEmpty(sysParents)) {
+                    //自动创建家长账户
+                    if (!StringUtils.isEmpty(item.getPa_phone())) {
+                        Long userId = createAccount(item.getPa_phone());
+                    }
+                }
                 sysStudentMapper.updateRelation(item.getParent_stu_id(), item.getPs_relation());
             }
         }
-        return new DocBaseDTO(id);
+        DocBaseDTO docBaseDTO = new DocBaseDTO(id, CODE,  NAME);
+        messageLogService.update(docBaseDTO);
+        return docBaseDTO;
     }
 
     private Long createAccount(String mobile){
@@ -209,6 +232,15 @@ public class StudentServiceImpl implements StudentService{
 
                 SysStudent stu = JSONObject.parseObject(json.toJSONString(), SysStudent.class);
 
+                //校验年级班级是否存在
+                SysGrade sysGrade = sysGradeMapper.selectByName(stu.getStu_grade(), schoolId);
+                if (ObjectUtils.isEmpty(sysGrade)) {
+                    throw new BizException(BizExceptionCode.NONGRADE);
+                }
+                SysClazz sysClazz = sysClazzMapper.selectByName(stu.getStu_class(), sysGrade.getGrade_id(), schoolId);
+                if (ObjectUtils.isEmpty(sysClazz)) {
+                    throw new BizException(BizExceptionCode.NONCLAZZ);
+                }
                 //学生不存在
                 if (null == student) {
                     stu.setSchool_id(schoolId);
@@ -269,6 +301,7 @@ public class StudentServiceImpl implements StudentService{
         }
         sysStudentMapper.deleteByPrimaryKey(id);
         sysStudentMapper.deleteRelation(id);
+        messageLogService.delete(new DocBaseDTO(id, CODE, NAME));
     }
 
     @Override
@@ -289,5 +322,6 @@ public class StudentServiceImpl implements StudentService{
             return;
         }
         sysStudentMapper.deleteRelationById(id);
+        messageLogService.deleteDetail(new DocBaseDTO(id, CODE, NAME));
     }
 }

+ 23 - 3
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/SubjectServiceImpl.java

@@ -6,13 +6,13 @@ 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.SubjectService;
+import com.usoftchina.smartschool.school.common.service.MessageLogService;
 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.SubjectMapper;
 import com.usoftchina.smartschool.school.po.Subject;
-import com.usoftchina.smartschool.school.po.SysStudent;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
@@ -28,7 +28,11 @@ public class SubjectServiceImpl implements SubjectService {
 
     @Autowired
     private SubjectMapper subjectMapper;
+    @Autowired
+    private MessageLogService messageLogService;
 
+    private static final String CODE = "Subject";
+    private static final String NAME = "科目信息";
 
     @Override
     public PageInfo<Subject> getListData(PageRequest page, ListReqDTO listReqDTO) {
@@ -51,16 +55,31 @@ public class SubjectServiceImpl implements SubjectService {
         }
         Long id = formdata.getSubject_id();
         Long school = BaseContextHolder.getSchoolId();
+        Integer check = 0;
+        DocBaseDTO docBaseDTO = null;
         if (StringUtils.isEmpty(id) || "0".equals(id.toString())) {
             formdata.setSchool_id(school);
             formdata.setSubject_status(1);
+            //检测科目是否存在
+            check = subjectMapper.checkSubject(formdata.getSubject_name(), BaseContextHolder.getSchoolId());
+            if (check > 0) {
+                throw new BizException(BizExceptionCode.EXISTS_SUBJECT);
+            }
             subjectMapper.insertSelective(formdata);
-           id = formdata.getSubject_id();
+            id = formdata.getSubject_id();
+            docBaseDTO = new DocBaseDTO(id, CODE, NAME);
+            messageLogService.save(docBaseDTO);
         } else {
             //更新
+            check = subjectMapper.checkSubject(formdata.getSubject_name(), BaseContextHolder.getSchoolId());
+            if (check > 0) {
+                throw new BizException(BizExceptionCode.EXISTS_SUBJECT);
+            }
             subjectMapper.updateByPrimaryKeySelective(formdata);
+            docBaseDTO = new DocBaseDTO(formdata.getSubject_id(), CODE,  NAME);
+            messageLogService.update(docBaseDTO);
         }
-        return new DocBaseDTO(formdata.getSubject_id());
+        return docBaseDTO;
     }
 
     @Override
@@ -92,5 +111,6 @@ public class SubjectServiceImpl implements SubjectService {
             throw new BizException(BizExceptionCode.EXISTS_TEACHER_CLASS);
         }
         subjectMapper.deleteByPrimaryKey(id);
+        messageLogService.delete(new DocBaseDTO(id, CODE,  NAME));
     }
 }

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

@@ -10,6 +10,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.common.service.MessageLogService;
 import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
 import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.dto.ListReqDTO;
@@ -42,6 +43,11 @@ public class TeacherServiceImpl implements TeacherService{
     private DataImportMapper dataImportMapper;
     @Autowired
     private AccountApi accountApi;
+    @Autowired
+    private MessageLogService messageLogService;
+
+    private static final String CODE = "Teacher";
+    private static final String NAME = "教职工信息";
 
     @Override
     public PageInfo<SysTeacher> getListData(PageRequest page, ListReqDTO listReqDTO) {
@@ -78,6 +84,7 @@ public class TeacherServiceImpl implements TeacherService{
         Long school_id = BaseContextHolder.getSchoolId();
         formdata.setSchool_id(school_id);
         formdata.setTeacher_status(1);
+        DocBaseDTO docBaseDTO = null;
         //新增教师
         if (StringUtils.isEmpty(formdata.getTeacher_id()) || "0".equals(formdata.getTeacher_id().toString())) {
             if(sysTeacherMapper.count(formdata.getTeacher_number(), formdata.getSchool_id()) > 0){
@@ -89,7 +96,8 @@ public class TeacherServiceImpl implements TeacherService{
                 formdata.setUser_id(userId);
             }
             sysTeacherMapper.insertSelective(formdata);
-
+            docBaseDTO = new DocBaseDTO(formdata.getTeacher_id(), CODE,  NAME);
+            messageLogService.save(docBaseDTO);
         } else {
             //更新教师
             if(sysTeacherMapper.count(formdata.getTeacher_number(), formdata.getSchool_id()) > 0 &&
@@ -97,8 +105,10 @@ public class TeacherServiceImpl implements TeacherService{
                 throw new BizException(BizExceptionCode.REPEAT_TEACHER_NUMBER);
             }
             sysTeacherMapper.updateByPrimaryKeySelective(formdata);
+            docBaseDTO = new DocBaseDTO(formdata.getTeacher_id(), CODE,  NAME);
+            messageLogService.update(docBaseDTO);
         }
-        return new DocBaseDTO(formdata.getTeacher_id(), null, null);
+        return docBaseDTO;
     }
 
     /**
@@ -151,6 +161,11 @@ public class TeacherServiceImpl implements TeacherService{
                         }else if (!"未婚".equals(json.get("teacher_marriage")) && !"已婚".equals(json.get("teacher_marriage"))) {
                             throw new BizException(BizExceptionCode.ILLEGAL_MARRIAGE);
                         }
+                        //校验教师工号是否已存在
+                        int count = sysTeacherMapper.count(json.getString("teacher_number"), schoolId);
+                        if (count > 0) {
+                            throw new BizException(500006, "教师工号" + json.getString("teacher_number") + "已存在");
+                        }
                     }
                     teacher = JSONObject.parseObject(json.toJSONString(), SysTeacher.class);
                     teacher.setSchool_id(schoolId);
@@ -160,6 +175,11 @@ public class TeacherServiceImpl implements TeacherService{
                         Long userId = createAccount(teacher);
                         teacher.setUser_id(userId);
                     }
+                    Integer count;
+                    count = sysTeacherMapper.count(teacher.getTeacher_number(),schoolId);
+                    if(count > 0){
+                        throw new BizException(BizExceptionCode.REPEAT_TEACHER_NUMBER);
+                    }
                     sysTeacherMapper.insertSelective(teacher);
                     teachers.add(teacher);
                     //年纪存在、需要更新
@@ -189,6 +209,7 @@ public class TeacherServiceImpl implements TeacherService{
         }
         sysTeacherMapper.deleteByPrimaryKey(id);
         sysTeacherMapper.deleteRelation(id);
+        messageLogService.delete(new DocBaseDTO(id, CODE,  NAME));
     }
 
     @Override

+ 13 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/controller/ScoreController.java

@@ -6,6 +6,7 @@ import com.usoftchina.smartschool.page.PageDefault;
 import com.usoftchina.smartschool.page.PageRequest;
 import com.usoftchina.smartschool.school.business.service.ScoreService;
 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.ScoreForm;
 import com.usoftchina.smartschool.school.po.ScoreImportList;
@@ -61,4 +62,16 @@ public class ScoreController {
         return Result.success();
     }
 
+    @PostMapping("/save")
+    public Result save(@RequestBody ScoreForm data) {
+        DocBaseDTO baseDTO = scoreService.save(data);
+        return Result.success(baseDTO);
+    }
+
+    @PostMapping("/deleteDetail/{id}")
+    public Result deleteDetail(@PathVariable("id") Long id){
+        scoreService.deleteDetail(id);
+        return Result.success();
+    }
+
 }

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

@@ -3,8 +3,10 @@ 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.*;
+import com.usoftchina.smartschool.school.po.ScoreForm;
+import com.usoftchina.smartschool.school.po.ScoreImportList;
 
 /**
  * @author: guq
@@ -22,4 +24,12 @@ public interface ScoreService {
     void publish(Long id);
 
     ScoreForm getFormdata(Long id);
+
+    DocBaseDTO save(ScoreForm data);
+
+    /**
+     * 删除成绩明细
+     * @param id
+     */
+    void deleteDetail(Long id);
 }

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

@@ -6,6 +6,7 @@ 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.common.service.MessageLogService;
 import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
 import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.dto.ListReqDTO;
@@ -18,6 +19,7 @@ import com.usoftchina.smartschool.wechat.api.WechatApi;
 import com.usoftchina.smartschool.wechat.dto.MessageInfoDTO;
 import com.usoftchina.smartschool.wechat.dto.TransferDTO;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 import org.springframework.util.StringUtils;
@@ -49,6 +51,15 @@ public class HomeWorkServiceImpl implements HomeWorkService{
     private WechatApi wechatApi;
     @Autowired
     private SchoolTemplateMapper schoolTemplateMapper;
+    @Autowired
+    private MessageLogService messageLogService;
+
+    private static final String CODE = "HomeWork";
+    private static final String NAME = "作业";
+
+
+    @Value("${smartschool.domain.wechat}")
+    private String wechatBaseUrl;
 
     @Override
     public DocBaseDTO save(HomeWork formdata) {
@@ -57,6 +68,7 @@ public class HomeWorkServiceImpl implements HomeWorkService{
         }
         Long school_id = BaseContextHolder.getSchoolId();
         formdata.setSchool_id(school_id);
+        DocBaseDTO docBaseDTO = null;
         //新增
         if (StringUtils.isEmpty(formdata.getTask_id()) || "0".equals(formdata.getTask_id().toString())) {
             formdata.setTask_status(2);
@@ -66,17 +78,24 @@ public class HomeWorkServiceImpl implements HomeWorkService{
             //获取时间
             Calendar calendar= Calendar.getInstance();
             formdata.setCreate_date(calendar.getTime());
+            /*
+            前端传入的task_creator已经是教师id,无序在去查询
             Long Creator = sysTeacherMapper.taskCreator(formdata.getTask_creator());
             formdata.setTask_creator(Creator);
+            */
             homeWorkMapper.insertSelective(formdata);
+            docBaseDTO = new DocBaseDTO(formdata.getTask_id(), CODE, NAME);
+            messageLogService.save(docBaseDTO);
         } else {
             //更新
             homeWorkMapper.updateByPrimaryKeySelective(formdata);
+            docBaseDTO = new DocBaseDTO(formdata.getTask_id(), CODE,  NAME);
+            messageLogService.update(docBaseDTO);
             if(formdata.getTask_status()==1){
                 publish(formdata.getTask_id());
             }
         }
-        return new DocBaseDTO(formdata.getTask_id());
+        return docBaseDTO;
     }
 
     @Override
@@ -102,6 +121,7 @@ public class HomeWorkServiceImpl implements HomeWorkService{
             throw new BizException(BizExceptionCode.TASK_RELEASE_STATUS);
         }
         homeWorkMapper.deleteByPrimaryKey(id);
+        messageLogService.delete(new DocBaseDTO(id, CODE,  NAME));
     }
 
     @Override
@@ -145,6 +165,7 @@ public class HomeWorkServiceImpl implements HomeWorkService{
         noticers.forEach(noticer -> {
             MessageInfoDTO msg = new MessageInfoDTO();
             msg.setTitle("作业提醒");
+            msg.setUrl(wechatBaseUrl + "/assignmentDetail/parent/" + id + "?stuId=" + noticer.getStuId() + "&parentId=" + noticer.getParentId());
             msg.setKeyword1(noticer.getSubject());
             msg.setKeyword2(DateUtils.format());
             msg.setKeyword3(data.getTask_context());
@@ -162,6 +183,8 @@ public class HomeWorkServiceImpl implements HomeWorkService{
             wechatApi.largeMessages(transferDTO);
         }
         homeWorkMapper.updateByPublish(id);
+        DocBaseDTO docBaseDTO = new DocBaseDTO(id, CODE, NAME);
+        messageLogService.customizeLog(docBaseDTO, Operation.PUBLISH);
     }
 
     /**

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

@@ -6,6 +6,7 @@ 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.common.service.MessageLogService;
 import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
 import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.dto.ListReqDTO;
@@ -14,10 +15,7 @@ import com.usoftchina.smartschool.school.exception.BizExceptionCode;
 import com.usoftchina.smartschool.school.mapper.NoticeMapper;
 import com.usoftchina.smartschool.school.mapper.SchoolTemplateMapper;
 import com.usoftchina.smartschool.school.mapper.SysSchoolMapper;
-import com.usoftchina.smartschool.school.po.Notify;
-import com.usoftchina.smartschool.school.po.SchoolNoticer;
-import com.usoftchina.smartschool.school.po.SchoolTemplate;
-import com.usoftchina.smartschool.school.po.SysSchool;
+import com.usoftchina.smartschool.school.po.*;
 import com.usoftchina.smartschool.utils.DateUtils;
 import com.usoftchina.smartschool.utils.StringUtils;
 import com.usoftchina.smartschool.wechat.api.WechatApi;
@@ -50,6 +48,12 @@ public class NoticeServiceImpl implements NoticeService{
     @Autowired
     private SchoolTemplateMapper schoolTemplateMapper;
 
+    @Autowired
+    private MessageLogService messageLogService;
+
+    private static final String CODE = "Notice";
+    private static final String NAME = "学校通知";
+
     @Value("${smartschool.domain.wechat}")
     private String baseWechatUrl;
 
@@ -61,6 +65,7 @@ public class NoticeServiceImpl implements NoticeService{
         }
         Long school_id = BaseContextHolder.getSchoolId();
         formdata.setSchool_id(school_id);
+        DocBaseDTO docBaseDTO = null;
         //新增
         if (StringUtils.isEmpty(formdata.getNotify_id()) || "0".equals(formdata.getNotify_id().toString())) {
             formdata.setNotify_status(2);
@@ -68,15 +73,18 @@ public class NoticeServiceImpl implements NoticeService{
             Calendar calendar= Calendar.getInstance();
             formdata.setCreate_date(calendar.getTime());
             noticeMapper.insertSelective(formdata);
-
+            docBaseDTO = new DocBaseDTO(formdata.getNotify_id(), CODE,  NAME);
+            messageLogService.save(docBaseDTO);
         } else {
             //更新
             noticeMapper.updateByPrimaryKeySelective(formdata);
+            docBaseDTO = new DocBaseDTO(formdata.getNotify_id(), CODE,  NAME);
+            messageLogService.update(docBaseDTO);
             if(formdata.getNotify_status()==1){
                 publish(formdata.getNotify_id());
             }
         }
-        return new DocBaseDTO(formdata.getNotify_id());
+        return docBaseDTO;
     }
 
     @Override
@@ -111,6 +119,7 @@ public class NoticeServiceImpl implements NoticeService{
             throw new BizException(BizExceptionCode.NOTICE_RELEASE_STATUS);
         }
         noticeMapper.deleteByPrimaryKey(id);
+        messageLogService.delete(new DocBaseDTO(id, CODE,  NAME));
     }
 
     @Override
@@ -139,28 +148,37 @@ public class NoticeServiceImpl implements NoticeService{
         if (StringUtils.isEmpty(template) || StringUtils.isEmpty(template.getSt_templateid())) {
             throw new BizException(BizExceptionCode.NULL_TEMPLATE);
         }
+        List<SchoolNoticer> noticerList = new ArrayList<>();
         noticers.forEach(noticer -> {
             MessageInfoDTO msg = new MessageInfoDTO();
             String endUrl = null;
-            if (noticer.getType() == 1) {
-                endUrl = "/parent/" + id + "?stuId=" + noticer.getPersonId();
-            }else {
-                endUrl = "/teacher/" + id + "?teacherId=" + noticer.getPersonId();
+            if (!StringUtils.isEmpty(noticer.getType()) && !StringUtils.isEmpty(noticer.getPersonId())) {
+                if ("1".equals(noticer.getType().split(",")[0])) {
+                    endUrl = "/parent/" + id + "?stuId=" + noticer.getPersonId().split(",")[0];
+                    noticer.setType("1");
+                    noticer.setPersonId(noticer.getPersonId().split(",")[0]);
+                } else {
+                    endUrl = "/teacher/" + id + "?teacherId=" + noticer.getPersonId().split(",")[0];
+                    noticer.setType("0");
+                    noticer.setPersonId(noticer.getPersonId().split(",")[0]);
+                }
+                noticerList.add(noticer);
+                String url = baseWechatUrl + "/notifyDetail" + endUrl;
+                msg.setUrl(url);
+                msg.setTitle(data.getNotify_title());
+                msg.setKeyword1(school.getSchool_name());
+                msg.setKeyword2("校办公室");
+                msg.setKeyword3(DateUtils.format());
+                msg.setKeyword4(data.getNotify_details());
+                msg.setRemark("谢谢使用!");
+                msg.setTemplateId(template.getSt_templateid());
+                msg.setTouser(noticer.getOpenid());
+                msg.setAppId(school.getSchool_appid());
+                msg.setSecret(school.getSchool_secret());
+                msgs.add(msg);
             }
-            String url = baseWechatUrl + "/notifyDetail" + endUrl;
-            msg.setUrl(url);
-            msg.setTitle(data.getNotify_title());
-            msg.setKeyword1(school.getSchool_name());
-            msg.setKeyword2("校办公室");
-            msg.setKeyword3(DateUtils.format());
-            msg.setKeyword4(data.getNotify_details());
-            msg.setRemark("谢谢使用!");
-            msg.setTemplateId(template.getSt_templateid());
-            msg.setTouser(noticer.getOpenid());
-            msg.setAppId(school.getSchool_appid());
-            msg.setSecret(school.getSchool_secret());
-            msgs.add(msg);
         });
+        noticeMapper.insertDetailBySelective(noticerList, id);
         if (msgs.size() > 0) {
             TransferDTO transferDTO = new TransferDTO();
             transferDTO.setData(msgs);
@@ -168,5 +186,6 @@ public class NoticeServiceImpl implements NoticeService{
             wechatApi.largeMessages(transferDTO);
         }
         noticeMapper.updateByPublish(id);
+        messageLogService.customizeLog(new DocBaseDTO(id, CODE, NAME), Operation.PUBLISH);
     }
 }

+ 135 - 2
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/ScoreServiceImpl.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.business.service.ScoreService;
+import com.usoftchina.smartschool.school.common.service.MessageLogService;
 import com.usoftchina.smartschool.school.dto.BatchDealBaseDTO;
 import com.usoftchina.smartschool.school.dto.DocBaseDTO;
 import com.usoftchina.smartschool.school.dto.ListReqDTO;
@@ -14,6 +15,7 @@ import com.usoftchina.smartschool.school.enums.NoticeTemplate;
 import com.usoftchina.smartschool.school.exception.BizExceptionCode;
 import com.usoftchina.smartschool.school.mapper.*;
 import com.usoftchina.smartschool.school.po.*;
+import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
 import com.usoftchina.smartschool.utils.CollectionUtils;
 import com.usoftchina.smartschool.utils.DateUtils;
 import com.usoftchina.smartschool.wechat.api.WechatApi;
@@ -24,10 +26,12 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author: guq
@@ -64,6 +68,12 @@ public class ScoreServiceImpl implements ScoreService{
     @Autowired
     private SubjectMapper subjectMapper;
 
+    @Autowired
+    private MessageLogService messageLogService;
+
+    private static final String CODE = "Score";
+    private static final String NAME = "成绩发布";
+
     @Override
     public PageInfo<ScoreImportList> getListData(PageRequest page, ListReqDTO listReqDTO) {
         PageHelper.startPage(page.getNumber(), page.getSize());
@@ -91,6 +101,7 @@ public class ScoreServiceImpl implements ScoreService{
     }
 
     @Override
+    @Transactional
     public void delete(Long id) {
         if (StringUtils.isEmpty(id) || "0".equals(id)) {
             return;
@@ -102,6 +113,8 @@ public class ScoreServiceImpl implements ScoreService{
             throw new BizException(BizExceptionCode.EXISTS_TEACHER_CLASS);
         }
         scoreMapper.deleteByPrimaryKey(id);
+        scoreMapper.deleteByPrimaryDetailKey(id);
+        messageLogService.delete(new DocBaseDTO(id, CODE, NAME));
     }
 
     @Override
@@ -176,7 +189,12 @@ public class ScoreServiceImpl implements ScoreService{
                 scoreImport.setSi_grade(grade);
                 scoreImport.setSi_gradeid(gradeId);
                 scoreImport.setSi_publish(0);
+                if (!"全年级".equals(scoreImport.getSi_examscope()) && !"班级".equals(scoreImport.getSi_examscope())) {
+                    throw new BizException(BizExceptionCode.EXAM_SCOPE);
+                }
                 scoreMapper.insertScoreImport(scoreImport);
+                List<Subject> subjectList = subjectMapper.selectByConditon(null, schoolId);
+                List<String> subjectNameList = subjectList.stream().map(Subject::getSubject_name).collect(Collectors.toList());
                 //添加从表
                 if (data.size() > 0) {
                     for (DataImportDetail dataDetail : data) {
@@ -185,6 +203,9 @@ public class ScoreServiceImpl implements ScoreService{
                             if (StringUtils.isEmpty(detail.getSd_stu())) {
                                 throw new BizException(BizExceptionCode.USELESS_DATA);
                             }
+                            if (!subjectNameList.contains(detail.getSd_subject())) {
+                                throw new BizException(500006, "科目" + detail.getSd_subject() + "不存在");
+                            }
                             List<SysStudent> students = sysStudentMapper.selectByConditon("stu_name='" + detail.getSd_stu() + "' and clazz_id=" + classId, schoolId);
                             if (students.size() == 0) {
                                 throw new BizException(500006, "班级: " + class_ + " 不存在学生: " + detail.getSd_stu());
@@ -223,6 +244,7 @@ public class ScoreServiceImpl implements ScoreService{
         SysSchool school = sysSchoolMapper.selectByPrimaryKey(BaseContextHolder.getSchoolId());
         ScoreImport main = scoreMapper.selectByPrimaryKey(id);
         List<ScoreImportdetail> details = scoreMapper.selectDetail(id);
+        List<Subject> subjectList = subjectMapper.selectByConditon(null, school_id);
         for (ScoreImportdetail detail : details) {
             appScore = new StuScore();
             appScore.setSchool_id(school_id);
@@ -232,11 +254,14 @@ public class ScoreServiceImpl implements ScoreService{
             appScore.setGrade_id(main.getSi_gradeid());
             appScore.setGrade_name(main.getSi_grade());
             appScore.setScore_date(main.getSi_examdate());
+            Long subjectId = subjectList.stream().filter( subject -> subject.getSubject_name().equals(detail.getSd_subject())).findFirst().get().getSubject_id();
+            appScore.setSubject_id(subjectId);
             appScore.setScore_name(detail.getSd_subject());
             appScore.setScore_num(detail.getSd_score());
             appScore.setScore_scope(main.getSi_examscope());
             appScore.setStu_id(detail.getSd_stuid());
             appScore.setStu_name(detail.getSd_stu());
+            appScore.setScore_type(main.getSi_examtitle());
             appScores.add(appScore);
         }
         scoreMapper.batchInsert(appScores);
@@ -252,13 +277,13 @@ public class ScoreServiceImpl implements ScoreService{
         }
         noticers.forEach(noticer -> {
             MessageInfoDTO msg = new MessageInfoDTO();
-            msg.setTitle("您好,请查收您孩" + noticer.getStuName() + "的成绩单");
+            msg.setTitle("您好,请查收您孩" + noticer.getStuName() + "的成绩单");
             msg.setKeyword1(noticer.getStuName());
             msg.setKeyword2(noticer.getStuNo());
             msg.setKeyword3(main.getSi_examtitle());
             msg.setKeyword4(DateUtils.format(main.getSi_examdate(),"yyyy-MM-dd"));
             msg.setKeyword5(school.getSchool_name());
-            msg.setRemark("成绩为:" + noticer.getScore());
+            msg.setRemark(noticer.getSubject()+ "成绩为:" + new BigDecimal(noticer.getScore()).toPlainString());
             msg.setTemplateId(template.getSt_templateid());
             msg.setTouser(noticer.getOpenid());
             msg.setAppId(school.getSchool_appid());
@@ -273,6 +298,7 @@ public class ScoreServiceImpl implements ScoreService{
         }
         //更新已转标志
         scoreMapper.updateTurnPublish(id);
+        messageLogService.customizeLog(new DocBaseDTO(id, CODE, NAME), Operation.PUBLISH);
     }
 
     @Override
@@ -287,4 +313,111 @@ public class ScoreServiceImpl implements ScoreService{
         form.setItems(detail);
         return form;
     }
+
+    @Override
+    @Transactional
+    public DocBaseDTO save(ScoreForm data) {
+        if (ObjectUtils.isEmpty(data)){
+            throw new BizException(BizExceptionCode.EMPTY_DATA);
+        }
+        ScoreImport main = data.getMain();
+        List<ScoreImportdetail> items = data.getItems();
+        Long schoolId = BaseContextHolder.getSchoolId();
+        //Long gradeId = sysGradeMapper.selectByName(main.getSi_grade(), schoolId).getGrade_id();
+
+        Long classId = 0L;
+        Long gradeId = 0L;
+        SysClazz sysClazz = sysClazzMapper.selectByClazzName(main.getSi_grade(), main.getSi_class() , schoolId);
+        if(sysClazz != null) {
+            classId = sysClazz.getClazz_id();
+            gradeId = sysClazz.getGrade_id();
+        }
+        if (null == main.getSi_id() || 0 == main.getSi_id()){
+            main.setSi_date(new Date());
+            main.setSi_creator(BaseContextHolder.getUserName());
+            main.setSi_creatorid(BaseContextHolder.getUserId());
+            main.setSchool_id(schoolId);
+            main.setSi_publish(0);
+            main.setSi_gradeid(gradeId);
+            main.setSi_classid(classId);
+            scoreMapper.insertScoreImport(main);
+            if (null != items && items.size() > 0) {
+                for (ScoreImportdetail item : items) {
+                    if(!StringUtils.isEmpty(item.getSd_stuNumber()) && !StringUtils.isEmpty(item.getSd_stu())) {
+                        Integer check = 0;
+                        //学生检测
+                        check = sysStudentMapper.count(item.getSd_stuNumber(), schoolId);
+                        if (check < 1) {
+                            throw new BizException(BizExceptionCode.NONSTU);
+                        }
+                        check = sysStudentMapper.countName(item.getSd_stu(), schoolId);
+                        if (check < 1) {
+                            throw new BizException(BizExceptionCode.NONSTU);
+                        }
+                        SysStudent sysStudent = sysStudentMapper.selectByStudent(item.getSd_stu() ,classId,schoolId);
+                        if(sysStudent == null){
+                            throw new BizException(BizExceptionCode.NONSTUS);
+                        }
+                        Long stuId = sysStudent.getStu_id();
+                        item.setSd_stuid(stuId);
+                    }
+                    item.setSchool_id(schoolId);
+                    item.setSd_siid(main.getSi_id());
+                    //插入从表
+                    scoreMapper.insertScoreImportDetail(item);
+                }
+            }
+
+        }else{
+            scoreMapper.updateScoreImport(main);
+            if (null != items && items.size() > 0) {
+                List<ScoreImportdetail> insertList = new ArrayList<ScoreImportdetail>();
+                List<ScoreImportdetail> updateList = new ArrayList<ScoreImportdetail>();
+                for (ScoreImportdetail item : items) {
+
+                    if(!StringUtils.isEmpty(item.getSd_stuNumber()) && !StringUtils.isEmpty(item.getSd_stu())) {
+                        Integer check = 0;
+                        //学生检测
+                        check = sysStudentMapper.count(item.getSd_stuNumber(), schoolId);
+                        if (check < 1) {
+                            throw new BizException(BizExceptionCode.NONSTU);
+                        }
+                        check = sysStudentMapper.countName(item.getSd_stu(), schoolId);
+                        if (check < 1) {
+                            throw new BizException(BizExceptionCode.NONSTU);
+                        }
+                        SysStudent sysStudent = sysStudentMapper.selectByStudent(item.getSd_stu() ,classId,schoolId);
+                        if(sysStudent == null){
+                            throw new BizException(BizExceptionCode.NONSTUS);
+                        }
+                        Long stuId = sysStudent.getStu_id();
+                        item.setSd_stuid(stuId);
+                    }
+                    item.setSchool_id(schoolId);
+                    item.setSd_siid(main.getSi_id());
+
+                    if(item.getSd_id() != null && 0 != item.getSd_id()) {
+                        updateList.add(item);
+                    }else {
+                        insertList.add(item);
+                    }
+                    if (insertList.size() > 0) {
+                        scoreMapper.insertDetailSelective(insertList);
+                    }
+                    if (updateList.size() > 0) {
+                        scoreMapper.updateDetailSelective(updateList);
+                    }
+
+                }
+            }
+        }
+        return new DocBaseDTO(main.getSi_id(), CODE, NAME);
+    }
+
+    @Override
+    public void deleteDetail(Long id) {
+        scoreMapper.deleteDetail(id);
+        messageLogService.deleteDetail(new DocBaseDTO(id, CODE, NAME));
+    }
+
 }

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

@@ -15,12 +15,16 @@ public enum BizExceptionCode implements BaseExceptionCode {
     EXISTS_STU(500003,"存在学生,无法删除"),
     NONGRADE(500004, "年级名称不存在"),
     NONCLAZZ(500005, "班级名称不存在"),
+    EXAM_SCOPE(5000014, "考试范围只有全年级和班级"),
     REPEAT_TEACHER_NUMBER(500006, "教师工号重复"),
-    NONSTU(500006, "学生不存在"),
+    NONSTU(500007, "学生不存在"),
+    NONSTUS(500008, "这个班没有这个学生"),
     EXISTS_TEACHER(500004,"存在任课教师,无法删除"),
     EXISTS_CURRICULUM(500005,"存在课表,无法删除"),
     EXISTS_TEACHER_CLASS(500006,"存在任课班级,无法删除"),
     TEACHERS_EXISTS_CLASS(500006,"%s存在任课班级,无法删除"),
+    EXISTS_SUBJECT(500007,"科目已存在"),
+    EXISTS_CLAZZ(500008,"班级可能存在重复"),
     EXISTS_SUBJECT_TEACHER(5000012, "该课程存在班级与任课教师,禁止删除"),
     EXISTS_SCORE_PUBLISH(5000013, "存在已发布成绩,禁止删除"),
     EXISTS_CLASS(500011, "存在班级,无法删除"),

+ 33 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/interceptor/ServiceFeignInterceptor.java

@@ -0,0 +1,33 @@
+package com.usoftchina.smartschool.school.interceptor;
+
+import com.usoftchina.smartschool.context.BaseContextHolder;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author yingp
+ * @date 2018/10/2
+ */
+public class ServiceFeignInterceptor implements RequestInterceptor {
+    /*@Autowired
+    private AuthConfig authConfig;*/
+
+    private static final String AUTHHEADER = "Authorization";
+
+    private Logger logger = LoggerFactory.getLogger(ServiceFeignInterceptor.class);
+
+    public ServiceFeignInterceptor() {
+    }
+
+    @Override
+    public void apply(RequestTemplate requestTemplate) {
+        logger.debug("{}: {}", AUTHHEADER, BaseContextHolder.getToken());
+        requestTemplate.header(AUTHHEADER, BaseContextHolder.getToken());
+    }
+
+    /*public void setAuthConfig(AuthConfig authConfig) {
+        this.authConfig = authConfig;
+    }*/
+}

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

@@ -85,13 +85,34 @@ public interface CurriculumMapper {
 
     int courseStatus(Long id);
 
+    /**
+     * 发布前更新班级课表主表状态为未发布
+     * @param clazzId
+     * @return
+     */
+    int updateMainBeforePublish(@Param("clazzId") String clazzId);
+
+    /**
+     * 发布前更新班级课表明细表状态为未发布
+     * @param clazzId
+     * @return
+     */
+    int updateDetailBeforePublish(@Param("clazzId") String clazzId);
+
     /**
      * 发布
      * @param
      * @return
      */
     int updateByPublish(Long id);
-    int updateByPublishFrom(Long id);
+
+    /**
+     * 发布/取消发布 更新明细
+     * @param id
+     * @param status
+     * @return
+     */
+    int updateByPublishFrom(@Param("id") Long id, @Param("status") Long status);
 
     /**
      * 取消发布

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

@@ -32,4 +32,5 @@ public interface NoticeMapper {
 
     List<SchoolNoticer> selectNoticer(Long schoolId);
 
+    int insertDetailBySelective(@Param("list") List<SchoolNoticer> noticers, @Param("notice_id") Long notice_id);
 }

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

@@ -10,6 +10,8 @@ import java.util.List;
 public interface ScoreMapper {
     int deleteByPrimaryKey(Long score_id);
 
+    int deleteByPrimaryDetailKey(Long sd_siid);
+
     int insert(StuScoreDO record);
 
     int insertSelective(StuScoreDO record);
@@ -26,6 +28,8 @@ public interface ScoreMapper {
 
     int insertScoreImport(ScoreImport scoreImport);
 
+    int updateScoreImport(ScoreImport scoreImport);
+
     void insertScoreImportDetail(ScoreImportdetail detail);
 
     List<ScoreImportdetail> selectDetail(Long id);
@@ -43,4 +47,14 @@ public interface ScoreMapper {
     Long selectCountBySubjectAndCode(@Param("si_id") Long si_id, @Param("stu_number") String stu_number, @Param("subject")String subject);
 
     List<ScoreNoticer> selectWechatMsg(Long id);
+
+    void insertDetailSelective(List<ScoreImportdetail> scoreImportdetail);
+
+    void updateDetailSelective(List<ScoreImportdetail> scoreImportdetail);
+
+    /**
+     * 删除成绩表明细行
+     * @param sd_id
+     */
+    void deleteDetail(@Param("sd_id") Long sd_id);
 }

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

@@ -26,4 +26,6 @@ public interface SubjectMapper {
     Integer checkTeacherClass(Long id);
 
     Integer checkCurriculum(Long id);
+
+    Integer checkSubject(@Param("subject_name") String subject_name, @Param("school_id") Long school_id);
 }

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

@@ -36,4 +36,6 @@ public interface SysClazzMapper {
     int countClazz(@Param("clazz_name") String clazz_name, @Param("clazz_grade") String clazz_grade, @Param("school_id") Long school_id);
 
     Integer teacherClazz(@Param("subject_name") String subject_name, @Param("clazz_id") Long clazz_id);
+
+    SysClazz selectByClazzName(@Param("clazz_grade") String clazz_grade, @Param("clazz_name") String clazz_name, @Param("school_id") Long school_id);
 }

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

@@ -1,5 +1,6 @@
 package com.usoftchina.smartschool.school.mapper;
 
+import com.usoftchina.smartschool.school.po.SysClazz;
 import com.usoftchina.smartschool.school.po.SysParents;
 import com.usoftchina.smartschool.school.po.SysStudent;
 import org.apache.ibatis.annotations.Mapper;
@@ -79,4 +80,28 @@ public interface SysStudentMapper {
      * @return
      */
     List<String> selectIdByClazzId(Long clazzId);
+
+    /**
+     * 更新年级名称
+     * @param grade_name
+     * @param clazzIdList
+     * @return
+     */
+    int updateGradeName(@Param("grade_name") String grade_name, @Param("list") List<SysClazz> clazzIdList);
+
+    /**
+     * 更新班级名称
+     * @param clazz_name
+     * @param clazz_id
+     * @return
+     */
+    int updateClazzName(@Param("clazz_name") String clazz_name, @Param("clazz_id") Long clazz_id);
+
+    SysStudent selectByStudent(@Param("stu_name") String stu_name, @Param("clazz_id") Long clazz_id , @Param("school_id") Long school_id);
+
+    /**
+     * 学生信息:姓名重复
+     * @return
+     */
+    int countName(@Param("stu_name") String stu_name, @Param("school_id") Long school_id);
 }

+ 3 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/HomeworkNoticer.java

@@ -15,4 +15,7 @@ public class HomeworkNoticer implements Serializable{
 
     private String subject;
 
+    private Long parentId;
+
+    private Long stuId;
 }

+ 2 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/NotifyDO.java

@@ -52,5 +52,7 @@ public class NotifyDO implements Serializable {
 
 	private List<NotifyrecordsDO> unRead;
 
+    private String creator;
 
+    private Date publishDate;
 }

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

@@ -14,6 +14,14 @@ public enum Operation {
      * 删除
      */
     DELETE("删除操作", "删除成功"),
+    /**
+     * 发布
+     */
+    PUBLISH("发布操作", "发布成功"),
+    /**
+     * 取消发布
+     */
+    REPUBLISH("取消发布操作", "取消发布成功"),
     /**
      * 删除明细
      */

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

@@ -38,6 +38,26 @@ public class OutInRecord implements Serializable{
 
     private String grade_clazz;	    //年级加班级名
 
+    private int record_type;	    //出入校类型   1:进入  2:离开  0:其他
+
+    private Date record_date;	    //出入校时间
+
+    public int getRecord_type() {
+        return record_type;
+    }
+
+    public void setRecord_type(int record_type) {
+        this.record_type = record_type;
+    }
+
+    public Date getRecord_date() {
+        return record_date;
+    }
+
+    public void setRecord_date(Date record_date) {
+        this.record_date = record_date;
+    }
+
     public String getStu_name() {
         return stu_name;
     }

+ 2 - 2
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SchoolNoticer.java

@@ -22,9 +22,9 @@ public class SchoolNoticer implements Serializable{
     /**
      * 推送人ID
      */
-    private Long personId;
+    private String personId;
     /**
      * 类型   1:家长   0:教师
      */
-    private int type;
+    private String type;
 }

+ 24 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SchoolTemplateDO.java

@@ -0,0 +1,24 @@
+package com.usoftchina.smartschool.school.po;
+
+import lombok.Data;
+
+/**
+ * @author kl
+ * @email koul@usoftchina.com
+ * @date 2019-03-01 15:57
+ */
+@Data
+public class SchoolTemplateDO {
+
+    //编号
+    private Long stId;
+    //a
+    private String stCode;
+    //
+    private String stName;
+    //
+    private String stTemplateid;
+    //
+    private Long stSchoolid;
+
+}

+ 9 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SysStudent.java

@@ -51,6 +51,15 @@ public class SysStudent {
 
     private String stu_cardNo;
 
+    private String stu_img;
+
+    public String getStu_img() {
+        return stu_img;
+    }
+
+    public void setStu_img(String stu_img) {
+        this.stu_img = stu_img;
+    }
 
     public String getStu_cardNo() {
         return stu_cardNo;

+ 2 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/TaskNotifyDO.java

@@ -42,6 +42,8 @@ public class TaskNotifyDO implements Serializable {
 	//通知人
 	private String taskNotifier;
 
+	private Long taskClassid;
+	private Long taskGradeid;
 	private String classzName;
 	private String gradeName;
 	private String creator;

+ 5 - 15
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/TemplateDO.java

@@ -5,36 +5,26 @@ import lombok.Data;
 /**
  * @author kl
  * @email koul@usoftchina.com
- * @date 2019-03-01 15:57
+ * @date 2019-03-16 16:21
  */
 @Data
 public class TemplateDO {
-
-    //编号
     private Long temId;
-    //appid
     private String temAppid;
-    //出入校模板
     private String temOutIn;
-    //通知模板
     private String temNotify;
-    //作业模板
     private String temTask;
-    //投票模板
     private String temVote;
-    //成绩通知
     private String temScore;
-    //申请
     private String temApply;
-    //同意
     private String temAgree;
-    //拒绝
     private String temRefuse;
-    //学生请假
     private String temLeave;
-    //会议
     private String temMeeting;
-    //备注
     private String temRemarks;
 
+
+
+
+
 }

+ 18 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/controller/WxTaskNotifyController.java

@@ -1,5 +1,6 @@
 package com.usoftchina.smartschool.school.wxschool.basic.controller;
 
+import com.usoftchina.smartschool.school.po.SubjectDO;
 import com.usoftchina.smartschool.school.wxschool.basic.service.WxTaskNotifyService;
 import com.usoftchina.smartschool.school.wxschool.utils.ResultBean;
 import org.apache.ibatis.annotations.Param;
@@ -125,4 +126,21 @@ public class WxTaskNotifyController {
 			return new ResultBean(e);
 		}
 	}
+
+	/**
+	 * 科目
+	 * @param teacherId
+	 * @return
+	 * @throws Exception
+	 */
+	@PostMapping("/subjectDOList")
+	public ResultBean subjectDOList(@Param("teacherId") Long teacherId,@Param("subjectStatus")Integer subjectStatus){
+		try {
+			Assert.notNull(teacherId,"请确当发布人");
+			List<SubjectDO> subjectDOS = taskNotifyService.subjectDOList(teacherId, subjectStatus);
+			return new ResultBean(subjectDOS);
+		}catch (Exception e){
+			return new ResultBean(e);
+		}
+	}
 }

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

@@ -47,7 +47,7 @@ public interface WxNotifyService {
 	 * @param pageIndex
 	 * @param pageSize
 	 */
-	public List<NotifyDO> notifyListByStu(@Param("stuId") Long stuId, @Param("notifyStatus") Integer notifyStatus, @Param("pageIndex") Integer pageIndex, @Param("pageSize") Integer pageSize);
+	public List<NotifyDO> notifyListByStu(@Param("stuId") Long stuId, @Param("notifyStatus") Integer notifyStatus, @Param("pageIndex") Integer pageIndex, @Param("pageSize") Integer pageSize) throws Exception;
 
 	/**
 	 * 家长端获取通知详情

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

@@ -1,6 +1,6 @@
 package com.usoftchina.smartschool.school.wxschool.basic.service;
 
-import com.usoftchina.smartschool.school.po.TaskNotifyDO;
+import com.usoftchina.smartschool.school.po.SubjectDO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -60,4 +60,6 @@ public interface WxTaskNotifyService {
 	 * @throws Exception
 	 */
 	public int taskReply(String taskRepayString);
+
+	List<SubjectDO> subjectDOList(@Param("teacherId") Long teacherId,@Param("subjectStatus")Integer subjectStatus);
 }

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

@@ -91,23 +91,18 @@ public class WxMeetingServiceImpl implements WxMeetingService {
 			if (new Date().getTime()<reminderDate.getTime()) {
 				timer.schedule(new RemindTask(wxTemplateMapper,teacherMapper, wxSchoolMapper, wxPushApi, meetingMapper, 3, meetingDO), reminderDate);
 			}else {
-				for (Long l:list) {
-					SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
-					SchoolDO schoolDO = wxSchoolMapper.get(meetingDO.getSchoolId());
-					String openid = teacherMapper.get(l).getOpenid();
-					if (ObjectUtils.isNotEmpty(schoolDO)){
-						String schoolAppid = schoolDO.getSchoolAppid();
-						if (ObjectUtils.isNotEmpty(schoolAppid)){
-							TemplateDO templateDO = wxTemplateMapper.getByAppid(schoolAppid);
-							if (ObjectUtils.isNotEmpty(templateDO)){
-								String temMeeting = templateDO.getTemMeeting();
-								wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(),openid , temMeeting, "您好,您有一条新的会议通知", meetingName, simpleDateFormat.format(meetingDO.getStartDate()), meetingAddress, "-", "点击查看详情",  wechatUrl + "/meet-detail/" + meetingDO.getMeetingId()+"?teacherId="+l);
-
-							}
+				Long schoolId = meetingDO.getSchoolId();
+				if (ObjectUtils.isNotEmpty(schoolId)){
+					String meeting = wxTemplateMapper.getByStCode(schoolId, "meeting");
+					for (Long l:list) {
+						SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+						SchoolDO schoolDO = wxSchoolMapper.get(schoolId);
+						if (ObjectUtils.isNotEmpty(schoolDO)){
+							String openid = teacherMapper.get(l).getOpenid();
+							wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(),openid , meeting, "您好,您有一条新的会议通知", meetingName, simpleDateFormat.format(meetingDO.getStartDate()), meetingAddress, "-", "点击查看详情",  wechatUrl + "/meet-detail/" + meetingDO.getMeetingId()+"?teacherId="+l);
 
 						}
 					}
-
 				}
 			}
 			return "创建成功";

+ 94 - 79
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxNotifyServiceImpl.java

@@ -7,6 +7,7 @@ import com.usoftchina.smartschool.school.wxschool.basic.service.WxNotifyService;
 import com.usoftchina.smartschool.school.wxschool.mapper.*;
 import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
 import com.usoftchina.smartschool.wechat.api.WxPushApi;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -69,88 +70,89 @@ public class WxNotifyServiceImpl implements WxNotifyService {
 		JSONObject json = JSONObject.parseObject(jsonNotify);
 		NotifyDO notifyDO = new NotifyDO();
 		notifyDO.setCreateDate(new Date());
+		notifyDO.setPublishDate(new Date());
 		String notifyTitle = json.getString("notifyTitle");
 		notifyDO.setNotifyTitle(notifyTitle);
 		String notifyDetails = json.getString("notifyDetails");
 		notifyDO.setNotifyDetails(notifyDetails);
 		Long notifyCreator = json.getLong("notifyCreator");
 		notifyDO.setNotifyCreator(notifyCreator);
-		notifyDO.setSchoolId(teacherMapper.get(notifyCreator).getSchoolId());
+		TeacherDO teacherDO1 = teacherMapper.get(notifyCreator);
+		Long schoolId = null;
+		if (ObjectUtils.isNotEmpty(teacherDO1)){
+			schoolId = teacherDO1.getSchoolId();
+			notifyDO.setSchoolId(schoolId);
+			notifyDO.setCreator(teacherDO1.getTeacherName());
+		}
 		notifyDO.setNotifyType(json.getInteger("notifyType"));
 		notifyDO.setNotifyFiles(json.getString("notifyFiles"));
 		notifyDO.setNotifyStatus(json.getInteger("notifyStatus"));
 		notifyDO.setNotifyRemarks(json.getString("notifyRemarks"));
-		String notifyTeacher = json.getString("notifyTeacher");
-		String notifyStu = json.getString("notifyStu");
-		notifyDO.setNotifyTeacher(notifyTeacher);
-		notifyDO.setNotifyStu(notifyStu);
 		int save = notifyMapper.save(notifyDO);
 		if (save>0){
 			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
-			List<Long> longs = JSON.parseArray(notifyTeacher, Long.class);
-			if (ObjectUtils.isNotEmpty(longs)){
-				List<Long> list = removeDuplicate(longs);
-				NotifyrecordsDO notifyrecordsDO = new NotifyrecordsDO();
-				for (Long l:list) {
-					if (notifyCreator.compareTo(l)==0){
-						notifyrecordsDO.setIsRead(2);
-					}else {
-						notifyrecordsDO.setIsRead(1);
-					}
-					notifyrecordsDO.setNotifyId(notifyDO.getNotifyId());
-					notifyrecordsDO.setTeacherId(l);
-					notifyrecordsMapper.save(notifyrecordsDO);
-					TeacherDO teacherDO = teacherMapper.get(l);
-					SchoolDO schoolDO = wxSchoolMapper.get(teacherDO.getSchoolId());
-					String schoolName = schoolDO.getSchoolName();
-					String teacherName = teacherMapper.get(notifyCreator).getTeacherName();
-					if (ObjectUtils.isNotEmpty(schoolDO)){
-						String schoolAppid = schoolDO.getSchoolAppid();
-						if (ObjectUtils.isNotEmpty(schoolAppid)){
-							TemplateDO templateDO = wxTemplateMapper.getByAppid(schoolAppid);
-							if (ObjectUtils.isNotEmpty(templateDO)){
-								String temNotify = templateDO.getTemNotify();
-								try {
-									wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(), temNotify, "您好,您有一条通知",schoolName ,teacherName,format.format(new Date()),notifyDetails, "点击查看详情", wechatUrl + "/notifyDetail/teacher/"+notifyDO.getNotifyId()+"?teacherId="+l);
-								}catch (Exception e){
-									e.printStackTrace();
+			if (ObjectUtils.isNotEmpty(schoolId)){
+				List<Long> idBySchoolId = teacherMapper.getIdBySchoolId(schoolId,1);
+				if (ObjectUtils.isNotEmpty(idBySchoolId)){
+					List<Long> list = removeDuplicate(idBySchoolId);
+					NotifyrecordsDO notifyrecordsDO = new NotifyrecordsDO();
+					for (Long l:list) {
+						if (notifyCreator.compareTo(l)==0){
+							notifyrecordsDO.setIsRead(2);
+						}else {
+							notifyrecordsDO.setIsRead(1);
+						}
+						notifyrecordsDO.setNotifyId(notifyDO.getNotifyId());
+						notifyrecordsDO.setTeacherId(l);
+						notifyrecordsMapper.save(notifyrecordsDO);
+						TeacherDO teacherDO = teacherMapper.get(l);
+						if (ObjectUtils.isNotEmpty(teacherDO)){
+							Long schoolId1 = teacherDO.getSchoolId();
+							if (ObjectUtils.isNotEmpty(schoolId1)){
+								SchoolDO schoolDO = wxSchoolMapper.get(schoolId1);
+								String school = wxTemplateMapper.getByStCode(schoolId1, "school");
+								if (ObjectUtils.isNotEmpty(schoolDO)){
+									String schoolName = schoolDO.getSchoolName();
+									String teacherName = teacherMapper.get(notifyCreator).getTeacherName();
+									try {
+										wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(), school, "您好,您有一条通知",schoolName ,teacherName,format.format(new Date()),notifyDetails, "点击查看详情", wechatUrl + "/notifyDetail/teacher/"+notifyDO.getNotifyId()+"?teacherId="+l);
+									}catch (Exception e){
+										e.printStackTrace();
+									}
 								}
 							}
 						}
 					}
-
 				}
-			}
-			List<Long> stuIds = JSON.parseArray(notifyStu, Long.class);
-			if (ObjectUtils.isNotEmpty(stuIds)){
-				List<Long> list = removeDuplicate(stuIds);
-				NotifyrecordsDO notifyrecordsDO = new NotifyrecordsDO();
-				for (Long l:list) {
-					notifyrecordsDO.setIsRead(1);
-					notifyrecordsDO.setNotifyId(notifyDO.getNotifyId());
-					notifyrecordsDO.setStuId(l);
-					notifyrecordsMapper.save(notifyrecordsDO);
-					List<ParentsStuDO> parentsStuDOS = wxParentsStuMapper.listByStuId(l);
-					if (parentsStuDOS.size()>0){
-						for (ParentsStuDO ps:parentsStuDOS) {
-							ParentsDO parentsDO = wxParentsMapper.get(ps.getParentId());
-							SchoolDO schoolDO = wxSchoolMapper.get(parentsDO.getSchoolId());
-							String teacherName = teacherMapper.get(notifyCreator).getTeacherName();
-							if (ObjectUtils.isNotEmpty(schoolDO)){
-								String schoolAppid = schoolDO.getSchoolAppid();
-								if (ObjectUtils.isNotEmpty(schoolAppid)){
-									TemplateDO templateDO = wxTemplateMapper.getByAppid(schoolAppid);
-									if (ObjectUtils.isNotEmpty(templateDO)){
-										String temNotify = templateDO.getTemNotify();
-										try {
-											wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),parentsDO.getOpenid(), temNotify, "您好,您有一条通知", schoolDO.getSchoolName(),teacherName,format.format(new Date()),notifyDetails, "点击查看详情",  wechatUrl + "/notifyDetail/parent/"+notifyDO.getNotifyId()+"?stuId="+l);
-										}catch (Exception e){
-											e.printStackTrace();
+				List<Long> list = studentMapper.selectStuIdsBySchoolId(schoolId);
+				if (ObjectUtils.isNotEmpty(list)){
+					List<Long> stuIds = removeDuplicate(list);
+					NotifyrecordsDO notifyrecordsDO = new NotifyrecordsDO();
+					for (Long l:stuIds) {
+						notifyrecordsDO.setIsRead(1);
+						notifyrecordsDO.setNotifyId(notifyDO.getNotifyId());
+						notifyrecordsDO.setStuId(l);
+						notifyrecordsMapper.save(notifyrecordsDO);
+						List<ParentsStuDO> parentsStuDOS = wxParentsStuMapper.listByStuId(l);
+						if (parentsStuDOS.size()>0){
+							for (ParentsStuDO ps:parentsStuDOS) {
+								ParentsDO parentsDO = wxParentsMapper.get(ps.getParentId());
+								if (ObjectUtils.isNotEmpty(parentsDO)){
+									Long schoolId1 = parentsDO.getSchoolId();
+									if (ObjectUtils.isNotEmpty(schoolId1)){
+										SchoolDO schoolDO = wxSchoolMapper.get(schoolId1);
+										String school = wxTemplateMapper.getByStCode(schoolId1, "school");
+										if (ObjectUtils.isNotEmpty(schoolDO)){
+											String teacherName = teacherMapper.get(notifyCreator).getTeacherName();
+											try {
+												wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),parentsDO.getOpenid(), school, "您好,您有一条通知", schoolDO.getSchoolName(),teacherName,format.format(new Date()),notifyDetails, "点击查看详情",  wechatUrl + "/notifyDetail/parent/"+notifyDO.getNotifyId()+"?stuId="+l);
+											}catch (Exception e){
+												e.printStackTrace();
+											}
 										}
 									}
 								}
 							}
-
 						}
 					}
 				}
@@ -183,11 +185,15 @@ public class WxNotifyServiceImpl implements WxNotifyService {
 		}
 		hashMap.put("create",createList);
 
-		List<NotifyDO> notifys = notifyMapper.selectNotifyListLikeTeacher("%" + teacherId + "%", notifyStatus, pageStart, pageSize);
 		List<NotifyDO> notifyList = new ArrayList<>();
-		for (NotifyDO mt:notifys) {
-			NotifyDO notifyDO = getNotifyDetail(0L,teacherId, mt);
-			notifyList.add(notifyDO);
+		TeacherDO teacherDO = teacherMapper.get(teacherId);
+		if (ObjectUtils.isNotEmpty(teacherDO)){
+			List<NotifyDO> notifyDOS1 = notifyMapper.selectNotifyListSchoolId(teacherDO.getSchoolId(), notifyStatus,
+					pageStart, pageSize);
+			for (NotifyDO mt:notifyDOS1) {
+				NotifyDO notifyDO = getNotifyDetail(0L,teacherId, mt);
+				notifyList.add(notifyDO);
+			}
 		}
 		hashMap.put("notify",notifyList);
 		return hashMap;
@@ -200,15 +206,22 @@ public class WxNotifyServiceImpl implements WxNotifyService {
 	 * @param pageIndex
 	 * @param pageSize
 	 */
-	public List<NotifyDO> notifyListByStu(Long stuId, Integer notifyStatus, Integer pageIndex, Integer pageSize){
+	public List<NotifyDO> notifyListByStu(Long stuId, Integer notifyStatus, Integer pageIndex, Integer pageSize) throws Exception {
 		Integer pageStart = (pageIndex-1)*pageSize;
-		List<NotifyDO> notifys = notifyMapper.selectNotifyListLikeStu("%" + stuId + "%", notifyStatus, pageStart, pageSize);
-		List<NotifyDO> notifyList = new ArrayList<>();
-		for (NotifyDO nt:notifys) {
-			NotifyDO notifyDetail = getNotifyDetail(stuId, 0L, nt);
-			notifyList.add(notifyDetail);
+		StudentDO studentDO = studentMapper.get(stuId);
+		if (ObjectUtils.isNotEmpty(studentDO)){
+			List<NotifyDO> notifyList = new ArrayList<>();
+			List<NotifyDO> notifyDOS = notifyMapper.selectNotifyListSchoolId(studentDO.getSchoolId(), notifyStatus,
+					pageStart, pageSize);
+			for (NotifyDO nt:notifyDOS) {
+				NotifyDO notifyDetail = getNotifyDetail(stuId, 0L, nt);
+				notifyList.add(notifyDetail);
+			}
+			return notifyList;
+		}else {
+			throw new Exception("该学生暂时不存在");
 		}
-		return notifyList;
+
 	}
 
 	/**
@@ -219,10 +232,11 @@ public class WxNotifyServiceImpl implements WxNotifyService {
 	 */
 	public NotifyDO getNotifyDetails(Long stuId,Long notifyId) throws Exception {
 		NotifyDO notifyDO = notifyMapper.get(notifyId);
-		NotifyrecordsDO byStu = notifyrecordsMapper.getByStu(stuId, notifyId);
-		if (ObjectUtils.isNotEmpty(byStu)){
-			byStu.setIsRead(2);
-			int update = notifyrecordsMapper.update(byStu);
+		List<NotifyrecordsDO> byStu = notifyrecordsMapper.getByStu(stuId, notifyId);
+		if (CollectionUtils.isNotEmpty(byStu)){
+		    NotifyrecordsDO notifyrecordsDO = byStu.get(0);
+            notifyrecordsDO.setIsRead(2);
+			int update = notifyrecordsMapper.update(notifyrecordsDO);
 			if (update>0){
 				return getNotifyDetail(stuId,0L,notifyDO);
 			}else {
@@ -240,10 +254,11 @@ public class WxNotifyServiceImpl implements WxNotifyService {
 	 */
 	public NotifyDO getNotifyDetailsByTeacher(Long notifyId, Long teacherId) throws Exception {
 		NotifyDO notifyDO = notifyMapper.get(notifyId);
-		NotifyrecordsDO byTeacher = notifyrecordsMapper.getByTeacher(notifyId, teacherId);
-		if (ObjectUtils.isNotEmpty(byTeacher)){
-			byTeacher.setIsRead(2);
-			int update = notifyrecordsMapper.update(byTeacher);
+        List<NotifyrecordsDO> byTeacher = notifyrecordsMapper.getByTeacher(notifyId, teacherId);
+		if (CollectionUtils.isNotEmpty(byTeacher)){
+            NotifyrecordsDO notifyrecordsDO = byTeacher.get(0);
+            notifyrecordsDO.setIsRead(2);
+			int update = notifyrecordsMapper.update(notifyrecordsDO);
 			if (update>0){
 				return getNotifyDetail(0L,teacherId,notifyDO);
 			}else {

+ 29 - 41
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxOaApproveServiceImpl.java

@@ -77,54 +77,42 @@ public class WxOaApproveServiceImpl implements WxOaApproveService {
             SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
             TeacherDO teacherDO = teacherMapper.get(approver);
             TeacherDO teacher = teacherMapper.get(proposer);
-            SchoolDO schoolDO = wxSchoolMapper.get(teacherDO.getSchoolId());
-            if (type != null && 2 == type) {
-                String articles1 = parse.getString("oaArticlesDOS");
-                List<OaArticlesDO> oaArticlesDOS = JSONObject.parseArray(articles1, OaArticlesDO.class);
-                if (ObjectUtils.isNotEmpty(oaArticlesDOS)) {
-                    for (OaArticlesDO articles : oaArticlesDOS) {
-                        articles.setApproveId(oaApprove.getApproveId());
-                        oaArticlesMapper.save(articles);
-                    }
-                }
+            Long schoolId = teacherDO.getSchoolId();
+            if (ObjectUtils.isNotEmpty(schoolId)){
+                SchoolDO schoolDO = wxSchoolMapper.get(schoolId);
+                String oaapply = wxTemplateMapper.getByStCode(schoolId, "oaapply");
                 if (ObjectUtils.isNotEmpty(schoolDO)){
-                    String schoolAppid = schoolDO.getSchoolAppid();
-                    if (ObjectUtils.isNotEmpty(schoolAppid)){
-                        TemplateDO templateDO = wxTemplateMapper.getByAppid(schoolAppid);
-                        if (ObjectUtils.isNotEmpty(templateDO)){
-                            String temApply = templateDO.getTemApply();
-                            try {
-                                wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), teacherDO.getOpenid(),
-                                        temApply, "您有一个待审批事项", approveTitle,
-                                        teacher.getTeacherName(), format.format(new Date()), approveDetails, "点击查看详情",
-                                        wechatUrl + "/approvel-detail/false/" +oaApprove.getApproveId());
-                            }catch (Exception e){
-                                e.printStackTrace();
+                    if (type != null && 2 == type) {
+                        String articles1 = parse.getString("oaArticlesDOS");
+                        List<OaArticlesDO> oaArticlesDOS = JSONObject.parseArray(articles1, OaArticlesDO.class);
+                        if (ObjectUtils.isNotEmpty(oaArticlesDOS)) {
+                            for (OaArticlesDO articles : oaArticlesDOS) {
+                                articles.setApproveId(oaApprove.getApproveId());
+                                oaArticlesMapper.save(articles);
                             }
                         }
-                    }
-                }
-
-            } else {
-                if (ObjectUtils.isNotEmpty(schoolDO)){
-                    String schoolAppid = schoolDO.getSchoolAppid();
-                    if (ObjectUtils.isNotEmpty(schoolAppid)){
-                        TemplateDO templateDO = wxTemplateMapper.getByAppid(schoolAppid);
-                        if (ObjectUtils.isNotEmpty(templateDO)){
-                            String temApply = templateDO.getTemApply();
-                            try {
-                                wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), teacherDO.getOpenid(),
-                                        temApply, "您有一个待审批事项", approveTitle,
-                                        teacher.getTeacherName(), format.format(new Date()), approveDetails, "点击查看详情",
-                                        wechatUrl + "/approvel-detail/false/" +oaApprove.getApproveId());
-                            }catch (Exception e){
-                                e.printStackTrace();
-                            }
+                        try {
+                            wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), teacherDO.getOpenid(),
+                                    oaapply, "您有一个待审批事项", approveTitle,
+                                    teacher.getTeacherName(), format.format(new Date()), approveDetails, "点击查看详情",
+                                    wechatUrl + "/approvel-detail/false/" +oaApprove.getApproveId());
+                        }catch (Exception e){
+                            e.printStackTrace();
+                        }
+                    } else {
+                        try {
+                            wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), teacherDO.getOpenid(),
+                                    oaapply, "您有一个待审批事项", approveTitle,
+                                    teacher.getTeacherName(), format.format(new Date()), approveDetails, "点击查看详情",
+                                    wechatUrl + "/approvel-detail/false/" +oaApprove.getApproveId());
+                        }catch (Exception e){
+                            e.printStackTrace();
                         }
                     }
                 }
-
             }
+
+
             return i;
         } else {
             return 0;

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

@@ -87,22 +87,20 @@ public class WxOaLeaveServiceImpl implements WxOaLeaveService {
             int i = oaLeaveMapper.save(leave);
             if (i > 0) {
                 List<Long> longs = JSON.parseArray(lvNotifier, Long.class);
+                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                 for (Long teacherId : longs) {
                     TeacherDO teacherDO = teacherMapper.get(teacherId);
-                    SchoolDO schoolDO = wxSchoolMapper.get(teacherDO.getSchoolId());
                     StudentDO studentDO = studentMapper.get(lvProposer);
                     String stuName = studentDO.getStuName();
                     String clazzName = wxClazzMapper.get(studentDO.getClazzId()).getClazzName();
-                    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
-                    String date =format.format(leave.getStartDate())  + "至" + format.format(leave.getEndDate());
-                    if (ObjectUtils.isNotEmpty(schoolDO)){
-                        String schoolAppid = schoolDO.getSchoolAppid();
-                        if (ObjectUtils.isNotEmpty(schoolAppid)){
-                            TemplateDO templateDO = wxTemplateMapper.getByAppid(schoolAppid);
-                            if (ObjectUtils.isNotEmpty(templateDO)){
-                                String temLeave = templateDO.getTemLeave();
+                    if (ObjectUtils.isNotEmpty(teacherDO)){
+                        Long schoolId = teacherDO.getSchoolId();
+                        if (ObjectUtils.isNotEmpty(schoolId)){
+                            SchoolDO schoolDO = wxSchoolMapper.get(schoolId);
+                            String stuleave = wxTemplateMapper.getByStCode(schoolId, "stuleave");
+                            if (ObjectUtils.isNotEmpty(schoolDO)){
                                 try {
-                                    wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), teacherDO.getOpenid(), temLeave,"您好,学生的请假申请", format.format(new Date()),clazzName , stuName, lvDetails, "点击查看详情", wechatUrl + "/leavedetail/teacher/" + leave.getLvId());
+                                    wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), teacherDO.getOpenid(), stuleave,"您好,学生的请假申请", format.format(new Date()),clazzName , stuName, lvDetails, "点击查看详情", wechatUrl + "/leavedetail/teacher/" + leave.getLvId());
                                 }catch (Exception e){
                                     e.printStackTrace();
                                 }

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

@@ -82,17 +82,11 @@ public class WxPrincipalMailboxServiceImpl implements WxPrincipalMailboxService
 			SchoolDO schoolDO = schoolMapper.get(schoolId);
 			TeacherDO teacherDO = teacherMapper.get(principalMailboxDO.getNotifier());
 			if (ObjectUtils.isNotEmpty(schoolDO)){
-				String schoolAppid = schoolDO.getSchoolAppid();
-				if (ObjectUtils.isNotEmpty(schoolAppid)){
-					TemplateDO templateDO = wxTemplateMapper.getByAppid(schoolAppid);
-					if (ObjectUtils.isNotEmpty(templateDO)){
-						String temNotify = templateDO.getTemNotify();
-						try {
-							wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(), temNotify, "您有一个新的邮件通知",schoolDO.getSchoolName(),parentsMapper.get(principalMailboxDO.getMailboxCreator()).getParentsName(), simpleDateFormat.format(new Date()), principalMailboxDO.getMailboxContext(),"点击查看详情", "");
-						}catch (Exception e){
-							e.printStackTrace();
-						}
-					}
+				String school = wxTemplateMapper.getByStCode(schoolId, "school");
+				try {
+					wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(), school, "您有一个新的邮件通知",schoolDO.getSchoolName(),parentsMapper.get(principalMailboxDO.getMailboxCreator()).getParentsName(), simpleDateFormat.format(new Date()), principalMailboxDO.getMailboxContext(),"点击查看详情", "");
+				}catch (Exception e){
+					e.printStackTrace();
 				}
 			}
 			return principalMailboxDO.getMailboxId();

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

@@ -40,8 +40,8 @@ public class WxStuScoreServiceImpl implements WxStuScoreService {
 	public List<Map> getScoreByStu(Long stuId, Integer pageIndex, Integer pageSize) throws Exception {
 		Integer pageStart = (pageIndex-1)*pageSize;
 		List<StuScoreDO> stuScoreDOS = stuScoreMapper.listByStu(stuId, pageStart, pageSize);
+        List<Map> maps = new ArrayList<>();
 		if (ObjectUtils.isNotEmpty(stuScoreDOS)){
-			List<Map> maps = new ArrayList<>();
 			List<Long> longs = new ArrayList<>();
             StudentDO studentDO = studentMapper.get(stuId);
             if (ObjectUtils.isNotEmpty(studentDO)){
@@ -57,7 +57,7 @@ public class WxStuScoreServiceImpl implements WxStuScoreService {
             }
 			for (StuScoreDO ss:stuScoreDOS) {
 				Map<String, Object> map = new HashMap<>();
-				if (ObjectUtils.isNotEmpty(ss.getScoreType())&&ObjectUtils.isNotEmpty(ss.getSubjectId())){
+				if (ObjectUtils.isNotEmpty(ss.getScoreType())&&ObjectUtils.isNotEmpty(ss.getSubjectId())&&longs.size()>0){
                     List<StuScoreDO> stuScoreDOS1 = stuScoreMapper.selectScoreListByStuId(longs, ss.getScoreType(), ss.getSubjectId());
                     if (ObjectUtils.isNotEmpty(stuScoreDOS1)) {
                         Double m = 0.0;
@@ -80,28 +80,28 @@ public class WxStuScoreServiceImpl implements WxStuScoreService {
                             List<Long> stuIds = studentMapper.selectStuIdsByClazzId(clazzId);
                             list.addAll(stuIds);
                         }
-                        List<StuScoreDO> scores = stuScoreMapper.selectScoreListByStuId(list,ss.getScoreType(), ss.getSubjectId());
-                        Double n = 0.0;
-                        for (int k = 0; k < scores.size(); k++) {
-                            StuScoreDO score = scores.get(k);
-                            if (stuId.compareTo(score.getStuId()) == 0) {
-                                if ("全年级".equals(score.getScoreScope())) {
-                                    map.put("schoolRank", k + 1);
-                                } else {
-                                    map.put("schoolRank", "-");
+                        if (list.size()>0&&ObjectUtils.isNotEmpty(ss.getScoreScope())&&ObjectUtils.isNotEmpty(ss.getScoreType())){
+                            List<StuScoreDO> scores = stuScoreMapper.selectScoreListByStuId(list,ss.getScoreType(), ss.getSubjectId());
+                            Double n = 0.0;
+                            for (int k = 0; k < scores.size(); k++) {
+                                StuScoreDO score = scores.get(k);
+                                if (stuId.compareTo(score.getStuId()) == 0) {
+                                    if ("全年级".equals(score.getScoreScope())) {
+                                        map.put("schoolRank", k + 1);
+                                    } else {
+                                        map.put("schoolRank", "-");
+                                    }
                                 }
+                                n = n + score.getScoreNum();
                             }
-                            n = n + score.getScoreNum();
+                            map.put("schoolAverage", new BigDecimal(n / scores.size()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
                         }
-                        map.put("schoolAverage", new BigDecimal(n / scores.size()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
                         maps.add(map);
                     }
                 }
 			}
-			return maps;
-		}else {
-			throw new Exception("暂无数据");
 		}
+        return maps;
 	}
 
 

+ 80 - 52
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxTaskNotifyServiceImpl.java

@@ -1,6 +1,5 @@
 package com.usoftchina.smartschool.school.wxschool.basic.service.impl;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.usoftchina.smartschool.school.po.*;
 import com.usoftchina.smartschool.school.wxschool.basic.service.WxTaskNotifyService;
@@ -10,6 +9,7 @@ import com.usoftchina.smartschool.school.wxschool.utils.JavaBeanUtil;
 import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
 import com.usoftchina.smartschool.wechat.api.WxPushApi;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
@@ -51,6 +51,15 @@ public class WxTaskNotifyServiceImpl implements WxTaskNotifyService {
     @Autowired
     private WxTemplateMapper wxTemplateMapper;
 
+    @Autowired
+    private WxClazzMapper wxClazzMapper;
+
+    @Autowired
+    private WxGradeMapper wxGradeMapper;
+
+    @Value("${smartschool.domain.wechat}")
+    private String wechatUrl;
+
     /**
      * 发布作业
      *
@@ -85,53 +94,61 @@ public class WxTaskNotifyServiceImpl implements WxTaskNotifyService {
         taskNotifyDO.setStartDate(startDate);
         Date endDate = DateFormatUtil.string2Date(json.getString("endDate"));
         taskNotifyDO.setEndDate(endDate);
+        Long taskClassid = json.getLong("taskClassid");
+        if (ObjectUtils.isNotEmpty(taskClassid)){
+            taskNotifyDO.setTaskClassid(taskClassid);
+            ClazzDO clazzDO = wxClazzMapper.get(taskClassid);
+            if (ObjectUtils.isNotEmpty(clazzDO)){
+                taskNotifyDO.setClasszName(clazzDO.getClazzName());
+                Long gradeId = clazzDO.getGradeId();
+                if (ObjectUtils.isNotEmpty(gradeId)){
+                    taskNotifyDO.setTaskGradeid(gradeId);
+                    GradeDO gradeDO = wxGradeMapper.get(gradeId);
+                    if (ObjectUtils.isNotEmpty(gradeDO)){
+                        taskNotifyDO.setGradeName(gradeDO.getGradeName());
+                    }
+                }
+            }
+        }
         if (endDate.getTime()>startDate.getTime()){
-            String taskNotifier = json.getString("taskNotifier");
-            taskNotifyDO.setTaskNotifier(taskNotifier);
             int save = taskNotifyMapper.save(taskNotifyDO);
             if (save > 0) {
-                if (ObjectUtils.isNotEmpty(taskNotifier)) {
-                    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
-                    SchoolDO schoolDO = wxSchoolMapper.get(schoolId);
-                    List<Long> longs = JSON.parseArray(taskNotifier, Long.class);
-                    for (Long stuId : longs) {
-                        List<ParentsStuDO> parentsStuDOS = wxParentsStuMapper.listByStuId(stuId);
-                        if (parentsStuDOS.size() > 0) {
-                            for (ParentsStuDO ps : parentsStuDOS) {
-                                Long parentId = ps.getParentId();
-                                if (ObjectUtils.isNotEmpty(parentId)){
-                                    ParentsDO parentsDO = parentsMapper.get(parentId);
-                                    String subjectName = wxSubjectMapper.get(subjectId).getSubjectName();
-                                    if (ObjectUtils.isNotEmpty(schoolDO)){
-                                        String schoolAppid = schoolDO.getSchoolAppid();
-                                        if (ObjectUtils.isNotEmpty(schoolAppid)){
-                                            TemplateDO templateDO = wxTemplateMapper.getByAppid(schoolAppid);
-                                            if (ObjectUtils.isNotEmpty(templateDO)){
-                                                String temTask = templateDO.getTemTask();
-                                                try {
-                                                    wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(),
-                                                            parentsDO.getOpenid(), temTask, taskTitle,
-                                                            subjectName, format.format(new Date()),
-                                                            taskContext, "-", "点击查看详情", "https://school-wechat.ubtob" +
-                                                                    ".com/assignmentDetail/parent/" + taskNotifyDO.getTaskId()+"?stuId="+stuId+"&parentId="+parentId);
-                                                }catch (Exception e){
-                                                    e.printStackTrace();
-                                                }
-                                            }
+                if (ObjectUtils.isNotEmpty(taskClassid)){
+                    List<Long> list = studentMapper.selectStuIdsByClazzId(taskClassid);
+                    if (ObjectUtils.isNotEmpty(list)) {
+                        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+                        SchoolDO schoolDO = wxSchoolMapper.get(schoolId);
+                        for (Long stuId : list) {
+                            List<ParentsStuDO> parentsStuDOS = wxParentsStuMapper.listByStuId(stuId);
+                            if (parentsStuDOS.size() > 0) {
+                                for (ParentsStuDO ps : parentsStuDOS) {
+                                    Long parentId = ps.getParentId();
+                                    if (ObjectUtils.isNotEmpty(parentId)){
+                                        ParentsDO parentsDO = parentsMapper.get(parentId);
+                                        String subjectName = wxSubjectMapper.get(subjectId).getSubjectName();
+                                        String homework = wxTemplateMapper.getByStCode(schoolId, "homework");
+                                        try {
+                                            wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(),
+                                                    parentsDO.getOpenid(), homework, taskTitle,
+                                                    subjectName, format.format(new Date()),
+                                                    taskContext, "-", "点击查看详情", wechatUrl+
+                                                            "/assignmentDetail/parent/" + taskNotifyDO.getTaskId()+"?stuId="+stuId+"&parentId="+parentId);
+                                        }catch (Exception e){
+                                            e.printStackTrace();
                                         }
                                     }
                                 }
                             }
                         }
-                    }
 
+                    }
                 }
                 return "作业发布成功";
         }else {
-                throw new Exception("开始时间不能小于结束时间");
+                throw new Exception("作业发布失败");
             }
         } else {
-            throw new Exception("作业发布失败");
+            throw new Exception("开始时间不能小于结束时间");
         }
     }
 
@@ -148,16 +165,14 @@ public class WxTaskNotifyServiceImpl implements WxTaskNotifyService {
         Integer pageStart = (pageIndex - 1) * pageSize;
         List<TaskNotifyDO> taskNotifyDOS = taskNotifyMapper.selectListByTeacher(teacherId, taskStatus, pageStart,
                 pageSize);
+        List<Map<String, Object>> maps = new ArrayList<>();
         if (ObjectUtils.isNotEmpty(taskNotifyDOS)) {
-            List<Map<String, Object>> maps = new ArrayList<>();
             for (TaskNotifyDO tn : taskNotifyDOS) {
                 Map<String, Object> map = taskDetail(tn);
                 maps.add(map);
             }
-            return maps;
-        } else {
-            throw new Exception("暂无数据");
         }
+        return maps;
     }
 
     /**
@@ -170,23 +185,27 @@ public class WxTaskNotifyServiceImpl implements WxTaskNotifyService {
      */
     public List<Map<String, Object>> listTaskStu(Long stuId, Integer taskStatus, Integer pageIndex, Integer pageSize) throws Exception {
         Integer pageStart = (pageIndex - 1) * pageSize;
-        List<TaskNotifyDO> taskNotifyDOS = taskNotifyMapper.selectListByStu("%" + stuId + "%", taskStatus, pageStart,
-                pageSize);
-        if (ObjectUtils.isNotEmpty(taskNotifyDOS)) {
-            List<Map<String, Object>> maps = new ArrayList<>();
-            for (TaskNotifyDO tn : taskNotifyDOS) {
-                List<TaskReplyDO> taskReplyDOS = taskReplyMapper.listByTaskStu(tn.getTaskId(), stuId);
-                if (taskReplyDOS.size() > 0) {
-                    tn.setTaskStatus(2);
-                }
+        StudentDO studentDO = studentMapper.get(stuId);
+        List<Map<String, Object>> maps = new ArrayList<>();
+        if (ObjectUtils.isNotEmpty(studentDO)){
+            Long clazzId = studentDO.getClazzId();
+            if (ObjectUtils.isNotEmpty(clazzId)){
+                List<TaskNotifyDO> taskNotifyDOS = taskNotifyMapper.selectListByClazz(clazzId, taskStatus, pageStart,
+                        pageSize);
+                if (ObjectUtils.isNotEmpty(taskNotifyDOS)) {
+                    for (TaskNotifyDO tn : taskNotifyDOS) {
+                        List<TaskReplyDO> taskReplyDOS = taskReplyMapper.listByTaskStu(tn.getTaskId(), stuId);
+                        if (taskReplyDOS.size() > 0) {
+                            tn.setTaskStatus(2);
+                        }
 
-                Map<String, Object> map = taskDetail(tn);
-                maps.add(map);
+                        Map<String, Object> map = taskDetail(tn);
+                        maps.add(map);
+                    }
+                }
             }
-            return maps;
-        } else {
-            throw new Exception("暂无数据");
         }
+        return maps;
     }
 
     /**
@@ -228,6 +247,15 @@ public class WxTaskNotifyServiceImpl implements WxTaskNotifyService {
         return taskReplyMapper.save(taskReplyDO);
     }
 
+    public List<SubjectDO> subjectDOList(Long teacherId,Integer subjectStatus){
+        List<SubjectDO> subjectDOS = null;
+        Long schoolId = teacherMapper.getById(teacherId);
+        if (ObjectUtils.isNotEmpty(schoolId)){
+                subjectDOS = wxSubjectMapper.listSubject(schoolId, subjectStatus);
+            }
+        return subjectDOS;
+    }
+
     private Map<String, Object> taskDetail(TaskNotifyDO taskNotifyDO) {
         Map<String, Object> map1 = JavaBeanUtil.object2Map(taskNotifyDO);
         Long taskCreator = taskNotifyDO.getTaskCreator();

+ 33 - 22
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxVoteServiceImpl.java

@@ -114,18 +114,17 @@ public class WxVoteServiceImpl implements WxVoteService {
                 List<Long> list = removeDuplicate(teacherId);
                 for (Long ll : list) {
                     TeacherDO teacherDO = teacherMapper.get(ll);
-                    SchoolDO schoolDO = wxSchoolMapper.get(teacherDO.getSchoolId());
-                    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
-                    String teacherName = teacherMapper.get(creator).getTeacherName();
-                    if (ObjectUtils.isNotEmpty(schoolDO)){
-                        String schoolAppid = schoolDO.getSchoolAppid();
-                        if (ObjectUtils.isNotEmpty(schoolAppid)){
-                            TemplateDO templateDO = wxTemplateMapper.getByAppid(schoolAppid);
-                            if (ObjectUtils.isNotEmpty(templateDO)){
-                                String temVote = templateDO.getTemVote();
+                    if (ObjectUtils.isNotEmpty(teacherDO)){
+                        Long schoolId = teacherDO.getSchoolId();
+                        if (ObjectUtils.isNotEmpty(schoolId)){
+                            SchoolDO schoolDO = wxSchoolMapper.get(schoolId);
+                            if (ObjectUtils.isNotEmpty(schoolDO)){
+                                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+                                String teacherName = teacherMapper.get(creator).getTeacherName();
+                                String vote1 = wxTemplateMapper.getByStCode(schoolId, "vote");
                                 try {
                                     wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), teacherDO.getOpenid(),
-                                            temVote, "有一个投票单需要您的支持", schoolDO.getSchoolName(),
+                                            vote1, "有一个投票单需要您的支持", schoolDO.getSchoolName(),
                                             teacherName, format.format(new Date()), vote.getVoteName()
                                             , "点击查看详情", wechatUrl + "/voteDetail/teacher/" + vote.getVoteId()+"?teacherId="+ll);
                                 }catch (Exception e){
@@ -134,7 +133,6 @@ public class WxVoteServiceImpl implements WxVoteService {
                             }
                         }
                     }
-
                 }
             }
             List<Long> stuId = JSON.parseArray(stuIds, Long.class);
@@ -144,19 +142,32 @@ public class WxVoteServiceImpl implements WxVoteService {
                 List<ParentsStuDO> parentsStuDOS = wxParentsStuMapper.listByStuId(l);
                 if (parentsStuDOS.size() > 0) {
                     for (ParentsStuDO ps : parentsStuDOS) {
-                        String teacherName = teacherMapper.get(creator).getTeacherName();
+                        TeacherDO teacherDO = teacherMapper.get(creator);
+                        String teacherName = "";
+                        if (ObjectUtils.isNotEmpty(teacherDO)){
+                            teacherName = teacherDO.getTeacherName();
+                        }
                         ParentsDO parentsDO = wxParentsMapper.get(ps.getParentId());
-                        SchoolDO schoolDO = wxSchoolMapper.get(parentsDO.getSchoolId());
-                        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
-                        try {
-                            wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), parentsDO.getOpenid()
-                                    , "h0BkcnTo24b2jsficMeVO0B17GvE-VzlPvF0fVXea4w", "有一个投票单需要您的支持",
-                                    schoolDO.getSchoolName(),teacherName ,
-                                    format.format(new Date()), vote.getVoteName(), "点击查看详情",
-                                     wechatUrl + "/voteDetail/parent/" + vote.getVoteId()+"?stuId="+l);
-                        }catch (Exception e){
-                            e.printStackTrace();
+                        if (ObjectUtils.isNotEmpty(parentsDO)){
+                            Long schoolId = parentsDO.getSchoolId();
+                            if (ObjectUtils.isNotEmpty(schoolId)){
+                                SchoolDO schoolDO = wxSchoolMapper.get(schoolId);
+                                String vote1 = wxTemplateMapper.getByStCode(schoolId, "vote");
+                                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+                                try {
+                                    wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(), parentsDO.getOpenid()
+                                            , vote1, "有一个投票单需要您的支持",
+                                            schoolDO.getSchoolName(),teacherName ,
+                                            format.format(new Date()), vote.getVoteName(), "点击查看详情",
+                                            wechatUrl + "/voteDetail/parent/" + vote.getVoteId()+"?stuId="+l);
+                                }catch (Exception e){
+                                    e.printStackTrace();
+                                }
+                            }
+
+
                         }
+
                     }
                 }
             }

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

@@ -37,4 +37,6 @@ public interface WxNotifyMapper {
 	List<NotifyDO> selectNotifyListLikeTeacher(@Param("teacherId") String teacherId, @Param("notifyStatus") Integer notifyStatus, @Param("pageStart") Integer pageStart, @Param("pageSize") Integer pageSize);
 
 	List<NotifyDO> selectNotifyListLikeStu(@Param("stuId") String stuId, @Param("notifyStatus") Integer notifyStatus, @Param("pageStart") Integer pageStart, @Param("pageSize") Integer pageSize);
+
+	List<NotifyDO> selectNotifyListSchoolId(@Param("schoolId") Long schoolId, @Param("notifyStatus") Integer notifyStatus, @Param("pageStart") Integer pageStart, @Param("pageSize") Integer pageSize);
 }

+ 2 - 2
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/mapper/WxNotifyrecordsMapper.java

@@ -30,7 +30,7 @@ public interface WxNotifyrecordsMapper {
 	
 	int batchRemove(Long[] reIds);
 
-	NotifyrecordsDO getByStu(@Param("stuId") Long stuId, @Param("notifyId") Long notifyId);
+	List<NotifyrecordsDO> getByStu(@Param("stuId") Long stuId, @Param("notifyId") Long notifyId);
 
-	NotifyrecordsDO getByTeacher(@Param("notifyId") Long notifyId, @Param("teacherId") Long teacherId);
+	List<NotifyrecordsDO> getByTeacher(@Param("notifyId") Long notifyId, @Param("teacherId") Long teacherId);
 }

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

@@ -32,4 +32,6 @@ public interface WxStudentMapper {
 	List<StudentDO> listByClazzId(Long clazzId);
 
 	List<Long> selectStuIdsByClazzId(Long clazzId);
+
+	List<Long> selectStuIdsBySchoolId(Long schoolId);
 }

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

@@ -2,6 +2,7 @@ package com.usoftchina.smartschool.school.wxschool.mapper;
 
 import com.usoftchina.smartschool.school.po.SubjectDO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -28,4 +29,6 @@ public interface WxSubjectMapper {
 	int remove(Long subject_id);
 	
 	int batchRemove(Long[] subjectIds);
+
+	List<SubjectDO> listSubject(@Param("schoolId") Long schoolId,@Param("subjectStatus")Integer subjectStatus);
 }

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

@@ -32,6 +32,6 @@ public interface WxTaskNotifyMapper {
 
 	List<TaskNotifyDO> selectListByTeacher(@Param("teacherId") Long teacherId, @Param("taskStatus") Integer taskStatus, @Param("pageStart") Integer pageStart, @Param("pageSize") Integer pageSize);
 
-	List<TaskNotifyDO> selectListByStu(@Param("stuId") String stuId, @Param("taskStatus") Integer taskStatus, @Param("pageStart") Integer pageStart, @Param("pageSize") Integer pageSize);
+	List<TaskNotifyDO> selectListByClazz(@Param("taskClassid") Long taskClassid, @Param("taskStatus") Integer taskStatus, @Param("pageStart") Integer pageStart, @Param("pageSize") Integer pageSize);
 
 }

+ 5 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/mapper/WxTeacherMapper.java

@@ -17,6 +17,8 @@ import java.util.Map;
 public interface WxTeacherMapper {
 
 	TeacherDO get(Long teacherId);
+
+	Long getById(Long teacherId);
 	
 	List<TeacherDO> list(Map<String, Object> map);
 	
@@ -30,7 +32,9 @@ public interface WxTeacherMapper {
 	
 	int batchRemove(Long[] teacherIds);
 
-	Map<String,Object> selectByOpenidAndUserPhone(@Param("openid") String openid, @Param("userPhone") String userPhone);
+	List<Long> getIdBySchoolId(@Param("schoolId") Long schoolId,@Param("teacherStatus") Integer teacherStatus);
+
+	//Map<String,Object> selectByOpenidAndUserPhone(@Param("openid") String openid, @Param("userPhone") String userPhone);
 
 	TeacherDO getBySchoolAndOpenid(@Param("schoolId") Long schoolId, @Param("openid") String openid);
 

+ 4 - 4
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/mapper/WxTemplateMapper.java

@@ -1,7 +1,7 @@
 package com.usoftchina.smartschool.school.wxschool.mapper;
 
-import com.usoftchina.smartschool.school.po.TemplateDO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * @author kl
@@ -12,9 +12,9 @@ import org.apache.ibatis.annotations.Mapper;
 public interface WxTemplateMapper {
 
     /**
-     * 通过appid获得所有模板id
-     * @param temAppid
+     * 获得模板id
+     * @param
      * @return
      */
-    TemplateDO getByAppid(String temAppid);
+    String getByStCode(@Param("stSchoolid") Long stSchoolid,@Param("stCode") String stCode);
 }

+ 66 - 52
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/oaBean/Manager.java

@@ -9,6 +9,7 @@ import com.usoftchina.smartschool.school.wxschool.mapper.WxOaApproveMapper;
 import com.usoftchina.smartschool.school.wxschool.mapper.WxSchoolMapper;
 import com.usoftchina.smartschool.school.wxschool.mapper.WxTeacherMapper;
 import com.usoftchina.smartschool.school.wxschool.mapper.WxTemplateMapper;
+import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
 import com.usoftchina.smartschool.wechat.api.WxPushApi;
 
 import java.text.SimpleDateFormat;
@@ -40,34 +41,41 @@ public class Manager extends Leader {
             oaApprove.setApproveOpinion(approveOpinion);
             int i = oaApproveMapper.update(oaApprove);
             TeacherDO teacherDO = teacherMapper.get(oaApprove.getProposer());
-            SchoolDO schoolDO = wxSchoolMapper.get(teacherDO.getSchoolId());
-            Integer approveType = oaApprove.getApproveType();
-            String temAgree = wxTemplateMapper.getByAppid(schoolDO.getSchoolAppid()).getTemAgree();
-            if (i>0){
-                if (1==approveType){
-                    try {
-                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),temAgree,"您好,审批已通过",teacherDO.getTeacherName(),"出差",format.format(new Date()),teacherMapper.get(oaApprove.getApprover()).getTeacherName(),"点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
-                    }catch (Exception e){
-                        e.printStackTrace();
-                    }
-                }else if (2==approveType){
-                    try {
-                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),temAgree,"您好,审批已通过",teacherDO.getTeacherName(),"用品申请",format.format(new Date()),teacherMapper.get(oaApprove.getApprover()).getTeacherName(),"点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
-                    }catch (Exception e){
-                        e.printStackTrace();
-                    }
-                }else if (4==approveType){
-                    try {
-                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),temAgree,"您好,审批已通过",teacherDO.getTeacherName(),"请假",format.format(new Date()),teacherMapper.get(oaApprove.getApprover()).getTeacherName(),"点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
-                    }catch (Exception e){
-                        e.printStackTrace();
-                    }
-                }else {
+            if (ObjectUtils.isNotEmpty(teacherDO)){
+                Long schoolId = teacherDO.getSchoolId();
+                if (ObjectUtils.isNotEmpty(schoolId)){
+                    SchoolDO schoolDO = wxSchoolMapper.get(schoolId);
+                    String oaagree = wxTemplateMapper.getByStCode(schoolId, "oaagree");
+                    if (ObjectUtils.isNotEmpty(schoolDO)){
+                        Integer approveType = oaApprove.getApproveType();
+                        if (i>0){
+                            if (1==approveType){
+                                try {
+                                    wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),oaagree,"您好,审批已通过",teacherDO.getTeacherName(),"出差",format.format(new Date()),teacherMapper.get(oaApprove.getApprover()).getTeacherName(),"点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
+                                }catch (Exception e){
+                                    e.printStackTrace();
+                                }
+                            }else if (2==approveType){
+                                try {
+                                    wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),oaagree,"您好,审批已通过",teacherDO.getTeacherName(),"用品申请",format.format(new Date()),teacherMapper.get(oaApprove.getApprover()).getTeacherName(),"点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
+                                }catch (Exception e){
+                                    e.printStackTrace();
+                                }
+                            }else if (4==approveType){
+                                try {
+                                    wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),oaagree,"您好,审批已通过",teacherDO.getTeacherName(),"请假",format.format(new Date()),teacherMapper.get(oaApprove.getApprover()).getTeacherName(),"点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
+                                }catch (Exception e){
+                                    e.printStackTrace();
+                                }
+                            }else {
 
+                            }
+                            return "审批通过,审批意见:" + approveOpinion;
+                        }else {
+                            throw new Exception("审批异常,请联系管理员");
+                        }
+                    }
                 }
-                return "审批通过,审批意见:" + approveOpinion;
-            }else {
-                throw new Exception("审批异常,请联系管理员");
             }
         }else if (status==2){
             oaApprove.setApproveDate(new Date());
@@ -75,37 +83,43 @@ public class Manager extends Leader {
             oaApprove.setApproveOpinion(approveOpinion);
             int i = oaApproveMapper.update(oaApprove);
             TeacherDO teacherDO = teacherMapper.get(oaApprove.getProposer());
-            SchoolDO schoolDO = wxSchoolMapper.get(teacherDO.getSchoolId());
-            Integer approveType = oaApprove.getApproveType();
-            String temRefuse = wxTemplateMapper.getByAppid(schoolDO.getSchoolAppid()).getTemRefuse();
-            if (i>0){
-                if (1==approveType){
-                    try {
-                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),temRefuse,"抱歉,您的审批未通过","出差",teacherMapper.get(oaApprove.getApprover()).getTeacherName(),format.format(new Date()),"","点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
-                    }catch (Exception e){
-                        e.printStackTrace();
-                    }
-                }else if(2==approveType){
-                    try {
-                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),temRefuse,"抱歉,您的审批未通过","用品申请",teacherMapper.get(oaApprove.getApprover()).getTeacherName(),format.format(new Date()),"","点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
-                    }catch (Exception e){
-                        e.printStackTrace();
-                    }
-                }else if (4==approveType){
-                    try {
-                        wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),temRefuse,"抱歉,您的审批未通过","请假",teacherMapper.get(oaApprove.getApprover()).getTeacherName(),format.format(new Date()),"","点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
-                    }catch (Exception e){
-                        e.printStackTrace();
-                    }
-                }else {
+            if (ObjectUtils.isNotEmpty(teacherDO)){
+                Long schoolId = teacherDO.getSchoolId();
+                if (ObjectUtils.isNotEmpty(schoolId)){
+                    SchoolDO schoolDO = wxSchoolMapper.get(schoolId);
+                    String oarefuse = wxTemplateMapper.getByStCode(schoolId, "oarefuse");
+                    Integer approveType = oaApprove.getApproveType();
+                    if (i>0){
+                        if (1==approveType){
+                            try {
+                                wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),oarefuse,"抱歉,您的审批未通过","出差",teacherMapper.get(oaApprove.getApprover()).getTeacherName(),format.format(new Date()),"","点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
+                            }catch (Exception e){
+                                e.printStackTrace();
+                            }
+                        }else if(2==approveType){
+                            try {
+                                wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),oarefuse,"抱歉,您的审批未通过","用品申请",teacherMapper.get(oaApprove.getApprover()).getTeacherName(),format.format(new Date()),"","点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
+                            }catch (Exception e){
+                                e.printStackTrace();
+                            }
+                        }else if (4==approveType){
+                            try {
+                                wxPushApi.wxPush(schoolDO.getSchoolAppid(),schoolDO.getSchoolSecret(),teacherDO.getOpenid(),oarefuse,"抱歉,您的审批未通过","请假",teacherMapper.get(oaApprove.getApprover()).getTeacherName(),format.format(new Date()),"","点击查看详情",wechatUrl + "/approvel-detail/true/"+oaApprove.getApproveId());
+                            }catch (Exception e){
+                                e.printStackTrace();
+                            }
+                        }else {
 
+                        }
+                        return "审批拒绝,审批意见:" + approveOpinion;
+                    }else {
+                        throw new Exception("审批异常,请联系管理员");
+                    }
                 }
-                return "审批拒绝,审批意见:" + approveOpinion;
-            }else {
-                throw new Exception("审批异常,请联系管理员");
             }
         }else {
             throw new Exception("请选择通过,还是拒绝");
         }
+        return "";
     }
 }

+ 9 - 12
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/support/RemindTask.java

@@ -3,7 +3,6 @@ package com.usoftchina.smartschool.school.wxschool.support;
 import com.alibaba.fastjson.JSON;
 import com.usoftchina.smartschool.school.po.MeetingDO;
 import com.usoftchina.smartschool.school.po.SchoolDO;
-import com.usoftchina.smartschool.school.po.TemplateDO;
 import com.usoftchina.smartschool.school.wxschool.mapper.WxMeetingMapper;
 import com.usoftchina.smartschool.school.wxschool.mapper.WxSchoolMapper;
 import com.usoftchina.smartschool.school.wxschool.mapper.WxTeacherMapper;
@@ -67,25 +66,23 @@ public class RemindTask extends TimerTask {
         List<Long> longs = JSON.parseArray(meetingNotifier, Long.class);
         List<Long> list = removeDuplicate(longs);
             String meetingName = meetingDO.getMeetingName();
-        for (Long teacherId:list) {
-            SchoolDO schoolDO = wxSchoolMapper.get(meetingDO.getSchoolId());
-            String openid = teacherMapper.get(teacherId).getOpenid();
-            if (ObjectUtils.isNotEmpty(schoolDO)){
-                String schoolAppid = schoolDO.getSchoolAppid();
-                if (ObjectUtils.isNotEmpty(schoolAppid)){
-                    TemplateDO byAppid = wxTemplateMapper.getByAppid(schoolAppid);
-                    if (ObjectUtils.isNotEmpty(byAppid)){
-                        String temMeeting = byAppid.getTemMeeting();
+            Long schoolId = meetingDO.getSchoolId();
+            if (ObjectUtils.isNotEmpty(schoolId)){
+                String meeting = wxTemplateMapper.getByStCode(schoolId, "meeting");
+                for (Long teacherId:list) {
+                    SchoolDO schoolDO = wxSchoolMapper.get(schoolId);
+                    String openid = teacherMapper.get(teacherId).getOpenid();
+                    if (ObjectUtils.isNotEmpty(schoolDO)){
                         try {
-                            wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(),openid , temMeeting, "您好,您有一条新的会议通知",meetingName , simpleDateFormat.format(meetingDO.getStartDate()), meetingDO.getMeetingAddress(), "-", "点击查看详情", wechatUrl + "/meet-detail/" + meetingDO.getMeetingId()+"?teacherId="+teacherId);
+                            wxPushApi.wxPush(schoolDO.getSchoolAppid(), schoolDO.getSchoolSecret(),openid , meeting, "您好,您有一条新的会议通知",meetingName , simpleDateFormat.format(meetingDO.getStartDate()), meetingDO.getMeetingAddress(), "-", "点击查看详情", wechatUrl + "/meet-detail/" + meetingDO.getMeetingId()+"?teacherId="+teacherId);
                         } catch (Exception e) {
                             e.printStackTrace();
                         }
                     }
+
                 }
             }
 
-        }
         }else {
 
         }

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

@@ -90,7 +90,4 @@ hystrix:
                         timeoutInMilliseconds: 4000
 smartschool:
   domain:
-    wechat: https://school-wechat.ubtob.com
-logging:
-  level:
-    com.usoftchina.smartschool.school: debug
+    wechat: https://school-wechat.ubtob.com

+ 4 - 1
applications/school/school-server/src/main/resources/config/application-dev.yml

@@ -12,4 +12,7 @@ eureka:
       defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:9500/eureka/
 smartschool:
   domain:
-    wechat: https://school-wechat.ubtob.com
+    wechat: https://school-wechat.ubtob.com
+logging:
+  level:
+    com.usoftchina.smartschool.school: debug

+ 10 - 1
applications/school/school-server/src/main/resources/mapper/CurriculumMapper.xml

@@ -263,15 +263,24 @@
     select count(1) from clazz_main_curriculum where mcur_status=1 and id=#{id}
   </select>
 
+  <update id="updateMainBeforePublish">
+    UPDATE clazz_main_curriculum SET mcur_status = 0 WHERE clazz_id = #{clazzId}
+  </update>
+
+  <update id="updateDetailBeforePublish">
+    UPDATE clazz_curriculum SET cur_status = 0 WHERE clazz_id = #{clazzId}
+  </update>
+
   <update id="updateByPublish" parameterType="java.lang.Long">
     update clazz_main_curriculum
     set mcur_status = 1 ,
       createTime = now()
     where id = #{id,jdbcType=BIGINT}
   </update>
+  
   <update id="updateByPublishFrom" parameterType="java.lang.Long">
     update clazz_curriculum
-    set clazz_curriculum.cur_status = 1
+    set clazz_curriculum.cur_status = #{status}
     where cur_mid = #{id,jdbcType=BIGINT}
   </update>
 

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

@@ -285,7 +285,8 @@
   </select>
 
     <select id="selectHomeworkNoticer" parameterType="long" resultType="com.usoftchina.smartschool.school.po.HomeworkNoticer">
-        select openid,subject_name subject from task_notify left join sys_student on task_classid = clazz_id
+        select openid,subject_name subject,sys_parents_stu.parent_id parentId,sys_parents_stu.stu_id stuId
+        from task_notify left join sys_student on task_classid = clazz_id
         left join sys_parents_stu on  sys_parents_stu.stu_id =
         sys_student.stu_id left join sys_parents on sys_parents.parent_id = sys_parents_stu.parent_id
         left join subject on task_notify.subject_id = subject.subject_id

+ 31 - 5
applications/school/school-server/src/main/resources/mapper/NotifyMapper.xml

@@ -226,9 +226,35 @@
     select count(1) from notify where notify_status=1 and notify_id=#{id}
   </select>
 
-    <select id="selectNoticer" parameterType="long" resultType="com.usoftchina.smartschool.school.po.SchoolNoticer">
-        select openid,parents_name noticer,parentstu.stu_id personId,'1' type from sys_parents parent left join sys_parents_stu parentstu on parent.parent_id = parentstu.parent_id where school_id=#{schoolId} and ifnull(openid,'') != '' and parents_status=1
-        union all
-        select openid,teacher_name noticer,teacher_id personId, '0' type from sys_teacher where school_id=#{schoolId} and ifnull(openid,'') != '' and teacher_status=1
-    </select>
+  <select id="selectNoticer" parameterType="long" resultType="com.usoftchina.smartschool.school.po.SchoolNoticer">
+      select openid,noticer,GROUP_CONCAT(personId) personId,GROUP_CONCAT(type) type from (
+      select openid,parents_name noticer,parentstu.stu_id personId,'1' type from sys_parents parent left join sys_parents_stu parentstu on parent.parent_id = parentstu.parent_id where school_id=#{schoolId} and ifnull(openid,'') != '' and parents_status=1  union
+      select openid,teacher_name noticer,teacher_id personId, '0' type from sys_teacher where school_id=#{schoolId} and ifnull(openid,'') != '' and teacher_status=1 ) tab_  GROUP BY openid,noticer
+  </select>
+
+  <insert id="insertDetailBySelective">
+    INSERT INTO NOTIFY_RECORDS(NOTIFY_ID,STU_ID,TEACHER_ID,IS_READ) VALUES
+    <foreach collection="list" item="item" index="index" open="" close="" separator=",">
+      (
+      #{notice_id,jdbcType=VARCHAR},
+      <choose>
+        <when test='item.type == "1"'>
+          #{item.personId,jdbcType=VARCHAR},
+        </when>
+        <otherwise>
+          null,
+        </otherwise>
+      </choose>
+      <choose>
+        <when test='item.type == "0"'>
+          #{item.personId,jdbcType=VARCHAR},
+        </when>
+        <otherwise>
+          null,
+        </otherwise>
+      </choose>
+      1
+      )
+    </foreach>
+  </insert>
 </mapper>

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

@@ -19,6 +19,8 @@
     <result column="clazz_id" property="clazz_id" jdbcType="BIGINT" />
     <result column="clazz_name" property="clazz_name" jdbcType="VARCHAR"/>
     <result column="grade_clazz" property="grade_clazz" jdbcType="VARCHAR"/>
+    <result column="record_type" property="record_type" jdbcType="VARCHAR"/>
+    <result column="record_date" property="record_date" jdbcType="TIMESTAMP"/>
   </resultMap>
   <sql id="Base_Column_List" >
     record_id, record_name, out_date, in_date, record_details, record_remarks,device_id,

+ 3 - 0
applications/school/school-server/src/main/resources/mapper/SchoolTemplateMapper.xml

@@ -28,6 +28,9 @@
       #{st_templateid,jdbcType=VARCHAR}, #{st_schoolid,jdbcType=BIGINT})
   </insert>
   <insert id="insertSelective" parameterType="com.usoftchina.smartschool.school.po.SchoolTemplate" >
+    <selectKey  resultType="java.lang.Long" keyProperty="st_id">
+      SELECT LAST_INSERT_ID() AS ID
+    </selectKey>
     insert into school_template
     <trim prefix="(" suffix=")" suffixOverrides="," >
       <if test="st_code != null" >

+ 100 - 0
applications/school/school-server/src/main/resources/mapper/ScoreMapper.xml

@@ -31,6 +31,10 @@
     delete from Score_Import
     where si_id = #{si_id,jdbcType=BIGINT}
   </delete>
+  <delete id="deleteByPrimaryDetailKey" parameterType="java.lang.Long" >
+    delete from score_importdetail
+    where sd_siid = #{sd_siid,jdbcType=BIGINT}
+  </delete>
   <insert id="insert" parameterType="com.usoftchina.smartschool.school.po.StuScore" >
     insert into stu_score (score_id, score_type, score_name,
     stu_id, score_total, score_num,
@@ -432,4 +436,100 @@
 	  where sd_siid=#{id}     and  ifnull(sys_parents.openid,'') != '' and  parents_status=1
   </select>
 
+  <update id="updateScoreImport" parameterType="com.usoftchina.smartschool.school.po.ScoreImport" >
+    update score_import
+    <set >
+      <if test="si_date != null" >
+        si_date = #{si_date,jdbcType=TIMESTAMP},
+      </if>
+      <if test="si_creator != null" >
+        si_creator = #{si_creator,jdbcType=VARCHAR},
+      </if>
+      <if test="si_creatorid != null" >
+        si_creatorid = #{si_creatorid,jdbcType=BIGINT},
+      </if>
+      <if test="si_examtitle != null" >
+        si_examtitle = #{si_examtitle,jdbcType=VARCHAR},
+      </if>
+      <if test="si_examscope != null" >
+        si_examscope = #{si_examscope,jdbcType=VARCHAR},
+      </if>
+      <if test="si_term != null" >
+        si_term = #{si_term,jdbcType=VARCHAR},
+      </if>
+      <if test="si_class != null" >
+        si_class = #{si_class,jdbcType=VARCHAR},
+      </if>
+      <if test="si_classid != null" >
+        si_classid = #{si_classid,jdbcType=BIGINT},
+      </if>
+      <if test="si_grade != null" >
+        si_grade = #{si_grade,jdbcType=VARCHAR},
+      </if>
+      <if test="si_gradeid != null" >
+        si_gradeid = #{si_gradeid,jdbcType=BIGINT},
+      </if>
+      <if test="school_id != null" >
+        school_id = #{school_id,jdbcType=BIGINT},
+      </if>
+      <if test="si_examdate != null" >
+        si_examdate = #{si_examdate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="si_publish != null" >
+        si_publish = #{si_publish,jdbcType=INTEGER},
+      </if>
+    </set>
+    where si_id = #{si_id,jdbcType=INTEGER}
+  </update>
+
+  <insert id="insertDetailSelective" parameterType="java.util.List">
+    insert into score_importdetail
+    (sd_siid,sd_stuid,sd_stu,sd_score,
+    sd_subject,sd_remark,school_id,sd_stuNumber
+    ) values
+      <foreach collection="list" item="item" index="index" open="" close="" separator=",">
+      (
+      #{item.sd_siid, jdbcType=BIGINT},#{item.sd_stuid,jdbcType=BIGINT},#{item.sd_stu,jdbcType=VARCHAR},#{item.sd_score,jdbcType=INTEGER},#{item.sd_subject,jdbcType=VARCHAR},
+      #{item.sd_remark,jdbcType=VARCHAR},#{item.school_id,jdbcType=BIGINT},#{item.sd_stuNumber,jdbcType=VARCHAR}
+      )
+      </foreach>
+  </insert>
+
+  <update id="updateDetailSelective" parameterType="com.usoftchina.smartschool.school.po.ScoreImportdetail">
+    <foreach collection="list" item="item" index="index" separator=";">
+      update score_importdetail
+      <set>
+        <if test="item.sd_siid != null">
+            sd_siid = #{item.sd_siid, jdbcType=BIGINT},
+        </if>
+        <if test="item.sd_stuid != null">
+          sd_stuid = #{item.sd_stuid,jdbcType=BIGINT},
+        </if>
+        <if test="item.sd_stu != null">
+          sd_stu = #{item.sd_stu,jdbcType=VARCHAR},
+        </if>
+        <if test="item.sd_score != null">
+          sd_score = #{item.sd_score,jdbcType=INTEGER},
+        </if>
+        <if test="item.sd_subject != null">
+          sd_subject = #{item.sd_subject,jdbcType=VARCHAR},
+        </if>
+        <if test="item.sd_remark != null">
+          sd_remark = #{item.sd_remark,jdbcType=VARCHAR},
+        </if>
+        <if test="item.school_id != null">
+          school_id = #{item.school_id,jdbcType=BIGINT},
+        </if>
+        <if test="item.sd_stuNumber != null">
+          sd_stuNumber = #{item.sd_stuNumber,jdbcType=VARCHAR},
+        </if>
+      </set>
+      WHERE sd_id= #{item.sd_id,jdbcType=BIGINT}
+    </foreach>
+  </update>
+
+  <delete id="deleteDetail">
+    DELETE FROM score_importdetail where sd_id = #{sd_id}
+  </delete>
+
 </mapper>

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

@@ -110,4 +110,8 @@
     cur_tues=#{id} or cur_wed=#{id} or cur_thur=#{id} or cur_fri=#{id}
     or cur_sat=#{id}
   </select>
+
+  <select id="checkSubject" resultType="integer">
+    select count(1) from subject where  subject_name= #{subject_name} and school_id = #{school_id}
+  </select>
 </mapper>

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

@@ -260,4 +260,8 @@
     </where>
   </select>
 
+  <select id="selectByClazzName" resultMap="BaseResultMap">
+    select * from sys_clazz where clazz_grade=#{clazz_grade} and clazz_name=#{clazz_name} and school_id=#{school_id}
+  </select>
+
 </mapper>

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

@@ -24,6 +24,7 @@
     <result column="stu_nation" property="stu_nation" jdbcType="VARCHAR" />
     <result column="stu_political" property="stu_political" jdbcType="VARCHAR" />
     <result property="stu_cardNo" column="stu_cardNo" jdbcType="VARCHAR"/>
+    <result property="stu_img" column="stu_img" jdbcType="VARCHAR"/>
   </resultMap>
 
   <sql id="Base_Column_List" >
@@ -124,6 +125,9 @@
       <if test="stu_cardNo != null" >
         stu_cardNo,
       </if>
+      <if test="stu_img != null" >
+        stu_img,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides="," >
       <if test="stu_number != null" >
@@ -189,6 +193,9 @@
       <if test="stu_cardNo != null" >
         #{stu_cardNo,jdbcType=VARCHAR},
       </if>
+      <if test="stu_img != null" >
+        #{stu_img,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
   <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.smartschool.school.po.SysStudent" >
@@ -257,6 +264,9 @@
       <if test="stu_cardNo != null" >
         stu_cardNo = #{stu_cardNo,jdbcType=VARCHAR},
       </if>
+      <if test="stu_img != null" >
+        stu_img = #{stu_img,jdbcType=VARCHAR},
+      </if>
     </set>
     where stu_id = #{stu_id,jdbcType=BIGINT}
   </update>
@@ -432,7 +442,7 @@
   </select>
 
   <select id="selectParentByPhone"  resultMap="parentMap">
-    select * from sys_parents where pa_phone=#{phone} and school_id=#{schoolId}
+    select * from sys_parents where pa_phone=#{phone} and school_id=#{schoolId} limit 0,1
   </select>
 
   <insert id="insertrelationDetail">
@@ -469,7 +479,7 @@
   </select>
 
   <select id="repeatCurriculum" parameterType="long" resultType="integer">
-    select count(1) from clazz_curriculum where clazz_id = #{id} and clazz_curriculum.cur_status=1
+    select count(1) from clazz_main_curriculum where clazz_id = #{id} and clazz_main_curriculum.mcur_status=1
   </select>
 
   <select id="count" resultType="int">
@@ -493,4 +503,31 @@
   <select id="selectIdByClazzId" resultType="string" parameterType="long">
     SELECT stu_id FROM sys_student WHERE clazz_id = #{clazzId}
   </select>
+
+  <update id="updateGradeName">
+    update sys_student set stu_grade = #{grade_name} where clazz_id in
+    <foreach collection="list" index="index" item="item" separator="," close=")" open="(" >
+      #{item.clazz_id}
+    </foreach>
+  </update>
+
+  <update id="updateClazzName">
+    update sys_student set stu_class = #{clazz_name} where clazz_id = #{clazz_id}
+  </update>
+
+    <select id="selectByStudent" resultMap="BaseResultMap">
+    select * from sys_student where stu_name=#{stu_name} and clazz_id=#{clazz_id} and school_id=#{school_id}
+  </select>
+
+    <select id="countName" resultType="int">
+        select count(*) from sys_student
+        <where>
+            <if test="stu_name != null">
+                stu_name = #{stu_name}
+            </if>
+            <if test="school_id != null">
+                and school_id=#{school_id}
+            </if>
+        </where>
+    </select>
 </mapper>

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

@@ -71,7 +71,9 @@
 			`notify_teacher`,
 			`notify_stu`,
 			`notify_remarks`,
-			`school_id`
+			`school_id`,
+			`creator`,
+			`publish_date`
 		)
 		values
 		(
@@ -85,7 +87,9 @@
 			#{notifyTeacher},
 			#{notifyStu},
 			#{notifyRemarks},
-			#{schoolId}
+			#{schoolId},
+			#{creator},
+			#{publishDate}
 		)
 	</insert>
 	 
@@ -142,4 +146,10 @@
 		limit #{pageStart},#{pageSize}
 	</select>
 
+	<select id="selectNotifyListSchoolId" resultType="com.usoftchina.smartschool.school.po.NotifyDO">
+		<include refid="NotifyVo"/> where notify_status = #{notifyStatus} and school_id like #{schoolId}
+		order by notify_id desc
+		limit #{pageStart},#{pageSize}
+	</select>
+
 </mapper>

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

@@ -141,4 +141,8 @@
 		SELECT `stu_id` from sys_student where clazz_id = #{clazzId}
 	</select>
 
+	<select id="selectStuIdsBySchoolId" resultType="Long">
+		SELECT `stu_id` from sys_student where school_id = #{schoolId}
+	</select>
+
 </mapper>

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

@@ -11,6 +11,10 @@
 		<include refid="SubjectVo"/> where subject_id = #{value}
 	</select>
 
+	<select id="listSubject" resultType="com.usoftchina.smartschool.school.po.SubjectDO">
+		<include refid="SubjectVo"/> where school_id = #{schoolId} and subject_status = #{subjectStatus}
+	</select>
+
 	<select id="list" resultType="com.usoftchina.smartschool.school.po.SubjectDO">
         <include refid="SubjectVo"/>
         <where>  

+ 23 - 6
applications/school/school-server/src/main/resources/mapper/WxTaskNotifyMapper.xml

@@ -4,7 +4,7 @@
 <mapper namespace="com.usoftchina.smartschool.school.wxschool.mapper.WxTaskNotifyMapper">
 
     <sql id="TaskNotifyVo">
-    select `task_id`,`subject_id`,`task_title`,`task_context`,`task_files`,`task_status`,`create_date`,`start_date`,`end_date`,`task_creator`,`school_id`,`task_notifier`,`classz_name`,`grade_name`,`creator`,`publish_date` from task_notify
+    select `task_id`,`subject_id`,`task_title`,`task_context`,`task_files`,`task_status`,`create_date`,`start_date`,`end_date`,`task_creator`,`school_id`,`task_notifier`,`task_classid`,`task_gradeid`,`classz_name`,`grade_name`,`creator`,`publish_date` from task_notify
     </sql>
 
 	<select id="get" resultType="com.usoftchina.smartschool.school.po.TaskNotifyDO">
@@ -30,6 +30,8 @@
 			<if test="gradeName != null and gradeName != ''"> and grade_name = #{gradeName} </if>
 			<if test="creator != null and creator != ''"> and creator = #{creator} </if>
 			<if test="publishDate != null and publishDate != ''"> and publish_date = #{publishDate} </if>
+			<if test="taskClassid != null and taskClassid != ''"> and task_classid = #{taskClassid} </if>
+			<if test="taskGradeid != null and taskGradeid != ''"> and task_gradeid = #{taskGradeid} </if>
 		  		</where>
         <choose>
             <when test="sort != null and sort.trim() != ''">
@@ -63,6 +65,8 @@
 			 <if test="gradeName != null and gradeName != ''"> and grade_name = #{gradeName} </if>
 			 <if test="creator != null and creator != ''"> and creator = #{creator} </if>
 			 <if test="publishDate != null and publishDate != ''"> and publish_date = #{publishDate} </if>
+			 <if test="taskClassid != null and taskClassid != ''"> and task_classid = #{taskClassid} </if>
+			 <if test="taskGradeid != null and taskGradeid != ''"> and task_gradeid = #{taskGradeid} </if>
 		  		</where>
 	</select>
 	 
@@ -83,7 +87,9 @@
 			`classz_name`,
 			`grade_name`,
 			`creator`,
-			`publish_date`
+			`publish_date`,
+			`task_classid`,
+			`task_gradeid`
 		)
 		values
 		(
@@ -101,7 +107,9 @@
 			#{classzName},
 			#{gradeName},
 			#{creator},
-			#{publishDate}
+			#{publishDate},
+			#{taskClassid},
+			#{taskGradeid}
 		)
 	</insert>
 	 
@@ -122,7 +130,9 @@
 			<if test="classzName != null "> `classz_name` = #{classzName}, </if>
 			<if test="gradeName != null "> `grade_name` = #{gradeName}, </if>
 			<if test="creator != null"> `creator` = #{creator}, </if>
-			<if test="publishDate != null"> `publish_date` = #{publishDate} </if>
+			<if test="publishDate != null"> `publish_date` = #{publishDate}, </if>
+			<if test="taskClassid != null"> `task_classid` = #{taskClassid}, </if>
+			<if test="taskGradeid != null"> `task_gradeid` = #{taskGradeid} </if>
 		</set>
 		where task_id = #{taskId}
 	</update>
@@ -144,10 +154,17 @@
 		limit #{pageStart}, #{pageSize}
 	</select>
 
-	<select id="selectListByStu" resultType="com.usoftchina.smartschool.school.po.TaskNotifyDO">
-		<include refid="TaskNotifyVo"/> where task_status = #{taskStatus} and task_notifier like #{stuId}
+
+	<select id="selectListByClazz" resultType="com.usoftchina.smartschool.school.po.TaskNotifyDO">
+		<include refid="TaskNotifyVo"/> where task_status = #{taskStatus} and task_classid = #{taskClassid}
 		order by task_id desc
 		limit #{pageStart}, #{pageSize}
 	</select>
 
+	<!--<select id="selectListByStu" resultType="com.usoftchina.smartschool.school.po.TaskNotifyDO">
+		<include refid="TaskNotifyVo"/> where task_status = #{taskStatus} and task_notifier like #{stuId}
+		order by task_id desc
+		limit #{pageStart}, #{pageSize}
+	</select>-->
+
 </mapper>

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

@@ -11,6 +11,14 @@
 		<include refid="TeacherVo"/> where teacher_id = #{value}
 	</select>
 
+	<select id="getById" resultType="Long">
+		select `school_id` from sys_teacher where teacher_id = #{teacherId}
+	</select>
+
+	<select id="getIdBySchoolId" resultType="Long">
+		select `teacher_id` from sys_teacher where school_id = #{schoolId} and teacher_status = #{teacherStatus}
+	</select>
+
 	<select id="list" resultType="com.usoftchina.smartschool.school.po.TeacherDO">
         <include refid="TeacherVo"/>
         <where>  

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

@@ -2,13 +2,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.wxschool.mapper.WxTemplateMapper">
-
-    <sql id="TemplateVo">
-    select `tem_id` ,`tem_appid`,`tem_out_in`,`tem_notify`,`tem_task`,`tem_vote`,`tem_score`,`tem_apply`,`tem_agree`,`tem_refuse`,`tem_leave`,`tem_meeting`,`tem_remarks` from sys_template
-    </sql>
-
-	<select id="getByAppid" resultType="com.usoftchina.smartschool.school.po.TemplateDO">
-		<include refid="TemplateVo"/> where tem_appid = #{temAppid}
+	<select id="getByStCode" resultType="String">
+		select `st_templateid` from school_template where st_schoolid = #{stSchoolid} and st_code=#{stCode}
 	</select>
 
 </mapper>

+ 8 - 0
applications/wechat/wechat-dto/src/main/java/com/usoftchina/smartschool/wechat/dto/TransferDTO.java

@@ -18,4 +18,12 @@ public class TransferDTO implements Serializable{
     public void setData(List<MessageInfoDTO> data) {
         this.data = data;
     }
+
+    public TransferDTO(List<MessageInfoDTO> data) {
+        this.data = data;
+    }
+    public TransferDTO() {
+    }
+
+
 }

+ 5 - 0
base-servers/account/account-server/pom.xml

@@ -54,6 +54,11 @@
       <artifactId>account-dto</artifactId>
       <version>1.0.0-SNAPSHOT</version>
     </dependency>
+    <dependency>
+      <groupId>com.usoftchina.smartschool</groupId>
+      <artifactId>auth-dto</artifactId>
+      <version>1.0.0-SNAPSHOT</version>
+    </dependency>
   </dependencies>
 
   <build>

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

@@ -5,8 +5,6 @@ import com.usoftchina.smartschool.account.dto.AccountRegDTO;
 import com.usoftchina.smartschool.account.po.Account;
 import com.usoftchina.smartschool.account.service.AccountService;
 import com.usoftchina.smartschool.base.Result;
-import com.usoftchina.smartschool.context.BaseContextHolder;
-import com.usoftchina.smartschool.exception.BizException;
 import com.usoftchina.smartschool.exception.ExceptionCode;
 import com.usoftchina.smartschool.utils.BeanMapper;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -103,11 +101,12 @@ public class AccountController {
      * @return
      */
     @PostMapping("/password/reset")
-    public Result resetPassword(@RequestParam("password") String password){
-        Account account = accountService.findByPrimaryKey(BaseContextHolder.getUserId());
+    public Result resetPassword(@RequestParam("password") String password, @RequestParam("userId") Long userId){
+        Account account = accountService.findByPrimaryKey(userId);
         if (null == account) {
             return Result.error(ExceptionCode.USER_NOT_EXIST);
         }
+        account.setId(userId);
         account.setUser_pass(accountService.getEncryptedPassword(password, account.getSalt()));
         accountService.updateByPrimaryKeySelective(account);
         return Result.success();

+ 56 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/interceptor/AuthRestInterceptor.java

@@ -0,0 +1,56 @@
+package com.usoftchina.smartschool.account.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.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
+ */
+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)) {
+                logger.debug("token={}", 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);
+    }
+}

+ 23 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/interceptor/InterceptorConfig.java

@@ -0,0 +1,23 @@
+package com.usoftchina.smartschool.account.interceptor;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @author: ChenWei
+ * @create: 2019-03-018 15:03
+ **/
+@Configuration
+public class InterceptorConfig implements WebMvcConfigurer {
+    @Bean
+    public AuthRestInterceptor authRestInterceptor() {
+        return new AuthRestInterceptor();
+    }
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(authRestInterceptor());
+    }
+}

+ 33 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/smartschool/account/interceptor/ServiceFeignInterceptor.java

@@ -0,0 +1,33 @@
+package com.usoftchina.smartschool.account.interceptor;
+
+import com.usoftchina.smartschool.context.BaseContextHolder;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author yingp
+ * @date 2018/10/2
+ */
+public class ServiceFeignInterceptor implements RequestInterceptor {
+    /*@Autowired
+    private AuthConfig authConfig;*/
+
+    private static final String AUTHHEADER = "Authorization";
+
+    private Logger logger = LoggerFactory.getLogger(ServiceFeignInterceptor.class);
+
+    public ServiceFeignInterceptor() {
+    }
+
+    @Override
+    public void apply(RequestTemplate requestTemplate) {
+        logger.debug("{}: {}", AUTHHEADER, BaseContextHolder.getToken());
+        requestTemplate.header(AUTHHEADER, BaseContextHolder.getToken());
+    }
+
+    /*public void setAuthConfig(AuthConfig authConfig) {
+        this.authConfig = authConfig;
+    }*/
+}

BIN
base-servers/account/account-server/src/main/resources/auth/pub.key


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

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

+ 16 - 1
base-servers/account/account-server/src/main/resources/mapper/AccountMapper.xml

@@ -47,7 +47,22 @@
 
   </update>
   <update id="updateByPrimaryKeySelective">
-
+    UPDATE sys_user
+    <set>
+      <if test="user_phone != null">
+        user_phone = #{user_phone, jdbcType=VARCHAR},
+      </if>
+      <if test="user_pass != null">
+        user_pass = #{user_pass, jdbcType=VARCHAR},
+      </if>
+      <if test="user_phone != null">
+        user_code = #{user_code, jdbcType=VARCHAR},
+      </if>
+      <if test="user_phone != null">
+        salt = #{salt, jdbcType=VARCHAR},
+      </if>
+    </set>
+    WHERE USER_ID = #{id, jdbcType=BIGINT}
   </update>
 
   <select id="selectTeacherName" resultType="string">

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

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

+ 1 - 1
base-servers/file/file-server-fdfs/src/main/resources/application.yml

@@ -7,7 +7,7 @@ fdfs:
   tracker-list:
     - 10.10.100.200:22122
 file:
-  base-url: http://10.1.81.1:8888/
+  base-url: https://dfs.ubtob.com/
 spring:
   application:
     name: file-server

+ 16 - 22
base-servers/file/file-server-qcloud/src/main/resources/config/application-docker-cloud.yml

@@ -5,25 +5,19 @@ eureka:
   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
-    rabbitmq:
-          host: 132.232.174.14
-          port: 5672
-          virtual-host: school
-          username: saas
-          password: select123***
+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

+ 20 - 1
base-servers/file/file-server/src/main/java/com/usoftchina/smartschool/file/controller/FileController.java

@@ -18,6 +18,7 @@ import org.apache.commons.compress.archivers.ArchiveOutputStream;
 import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
 import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
@@ -190,7 +191,7 @@ public class FileController {
         return Result.error(ExceptionCode.FILE_NOT_EXISTS);
     }
 
-    @ApiOperation(value = "查看文件信息")
+    @ApiOperation(value = "通过ids查看文件信息")
     @GetMapping(value = "/info", params = "ids")
     public Result<FileInfoDTO> getFileInfoList(String ids) {
         if (StringUtils.isEmpty(ids)){
@@ -208,6 +209,24 @@ public class FileController {
         return Result.error(ExceptionCode.FILE_NOT_EXISTS);
     }
 
+    @ApiOperation(value = "通过accessPath查看文件信息")
+    @GetMapping(value = "/info", params = "accessPath")
+    public Result<FileInfoDTO> getFileInfoListByAccessPath(@RequestParam("accessPath") String accessPath) {
+        if (StringUtils.isEmpty(accessPath)){
+            throw new BizException(ExceptionCode.ILLEGAL_ARGUMENTS);
+        }
+        List<FileInfo> fileInfoList = new ArrayList<>();
+        String[] accessPathArray = accessPath.split(",");
+        for (int i = 0; i < accessPathArray.length; i++) {
+            FileInfo info = fileService.findByAccessPath(accessPathArray[i]);
+            fileInfoList.add(info);
+        }
+        if (!CollectionUtils.isEmpty(fileInfoList)) {
+            return Result.success(BeanMapper.mapList(fileInfoList, FileInfoDTO.class));
+        }
+        return Result.error(ExceptionCode.FILE_NOT_EXISTS);
+    }
+
     @ApiOperation(value = "查看子文件")
     @GetMapping(value = "/list")
     public Result<List<FileInfoDTO>> listFiles(@RequestParam(value = "folderId", required = false) Long folderId) {

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

@@ -43,4 +43,11 @@ public interface FileInfoMapper extends CommonBaseMapper<FileInfo>{
      * @return
      */
     FileInfo selectByFullPath(@Param("fullPath") String fullPath);
+
+    /**
+     * 按绝对路径查找
+     * @param accessPath
+     * @return
+     */
+    FileInfo selectByAccessPath(@Param("accessPath") String accessPath);
 }

Vissa filer visades inte eftersom för många filer har ändrats