Browse Source

Merge remote-tracking branch 'origin/master'

周箭河 5 years ago
parent
commit
6f5a1ed729

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentRechargeQueryInfo.java

@@ -1,5 +1,7 @@
 package com.ym.mec.biz.dal.page;
 
+import java.util.Date;
+
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.TransTypeEnum;
 import com.ym.mec.common.page.QueryInfo;
@@ -9,6 +11,10 @@ public class StudentRechargeQueryInfo extends QueryInfo {
 	private DealStatusEnum status;
 	
 	private TransTypeEnum transType;
+	
+	private Date startDate;
+	
+	private Date endDate;
 
 	public DealStatusEnum getStatus() {
 		return status;
@@ -26,4 +32,20 @@ public class StudentRechargeQueryInfo extends QueryInfo {
 		this.transType = transType;
 	}
 
+	public Date getStartDate() {
+		return startDate;
+	}
+
+	public void setStartDate(Date startDate) {
+		this.startDate = startDate;
+	}
+
+	public Date getEndDate() {
+		return endDate;
+	}
+
+	public void setEndDate(Date endDate) {
+		this.endDate = endDate;
+	}
+
 }

+ 26 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DemoGroupServiceImpl.java

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.dto.EducationDemoGroupListDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.TeachTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.StudentDemoGroupQueryInfo;
 import com.ym.mec.biz.dal.page.TeacherManageDemoGroupQueryInfo;
@@ -19,7 +20,7 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -53,6 +54,10 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 	private SubjectDao subjectDao;
 	@Autowired
 	private SysConfigDao sysConfigDao;
+	@Autowired
+	private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
+	@Autowired
+	private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
 
 	@Override
 	public BaseDAO<Long, DemoGroup> getDAO() {
@@ -180,6 +185,8 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 			throw new BizException("此课程教师在该时段内的课程存在冲突");
 		}
 
+		Date now=new Date();
+
 		SysUser user = sysUserFeignService.queryUserInfo();
 
 		//创建班级
@@ -204,22 +211,32 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 
 		//创建课程
 		DemoGroupCoursesPlan demoGroupCoursesPlan=demoGroupCoursesPlanDao.get(coursePlanId);
-//		List<CourseSchedule> courseScheduleByDemoGroup = demoGroupDao.createCourseSchedulesByDemoGroup(
-//				demoGroup,
-//				demoGroupCoursesPlan.getCoursesStartTime(),
-//				classGroup.getId().longValue());
 		CourseSchedule courseScheduleByDemoGroup = demoGroupDao.createCourseScheduleByDemoGroupPlan(
 				demoGroup,
 				coursePlanId,
 				classGroup.getId().longValue());
-//		String[] classSubjects = courseScheduleDao.findClassSubjects(Arrays.asList(new Integer[]{classGroup.getId()}));
 		StringBuilder className=new StringBuilder(subjectDao.get(demoGroup.getSubjectId().intValue()).getName());
 		className.append("-");
 		className.append(CourseSchedule.CourseScheduleType.DEMO.getMsg());
 		courseScheduleByDemoGroup.setName(className.toString());
-		ArrayList<CourseSchedule> courseSchedules = new ArrayList<>();
-		courseSchedules.add(courseScheduleByDemoGroup);
-		courseScheduleDao.batchAddCourseSchedules(courseSchedules);
+		courseScheduleDao.insert(courseScheduleByDemoGroup);
+
+		CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+		courseScheduleStudentPayment.setUserId(user.getId());
+		courseScheduleStudentPayment.setCourseScheduleId(courseScheduleByDemoGroup.getId());
+		courseScheduleStudentPayment.setClassGroupId(courseScheduleByDemoGroup.getClassGroupId());
+		courseScheduleStudentPayment.setExpectPrice(demoGroup.getPrice());
+		courseScheduleStudentPaymentDao.insert(courseScheduleStudentPayment);
+
+		CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
+		courseScheduleTeacherSalary.setCourseScheduleId(courseScheduleByDemoGroup.getId());
+		courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
+		courseScheduleTeacherSalary.setUserId(demoGroup.getUserId());
+		courseScheduleTeacherSalary.setExpectSalary(demoGroup.getPrice());
+		courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
+		courseScheduleTeacherSalary.setCreateTime(now);
+		courseScheduleTeacherSalary.setUpdateTime(now);
+		courseScheduleTeacherSalaryDao.insert(courseScheduleTeacherSalary);
 
 		//更新所属分部列表
 		List<Integer> organIds = demoGroupDao.organIdListByDemoGroupId(demoGroup.getId());

+ 18 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -69,6 +69,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     @Autowired
 	private ClassGroupTeacherSalaryDao classGroupTeacherSalaryDao;
     @Autowired
+	private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
+    @Autowired
 	private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
     @Autowired
 	private ImFeignService imFeignService;
@@ -876,7 +878,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	public void applyRefund(Long vipGroupId,Integer studentId) {
 
 		StudentApplyRefunds studentApplyRefunds=new StudentApplyRefunds();
-		StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.findByStudentVipGroup(vipGroupId,studentId,DealStatusEnum.SUCCESS.getMsg());
+		StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.findByStudentVipGroup(vipGroupId,studentId,DealStatusEnum.SUCCESS.getCode());
 		if(null==studentPaymentOrder){
 			throw new BizException("未找到相关订单信息!");
 		}
@@ -979,11 +981,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				}
 				if(Objects.isNull(vipGroupSalaryDto.getActualSalary())){
 					vipGroupSalaryDto.setActualSalary(new BigDecimal(0));
+					vipGroupSalaryDto.setDeductionFee(new BigDecimal(0));
 					vipGroupSalaryDto.setIsSalary(YesOrNoEnum.NO);
 				}else{
+					vipGroupSalaryDto.setDeductionFee(vipGroupSalaryDto.getExpectSalary().subtract(vipGroupSalaryDto.getActualSalary()));
 					vipGroupSalaryDto.setIsSalary(YesOrNoEnum.YES);
 				}
-				vipGroupSalaryDto.setDeductionFee(vipGroupSalaryDto.getExpectSalary().subtract(vipGroupSalaryDto.getActualSalary()));
 			});
 		}
 		if (count == 0) {
@@ -1003,10 +1006,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.isNull(vipGroupSalaryBaseInfo.getTotalSalary())){
 			vipGroupSalaryBaseInfo.setTotalSalary(new BigDecimal(0));
 		}
