فهرست منبع

Merge remote-tracking branch 'origin/master'

Joburgess 5 سال پیش
والد
کامیت
cbca44a653

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java

@@ -68,6 +68,9 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 	@Override
 	public CourseHomeworkStudentDetailDto findStudentExtraExerciseDetail(Long studentExerciseId) {
 		ExtraExerciseStudentsDto extraExerciseReply = extracurricularExercisesReplyDao.findExtraExerciseReply(studentExerciseId);
+		if(extraExerciseReply == null){
+			throw new BizException("找不到学生作业记录");
+		}
 		CourseHomeworkStudentDetailDto detail=new CourseHomeworkStudentDetailDto();
 		detail.setCourseHomeworkId(extraExerciseReply.getId());
 		detail.setClassGroupName(extraExerciseReply.getTitle() + "•" + extraExerciseReply.getStudentName());

+ 6 - 7
mec-biz/src/main/resources/config/mybatis/CourseScheduleEvaluateMapper.xml

@@ -132,13 +132,12 @@
 
     <!-- 体验人数 -->
     <select id="getPracticeGroupsFree" resultMap="PracticeGroupsOrgan">
-        SELECT pg.organ_id_, count(*) total_nums_
-        FROM class_group cg
-                 LEFT JOIN practice_group pg on cg.music_group_id_ = pg.id_
-        WHERE cg.group_type_ = 'PRACTICE'
-          AND pg.buy_months_ IS NULL
-          AND pg.group_status_ != 'LOCK'
-        GROUP BY pg.organ_id_
+        SELECT organ_id_, count(distinct student_id_) total_nums_
+        FROM practice_group
+        WHERE group_status_ != 'LOCK'
+          AND group_status_ != 'CANCEL'
+          AND buy_months_ IS NULL
+        GROUP BY organ_id_
     </select>
 
     <!-- 已购买人数 -->

+ 24 - 22
mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml

@@ -391,15 +391,16 @@
 
     <select id="countStudentBuys" resultType="java.lang.Integer">
         SELECT COUNT(a.student_id_) FROM
-        (SELECT pg.`student_id_` ,max(concat(cs.`class_date_`,' ',cs.`end_class_time_` )) lastClassDate
-        FROM `practice_group` pg
-        LEFT JOIN `course_schedule` cs on cs.`music_group_id_` = pg.`id_`
-        WHERE cs.`group_type_` = 'PRACTICE' AND pg.`buy_months_` IS NULL AND pg.group_status_ != 'CANCEL'
-        GROUP BY pg.`student_id_` ) a
+        (SELECT DISTINCT(pg.`student_id_`),pg.`organ_id_`   FROM `practice_group` pg WHERE pg.`group_status_` in ('NORMAL','FINISH')) a
+        LEFT JOIN (SELECT pg.`student_id_`  ,max(concat(cs.`class_date_`,' ',cs.`end_class_time_` )) lastClassDate   FROM `practice_group` pg
+        LEFT JOIN `course_schedule` cs on cs.`music_group_id_` = pg.`id_` and cs.`group_type_` = 'PRACTICE'
+        WHERE pg.`buy_months_` IS NULL AND cs.`group_type_` = 'PRACTICE'
+        GROUP BY pg.`student_id_` ) b on a.student_id_ = b.student_id_
         left join (SELECT pg.`student_id_` ,min(pg.`create_time_`) firstBuyTime
-        FROM `practice_group` pg WHERE pg.`buy_months_` IS NOT NULL AND pg.group_status_ != 'CANCEL' GROUP BY pg.`student_id_` ) b
-        on a.student_id_ = b.student_id_
+        FROM `practice_group` pg WHERE pg.`buy_months_` IS NOT NULL AND pg.`group_status_` in ('NORMAL','FINISH') GROUP BY pg.`student_id_` ) c
+        on a.student_id_ = c.student_id_
         left join `sys_user` u on u.`id_` = a.student_id_
+        left join `organization` o on o.`id_` = a.organ_id_
         <include refid="queryStudentBuysSql"/>
     </select>
     <resultMap id="queryStudentBuysMap" type="com.ym.mec.biz.dal.dto.StudentBuyPracticeDto">
@@ -413,20 +414,21 @@
         <result property="buyPractice" column="buy_practice_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
     <select id="queryStudentBuys" resultMap="queryStudentBuysMap">
