Kaynağa Gözat

Merge remote-tracking branch 'origin/master'

周箭河 5 yıl önce
ebeveyn
işleme
bc0b221f9d

+ 0 - 2
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserServiceImpl.java

@@ -134,8 +134,6 @@ public class SysUserServiceImpl extends BaseServiceImpl<Integer, SysUser> implem
 
 	@Override
 	public SysUser queryUserInfo(Integer userId) {
-//		SysUser sysUser = sysUserDao.get(userId);
-//		sysUser.setOrganName(sysUserDao.getOrganName(sysUser.getOrganId()));
 		return sysUserDao.get(userId);
 	}
 

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.CourseHomework;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
@@ -240,4 +241,11 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
     int countTeacherName(Map<String, Object> params);
 
     List<Teacher> queryPageName(Map<String, Object> params);
+
+    /**
+     * 获取教师布置的作业
+     * @param courseScheduleId
+     * @return
+     */
+    CourseHomework getCourseScheduleHomework(Integer courseScheduleId);
 }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentAttendance.java

@@ -40,6 +40,10 @@ public class StudentAttendance {
 	private String username;
 
 	/**  */
+	@ApiModelProperty(value = "声部列表",required = false)
+	private String subjectName;
+
+	/**  */
 	@ApiModelProperty(value = "学生手机号",required = false)
 	private String phone;
 	
@@ -63,6 +67,14 @@ public class StudentAttendance {
 	@ApiModelProperty(value = "当前课时")
 	private Integer currentClassTimes;
 
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
 	public String getPhone() {
 		return phone;
 	}

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.CourseHomework;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.common.entity.ImGroupModel;
@@ -143,4 +144,11 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
      * @return
      */
     PageInfo<Teacher> queryPageName(TeacherNameQueryInfo queryInfo);
+
+    /**
+     * 获取教师布置的作业
+     * @param courseScheduleId
+     * @return
+     */
+    CourseHomework getCourseScheduleHomework(Integer courseScheduleId);
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -1706,7 +1706,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
         courseSchedule2.setClassDate(temp.getClassDate());
         courseSchedule2.setStartClassTime(temp.getStartClassTime());
-        courseSchedule2.setEndClassTime(DateUtil.addMinutes(courseSchedule2.getStartClassTime(),course1CourseMinutes));
+        courseSchedule2.setEndClassTime(DateUtil.addMinutes(courseSchedule2.getStartClassTime(),course2CourseMinutes));
 
         List<CourseSchedule> courseSchedules = new ArrayList<>();
         courseSchedules.add(courseSchedule1);

+ 20 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherLeaveRecordServiceImpl.java

@@ -1,5 +1,22 @@
 package com.ym.mec.biz.service.impl;
 
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
@@ -13,7 +30,6 @@ import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.entity.TeacherLeaveRecord;
 import com.ym.mec.biz.dal.entity.TeacherLeaveRecord.CoursesScheduleHistory;
 import com.ym.mec.biz.dal.enums.AuditStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.SysMessageService;
@@ -25,16 +41,6 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.json.JsonUtil;
 
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
-import java.util.*;
-import java.util.stream.Collectors;
-
 @Service
 public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, TeacherLeaveRecord> implements TeacherLeaveRecordService {
 
@@ -140,6 +146,9 @@ public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, Teacher
 				List<CourseSchedule> list = new ArrayList<CourseSchedule>();
 
 				for (CoursesScheduleHistory his : coursesScheduleHistoryList) {
+					if (his.getBefore().getType() != CourseScheduleType.VIP) {
+						continue;
+					}
 					list.add(his.getAfter());
 				}
 				// 课时调整

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java

@@ -352,6 +352,11 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 	}
 
 	@Override
+	public CourseHomework getCourseScheduleHomework(Integer courseScheduleId) {
+		return teacherDao.getCourseScheduleHomework(courseScheduleId);
+	}
+
+	@Override
 	public List<BasicUserDto> queryMusicGroupTeacher(String musicGroupId) {
 		if(Objects.isNull(musicGroupId)){
 			throw new BizException("请指定乐团");

+ 46 - 69
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -402,24 +402,26 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         Date groupCourseStartTime=courseScheduleDao.findGroupCourseStartTime(GroupType.VIP,vipGroupId.toString());
         Date groupCourseEndTime=courseScheduleDao.findGroupCourseEndTime(GroupType.VIP,vipGroupId.toString());
 
-        //获取活动信息
-        VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
-        if(Objects.nonNull(vipGroupActivity.getCoursesEndTime())||Objects.nonNull(vipGroupActivity.getCoursesStartTime())){
-            if(groupCourseEndTime.after(vipGroupActivity.getCoursesEndTime())
-                    ||groupCourseStartTime.before(vipGroupActivity.getCoursesStartTime())){
-                throw new BizException("课时安排时间超出范围!");
-            }
-        }else{
-            int totalClassTimes = courseScheduleDao.countGroupAllCourses(GroupType.VIP, vipGroupId.toString());
-            VipGroupDefaultClassesCycle vipGroupDefaultClassesCycle = vipGroupDefaultClassesCycleDao.findByOrganAndClassTimes(totalClassTimes);
-
-            if (vipGroupDefaultClassesCycle != null) {
-                int month = DateUtil.monthsBetween(groupCourseStartTime, groupCourseEndTime);
-                if (month > vipGroupDefaultClassesCycle.getMonth()) {
-                    throw new BizException("课时安排时间超出范围!");
-                }
-            }
-        }
+		//获取活动信息
+		if(Objects.nonNull(vipGroup.getVipGroupActivityId())){
+			VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
+			if(Objects.nonNull(vipGroupActivity)&&(Objects.nonNull(vipGroupActivity.getCoursesEndTime())||Objects.nonNull(vipGroupActivity.getCoursesStartTime()))){
+				if(groupCourseEndTime.after(vipGroupActivity.getCoursesEndTime())
+						||groupCourseStartTime.before(vipGroupActivity.getCoursesStartTime())){
+					throw new BizException("课时安排时间超出范围!");
+				}
+			}else {
+				int totalClassTimes = courseScheduleDao.countGroupAllCourses(GroupType.VIP, vipGroupId.toString());
+				VipGroupDefaultClassesCycle vipGroupDefaultClassesCycle = vipGroupDefaultClassesCycleDao.findByOrganAndClassTimes(totalClassTimes);
+
+				if (vipGroupDefaultClassesCycle != null) {
+					int month = DateUtil.monthsBetween(groupCourseStartTime, groupCourseEndTime);
+					if (month > vipGroupDefaultClassesCycle.getMonth()) {
+						throw new BizException("课时安排时间超出范围!");
+					}
+				}
+			}
+		}
     }
 
     @Override
@@ -976,10 +978,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void updateVipGroupStudentNumAndStatus(Long vipGroupId , ClassGroup classGroup, Integer num, boolean updateVipStatus) {
-		VipGroup vipGroup = vipGroupDao.getLockVipGroup(vipGroupId);
-		if(Objects.isNull(vipGroup)){
-			throw new BizException("指定的vip课程不存在");
-		}
+//		VipGroup vipGroup = vipGroupDao.getLockVipGroup(vipGroupId);
+//		if(Objects.isNull(vipGroup)){
+//			throw new BizException("指定的vip课程不存在");
+//		}
 		if(Objects.isNull(classGroup)){
 			throw new BizException("未找到关联班级");
 		}
@@ -994,9 +996,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(studentPaymentNum.equals(classGroup.getExpectStudentNum())&&updateVipStatus){
 			classGroup.setStudentNum(studentPaymentNum);
 			classGroup.setDelFlag(0);
-			vipGroup.setStatus(VipGroupStatusEnum.PROGRESS);
 			createVipGroupCourseScheInfo(vipGroupId,classGroup);
-			vipGroupDao.update(vipGroup);
 		}
 		if(num!=0||updateVipStatus){
 			int i = courseScheduleDao.countVipGroupCourses(vipGroupId.intValue());
@@ -1050,8 +1050,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}
 	}
 
-	@Transactional(rollbackFor = Exception.class)
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public Map buyVipGroup(VipGroupBuyParamsDto vipGroupBuyParams) {
 		SysUser user = sysUserFeignService.queryUserInfo();
 		if(user == null){
@@ -1292,7 +1292,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		HashSet<Integer> hashSet = new HashSet<>(organIds);
 		String organIdsString = StringUtils.join(hashSet, ",");
 		vipGroup.setOrganIdList(organIdsString);
-		vipGroupDao.update(vipGroup);
+		if(classGroup.getExpectStudentNum().equals(classGroup.getStudentNum())){
+			vipGroup.setStatus(VipGroupStatusEnum.PROGRESS);
+		}
+		update(vipGroup);
 
 		try {
 			contractService.transferVipGroupCoursesContract(userId,vipGroupId);
@@ -1351,7 +1354,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         if(Objects.isNull(surplusCourseFee)){
             surplusCourseFee = new BigDecimal(0);
         }
-        surplusCourseFee = surplusCourseFee.multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+        VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
+
+        if(vipGroupCategory.getStudentNum()<=1){
+            surplusCourseFee = surplusCourseFee.multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+        }else{
+            surplusCourseFee = surplusCourseFee.multiply(new BigDecimal(0.7)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+        }
+
 		studentApplyRefunds.setExpectAmount(surplusCourseFee);
 		studentApplyRefunds.setStatus(StudentApplyRefundsStatus.ING);
 		String orderNo=StringUtils.join(new String[]{userId.toString(),String.valueOf(System.currentTimeMillis())});
@@ -1744,52 +1754,19 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.isNull(bigDecimal)){
 			bigDecimal = new BigDecimal(0);
 		}
-		bigDecimal = bigDecimal.multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+
+        VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
+
+		if(vipGroupCategory.getStudentNum()<=1){
+            bigDecimal = bigDecimal.multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+        }else{
+            bigDecimal = bigDecimal.multiply(new BigDecimal(0.7)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+        }
+
 		result.put("suplusCourseFee", bigDecimal);
 		return result;
 	}
 
-//	@Override
-//	@Transactional(rollbackFor = Exception.class)
-//	public Map<String, BigDecimal> getStudentSurplusCourseFee(Long vipGroupId, Integer studentId) {
-//		if(Objects.isNull(vipGroupId)||Objects.isNull(studentId)){
-//			throw new BizException("请指定课程和学生");
-//		}
-//		VipGroup vipGroup = vipGroupDao.get(vipGroupId);
-//		if(Objects.isNull(vipGroup)){
-//			throw new BizException("未找到指定vip课");
-//		}
-//		if(vipGroup.getStatus().equals(VipGroupStatusEnum.CANCEL)){
-//			throw new BizException("不能对已停止的课程进行退课操作");
-//		}
-//		Map<String,BigDecimal> result=new HashMap<>();
-//		if(vipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING)){
-//			StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.findByStudentVipGroup(vipGroupId, studentId, DealStatusEnum.SUCCESS.getCode());
-//			if(Objects.isNull(studentPaymentOrder)){
-//				BigDecimal surplusCourseFee = studentPaymentOrderDao.sumSurplusCourseFee(vipGroupId.toString(), studentId);
-//				if(Objects.isNull(surplusCourseFee)){
-//					result.put("suplusCourseFee",new BigDecimal(0));
-//				}else{
-//					result.put("suplusCourseFee",surplusCourseFee);
-//				}
-//			}else{
-//				result.put("suplusCourseFee",studentPaymentOrder.getActualAmount());
-//			}
-//			return result;
-//		}
-//		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroupId, null);
-//		if(Objects.isNull(classGroup)){
-//			throw new BizException("未找到对应班级");
-//		}
-//		BigDecimal bigDecimal = courseScheduleStudentPaymentDao.countSurplusCourseFee(classGroup.getId(), studentId);
-//		if(Objects.isNull(bigDecimal)){
-//			bigDecimal = new BigDecimal(0);
-//		}
-//		bigDecimal = bigDecimal.multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
-//		result.put("suplusCourseFee", bigDecimal);
-//		return result;
-//	}
-
 	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void applyRefundAudit(Long id, StudentApplyRefundsStatus status, String remark,BigDecimal amount) {

+ 4 - 4
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -1924,13 +1924,13 @@
         <where>
             <if test="search != null">
                 AND (cs.name_ LIKE CONCAT('%',#{search},'%') OR cs.id_ = #{search}
-                  <if test="groups != null and groupId==null">
+                  <if test="groups != null and organIdList==null">
                       OR cs.music_group_id_ IN
                       <foreach collection="groups" item="group" open="(" close=")" separator=",">
                           #{group.id}
                       </foreach>
                   </if>
-                  <if test="courseIds != null and groupId==null">
+                  <if test="courseIds != null and organIdList==null">
                     OR cs.id_ IN
                     <foreach collection="courseIds" item="courseId" open="(" close=")" separator=",">
                         #{courseId}
@@ -1938,13 +1938,13 @@
                   </if>
                 )
             </if>
-            <if test="groups != null and groupId!=null">
+            <if test="groups != null and organIdList!=null">
                 AND cs.music_group_id_ IN
                 <foreach collection="groups" item="group" open="(" close=")" separator=",">
                     #{group.id}
                 </foreach>
             </if>
-            <if test="courseIds != null and groupId!=null">
+            <if test="courseIds != null and organIdList!=null">
                 AND cs.id_ IN
                 <foreach collection="courseIds" item="courseId" open="(" close=")" separator=",">
                     #{courseId}

+ 2 - 2
mec-biz/src/main/resources/config/mybatis/GroupMapper.xml

@@ -17,7 +17,7 @@
     <sql id="searchMusicGroupsCondition">
         <where>
             <if test="search!=null">
-                AND g.id_ = #{search} OR g.name_ LIKE CONCAT( '%', #{search}, '%' )
+                AND (g.id_ = #{search} OR g.name_ LIKE CONCAT( '%', #{search}, '%' ))
             </if>
             <if test="organIdList!=null">
                 AND FIND_IN_SET(g.organ_id_,#{organIdList})
@@ -31,7 +31,7 @@
     <sql id="searchVipGroupsCondition">
         <where>
             <if test="search!=null">
-                AND g.id_ = #{search} OR g.name_ LIKE CONCAT( '%', #{search}, '%' )
+                AND (g.id_ = #{search} OR g.name_ LIKE CONCAT( '%', #{search}, '%' ))
             </if>
             <if test="organIdList!=null">
                 AND FIND_IN_SET(g.organ_id_,#{organIdList})

+ 6 - 1
mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml

@@ -14,6 +14,7 @@
         <result column="course_schedule_id_" property="courseScheduleId"/>
         <result column="user_id_" property="userId"/>
         <result column="username_" property="username"/>
+        <result column="subject_name_" property="subjectName"/>
         <result column="phone_" property="phone"/>
         <result column="teacher_id_" property="teacherId"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
@@ -409,10 +410,14 @@
             GROUP BY sa.course_schedule_id_
     </select>
     <select id="findStudentAttendance" resultMap="StudentAttendance">
-        SELECT sa.*,su.username_,su.phone_
+        SELECT sa.*,su.username_,su.phone_,IF(s.name_ IS NULL,s1.name_,s.name_) subject_name_
         FROM course_schedule_student_payment cssp
         LEFT JOIN student_attendance sa ON cssp.course_schedule_id_ = sa.course_schedule_id_ AND cssp.user_id_ = sa.user_id_
         LEFT JOIN sys_user su ON cssp.user_id_ = su.id_
+        LEFT JOIN class_group cg ON cg.id_ = cssp.class_group_id_ AND cg.group_type_ = 'VIP'
+        LEFT JOIN student_registration sr ON sr.user_id_ = cssp.user_id_ AND cssp.music_group_id_ = sr.music_group_id_
+        LEFT JOIN `subject` s ON s.id_ = cg.subject_id_list_
+        LEFT JOIN `subject` s1 ON s1.id_ = sr.actual_subject_id_
         WHERE cssp.course_schedule_id_ = #{search}
         ORDER BY sa.id_ DESC
         <include refid="global.limit"/>

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -650,4 +650,7 @@
         <include refid="queryPageNameSql"/>
         <include refid="global.limit"/>
     </select>
+    <select id="getCourseScheduleHomework" resultMap="com.ym.mec.biz.dal.dao.CourseHomeworkDao.CourseHomework">
+        SELECT * FROM course_homework WHERE course_schedule_id_ = #{courseScheduleId} LIMIT 1
+    </select>
 </mapper>

+ 0 - 7
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -38,7 +38,6 @@
         <result column="courses_start_date" property="courseStartDate"/>
         <result column="course_schedules_json_" property="courseSchedulesJson"/>
         <result column="student_id_list_" property="studentIdList"/>
-
         <result column="organ_name_" property="organName" />
         <result column="school_name_" property="schoolName" />
         <result column="subject_name_" property="subjectName" />
@@ -248,9 +247,6 @@
             <if test="auditStatus != null">
                 audit_status_ = #{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
-            <if test="organIdList != null">
-                organ_id_list_ = #{organIdList},
-            </if>
             <if test="vipGroupActivityId != null">
                 vip_group_activity_id_ = #{vipGroupActivityId},
             </if>
@@ -275,9 +271,6 @@
             <if test="stopReason!=null">
                 stop_reason_=#{stopReason},
             </if>
-            <if test="auditStatus!=null">
-                audit_status_=#{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-            </if>
             <if test="courseSchedulesJson!=null">
                 course_schedules_json_=#{courseSchedulesJson},
             </if>

+ 6 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TeacherController.java

@@ -215,4 +215,10 @@ public class TeacherController extends BaseController {
     }
 
 
+    @ApiOperation(value = "获取教师布置的作业")
+    @GetMapping("/getCourseScheduleHomework")
+    @PreAuthorize("@pcs.hasPermissions('teacher/getCourseScheduleHomework')")
+    public Object getCourseScheduleHomework(Integer courseScheduleId){
+        return succeed(teacherService.getCourseScheduleHomework(courseScheduleId));
+    }
 }