-		//扣费总额
-		vipGroupSalaryBaseInfo.setTotalFeeDeduction(vipGroupSalaryBaseInfo.getExpectTotalSalary().subtract(vipGroupSalaryBaseInfo.getTotalSalary()));
 		//扣费笔数
 		vipGroupSalaryBaseInfo.setFeeDeductionNum(vipGroupDao.countVipGroupDeductionNum(queryInfo.getVipGroupId()));
+		//扣费总额
+		if(vipGroupSalaryBaseInfo.getTotalSalary().intValue()>0){
+			vipGroupSalaryBaseInfo.setTotalFeeDeduction(vipGroupSalaryBaseInfo.getExpectTotalSalary().subtract(vipGroupSalaryBaseInfo.getTotalSalary()));
+		}else{
+			vipGroupSalaryBaseInfo.setTotalFeeDeduction(new BigDecimal(0));
+		}
 
 		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroup.getId());
 		BigDecimal studentNum=new BigDecimal(classGroup.getStudentNum());
@@ -1073,9 +1080,16 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			sysUserCashAccountDetail.setAttribute(studentPaymentOrder.getOrderNo());
 			sysUserCashAccountDetailDao.insert(sysUserCashAccountDetail);
 		}
+
 		vipGroup.setStatus(VipGroupStatusEnum.CANCEL);
     	vipGroup.setStopReason(stopReason);
 		vipGroupDao.update(vipGroup);
+
+		List<CourseSchedule> vipGroupCourseSchedules = courseScheduleDao.findVipGroupCourseSchedules(vipGroupId);
+		List<Long> courseScheduleIds = vipGroupCourseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
+		courseScheduleDao.batchDeleteCourseSchedules(courseScheduleIds);
+		courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
+		courseScheduleStudentPaymentDao.deleteByCourseSchedule(courseScheduleIds);
 	}
 
 	@Override

+ 1 - 0
mec-biz/src/main/resources/config/mybatis/DemoGroupMapper.xml

@@ -172,6 +172,7 @@
     <sql id="demoGroupQueryCondition">
         <where>
             dgcp.status_=0
