Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/dev'

zhaoy 6 rokov pred
rodič
commit
3a99eaa997
23 zmenil súbory, kde vykonal 241 pridanie a 58 odobranie
  1. 0 1
      applications/device/device-client/src/main/java/com/usoftchina/smartschool/device/client/DeviceClientApplication.java
  2. 1 1
      applications/device/device-client/src/main/java/com/usoftchina/smartschool/device/client/repository/AccessControlRepository.java
  3. 3 3
      applications/device/device-client/src/main/java/com/usoftchina/smartschool/device/client/service/IcCardService.java
  4. 2 1
      applications/device/device-client/src/main/resources/application.yml
  5. 64 0
      applications/device/device-client/src/main/resources/logback-spring.xml
  6. 0 0
      applications/device/device-client/src/main/resources/static/js/iconfont.js
  7. 1 0
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/mapper/IcCardMapper.java
  8. 12 0
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/mapper/SchoolTemplateMapper.java
  9. 55 0
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/po/SchoolTemplate.java
  10. 13 3
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/service/impl/AccessControlServiceImpl.java
  11. 2 1
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/service/impl/IcCardServiceImpl.java
  12. 5 1
      applications/device/device-server/src/main/resources/mapper/IcCardMapper.xml
  13. 16 0
      applications/device/device-server/src/main/resources/mapper/SchoolTemplateMapper.xml
  14. 2 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/StudentServiceImpl.java
  15. 1 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/TeacherServiceImpl.java
  16. 1 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/HomeWorkServiceImpl.java
  17. 14 2
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/NoticeServiceImpl.java
  18. 2 2
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/ScoreServiceImpl.java
  19. 8 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SchoolNoticer.java
  20. 3 2
      applications/school/school-server/src/main/resources/mapper/NotifyMapper.xml
  21. 1 1
      frontend/pc-web/app/view/basic/student/StudentDetail.js
  22. 1 1
      frontend/pc-web/app/view/basic/student/StudentList.js
  23. 34 36
      frontend/wechat-web/src/modules/home/HomePage.jsx

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

@@ -6,7 +6,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
-import org.springframework.web.client.RestTemplate;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**

+ 1 - 1
applications/device/device-client/src/main/java/com/usoftchina/smartschool/device/client/repository/AccessControlRepository.java

