Parcourir la source

merge conflict

guq il y a 7 ans
Parent
commit
ef0395b035
15 fichiers modifiés avec 244 ajouts et 125 suppressions
  1. 2 1
      applications/device/device-client/src/main/resources/application.yml
  2. 1 1
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/mapper/IcCardMapper.java
  3. 40 28
      applications/device/device-server/src/main/java/com/usoftchina/smartschool/device/service/impl/IcCardServiceImpl.java
  4. 3 0
      applications/device/device-server/src/main/resources/mapper/AccessControlRecordMapper.xml
  5. 2 2
      applications/device/device-server/src/main/resources/mapper/IcCardMapper.xml
  6. 1 1
      applications/school/school-dto/src/main/java/com/usoftchina/smartschool/school/enums/NoticeTemplate.java
  7. 1 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/HomeWorkServiceImpl.java
  8. 18 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/business/service/impl/NoticeServiceImpl.java
  9. 12 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/StuScoreDO.java
  10. 86 48
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/wxschool/basic/service/impl/WxStuScoreServiceImpl.java
  11. 40 4
      applications/school/school-server/src/main/resources/mapper/WxStuScoreMapper.xml
  12. 5 3
      applications/wechat/wechat-server/src/main/java/com/usoftchina/smartschool/wechat/service/impl/WxPushServiceImpl.java
  13. 2 12
      base-servers/file/file-storage-fdfs/src/main/java/com/usoftchina/smartschool/file/storage/fdfs/FdfsFileStorageClient.java
  14. 18 14
      frontend/wechat-web/src/modules/hiPages/approvel/Approvel.js
  15. 13 11
      frontend/wechat-web/src/modules/leave/LeaveListPage.js

+ 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

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

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

+ 40 - 28
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,38 +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);
+            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(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(!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));
@@ -106,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" >

+ 2 - 2
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} or school_id = #[name]
+    SELECT * FROM SYS_SCHOOL WHERE SCHOOL_NAME = #{name} or school_id = #{name}
   </select>
 
   <select id="SelectParentOpenId" resultType="string">
@@ -19,6 +19,6 @@
   </select>
 
   <select id="selectTemplateId" resultType="string">
-    SELECT st_templateid FROM school_template WHERE ST_SCHOOLID = #{schoolId} and st_code = 'iccard'
+    SELECT st_templateid FROM school_template WHERE ST_SCHOOLID = #{schoolId} and st_code = #{code}
   </select>
 </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;
 

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

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

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

@@ -162,6 +162,24 @@ public class NoticeServiceImpl implements NoticeService{
                 msg.setSecret(school.getSchool_secret());
                 msgs.add(msg);
             }
+            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("谢谢使用!");
+            msg.setTemplateId(template.getSt_templateid());
+            msg.setTouser(noticer.getOpenid());
+            msg.setAppId(school.getSchool_appid());
+            msg.setSecret(school.getSchool_secret());
+            msgs.add(msg);
         });
         if (msgs.size() > 0) {
             TransferDTO transferDTO = new TransferDTO();

+ 12 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/StuScoreDO.java

@@ -23,11 +23,13 @@ public class StuScoreDO implements Serializable {
 	private String scoreType;
 	//考试科目
 	private Long subjectId;
+	//科目名
 	private String subjectName;
 	//名称
 	private String scoreName;
 	//学生
 	private Long stuId;
+	//学生姓名
 	private String stuName;
 	//分值
 	private Double scoreTotal;
@@ -41,6 +43,16 @@ public class StuScoreDO implements Serializable {
 	private String scoreRemarks;
 	//学校
 	private Long schoolId;
+	//班级id
+	private Long classId;
+	//班级名
+	private String className;
+	//年级id
+	private Long gradeId;
+	//年级名
+	private String gradeName;
+	//标题
+	private String examTitle;
 
 
 }

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

@@ -1,11 +1,11 @@
 package com.usoftchina.smartschool.school.wxschool.basic.service.impl;
 
-import com.usoftchina.smartschool.school.wxschool.mapper.WxClazzMapper;
-import com.usoftchina.smartschool.school.wxschool.mapper.WxStuScoreMapper;
-import com.usoftchina.smartschool.school.wxschool.mapper.WxStudentMapper;
 import com.usoftchina.smartschool.school.po.StuScoreDO;
 import com.usoftchina.smartschool.school.po.StudentDO;
 import com.usoftchina.smartschool.school.wxschool.basic.service.WxStuScoreService;
+import com.usoftchina.smartschool.school.wxschool.mapper.WxClazzMapper;
+import com.usoftchina.smartschool.school.wxschool.mapper.WxStuScoreMapper;
+import com.usoftchina.smartschool.school.wxschool.mapper.WxStudentMapper;
 import com.usoftchina.smartschool.school.wxschool.utils.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -43,57 +43,95 @@ public class WxStuScoreServiceImpl implements WxStuScoreService {
 		if (ObjectUtils.isNotEmpty(stuScoreDOS)){
 			List<Map> maps = new ArrayList<>();
 			List<Long> longs = new ArrayList<>();
-			List<StudentDO> studentDOS = studentMapper.listByClazzId(studentMapper.get(stuId).getClazzId());
-			if (ObjectUtils.isNotEmpty(studentDOS)){
-				for (StudentDO st:studentDOS) {
-					longs.add(st.getStuId());
-				}
-			}
+            StudentDO studentDO = studentMapper.get(stuId);
+            if (ObjectUtils.isNotEmpty(studentDO)){
+                Long clazzId = studentDO.getClazzId();
+                if (ObjectUtils.isNotEmpty(clazzId)){
+                    List<StudentDO> studentDOS = studentMapper.listByClazzId(clazzId);
+                    if (ObjectUtils.isNotEmpty(studentDOS)){
+                        for (StudentDO st:studentDOS) {
+                            longs.add(st.getStuId());
+                        }
+                    }
+                }
+            }
 			for (StuScoreDO ss:stuScoreDOS) {
 				Map<String, Object> map = new HashMap<>();
-				List<StuScoreDO> stuScoreDOS1 = stuScoreMapper.selectScoreListByStuId(longs, ss.getScoreType(), ss.getSubjectId());
-				if (ObjectUtils.isNotEmpty(stuScoreDOS1)) {
-					Double m = 0.0;
-					for (int j = 0; j < stuScoreDOS1.size(); j++) {
-						StuScoreDO score = stuScoreDOS1.get(j);
-						Long stuId1 = score.getStuId();
-						if (stuId.compareTo(stuId1) == 0) {
-							score.setStuName(studentMapper.get(stuId1).getStuName());
-							map.put("scoreBasic", score);
-							map.put("classRank", j + 1);
-							map.put("title", clazzMapper.get(studentMapper.get(stuId).getClazzId()).getClazzName() + score.getScoreName() + score.getScoreType());
-						}
-						m = m + score.getScoreNum();
-					}
-					map.put("classAverage", new BigDecimal(m / stuScoreDOS1.size()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
-					//一个班级
-					List<Long> clazzIds = clazzMapper.getByClazzId(studentMapper.get(stuId).getClazzId());
-					List<Long> list = new ArrayList<>();
-					for (Long clazzId:clazzIds) {
-						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", "-");
-							}
-						}
-						n = n + score.getScoreNum();
-					}
-					map.put("schoolAverage", new BigDecimal(n / scores.size()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
-					maps.add(map);
-				}
+				if (ObjectUtils.isNotEmpty(ss.getScoreType())&&ObjectUtils.isNotEmpty(ss.getSubjectId())){
+                    List<StuScoreDO> stuScoreDOS1 = stuScoreMapper.selectScoreListByStuId(longs, ss.getScoreType(), ss.getSubjectId());
+                    if (ObjectUtils.isNotEmpty(stuScoreDOS1)) {
+                        Double m = 0.0;
+                        for (int j = 0; j < stuScoreDOS1.size(); j++) {
+                            StuScoreDO score = stuScoreDOS1.get(j);
+                            Long stuId1 = score.getStuId();
+                            if (stuId.compareTo(stuId1) == 0) {
+                                score.setStuName(score.getStuName());
+                                map.put("scoreBasic", score);
+                                map.put("classRank", j + 1);
+                                map.put("title",score.getExamTitle());
+                            }
+                            m = m + score.getScoreNum();
+                        }
+                        map.put("classAverage", new BigDecimal(m / stuScoreDOS1.size()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+                        //一个班级
+                        List<Long> clazzIds = clazzMapper.getByClazzId(studentMapper.get(stuId).getClazzId());
+                        List<Long> list = new ArrayList<>();
+                        for (Long clazzId:clazzIds) {
+                            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", "-");
+                                }
+                            }
+                            n = n + score.getScoreNum();
+                        }
+                        map.put("schoolAverage", new BigDecimal(n / scores.size()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+                        maps.add(map);
+                    }
+                }
 			}
 			return maps;
 		}else {
 			throw new Exception("暂无数据");
 		}
 	}
-	
+
+
+ 
+    /*public List<Map> getScoreList(Long stuId, Integer pageIndex, Integer pageSize) throws Exception{
+        Integer pageStart = (pageIndex-1)*pageSize;
+        List<StuScoreDO> stuScoreDOS = stuScoreMapper.listByStu(stuId, pageStart, pageSize);
+        if (ObjectUtils.isNotEmpty(stuScoreDOS)){
+            List<Long> list = new ArrayList<>();
+            for (StuScoreDO ss:stuScoreDOS) {
+                Long classId = ss.getClassId();
+                if (ObjectUtils.isNotEmpty(classId)){
+                    List<Long> longs = studentMapper.selectStuIdsByClazzId(classId);
+
+                    list.addAll(longs);
+                }
+            }
+
+        }
+    }*/
+
+
+
+    private static List removeDuplicate(List list){
+        List listTemp = new ArrayList();
+        for(int i=0;i<list.size();i++){
+            if(!listTemp.contains(list.get(i))){
+                listTemp.add(list.get(i));
+            }
+        }
+        return listTemp;
+    }
 }

+ 40 - 4
applications/school/school-server/src/main/resources/mapper/WxStuScoreMapper.xml

@@ -4,7 +4,7 @@
 <mapper namespace="com.usoftchina.smartschool.school.wxschool.mapper.WxStuScoreMapper">
 
     <sql id="StuScoreVo">
-    select `score_id`,`score_type`,`score_name`,`stu_id`,`score_total`,`score_num`,`score_scope`,`score_date`,`score_remarks`,`school_id`,`subject_id` from stu_score
+    select `score_id`,`score_type`,`score_name`,`stu_id`,`score_total`,`score_num`,`score_scope`,`score_date`,`score_remarks`,`school_id`,`subject_id`,`stu_name`,`subject_name`,`class_id`,`class_name`,`grade_id`,`grade_name`,`exam_title` from stu_score
     </sql>
 
 	<select id="get" resultType="com.usoftchina.smartschool.school.po.StuScoreDO">
@@ -25,6 +25,14 @@
 		  		  <if test="scoreRemarks != null and scoreRemarks != ''"> and score_remarks = #{scoreRemarks} </if>
 		  		  <if test="schoolId != null and schoolId != ''"> and school_id = #{schoolId} </if>
 			<if test="subjectId != null and subjectId != ''"> and subject_id = #{subjectId} </if>
+			<if test="stuName != null and stuName != ''"> and stu_name = #{stuName} </if>
+			<if test="subjectName != null and subjectName != ''"> and subject_name = #{subjectName} </if>
+			<if test="classId != null and classId != ''"> and class_id = #{classId} </if>
+			<if test="className != null and className != ''"> and class_name = #{className} </if>
+			<if test="gradeId != null and gradeId != ''"> and grade_id = #{gradeId} </if>
+			<if test="gradeName != null and gradeName != ''"> and grade_name = #{gradeName} </if>
+			<if test="examTitle != null and examTitle != ''"> and exam_title = #{examTitle} </if>
+
 		  		</where>
         <choose>
             <when test="sort != null and sort.trim() != ''">
@@ -53,6 +61,13 @@
 		  		  <if test="scoreRemarks != null and scoreRemarks != ''"> and score_remarks = #{scoreRemarks} </if>
 		  		  <if test="schoolId != null and schoolId != ''"> and school_id = #{schoolId} </if>
 			 <if test="subjectId != null and subjectId != ''"> and subject_id = #{subjectId} </if>
+			 <if test="stuName != null and stuName != ''"> and stu_name = #{stuName} </if>
+			 <if test="subjectName != null and subjectName != ''"> and subject_name = #{subjectName} </if>
+			 <if test="classId != null and classId != ''"> and class_id = #{classId} </if>
+			 <if test="className != null and className != ''"> and class_name = #{className} </if>
+			 <if test="gradeId != null and gradeId != ''"> and grade_id = #{gradeId} </if>
+			 <if test="gradeName != null and gradeName != ''"> and grade_name = #{gradeName} </if>
+			 <if test="examTitle != null and examTitle != ''"> and exam_title = #{examTitle} </if>
 		  		</where>
 	</select>
 	 
@@ -68,7 +83,14 @@
 			`score_date`, 
 			`score_remarks`, 
 			`school_id`,
-			`subject_id`
+			`subject_id`,
+			`stu_name`,
+			`subject_name`,
+			`class_id`,
+			`class_name`,
+			`grade_id`,
+			`grade_name`,
+			`exam_title`
 		)
 		values
 		(
@@ -81,7 +103,14 @@
 			#{scoreDate}, 
 			#{scoreRemarks}, 
 			#{schoolId},
-			#{subjectId}
+			#{subjectId},
+			#{stuName},
+			#{subjectName},
+			#{classId},
+			#{className},
+			#{gradeId},
+			#{gradeName},
+			#{examTitle}
 		)
 	</insert>
 	 
@@ -97,7 +126,14 @@
 			<if test="scoreDate != null">`score_date` = #{scoreDate}, </if>
 			<if test="scoreRemarks != null">`score_remarks` = #{scoreRemarks}, </if>
 			<if test="schoolId != null">`school_id` = #{schoolId},</if>
-			<if test="subjectId != null and subjectId != ''"> subject_id = #{subjectId} </if>
+			<if test="subjectId != null"> `subject_id` = #{subjectId}, </if>
+			<if test="stuName != null "> `stu_name` = #{stuName}, </if>
+			<if test="subjectName != null"> `subject_name` = #{subjectName}, </if>
+			<if test="classId != null"> `class_id` = #{classId}, </if>
+			<if test="className != null "> `class_name` = #{className} ,</if>
+			<if test="gradeId != null "> `grade_id` = #{gradeId}, </if>
+			<if test="gradeName != null "> `grade_name` = #{gradeName}, </if>
+			<if test="examTitle != null "> `exam_title` = #{examTitle} </if>
 		</set>
 		where score_id = #{scoreId}
 	</update>

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

+ 2 - 12
base-servers/file/file-storage-fdfs/src/main/java/com/usoftchina/smartschool/file/storage/fdfs/FdfsFileStorageClient.java

@@ -4,8 +4,6 @@ import com.github.tobato.fastdfs.domain.StorePath;
 import com.github.tobato.fastdfs.service.FastFileStorageClient;
 import com.usoftchina.smartschool.file.storage.FileMetadata;
 import com.usoftchina.smartschool.file.storage.FileStorageClient;
-import com.usoftchina.smartschool.file.storage.util.FileType;
-import com.usoftchina.smartschool.file.storage.util.FileTypeUtils;
 import org.apache.commons.io.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -24,16 +22,8 @@ public class FdfsFileStorageClient implements FileStorageClient{
 
     @Override
     public String uploadFile(InputStream inputStream, FileMetadata metadata) {
-        FileType type = FileTypeUtils.getFileType(metadata.getMime(), metadata.getExt());
-        StorePath storePath;
-        if (FileType.IMAGE == type) {
-            // 保存图片 + 生成缩略图
-            storePath = storageClient.uploadImageAndCrtThumbImage(inputStream, metadata.getSize(),
-                    metadata.getExt(), null);
-        } else {
-            storePath = storageClient.uploadFile(inputStream, metadata.getSize(),
-                    metadata.getExt(), null);
-        }
+        StorePath storePath = storageClient.uploadFile(inputStream, metadata.getSize(),
+                metadata.getExt(), null);
         return storePath.getFullPath();
     }
 

+ 18 - 14
frontend/wechat-web/src/modules/hiPages/approvel/Approvel.js

@@ -114,16 +114,18 @@ class Approvel extends Component {
                 height={this.state.height}>
                 <Skeleton loading={this.state.isMyapplyding} active paragraph={{rows: 3}}>
                     {
+                        this.state.applyList.length > 0 ?
                         this.state.applyList.map((itemdata,index) =>
                             <ApprovelItem itemdata={itemdata} isMyApply={true}   index={index} onItemClick={this.onItemClick.bind(this)}/>
-                        )
+                        ) :
+                            <List dataSource={this.state.applyList}
+                                  renderItem={(applyListBean,index) => (
+                                      <List.Item>
+                                          <ApprovelItem itemdata={applyListBean} isMyApply={true}   index={index} onItemClick={this.onItemClick.bind(this)}/>
+                                      </List.Item>
+                                  )}/>
                     }
-                    {/*<List dataSource={this.state.applyList}*/}
-                          {/*renderItem={(applyListBean,index) => (*/}
-                              {/*<List.Item>*/}
-                                  {/*<ApprovelItem itemdata={applyListBean} isMyApply={true}   index={index} onItemClick={this.onItemClick.bind(this)}/>*/}
-                              {/*</List.Item>*/}
-                          {/*)}/>*/}
+
                 </Skeleton>
             </RefreshLayout>
 
@@ -137,16 +139,18 @@ class Approvel extends Component {
                 height={this.state.height}>
                 <Skeleton loading={this.state.isMyapprovedload} active paragraph={{rows: 3}}>
                     {
+                        this.state.approvelList.length > 0 ?
                         this.state.approvelList.map((itemdata,index) =>
                             <ApprovelItem itemdata={itemdata}isMyApply={false}  index={index} onItemClick={this.onItemClick.bind(this)}/>
-                        )
+                        ) :
+                        <List dataSource={this.state.approvelList}
+                        renderItem={(approvelListBean,index) => (
+                        <List.Item>
+                            <ApprovelItem itemdata={approvelListBean}isMyApply={false}  index={index} onItemClick={this.onItemClick.bind(this)}/>
+                        </List.Item>
+                    )}/>
                     }
-                    {/*<List dataSource={this.state.approvelList}*/}
-                          {/*renderItem={(approvelListBean,index) => (*/}
-                              {/*<List.Item>*/}
-                                  {/*<ApprovelItem itemdata={approvelListBean}isMyApply={false}  index={index} onItemClick={this.onItemClick.bind(this)}/>*/}
-                              {/*</List.Item>*/}
-                          {/*)}/>*/}
+
                 </Skeleton>
             </RefreshLayout>
 

+ 13 - 11
frontend/wechat-web/src/modules/leave/LeaveListPage.js

@@ -68,28 +68,29 @@ class LeaveListPage extends React.Component{
 
     render(){
         return <div   style={{background: '#F2F2F2'}}>
-            {
-                this.state.data.length > 0 ?
+
                     <RefreshLayout
                         refreshing={this.state.isRefreshing}
                         ref={el => {
                             this.container = el
                         }}
                         onRefresh={this.getListData}>
+                        {
+                            this.state.data.length > 0 ?
+                                this.state.data.map((itemdata,index) =>  <LeaveItem itemdata={itemdata} role={this.state.role} index = {index} onItemClick={this.onItemClick.bind(this)}></LeaveItem>)
+                                :
+                                <List dataSource={this.state.data}
+                                      renderItem={(itemdata,index) =>(
+                                          <List.Item  >
+                                              <LeaveItem itemdata={itemdata} role={this.state.role} index = {index} onItemClick={this.onItemClick.bind(this)}></LeaveItem>
+                                          </List.Item>
+                                      )}/>
+                        }
                         <Skeleton loading={this.state.isLoading} active paragraph={{rows: 3}}>
                             {this.state.data.map((itemdata,index) =>  <LeaveItem itemdata={itemdata} role={this.state.role} index = {index} onItemClick={this.onItemClick.bind(this)}></LeaveItem>
                             )}
-                            {/*  <List dataSource={this.state.data}
-                                  renderItem={(itemdata,index) =>(
-                                      <List.Item  >
-                                          <LeaveItem itemdata={itemdata} role={this.state.role} index = {index} onItemClick={this.onItemClick.bind(this)}></LeaveItem>
-                                      </List.Item>
-                                  )}/>*/}
                         </Skeleton>
                     </RefreshLayout>
-                    :
-                    <div className="no_data"><img src={nodata_img} alt="" style={{width:'100%',height:'100%'}}/></div>
-            }
 
                     {
                         this.state.role=="teacher"?(""):(<Icon type="plus-circle" theme='filled' className='common-add-icon'
@@ -173,6 +174,7 @@ class LeaveListPage extends React.Component{
                 }
                 this.setState({
                     data: this.state.data,
+                    // data:[],
                     isRefreshing: false,
                     isLoading: false
                 })