+            AND CONCAT(dgcp.course_date_,' ',dgcp.start_time_)&gt;=NOW()
             <if test="search!=null">
                 AND su.username_ like concat('%',#{search},'%')
             </if>

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

@@ -99,7 +99,7 @@
     </select>
 
     <!-- 查询当前表的总记录数 -->
-    <select id="queryCount" resultType="int">
+    <select id="queryCount" resultType="int" parameterType="map">
 		SELECT count(1) FROM student_apply_refunds sar left join student_payment_order spo on sar.orig_payment_order_id_ = spo.id_ 
 		where 1=1 
         <if test="startTime != null">

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

@@ -147,7 +147,7 @@
     </select>
 
     <!-- 查询当前表的总记录数 -->
-    <select id="queryCount" resultType="int">
+    <select id="queryCount" resultType="int" parameterType="map">
         SELECT COUNT(spo.id_) FROM student_payment_order spo
         <include refid="queryPaymentOrder"/>
     </select>

+ 13 - 1
mec-biz/src/main/resources/config/mybatis/StudentRechargeMapper.xml

@@ -106,12 +106,18 @@
         <if test="transType != null">
            and cad.trans_type_ = #{transType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         </if>
+        <if test="startDate != null">
+           and sr.create_time_ &gt;= #{startTime}
+        </if>
+        <if test="endDate != null">
+           and sr.create_time_ &lt;= #{endTime}
+        </if>
         ORDER BY sr.id_
         <include refid="global.limit"/>
     </select>
 
     <!-- 查询当前表的总记录数 -->
-    <select id="queryCount" resultType="int">
+    <select id="queryCount" resultType="int" parameterType="map">
 		SELECT COUNT(1) FROM student_recharge sr left join sys_user u on sr.user_id_ = u.id_ left join sys_user_cash_account_detail cad on sr.user_id_ = cad.user_id_ where 1 = 1
 		<if test="status != null">
            and sr.status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
@@ -119,6 +125,12 @@
         <if test="transType != null">
            and cad.trans_type_ = #{transType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         </if>
+        <if test="startDate != null">
+           and sr.create_time_ &gt;= #{startTime}
+        </if>
+        <if test="endDate != null">
+           and sr.create_time_ &lt;= #{endTime}
+        </if>
 	</select>
 
     <select id="queryByTransNo" resultMap="StudentRecharge">

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

@@ -458,7 +458,7 @@
             LEFT JOIN class_group cg ON vgcgm.class_group_id_=cg.id_
             LEFT JOIN class_group_student_mapper cgsm ON vgcgm.class_group_id_=cgsm.class_group_id_
             LEFT JOIN sys_user su ON cgsm.user_id_=su.id_
-        WHERE vgcgm.vip_group_id_=#{vipGroupId}
+        WHERE vgcgm.vip_group_id_=#{vipGroupId} AND cgsm.user_id_ IS NOT NULL
         ORDER BY su.id_
         <include refid="global.limit"/>
     </select>
@@ -582,7 +582,7 @@
             LEFT JOIN vip_group_class_group_mapper vgcgm ON vg.id_ = vgcgm.vip_group_id_
             LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
             LEFT JOIN course_schedule_student_payment cssp ON cs.id_=cssp.course_schedule_id_
-            WHERE vg.id_=#{vipGroupId} AND cs.status_!='OVER'
+            WHERE vg.id_=#{vipGroupId} AND cs.status_='NOT_START'
         GROUP BY cssp.user_id_
     </select>
     <select id="countTeacherVipGroups" resultType="int">

+ 2 - 1
mec-student/src/main/java/com/ym/mec/student/controller/SysMessageController.java

@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RestController;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.SysMessage;
+import com.ym.mec.biz.dal.enums.MessageSendMode;
 import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.controller.BaseController;
@@ -43,7 +44,7 @@ public class SysMessageController extends BaseController {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
 		}
 		queryInfo.setUserId(sysUser.getId());
-		queryInfo.setType(3);
+		queryInfo.setType(MessageSendMode.PUSH.getCode());
 		PageInfo<SysMessage> pageInfo = sysMessageService.queryPage(queryInfo);
 		return succeed(pageInfo);
 	}

+ 3 - 3
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java

@@ -91,7 +91,7 @@ public class TeacherCourseScheduleController extends BaseController {
     @GetMapping("/getCurrentCourseStudents")
     public Object getCurrentCourseStudents(StudentAttendanceQueryInfo queryInfo){
         if(Objects.isNull(queryInfo.getClassGroupId())){
-            return failed(HttpStatus.FORBIDDEN, "请指定班级!");
+            return failed("请指定班级!");
         }
         queryInfo.setFilterStatus(StudentAttendanceStatusEnum.DROP_OUT);
         return succeed(studentAttendanceService.getCurrentCourseStudents(queryInfo));
@@ -101,7 +101,7 @@ public class TeacherCourseScheduleController extends BaseController {
     @PostMapping(value = "/classStartDateAdjust",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     public Object classStartDateAdjust(ClassDateAdjustDto classDateAdjustDto){
         if(Objects.isNull(classDateAdjustDto.getId())){
-            return failed(HttpStatus.FORBIDDEN, "请指定课程!");
+            return failed("请指定课程!");
         }
         List<CourseSchedule> courseSchedules=new ArrayList<>();
         courseSchedules.add(classDateAdjustDto);
@@ -113,7 +113,7 @@ public class TeacherCourseScheduleController extends BaseController {
     @PostMapping(value = "/courseSwap",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     public Object courseSwap(Long courseScheduleId1,Long courseScheduleId2){
         if(Objects.isNull(courseScheduleId1)||Objects.isNull(courseScheduleId2)){
-            return failed(HttpStatus.FORBIDDEN, "请指定课程!");
+            return failed("请指定课程!");
         }
         scheduleService.courseSwap(courseScheduleId1,courseScheduleId2);
         return succeed();

+ 143 - 0
mec-web/src/main/java/com/ym/mec/web/controller/SysMessageController.java

@@ -0,0 +1,143 @@
+package com.ym.mec.web.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import java.io.IOException;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.SysMessage;
+import com.ym.mec.biz.dal.enums.MessageSendMode;
+import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
+import com.ym.mec.util.validator.CommonValidator;
+
+@RestController
+@Api(tags = "消息服务")
+@RequestMapping("sysMessage")
+public class SysMessageController extends BaseController {
+
+	@Autowired
+	private SysMessageService sysMessageService;
+
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@ApiOperation("获取所有消息列表")
+	@GetMapping(value = "list")
+	public Object list(SysMessageQueryInfo queryInfo) throws IOException {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		queryInfo.setUserId(sysUser.getId());
+		queryInfo.setType(MessageSendMode.SEO.getCode());
+		PageInfo<SysMessage> pageInfo = sysMessageService.queryPage(queryInfo);
+		return succeed(pageInfo);
+	}
+
+	@ApiOperation("一键已读")
+	@PostMapping("batchSetRead")
+	public Object batchSetRead() {
+		int status = 1;
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		return sysMessageService.updateStatus(sysUser.getId(), status) > 0 ? succeed() : failed();
+	}
+
+	@ApiOperation("设置已读")
+	@PostMapping("setRead")
+	public Object setRead(Long id) {
+		int status = 1;
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		return sysMessageService.updateOneStatus(id, status) > 0 ? succeed() : failed();
+	}
+
+	@ApiOperation(value = "查询用户未读消息条数")
+	@GetMapping("/queryCountOfUnread")
+	public Object queryCountOfUnread() {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		return succeed(sysMessageService.queryCountOfUnread(sysUser.getId()));
+	}
+
+	/*@ApiOperation(value = "发送短信验证码")
+	@PostMapping("/sendSmsCode")
+	public Object sendSmsCode(String sendCodeType, String mobileNo) {
+
+		SysUser sysUser;
+
+		if (StringUtils.isBlank(mobileNo)) {
+			sysUser = sysUserFeignService.queryUserInfo();
+		} else {
+			sysUser = sysUserFeignService.queryUserByMobile(mobileNo);
+		}
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		Integer userId = sysUser.getId();
+
+		mobileNo = sysUser.getPhone();
+
+		MessageType messageType = MessageType.getMessageType(sendCodeType);
+		if (messageType == null) {
+			throw new BizException("消息类型参数错误");
+		}
+		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
+			throw new BizException("请输入正确的手机号");
+		}
+		sysMessageService.sendSecurityCode(MessageSender.YIMEI, userId, MessageSendMode.SMS, messageType, mobileNo);
+		return succeed();
+	}*/
+
+	/*@ApiOperation(value = "发送短信验证码")
+	@PostMapping("/noAuth/sendSmsCode")
+	public Object noAuthSendSmsCode(String sendCodeType, String mobileNo) {
+		MessageType messageType = MessageType.getMessageType(sendCodeType);
+		if (messageType == null) {
+			throw new BizException("消息类型参数错误");
+		}
+		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
+			throw new BizException("请输入正确的手机号");
+		}
+//		sysMessageService.sendSecurityCode(MessageSender.YIMEI, userId, MessageSendMode.SMS, messageType, mobileNo);
+		return succeed();
+	}*/
+
+	@ApiOperation(value = "发送消息")
+	@PostMapping("/sendMessage")
+	public Object sendMessage(MessageSender messageSender, String content, String receiver, int readStatus, String url) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		Integer userId = sysUser.getId();
+
+		String mobileNo = sysUser.getPhone();
+		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
+			throw new BizException("请输入正确的手机号");
+		}
+		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url);
+		return succeed();
+	}
+}