Browse Source

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

FANGLH 6 years ago
parent
commit
8f39714db1
23 changed files with 254 additions and 51 deletions
  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. 40 27
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/service/impl/IcCardServiceImpl.java
  12. 3 0
      applications/device/device-server/src/main/resources/mapper/AccessControlRecordMapper.xml
  13. 5 1
      applications/device/device-server/src/main/resources/mapper/IcCardMapper.xml
  14. 16 0
      applications/device/device-server/src/main/resources/mapper/SchoolTemplateMapper.xml
  15. 1 1
      applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/enums/NoticeTemplate.java
  16. 2 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/StudentServiceImpl.java
  17. 1 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/TeacherServiceImpl.java
  18. 2 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/HomeWorkServiceImpl.java
  19. 15 3
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/NoticeServiceImpl.java
  20. 2 2
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/ScoreServiceImpl.java
  21. 8 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/SchoolNoticer.java
  22. 3 2
      applications/school/school-server/src/main/resources/mapper/NotifyMapper.xml
  23. 5 3
      applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/service/impl/WxPushServiceImpl.java

+ 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>

File diff suppressed because it is too large
+ 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, @Param("code") String code);
 }

+ 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());

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

@@ -7,10 +7,13 @@ import com.usoftchina.smartschool.device.mapper.IcCardMapper;
 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.ObjectUtils;
 import com.usoftchina.smartschool.utils.http.HmacUtils;
 import com.usoftchina.smartschool.wechat.api.WechatApi;
 import com.usoftchina.smartschool.wechat.dto.MessageInfoDTO;
+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;
@@ -30,15 +33,14 @@ import java.util.List;
 @Service
 public class IcCardServiceImpl implements IcCardService {
 
-    @Autowired
-    private RestTemplate restTemplate;
-
     @Autowired
     private IcCardMapper icCardMapper;
 
     @Autowired
     private WechatApi wechatApi;
 
+    private static final Logger logger = LoggerFactory.getLogger(AccessControlServiceImpl.class);
+
     @Value("${smartschool.wechat.pushUrl}")
     private String targetURL;
 
@@ -49,37 +51,46 @@ 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, NoticeTemplate.MONEY_NOTICE.getCode());
+            if(!StringUtils.hasText(templateId)){
+                logger.error("学校[{}] 模板[{}]未设置",schoolId,NoticeTemplate.MONEY_NOTICE.getCode());
+                return null;
+            }
             StringBuilder sb = new StringBuilder();
             accTransDetailList.forEach(accTransDetail -> {
-                sb.append(accTransDetail.getGuid() + ",");
                 String oldType = accTransDetail.getAccTransType();
                 accTransDetail.setAccTransType(Transaction.getName(accTransDetail.getAccTransType()));
                 //构造messageInfo对象
-                MessageInfoDTO messageInfo = new MessageInfoDTO();
-                messageInfo.setMsgId(accTransDetail.getGuid());
                 String openId = icCardMapper.SelectParentOpenId(accTransDetail.getEmpNo(), schoolId);
-                messageInfo.setTouser(openId);
-                messageInfo.setAppId(appId);
-                messageInfo.setSecret(secret);
-                //messageInfo.setUserType(2);
-                messageInfo.setTemplateId("FhtdzLdpzLLp4eJGtgvH4SUfIpSIF0kWwIpsWsSBp6c");
-                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(!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());
                 }
-                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);
+
             });
             //3.传输
             Result result = wechatApi.sendOutMessages(JSON.toJSONString(messageInfoList));
@@ -105,6 +116,8 @@ public class IcCardServiceImpl implements IcCardService {
                     return ids;
                 }
             }*/
+        }else {
+            logger.error("对应学校名{}或学校{}未找到",sysSchoolDTO.getSchool_name(),sysSchoolDTO.getSchool_id());
         }
         return null;
     }

+ 3 - 0
applications/device/device-server/src/main/resources/mapper/AccessControlRecordMapper.xml

@@ -2,6 +2,9 @@
 <!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.AccessControlRecordMapper" >
     <insert id="insertRecordSelective" parameterType="com.usoftchina.smartschool.device.po.AccessControlRecord" >
+        <selectKey  resultType="java.lang.Long" keyProperty="record_id">
+          SELECT LAST_INSERT_ID() AS ID
+        </selectKey>
         insert into out_in_record
         <trim prefix="(" suffix=")" suffixOverrides="," >
             <if test="record_name != null" >

+ 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 = #{code}
+  </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>

+ 1 - 1
applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/enums/NoticeTemplate.java

