소스 검색

学员首次请假逻辑

zouxuan 4 년 전
부모
커밋
6fbfd6f7a6

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.OrganVipGroupCategoryCourseNumDto;
+import com.ym.mec.biz.dal.dto.StudentErrorLeaveDto;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.biz.dal.enums.*;
@@ -287,4 +288,8 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
                                                             @Param("organIds") List<Integer> organIds);
 
     int countStudentErrorLeave(@Param("organIdList") Set<Integer> organIdList, @Param("format") String format);
+
+    int countStudentErrorLeave1(Map<String, Object> params);
+
+    List<StudentErrorLeaveDto> queryStudentErrorLeave(Map<String, Object> params);
 }

+ 44 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentErrorLeaveDto.java

@@ -0,0 +1,44 @@
+package com.ym.mec.biz.dal.dto;
+
+public class StudentErrorLeaveDto {
+
+    private String studentName;
+
+    private Integer userId;
+
+    private Integer totalNum;
+
+    private Integer currentNum;
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getTotalNum() {
+        return totalNum;
+    }
+
+    public void setTotalNum(Integer totalNum) {
+        this.totalNum = totalNum;
+    }
+
+    public Integer getCurrentNum() {
+        return currentNum;
+    }
+
+    public void setCurrentNum(Integer currentNum) {
+        this.currentNum = currentNum;
+    }
+}

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java

@@ -206,4 +206,6 @@ public interface StudentManageService {
      * @return
      */
     List<StudentSubTotalCourseTimesDto> queryStudentSubTotalCourseTimes(String musicGroupId);
+
+    Object queryStudentErrorLeaveList(StudentManageQueryInfo queryInfo);
 }

+ 24 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -12,8 +12,7 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.*;
-import com.ym.mec.biz.service.CloudTeacherOrderService;
-import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.*;
 
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.im.WebFeignService;
@@ -47,8 +46,6 @@ import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.entity.SubjectChange;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.entity.Teacher;
-import com.ym.mec.biz.service.StudentManageService;
-import com.ym.mec.biz.service.StudentService;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.ImResult;
 import com.ym.mec.common.entity.ImUserModel;
@@ -113,7 +110,7 @@ public class StudentManageServiceImpl implements StudentManageService {
     @Autowired
     private StudentCourseHomeworkDao studentCourseHomeworkDao;
     @Autowired
-    private StudentAttendanceDao studentAttendanceDao;
+    private IndexBaseMonthDataDao indexBaseMonthDataDao;
     @Autowired
     private StudentInstrumentDao studentInstrumentDao;
     @Autowired
@@ -851,4 +848,26 @@ public class StudentManageServiceImpl implements StudentManageService {
     public List<StudentSubTotalCourseTimesDto> queryStudentSubTotalCourseTimes(String musicGroupId) {
         return musicGroupPaymentStudentCourseDetailDao.queryStudentSubTotalCourseTimes(musicGroupId);
     }
+
+    @Override
+    public Object queryStudentErrorLeaveList(StudentManageQueryInfo queryInfo) {
+        //学员请假异常提醒(获取前两个月的)
+        Date date = new Date();
+        PageInfo<StudentErrorLeaveDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+        params.put("offset", pageInfo.getOffset());
+        String totalMonth = DateUtil.format(DateUtil.addMonths(date, 1), DateUtil.ISO_YEAR_MONTH_FORMAT);
+        String currentMonth = DateUtil.format(date, DateUtil.ISO_YEAR_MONTH_FORMAT);
+        params.put("totalMonth", totalMonth);
+        params.put("currentMonth", currentMonth);
+        int count = indexBaseMonthDataDao.countStudentErrorLeave1(params);
+        List<StudentErrorLeaveDto> dataList = new ArrayList<>();
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            dataList = indexBaseMonthDataDao.queryStudentErrorLeave(params);
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
 }

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

@@ -1398,6 +1398,35 @@
 				#{item}
 			</foreach>
 		</if>
-		GROUP BY sa.user_id_,DATE_FORMAT(cs.class_date_,'%Y-%m') HAVING COUNT(sa.id_) > 1 AND SUM(sa.leave_visit_flag_) = 0) c
+		GROUP BY sa.user_id_,DATE_FORMAT(cs.class_date_,'%Y-%m')
+		HAVING COUNT(sa.id_) > 1 AND COUNT(sa.id_) > SUM(sa.leave_visit_flag_)) c
+	</select>
+	<select id="countStudentErrorLeave1" resultType="java.lang.Integer">
+		SELECT COUNT(DISTINCT c.user_id_) FROM (
+		SELECT sa.user_id_ FROM student_attendance sa
+		LEFT JOIN course_schedule cs ON cs.id_ = sa.course_schedule_id_
+		WHERE DATE_FORMAT(cs.class_date_,'%Y-%m') >= #{totalMonth} AND sa.status_ = 'LEAVE'
+		<if test="organId != null">
+			AND FIND_IN_SET(cs.organ_id_,organId)
+		</if>
+		GROUP BY sa.user_id_,DATE_FORMAT(cs.class_date_,'%Y-%m')
+		HAVING COUNT(sa.id_) > 1 AND COUNT(sa.id_) > SUM(sa.leave_visit_flag_)) c
+	</select>
+	<resultMap id="StudentErrorLeaveDto" type="com.ym.mec.biz.dal.dto.StudentErrorLeaveDto">
+		<result property="currentNum" column="currentNum"/>
+		<result property="totalNum" column="totalNum"/>
+		<result property="userId" column="user_id_"/>
+		<result property="studentName" column="username_"/>
+	</resultMap>
+	<select id="queryStudentErrorLeave" resultMap="StudentErrorLeaveDto">
+		SELECT * FROM (SELECT sa.user_id_,su.username_,COUNT(sa.id_) total_num_,
+		COUNT(CASE WHEN DATE_FORMAT(cs.class_date_,'%Y-%m') = #{currentMonth} THEN 1 ELSE NULL END) current_num_,cs.class_date_
+		FROM student_attendance sa
+		WHERE DATE_FORMAT(cs.class_date_,'%Y-%m') >= #{totalMonth} AND sa.status_ = 'LEAVE'
+		<if test="organId != null">
+			AND FIND_IN_SET(cs.organ_id_,organId)
+		</if>
+		GROUP BY sa.user_id_,DATE_FORMAT(cs.class_date_,'%Y-%m') HAVING COUNT(sa.id_) > 1)c
+		WHERE DATE_FORMAT(c.class_date_ ,'%Y-%m') = #{currentMonth}
 	</select>
 </mapper>

+ 23 - 0
mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -66,6 +66,29 @@ public class StudentManageController extends BaseController {
     private StudentService studentService;
 
     private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
+
+    @ApiOperation(value = "获取学生请假异常列表")
+    @GetMapping("/queryStudentErrorLeaveList")
+    @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentErrorLeaveList')")
+    public Object queryStudentErrorLeaveList(StudentManageQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            return failed("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                return failed("非法请求");
+            }
+        }
+        return succeed(studentManageService.queryStudentErrorLeaveList(queryInfo));
+    }
+
     @ApiOperation(value = "获取学生列表")
     @GetMapping("/queryStudentList")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentList')")