-        SELECT o.`name_` organ_name_,a.student_id_,u.`username_` student_name_,u.phone_,a.lastClassDate last_class_date_,
-        b.firstBuyTime first_buy_time_,
-        CASE WHEN DATEDIFF(b.firstBuyTime,a.lastClassDate) &lt; 0 THEN 0 ELSE DATEDIFF(b.firstBuyTime,a.lastClassDate) END interval_day_,
-        CASE WHEN b.firstBuyTime IS NULL THEN 0 ELSE 1 END buy_practice_ FROM
-        (SELECT pg.`student_id_` ,max(concat(cs.`class_date_`,' ',cs.`end_class_time_` )) lastClassDate
-        FROM `practice_group` pg
-        LEFT JOIN `course_schedule` cs on cs.`music_group_id_` = pg.`id_`
-        WHERE cs.`group_type_` = 'PRACTICE' AND pg.`buy_months_` IS NULL AND pg.group_status_ != 'CANCEL'
-        GROUP BY pg.`student_id_` ) a
+        SELECT o.`name_` organ_name_,a.student_id_,u.`username_` student_name_,u.phone_,
+        b.lastClassDate last_class_date_,c.firstBuyTime first_buy_time_,
+        CASE WHEN DATEDIFF(c.firstBuyTime,b.lastClassDate) &lt; 0 THEN 0 ELSE DATEDIFF(c.firstBuyTime,b.lastClassDate) END interval_day_,
+        CASE WHEN c.firstBuyTime IS NULL THEN 0 ELSE 1 END buy_practice_
+        FROM
+        (SELECT DISTINCT(pg.`student_id_`),pg.`organ_id_`   FROM `practice_group` pg WHERE pg.`group_status_` in ('NORMAL','FINISH')) a
+        LEFT JOIN (SELECT pg.`student_id_`  ,max(concat(cs.`class_date_`,' ',cs.`end_class_time_` )) lastClassDate   FROM `practice_group` pg
+        LEFT JOIN `course_schedule` cs on cs.`music_group_id_` = pg.`id_` and cs.`group_type_` = 'PRACTICE'
+        WHERE pg.`buy_months_` IS NULL AND cs.`group_type_` = 'PRACTICE'
+        GROUP BY pg.`student_id_` ) b on a.student_id_ = b.student_id_
         left join (SELECT pg.`student_id_` ,min(pg.`create_time_`) firstBuyTime
-        FROM `practice_group` pg WHERE pg.`buy_months_` IS NOT NULL AND pg.group_status_ != 'CANCEL' GROUP BY pg.`student_id_` ) b
-        on a.student_id_ = b.student_id_
+        FROM `practice_group` pg WHERE pg.`buy_months_` IS NOT NULL AND pg.`group_status_` in ('NORMAL','FINISH') GROUP BY pg.`student_id_` ) c
+        on a.student_id_ = c.student_id_
         left join `sys_user` u on u.`id_` = a.student_id_
-        left join `organization` o on o.`id_` = u.`organ_id_`
+        left join `organization` o on o.`id_` = a.organ_id_
         <include refid="queryStudentBuysSql"/>
         <include refid="global.limit"/>
     </select>
@@ -436,13 +438,13 @@
                 (u.id_ = #{search} OR u.`username_` LIKE CONCAT('%',#{search},'%'))
             </if>
             <if test="buyPractice != null and buyPractice == false">
-                AND b.firstBuyTime IS NULL
+                AND c.firstBuyTime IS NULL
             </if>
             <if test="buyPractice != null and buyPractice == true">
-                AND b.firstBuyTime IS NOT NULL
+                AND c.firstBuyTime IS NOT NULL
             </if>
             <if test="organId != null">
-                AND FIND_IN_SET(u.`organ_id_`,#{organId})
+                AND FIND_IN_SET(a.organ_id_`,#{organId})
             </if>
         </where>
     </sql>

+ 88 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/config/ParameterCheckServletRequestWrapper.java

@@ -0,0 +1,88 @@
+package com.ym.mec.common.config;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.util.StreamUtils;
+
+import com.vdurmont.emoji.EmojiParser;
+
+public class ParameterCheckServletRequestWrapper extends HttpServletRequestWrapper {
+
+	private byte[] requestBody;
+	private Charset charSet;
+
+	public ParameterCheckServletRequestWrapper(HttpServletRequest request) throws IOException {
+		super(request);
+
+		String requestBodyStr = getRequestPostStr(request);
+		if (StringUtils.isNotBlank(requestBodyStr)) {
+			requestBodyStr = EmojiParser.removeAllEmojis(requestBodyStr);
+			requestBody = requestBodyStr.getBytes(charSet);
+		} else {
+			requestBody = new byte[0];
+		}
+	}
+
+	public String getRequestPostStr(HttpServletRequest request) throws IOException {
+		String charSetStr = request.getCharacterEncoding();
+		if (charSetStr == null) {
+			charSetStr = "UTF-8";
+		}
+		charSet = Charset.forName(charSetStr);
+
+		return StreamUtils.copyToString(request.getInputStream(), charSet);
+	}
+
+	/**
+	 * 重写 getInputStream()
+	 */
+	@Override
+	public ServletInputStream getInputStream() {
+		if (requestBody == null) {
+			requestBody = new byte[0];
+		}
+
+		final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(requestBody);
+
+		return new ServletInputStream() {
+			@Override
+			public boolean isFinished() {
+				return false;
+			}
+
+			@Override
+			public boolean isReady() {
+				return false;
+			}
+
+			@Override
+			public void setReadListener(ReadListener readListener) {
+
+			}
+
+			@Override
+			public int read() {
+				return byteArrayInputStream.read();
+			}
+		};
+	}
+
+	/**
+	 * 重写 getReader()
+	 */
+	@Override
+	public BufferedReader getReader() {
+		return new BufferedReader(new InputStreamReader(getInputStream()));
+	}
+
+}

+ 3 - 3
mec-common/common-core/src/main/java/com/ym/mec/common/filters/EmojiEncodingFilter.java

@@ -9,11 +9,11 @@ import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
 
 import org.apache.commons.lang3.StringUtils;
 
 import com.vdurmont.emoji.EmojiParser;
+import com.ym.mec.common.config.ParameterCheckServletRequestWrapper;
 
 public class EmojiEncodingFilter implements Filter {
 
@@ -24,7 +24,7 @@ public class EmojiEncodingFilter implements Filter {
 
 	@Override
 	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
-		request = new HttpServletRequestWrapper((HttpServletRequest) request) {
+		request = new ParameterCheckServletRequestWrapper((HttpServletRequest) request) {
 
 			@Override
 			public String getParameter(String name) {
@@ -51,7 +51,7 @@ public class EmojiEncodingFilter implements Filter {
 			}
 
 		};
-
+		
 		chain.doFilter(request, response);
 	}