@@ -10,7 +10,7 @@ public enum NoticeTemplate {
     SCORE_NOTICE("score", "成绩通知"),
     UNAUDIT_NOTICE("unAudit", "待审批通知"),
     MEETING_NOTICE("meeting", "会议提醒"),
-    MONEY_NOTICE("money", "资金异动提醒");
+    MONEY_NOTICE("iccard", "资金异动提醒");
 
     private String code;
 

+ 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);
                         }

+ 2 - 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);
         }
         //消息内容
@@ -149,6 +149,7 @@ public class HomeWorkServiceImpl implements HomeWorkService{
             msg.setKeyword2(DateUtils.format());
             msg.setKeyword3(data.getTask_context());
             msg.setTouser(noticer.getOpenid());
+            msg.setRemark("谢谢使用!");
             msg.setAppId(school.getSchool_appid());
             msg.setSecret(school.getSchool_secret());
             msg.setTemplateId(template.getSt_templateid());

+ 15 - 3
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,18 +135,26 @@ 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("校办公室");
             msg.setKeyword3(DateUtils.format());
             msg.setKeyword4(data.getNotify_details());
-            msg.setRemark(data.getNotify_remarks());
+            msg.setRemark("谢谢使用!");
             msg.setTemplateId(template.getSt_templateid());
             msg.setTouser(noticer.getOpenid());
             msg.setAppId(school.getSchool_appid());

+ 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>

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

@@ -3,6 +3,7 @@ package com.usoftchina.smartschool.wechat.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.github.kevinsawicki.http.HttpRequest;
 import com.usoftchina.smartschool.base.Result;
+import com.usoftchina.smartschool.utils.StringUtils;
 import com.usoftchina.smartschool.wechat.po.MessageInfo;
 import com.usoftchina.smartschool.wechat.service.WxPushService;
 import com.usoftchina.smartschool.wechat.wxUtils.ObjectUtils;
@@ -29,7 +30,7 @@ public class WxPushServiceImpl implements WxPushService{
         if (ObjectUtils.isNotEmpty(openid)){
                 String json="{\"touser\":\""+openid+"\","
                         + "\"template_id\":\""+templateId+"\","
-                        + "\"url\":\""+""+url+""+"\","
+                        + "\"url\":\""+""+ (StringUtils.isEmpty(url) ? "" : url) +""+"\","
                         + "\"data\":{"
                         + "\"first\":{\"value\":\""+title+"\",\"color\":\"#173177\"},"
                         + "\"keyword1\":{\"value\":\""+keyword1+"\",\"color\":\"#173177\"},"
@@ -37,6 +38,7 @@ public class WxPushServiceImpl implements WxPushService{
                         + "\"keyword3\":{\"value\":\""+keyword3+"\",\"color\":\"#173177\"},"
                         + "\"keyword4\":{\"value\":\""+keyword4+"\",\"color\":\"#173177\"},"
                         + "\"remark\":{\"value\":\""+remark+"\",\"color\":\"#173177\"}}}";
+                logger.info("send to wechat, data={}", json);
                 HashMap<String, Object> params=new HashMap<>();
                 params.put("appid", appId);
                 params.put("secret", secret);
@@ -77,7 +79,7 @@ public class WxPushServiceImpl implements WxPushService{
         if (ObjectUtils.isNotEmpty(info.getTouser())){
             String json="{\"touser\":\"" + info.getTouser() + "\","
                     + "\"template_id\":\"" + info.getTemplateId() + "\","
-                    + "\"url\":\"" + "" + info.getUrl() + "" + "\","
+                    + "\"url\":\"" + "" + (StringUtils.isEmpty(info.getUrl()) ? "" : info.getUrl()) + "" + "\","
                     + "\"data\":{"
                     + "\"first\":{\"value\":\"" + info.getTitle() + "\","
                     +"\"color\":\"#173177\"},"
@@ -87,7 +89,7 @@ public class WxPushServiceImpl implements WxPushService{
                     + "\"keyword4\":{\"value\":\"" + info.getKeyword4() + "\",\"color\":\"#173177\"},"
                     + "\"keyword5\":{\"value\":\"" + info.getKeyword5() + "\",\"color\":\"#173177\"},"
                     + "\"remark\":{\"value\":\"" + info.getRemark() + "\",\"color\":\"#173177\"}}}";
-
+            logger.info("send to wechat, data={}", json);
             HashMap<String, Object> params=new HashMap<>();
             params.put("appid", info.getAppId());
             params.put("secret", info.getSecret());

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