@@ -53,7 +53,7 @@ public class AccessControlRepository {
     @CacheEvict(value = "accessControl", key = "#accessControl.id")
     public boolean save(AccessControl accessControl) {
         int ret = jdbcTemplate.update("insert into access_control(id, name,ip,port,username,password,accessType) values " +
-                        "(?,?,?,?,?,?)", accessControl.getId(), accessControl.getName(), accessControl.getIp(), accessControl.getPort(),
+                        "(?,?,?,?,?,?,?)", accessControl.getId(), accessControl.getName(), accessControl.getIp(), accessControl.getPort(),
                 accessControl.getUsername(), accessControl.getPassword(), accessControl.getAccessType());
         return ret > 0;
     }

+ 3 - 3
applications/device/device-client/src/main/java/com/usoftchina/smartschool/device/client/service/IcCardService.java

@@ -82,14 +82,14 @@ public class IcCardService {
         if (null != card && dynamicDataSourceRegister.contains(card) && null != school) {
             DynamicDataSourceContextHolder.set(card);
             try {
-                doTask(school.getName());
+                doTask(school);
             } finally {
                 DynamicDataSourceContextHolder.clear();
             }
         }
     }
 
-    private void doTask(String schoolName){
+    private void doTask(School school){
         //1.准备本次需要传输的数据->转移至中间表
         jdbcTemplate.execute(insertSql);
         //2.获取本次传输的数据
@@ -100,7 +100,7 @@ public class IcCardService {
             headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
             MultiValueMap<String, String> requestEntity = new LinkedMultiValueMap<>();
             requestEntity.add("data", JSON.toJSONString(resultList));
-            requestEntity.add("school", schoolName);
+            requestEntity.add("school", school.getId());
             HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(requestEntity, headers);
             ResponseEntity<Result> response = restTemplate.postForEntity(targetURL, httpEntity, Result.class);
             if (response.getStatusCode() == HttpStatus.OK) {

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

@@ -20,7 +20,7 @@ spring:
   datasource:
     primary:
       driver-class-name: org.h2.Driver
-      jdbc-url: jdbc:h2:file:./data/device_client;FILE_LOCK=NO;DB_CLOSE_ON_EXIT=FALSE
+      jdbc-url: jdbc:h2:file:${user.home}/.device-client/data/device_client;FILE_LOCK=NO;DB_CLOSE_ON_EXIT=FALSE
       username: admin
       password: select111***
     hikari:
@@ -30,5 +30,6 @@ spring:
       max-lifetime: 1800000
       connection-timeout: 30000
 logging:
+  path: ${user.home}/.device-client/logs/
   level:
     com.usoftchina.smartschool.device.client: debug

+ 64 - 0
applications/device/device-client/src/main/resources/logback-spring.xml

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

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
applications/device/device-client/src/main/resources/static/js/iconfont.js


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

@@ -15,4 +15,5 @@ public interface IcCardMapper {
 
     SysSchoolDTO getSchoolIdByName(@Param("name") String name);
 
+    String selectTemplateId(@Param("schoolId") Long schoolId);
 }

+ 12 - 0
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/mapper/SchoolTemplateMapper.java

@@ -0,0 +1,12 @@
+package com.usoftchina.smartschool.device.mapper;
+
+import com.usoftchina.smartschool.device.po.SchoolTemplate;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface SchoolTemplateMapper {
+    SchoolTemplate selectByCode(@Param("code") String code, @Param("school_id") Long school_id);
+}

+ 55 - 0
applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/po/SchoolTemplate.java

@@ -0,0 +1,55 @@
+package com.usoftchina.smartschool.device.po;
+
+import java.io.Serializable;
+
+public class SchoolTemplate implements Serializable{
+    private Long st_id;
+
+    private String st_code;
+
+    private String st_name;
+
+    private String st_templateid;
+
+    private Long st_schoolid;
+
+    public Long getSt_id() {
+        return st_id;
+    }
+
+    public void setSt_id(Long st_id) {
+        this.st_id = st_id;
+    }
+
+    public String getSt_code() {
+        return st_code;
+    }
+
+    public void setSt_code(String st_code) {
+        this.st_code = st_code == null ? null : st_code.trim();
+    }
+
+    public String getSt_name() {
+        return st_name;
+    }
+
+    public void setSt_name(String st_name) {
+        this.st_name = st_name == null ? null : st_name.trim();
+    }
+
+    public String getSt_templateid() {
+        return st_templateid;
+    }
+
+    public void setSt_templateid(String st_templateid) {
+        this.st_templateid = st_templateid == null ? null : st_templateid.trim();
+    }
+
+    public Long getSt_schoolid() {
+        return st_schoolid;
+    }
+
+    public void setSt_schoolid(Long st_schoolid) {
+        this.st_schoolid = st_schoolid;
+    }
+}

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

@@ -3,14 +3,17 @@ package com.usoftchina.smartschool.device.service.impl;
 import com.usoftchina.smartschool.base.Result;
 import com.usoftchina.smartschool.device.dto.AccessControlInfo;
 import com.usoftchina.smartschool.device.mapper.AccessControlRecordMapper;
+import com.usoftchina.smartschool.device.mapper.SchoolTemplateMapper;
 import com.usoftchina.smartschool.device.mapper.StudentInfoMapper;
 import com.usoftchina.smartschool.device.po.AccessControlRecord;
+import com.usoftchina.smartschool.device.po.SchoolTemplate;
 import com.usoftchina.smartschool.device.po.StudentInfo;
 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;
@@ -19,9 +22,7 @@ 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.http.MediaType;
 import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
 
 import java.util.Date;
 import java.util.List;
@@ -45,6 +46,9 @@ public class AccessControlServiceImpl implements AccessControlService{
     @Autowired
     private StudentInfoMapper studentInfoMapper;
 
+    @Autowired
+    private SchoolTemplateMapper schoolTemplateMapper;
+
     private Logger logger = LoggerFactory.getLogger(AccessControlServiceImpl.class);
 
     @Value("${wechat.template.accesscontrol}")
@@ -105,12 +109,18 @@ public class AccessControlServiceImpl implements AccessControlService{
         /**
          * 3、推送消息到消息服务器(微信服务监听此消息发送微信消息)
          */
+        //拿到模板
+        SchoolTemplate schoolTemplate = schoolTemplateMapper.selectByCode(NoticeTemplate.INOUT_NOTICE.getCode(),studentInfo.getSchoolId());
+        if (StringUtils.isEmpty(schoolTemplate) || StringUtils.isEmpty(schoolTemplate.getSt_templateid())) {
+            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(accessControlTemplateId);
+        msg.setTemplateId(schoolTemplate.getSt_templateid());
         msg.setTitle((type == 1 ? "入" : "出") + "校提醒");
         msg.setKeyword1(studentInfo.getStuName());
         msg.setKeyword2(DateUtils.format());

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

@@ -49,6 +49,7 @@ public class IcCardServiceImpl implements IcCardService {
             String appId = sysSchoolDTO.getSchool_appid();
             String secret = sysSchoolDTO.getSchool_secret();
             Long schoolId = sysSchoolDTO.getSchool_id();
+            String templateId = icCardMapper.selectTemplateId(schoolId);
             StringBuilder sb = new StringBuilder();
             accTransDetailList.forEach(accTransDetail -> {
                 sb.append(accTransDetail.getGuid() + ",");
@@ -62,7 +63,7 @@ public class IcCardServiceImpl implements IcCardService {
                 messageInfo.setAppId(appId);
                 messageInfo.setSecret(secret);
                 //messageInfo.setUserType(2);
-                messageInfo.setTemplateId("FhtdzLdpzLLp4eJGtgvH4SUfIpSIF0kWwIpsWsSBp6c");
+                messageInfo.setTemplateId(templateId);
                 String accNo = accTransDetail.getAccNo();
                 String cardNo = StringUtils.isEmpty(accNo) ? null : accNo.substring(accTransDetail.getAccNo().length() - 4);
                 String header = "您好,您的小孩" + accTransDetail.getEmpName() + "在校的校园卡(卡号:*** " + cardNo + ")发生如下交易";

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

@@ -6,7 +6,7 @@
   </resultMap>
 
   <select id="getSchoolIdByName" resultType="com.usoftchina.smartschool.school.dto.SysSchoolDTO">
-    SELECT * FROM SYS_SCHOOL WHERE SCHOOL_NAME = #{name}
+    SELECT * FROM SYS_SCHOOL WHERE SCHOOL_NAME = #{name} or school_id = #[name]
   </select>
 
   <select id="SelectParentOpenId" resultType="string">
@@ -17,4 +17,8 @@
     and school_id=#{schoolId}
     and   ifnull(openid,'')  != ''  limit 0,1
   </select>
+
+  <select id="selectTemplateId" resultType="string">
+    SELECT st_templateid FROM school_template WHERE ST_SCHOOLID = #{schoolId} and st_code = 'iccard'
+  </select>
 </mapper>

+ 16 - 0
applications/device/device-server/src/main/resources/mapper/SchoolTemplateMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.usoftchina.smartschool.device.mapper.SchoolTemplateMapper" >
+  <select id="selectByCode" resultMap="BaseResultMap">
+    select * from school_template where st_code=#{code} and st_schoolid=#{school_id}
+  </select>
+
+  <resultMap id="BaseResultMap" type="com.usoftchina.smartschool.device.po.SchoolTemplate" >
+    <id column="st_id" property="st_id" jdbcType="BIGINT" />
+    <result column="st_code" property="st_code" jdbcType="VARCHAR" />
+    <result column="st_name" property="st_name" jdbcType="VARCHAR" />
+    <result column="st_templateid" property="st_templateid" jdbcType="VARCHAR" />
+    <result column="st_schoolid" property="st_schoolid" jdbcType="BIGINT" />
+  </resultMap>
+
+</mapper>

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

@@ -90,6 +90,7 @@ public class StudentServiceImpl implements StudentService{
             if(sysStudentMapper.count(student.getStu_number(), student.getSchool_id()) > 0){
                 throw new BizException(BizExceptionCode.REPEAT_STUDENT_NUMBER);
             }
+            student.setStu_status(1);
             sysStudentMapper.insertSelective(student);
             id = student.getStu_id();
             if (null != items && items.size() > 0) {
@@ -200,7 +201,7 @@ public class StudentServiceImpl implements StudentService{
                     if ("男".equals(json.get("stu_sex"))) {
                         json.put("stu_sex", 1);
                     }else if ("女".equals(json.get("stu_sex"))) {
-                        json.put("stu_sex", 2);
+                        json.put("stu_sex", 0);
                     }else if(!"男".equals(json.get("stu_sex")) && !"女".equals(json.get("stu_sex"))){
                         throw new BizException(BizExceptionCode.ILLEGAL_Gender);
                     }

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

@@ -139,7 +139,7 @@ public class TeacherServiceImpl implements TeacherService{
                         if ("男".equals(json.get("teacher_sex"))) {
                             json.put("teacher_sex", 1);
                         }else if ("女".equals(json.get("teacher_sex"))) {
-                            json.put("teacher_sex", 2);
+                            json.put("teacher_sex", 0);
                         }else if(!"男".equals(json.get("teacher_sex")) && !"女".equals(json.get("teacher_sex"))){
                             throw new BizException(BizExceptionCode.ILLEGAL_Gender);
                         }

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

@@ -137,7 +137,7 @@ public class HomeWorkServiceImpl implements HomeWorkService{
         List<HomeworkNoticer> noticers = homeWorkMapper.selectHomeworkNoticer(id);
         //模板信息
         SchoolTemplate template = schoolTemplateMapper.selectByCode(NoticeTemplate.HOMEWORK_NOTICE.getCode(), school.getSchool_id());
-        if (StringUtils.isEmpty(template.getSt_templateid())) {
+        if (StringUtils.isEmpty(template) || StringUtils.isEmpty(template.getSt_templateid())) {
             throw new BizException(BizExceptionCode.NULL_TEMPLATE);
         }
         //消息内容

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

@@ -24,6 +24,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 java.util.ArrayList;
@@ -49,6 +50,9 @@ public class NoticeServiceImpl implements NoticeService{
     @Autowired
     private SchoolTemplateMapper schoolTemplateMapper;
 
+    @Value("${smartschool.domain.wechat}")
+    private String baseWechatUrl;
+
 
     @Override
     public DocBaseDTO save(Notify formdata) {
@@ -131,12 +135,20 @@ public class NoticeServiceImpl implements NoticeService{
         List<MessageInfoDTO> msgs = new ArrayList<>();
         List<SchoolNoticer> noticers = noticeMapper.selectNoticer(BaseContextHolder.getSchoolId());
         //模板信息
-        SchoolTemplate template = schoolTemplateMapper.selectByCode(NoticeTemplate.HOMEWORK_NOTICE.getCode(), school.getSchool_id());
-        if (org.springframework.util.StringUtils.isEmpty(template.getSt_templateid())) {
+        SchoolTemplate template = schoolTemplateMapper.selectByCode(NoticeTemplate.SCHOOL_NOTICE.getCode(), school.getSchool_id());
+        if (StringUtils.isEmpty(template) || StringUtils.isEmpty(template.getSt_templateid())) {
             throw new BizException(BizExceptionCode.NULL_TEMPLATE);
         }
         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();
+            }
+            String url = baseWechatUrl + "/notifyDetail" + endUrl;
+            msg.setUrl(url);
             msg.setTitle(data.getNotify_title());
             msg.setKeyword1(school.getSchool_name());
             msg.setKeyword2("校办公室");

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

@@ -246,8 +246,8 @@ public class ScoreServiceImpl implements ScoreService{
         //消息内容
         List<MessageInfoDTO> msgs = new ArrayList<>();
         //模板信息
-        SchoolTemplate template = schoolTemplateMapper.selectByCode(NoticeTemplate.HOMEWORK_NOTICE.getCode(), school.getSchool_id());
-        if (StringUtils.isEmpty(template.getSt_templateid())) {
+        SchoolTemplate template = schoolTemplateMapper.selectByCode(NoticeTemplate.SCORE_NOTICE.getCode(), school.getSchool_id());
+        if (StringUtils.isEmpty(template) || StringUtils.isEmpty(template.getSt_templateid())) {
             throw new BizException(BizExceptionCode.NULL_TEMPLATE);
         }
         noticers.forEach(noticer -> {

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

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

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

@@ -227,7 +227,8 @@
   </select>
 
     <select id="selectNoticer" parameterType="long" resultType="com.usoftchina.smartschool.school.po.SchoolNoticer">
-        select openid,parents_name noticer from sys_parents where school_id=#{schoolId} and ifnull(openid,'') != '' and parents_status=1 union
-				select openid,teacher_name noticer from sys_teacher where school_id=#{schoolId} and ifnull(openid,'') != '' and teacher_status=1;
+        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>
 </mapper>

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

@@ -143,7 +143,7 @@ Ext.define('school.view.basic.student.StudentDetail', {
             }, {
                 xtype: 'textfield',
                 name: 'stu_cardNo',
-                fieldLabel: '校园通号',
+                fieldLabel: '校园通号',
             }, {
                 name: "parent",
                 xtype: "detailGridField",

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

@@ -184,7 +184,7 @@ Ext.define('school.view.basic.student.StudentList', {
                     xtype: 'datecolumn',
                     format: 'Y-m-d'
                 }, {
-                    text: '校园通号',
+                    text: '校园通号',
                     dataIndex: 'stu_cardNo'
                 }]
             },

+ 34 - 36
frontend/wechat-web/src/modules/home/HomePage.jsx

@@ -20,6 +20,7 @@ import 'css/home-page.css'
 import {fetchGet, fetchPost} from "../../utils/fetchRequest";
 import {_baseURL, API} from "../../configs/api.config";
 import icon_home_change from "../../style/imgs/icon_home_change.png";
+
 let holly = 0
 const operation = Modal.operation;
 
@@ -30,7 +31,6 @@ class HomePage extends Component {
 
         this.state = {
             studentIndex: 0,
-            selectStuName:'',//被切换之后的选中的孩子
         }
     }
 
@@ -74,7 +74,6 @@ class HomePage extends Component {
                 if (this.props.userInfo.parent.student.stuId == item.stuId) {
                     this.setState({
                         studentIndex: index,
-                        selectStuName:this.props.userInfo.parent.student.stuName
                     })
                 }
             })
@@ -251,8 +250,8 @@ class HomePage extends Component {
                         }
                     })
 
-                    this.setState({studentIndex:studentIndex,
-                        selectStuName:this.props.userInfo.parent.students[studentIndex].stuName
+                    this.setState({
+                        studentIndex: studentIndex,
                     })
                 }
 
@@ -302,7 +301,7 @@ class HomePage extends Component {
             if (userInfo.parent) {
                 schoolName = userInfo.parent.schoolName
                 // userName = userInfo.parent.parentsName
-                userName = this.state.selectStuName
+                userName = userInfo.parent.student ? userInfo.parent.student.stuName : ''
             }
         } else if (userInfo.userRole === 2) {
             if (userInfo.teacher) {
@@ -319,11 +318,11 @@ class HomePage extends Component {
                 </div>
                 {
                     userInfo.userRole === 1 ?
-                        <div className='home-student-layout-root' style={{display:'flex',flexDirection:'column'}}>
-                            <div  className='home-top-msg-text'>{this.state.selectStuName +' | ' + schoolName}</div>
+                        <div className='home-student-layout-root' style={{display: 'flex', flexDirection: 'column'}}>
+                            <div className='home-top-msg-text'>{userName + ' | ' + schoolName}</div>
                         </div>
                         :
-                        <div className='home-top-msg-root' style={{paddingBottom:10}}>
+                        <div className='home-top-msg-root' style={{paddingBottom: 10}}>
                             {isObjEmpty(userInfo.userAvatar) ?
                                 <Avatar size={42} icon='user'/> :
                                 <img
@@ -332,7 +331,7 @@ class HomePage extends Component {
                                     style={{border: '3px solid #ffffff'}}/>
                             }
                             <span
-                                className='home-top-msg-text'>{userName +' | ' + schoolName}</span>
+                                className='home-top-msg-text'>{userName + ' | ' + schoolName}</span>
                         </div>
                 }
             </div>
@@ -416,38 +415,37 @@ class HomePage extends Component {
     }
 
     onStuSwitch = (stuIndex) => {
-        console.log("onStuSwitch",stuIndex)
-
-       /* if (stuIndex != 0) {
-            Toast.loading('学生切换中...', 0)
-            setTimeout(() => {
-                Toast.success('切换成功!', 1)
-                const studentList =  this.props.userInfo.parent.students
-                const centerStu = studentList[stuIndex]
-                studentList[stuIndex] = studentList[0]
-                studentList[0] = centerStu
-
-                switchUser({
-                    parent: {
-                        ...this.props.userInfo.parent,
-                        students:studentList,
-                        student: centerStu
-                    },
-                    user: {
-                        ...this.props.userInfo.parent,
-                        students:studentList,
-                        student: centerStu
-                    }
-                })()
-            }, 400)
-        }*/
+        console.log("onStuSwitch", stuIndex)
+
+        /* if (stuIndex != 0) {
+             Toast.loading('学生切换中...', 0)
+             setTimeout(() => {
+                 Toast.success('切换成功!', 1)
+                 const studentList =  this.props.userInfo.parent.students
+                 const centerStu = studentList[stuIndex]
+                 studentList[stuIndex] = studentList[0]
+                 studentList[0] = centerStu
+
+                 switchUser({
+                     parent: {
+                         ...this.props.userInfo.parent,
+                         students:studentList,
+                         student: centerStu
+                     },
+                     user: {
+                         ...this.props.userInfo.parent,
+                         students:studentList,
+                         student: centerStu
+                     }
+                 })()
+             }, 400)
+         }*/
         if (this.state.studentIndex !== stuIndex) {
             Toast.loading('学生切换中...', 0)
             setTimeout(() => {
                 Toast.success('切换成功!', 1)
                 this.setState({
                     studentIndex: stuIndex,
-                    selectStuName:this.props.userInfo.parent.students[stuIndex].stuName
                 })
                 switchUser({
                     parent: {
@@ -562,7 +560,7 @@ class StuItem extends Component {
                         <Avatar className={this.props.isSelect ? 'border-radius-50-blue' : 'border-radius-50'}
                                 size={30} icon='user'/>
                 }
-              {/*  <span
+                {/*  <span
                     className={this.props.isSelect ? "margin_left_5 color_blue text_bold"
                         : 'margin_left_5'}>{this.props.stuObj.stuName+','+this.props.isSelect}</span>*/}
             </div>

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov