Selaa lähdekoodia

Merge branch 'master' into feature-goods-river

周箭河 5 vuotta sitten
vanhempi
commit
4a7bcd0725
20 muutettua tiedostoa jossa 198 lisäystä ja 21 poistoa
  1. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java
  2. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupStudentFeeDao.java
  3. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassGroupTeacherMapDto.java
  4. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java
  5. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java
  6. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SuperClassGroupDto.java
  7. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/UpdateStudentFeeDto.java
  8. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupStudentQueryInfo.java
  9. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupStudentFeeService.java
  10. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  11. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  12. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  13. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupStudentFeeServiceImpl.java
  14. 14 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  15. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  16. 16 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml
  17. 2 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  18. 7 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupStudentFeeMapper.xml
  19. 5 1
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  20. 17 1
      mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.ClassGroupTeacherMapDto;
 import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachTypeEnum;
@@ -81,4 +82,13 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
      * @return
      */
     String queryTeachingNames(Long classGroupId);
+
+    /**
+     * @describe 根据班级编号获取教师班级关联记录
+     * @author Joburgess
+     * @date 2020/1/3
+     * @param classGroupIds: 班级编号列表
+     * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper>
+     */
+    List<ClassGroupTeacherMapDto> findByClassGroupIds(@Param("classGroupIds") List<Integer> classGroupIds);
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupStudentFeeDao.java

@@ -142,4 +142,10 @@ public interface MusicGroupStudentFeeDao extends BaseDAO<Long, MusicGroupStudent
 	 * @return
 	 */
 	List<MusicGroupStudentFee> queryByMusicGroupId(String musicGroupId);
+
+	/**
+	 * 修改学员缴费周期锁定状态
+	 * @param fee
+	 */
+	void updateStudentFeeIsLock(@Param("fee") UpdateStudentFeeDto fee);
 }

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassGroupTeacherMapDto.java

@@ -0,0 +1,21 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/1/3
+ */
+public class ClassGroupTeacherMapDto extends ClassGroupTeacherMapper {
+    private String userName;
+
+    @Override
+    public String getUserName() {
+        return userName;
+    }
+
+    @Override
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleEndDto.java

@@ -10,6 +10,16 @@ public class CourseScheduleEndDto extends CourseSchedule {
 
     private String groupName;
 
+    private String teacherName;
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
     public String getGroupName() {
         return groupName;
     }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java

@@ -48,6 +48,7 @@ public class MusicGroupStudentsDto{
 
     private Boolean isActive = false;
 
+    private Integer isLock;
 
     private String activeName;
 
@@ -55,6 +56,14 @@ public class MusicGroupStudentsDto{
 
     private String nextPaymentDateStr;
 
+    public Integer getIsLock() {
+        return isLock;
+    }
+
+    public void setIsLock(Integer isLock) {
+        this.isLock = isLock;
+    }
+
     public Boolean getIsActive() {
         return isActive;
     }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SuperClassGroupDto.java

@@ -10,6 +10,26 @@ public class SuperClassGroupDto extends ClassGroup {
 
     private String groupName;
 
+    private String bishopTeacherNames;
+
+    private String teachingTeacherNames;
+
+    public String getBishopTeacherNames() {
+        return bishopTeacherNames;
+    }
+
+    public void setBishopTeacherNames(String bishopTeacherNames) {
+        this.bishopTeacherNames = bishopTeacherNames;
+    }
+
+    public String getTeachingTeacherNames() {
+        return teachingTeacherNames;
+    }
+
+    public void setTeachingTeacherNames(String teachingTeacherNames) {
+        this.teachingTeacherNames = teachingTeacherNames;
+    }
+
     public String getGroupName() {
         return groupName;
     }

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/UpdateStudentFeeDto.java

@@ -13,7 +13,7 @@ public class UpdateStudentFeeDto {
     private String musicGroupId;
 
     @ApiModelProperty(value = "缴费月份",required = false)
-    private List<Integer> month;
+    private String month;
 
     @ApiModelProperty(value = "是否锁定1是0否",required = false)
     private Integer isLock = 0;
@@ -37,11 +37,11 @@ public class UpdateStudentFeeDto {
         this.studentId = studentId;
     }
 
-    public List<Integer> getMonth() {
+    public String getMonth() {
         return month;
     }
 
-    public void setMonth(List<Integer> month) {
+    public void setMonth(String month) {
         this.month = month;
     }
 

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupStudentQueryInfo.java

@@ -17,12 +17,23 @@ public class MusicGroupStudentQueryInfo extends QueryInfo {
   @ApiModelProperty(value = "是否激活")
   private Boolean isActive;
 
+  @ApiModelProperty(value = "是否锁定")
+  private Integer isLock;
+
   @ApiModelProperty(value = "学员状态 NORMAL(NORMAL, 在读), LEAVE(LEAVE, 请假), QUIT(QUIT, 退班)",required = false)
   private String studentStatus;
 
   @ApiModelProperty(value = "缴费状态  PAID_COMPLETED(完成缴费), NON_PAYMENT(未缴费), PROCESSING(缴费中)",required = false)
   private String paymentStatus;
 
+  public Integer getIsLock() {
+    return isLock;
+  }
+
+  public void setIsLock(Integer isLock) {
+    this.isLock = isLock;
+  }
+
   public Boolean getIsActive() {
     return isActive;
   }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupStudentFeeService.java

@@ -25,4 +25,10 @@ public interface MusicGroupStudentFeeService extends BaseService<Long, MusicGrou
 	 * @return
 	 */
 	MusicGroupStudentFee findByUser(Integer userId,String musicGroupId);
+
+	/**
+	 * 修改学员缴费周期锁定状态
+	 * @param studentFeeDto
+	 */
+	void updateStudentFeeIsLock(UpdateStudentFeeDto studentFeeDto);
 }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -2233,11 +2233,16 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             params.put("offset", pageInfo.getOffset());
             results = classGroupDao.superFindClassGroups(params);
             List<Group> groups=new ArrayList<>();
+            List<Integer> classGroupIds=new ArrayList<>();
             groups.add(null);
             for (SuperClassGroupDto result : results) {
                 Group group=new Group(result.getMusicGroupId(),result.getGroupType());
                 groups.add(group);
+                classGroupIds.add(result.getId());
             }
+            List<ClassGroupTeacherMapDto> classGroupTeacherMaps = classGroupTeacherMapperDao.findByClassGroupIds(classGroupIds);
+            Map<Integer, Map<TeachTypeEnum, List<ClassGroupTeacherMapDto>>> classTeacherTypeMaps = classGroupTeacherMaps.stream()
+                    .collect(Collectors.groupingBy(ClassGroupTeacherMapDto::getClassGroupId, Collectors.groupingBy(ClassGroupTeacherMapDto::getTeacherRole)));
             groups = groupDao.findByGroupIds(groups);
             Map<String, Map<GroupType, List<Group>>> groupsGroupByGroup = groups.stream().collect(Collectors.groupingBy(Group::getId, Collectors.groupingBy(Group::getGroupType)));
             results.forEach(result -> {
@@ -2248,6 +2253,21 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         result.setGroupName(groupTemps.get(0).getGroupName());
                     }
                 }
+                Map<TeachTypeEnum, List<ClassGroupTeacherMapDto>> teachTypeEnumListMap = classTeacherTypeMaps.get(result.getId());
+                if(Objects.nonNull(teachTypeEnumListMap)){
+                    for (TeachTypeEnum teachType:teachTypeEnumListMap.keySet()){
+                        List<ClassGroupTeacherMapDto> classGroupTeachers=teachTypeEnumListMap.get(teachType);
+                        if(!CollectionUtils.isEmpty(classGroupTeachers)){
+                            List<String> userNames = classGroupTeachers.stream().map(ClassGroupTeacherMapDto::getUserName).collect(Collectors.toList());
+                            if(teachType.equals(TeachTypeEnum.BISHOP)){
+                                result.setBishopTeacherNames(Arrays.toString(userNames.toArray()));
+                            }
+                            if(teachType.equals(TeachTypeEnum.TEACHING)){
+                                result.setTeachingTeacherNames(Arrays.toString(userNames.toArray()));
+                            }
+                        }
+                    }
+                }
             });
         }
         pageInfo.setRows(results);

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

@@ -94,6 +94,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     private SysConfigService sysConfigService;
     @Autowired
     private GroupDao groupDao;
+    @Autowired
+    private TeacherDao teacherDao;
 
     private final Logger LOGGER = LoggerFactory
             .getLogger(this.getClass());
@@ -1119,6 +1121,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
 
         classGroupCourseSchedulesWithDate.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
+
         for (int i=0;i<classGroupCourseSchedulesWithDate.size();i++) {
             CourseSchedule courseSchedule=classGroupCourseSchedulesWithDate.get(i);
             calendar.setTime(courseSchedule.getClassDate());
@@ -2175,10 +2178,14 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             results = courseScheduleDao.endFindCourseSchedules(params);
             List<Group> groups=new ArrayList<>();
             groups.add(null);
+            List<Integer> teacherIds=new ArrayList<>();
             for (CourseScheduleEndDto courseScheduleEndDto : results) {
                 Group group=new Group(courseScheduleEndDto.getMusicGroupId(),courseScheduleEndDto.getGroupType());
                 groups.add(group);
+                teacherIds.add(courseScheduleEndDto.getActualTeacherId());
             }
+            List<Map<Integer, String>> nameIdMaps = teacherDao.queryUsernameByIds(teacherIds);
+            Map<Integer, String> nameIdMap=MapUtil.convertIntegerMap(nameIdMaps);
             groups = groupDao.findByGroupIds(groups);
             Map<String, Map<GroupType, List<Group>>> groupsGroupByGroup = groups.stream().collect(Collectors.groupingBy(Group::getId, Collectors.groupingBy(Group::getGroupType)));
             results.forEach(result -> {
@@ -2188,6 +2195,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                     if(!CollectionUtils.isEmpty(groupTemps)){
                         result.setGroupName(groupTemps.get(0).getGroupName());
                     }
+                    result.setTeacherName(nameIdMap.get(result.getActualTeacherId()));
                 }
             });
         }

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

@@ -1481,7 +1481,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(userId, musicGroupId);
 
         if (musicGroupStudentFee == null) {
-            throw new BizException("个人信息不存在");
+            throw new BizException("个人续费信息错误");
         }
         //判断是否是续费
 		/*List<StudentPaymentOrder> orderList = studentPaymentOrderDao.queryByCondition(GroupType.MUSIC, musicGroupId, userId, DealStatusEnum.SUCCESS);

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

@@ -90,4 +90,9 @@ public class MusicGroupStudentFeeServiceImpl extends BaseServiceImpl<Long, Music
 		return musicGroupStudentFeeDao.findByUser(userId,musicGroupId);
 	}
 
+	@Override
+	public void updateStudentFeeIsLock(UpdateStudentFeeDto studentFeeDto) {
+		musicGroupStudentFeeDao.updateStudentFeeIsLock(studentFeeDto);
+	}
+
 }

+ 14 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -162,18 +162,20 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 
 		//是否在范围内
 		boolean isInScore = true;
-		if(StringUtils.isBlank(school.getLongitudeLatitude())){
-			if(studentAttendanceInfos.getUpdate().equals(YesOrNoEnum.YES.getCode())){
-				school.setLongitudeLatitude(studentAttendanceInfos.getSignInLongitudeLatitude());
-				schoolDao.update(school);
-			}
-		}else{
-			SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
-			double attendanceRange = Double.valueOf(sysConfig.getParanValue());
-			double distance = MapUtil.distance(studentAttendanceInfos.getSignInLongitudeLatitude(),
-					school.getLongitudeLatitude());
-			if(distance>attendanceRange){
-				isInScore=false;
+		if(Objects.nonNull(school)){
+			if(StringUtils.isBlank(school.getLongitudeLatitude())){
+				if(studentAttendanceInfos.getUpdate().equals(YesOrNoEnum.YES.getCode())){
+					school.setLongitudeLatitude(studentAttendanceInfos.getSignInLongitudeLatitude());
+					schoolDao.update(school);
+				}
+			}else{
+				SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
+				double attendanceRange = Double.valueOf(sysConfig.getParanValue());
+				double distance = MapUtil.distance(studentAttendanceInfos.getSignInLongitudeLatitude(),
+						school.getLongitudeLatitude());
+				if(distance>attendanceRange){
+					isInScore=false;
+				}
 			}
 		}
 

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -1002,6 +1002,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("该课程已结束报名!");
 		}
 
+		if(Objects.nonNull(vipGroup.getStudentIdList())){
+			Set<Integer> userIds = Arrays.asList(vipGroup.getStudentIdList().split(",")).stream().mapToInt(Integer::parseInt).boxed().collect(Collectors.toSet());
+			if(!userIds.contains(user.getId())){
+				throw new BizException("您无法购买此课程");
+			}
+		}
+
 		StudentPaymentOrder oldOrder = studentPaymentOrderDao.findNotFailedOrderByStudentVipGroup(vipGroupBuyParams.getVipGroupId(),
 				user.getId());
 

+ 16 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml

@@ -17,6 +17,10 @@
         <result column="update_time_" property="updateTime"/>
     </resultMap>
 
+    <resultMap id="ClassGroupTeacherMapDto" type="com.ym.mec.biz.dal.dto.ClassGroupTeacherMapDto" extends="ClassGroupTeacherMapper">
+        <result column="username_" property="userName"/>
+    </resultMap>
+
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="ClassGroupTeacherMapper">
         SELECT *
@@ -153,6 +157,18 @@
     <select id="findByClassGroup" resultMap="ClassGroupTeacherMapper">
         SELECT * FROM class_group_teacher_mapper WHERE class_group_id_=#{classGroupId}
     </select>
+    <select id="findByClassGroupIds" resultMap="ClassGroupTeacherMapDto">
+        SELECT
+            cgtm.*,
+            su.real_name_ username_
+        FROM
+            class_group_teacher_mapper cgtm
+            LEFT JOIN sys_user su ON cgtm.user_id_ = su.id_
+        WHERE cgtm.class_group_id_ IN
+        <foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
+            #{classGroupId}
+        </foreach>
+    </select>
 
     <!-- 删除对应班级老师关联关系 -->
     <delete id="delClassGroupTeacherMapper">

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

@@ -1894,7 +1894,8 @@
             cs.actual_teacher_id_,
             cs.teach_mode_,
             cs.type_,
-            cs.schoole_id_
+            cs.schoole_id_,
+            cg.name_ class_group_name_
         FROM
           course_schedule cs
           LEFT JOIN class_group cg ON cg.id_=cs.class_group_id_

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

@@ -240,7 +240,12 @@
     </update>
     <update id="updateStudentFee">
         UPDATE music_group_student_fee_
-        SET course_fee_ = #{courseFee},is_lock_ = #{isLock},payment_period_list_ = #{paymentPeriodList}
-        WHERE music_group_id_ = #{musicGroupId} AND user_id_ = #{userId}
+        SET course_fee_ = #{fee.amount},payment_period_list_ = #{fee.month}
+        WHERE music_group_id_ = #{fee.musicGroupId} AND user_id_ = #{fee.studentId}
+    </update>
+    <update id="updateStudentFeeIsLock">
+        UPDATE music_group_student_fee_
+        SET is_lock_ = #{fee.isLock}
+        WHERE music_group_id_ = #{fee.musicGroupId} AND user_id_ = #{fee.studentId}
     </update>
 </mapper>

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

@@ -380,6 +380,9 @@
             <if test="paymentStatus != null">
                 AND mgsf.payment_status_ = #{paymentStatus}
             </if>
+            <if test="isLock != null">
+                AND mgsf.is_lock_ = #{isLock}
+            </if>
             <if test="musicGroupId != null and musicGroupId != ''">
                 AND sr.music_group_id_ = #{musicGroupId}
             </if>
@@ -406,11 +409,12 @@
         <result property="courseFee" column="course_fee_"/>
         <result property="nextPaymentDate" column="next_payment_date_"/>
         <result property="isActive" column="isActive_"/>
+        <result property="isLock" column="is_lock_"/>
     </resultMap>
     <select id="queryMusicGroupStudent" resultMap="MusicGroupStudentsDto">
         SELECT sr.user_id_,su.username_ real_name_,su.gender_,su.phone_ parents_phone_,sr.current_grade_,mgsf.payment_status_,
         sr.current_class_,sr.music_group_status_,mgsf.next_payment_date_,mgsf.course_fee_,
-        s.name_ subject_name_,sr.music_group_id_,case when su.password_ is null then 0 else 1 end isActive_,
+        s.name_ subject_name_,sr.music_group_id_,case when su.password_ is null then 0 else 1 end isActive_,mgsf.is_lock_,
         IF(DATE_FORMAT(sr.create_time_,'%Y-%m-%d') > DATE_FORMAT(mg.payment_expire_date_,'%Y-%m-%d'),1,0) is_new_student_
         FROM student_registration sr
         LEFT JOIN sys_user su ON sr.user_id_ = su.id_

+ 17 - 1
mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -192,7 +192,7 @@ public class StudentManageController extends BaseController {
      */
     @GetMapping(value = "/updateStudentFee")
     @PreAuthorize("@pcs.hasPermissions('studentManage/updateStudentFee')")
-    public Object updateStudentFee(@RequestBody UpdateStudentFeeDto studentFeeDto) {
+    public Object updateStudentFee(UpdateStudentFeeDto studentFeeDto) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if(sysUser == null){
             throw new BizException("用户信息获取失败");
@@ -203,6 +203,22 @@ public class StudentManageController extends BaseController {
     }
 
     /**
+     * 修改学员缴费周期锁定状态
+     * @return
+     */
+    @GetMapping(value = "/updateStudentFeeIsLock")
+    @PreAuthorize("@pcs.hasPermissions('studentManage/updateStudentFeeIsLock')")
+    public Object updateStudentFeeIsLock(UpdateStudentFeeDto studentFeeDto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            throw new BizException("用户信息获取失败");
+        }
+        LOGGER.info("修改学员缴费周期锁定状态,user:{},参数:{}",sysUser.getId(),studentFeeDto);
+        musicGroupStudentFeeService.updateStudentFeeIsLock(studentFeeDto);
+        return succeed();
+    }
+
+    /**
      * 获取学员缴费日历信息
      * @return
      */