Browse Source

Merge remote-tracking branch 'origin/master'

Joburgess 4 năm trước cách đây
mục cha
commit
3cf336d0a7
30 tập tin đã thay đổi với 456 bổ sung68 xóa
  1. 5 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java
  2. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  3. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  4. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/InspectionItemPlanQueryInfo.java
  5. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/IndexBaseMonthDataService.java
  6. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentServeService.java
  7. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java
  8. 90 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  9. 10 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/InspectionItemPlanServiceImpl.java
  10. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  11. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java
  12. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  13. 41 40
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  14. 6 0
      mec-biz/src/main/resources/config/mybatis/InspectionItemPlanMapper.xml
  15. 7 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  16. 1 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml
  17. 16 0
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  18. 6 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  19. 5 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  20. 19 0
      mec-task/src/main/java/com/ym/mec/task/jobs/CloseStudentServiceTagTask.java
  21. 92 0
      mec-util/src/main/java/com/ym/mec/util/excel/POIUtil.java
  22. 24 0
      mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java
  23. 11 0
      mec-web/src/main/java/com/ym/mec/web/controller/InspectionController.java
  24. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/InspectionItemController.java
  25. 45 4
      mec-web/src/main/java/com/ym/mec/web/controller/InspectionItemPlanConclusionController.java
  26. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java
  27. 2 1
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupQuitController.java
  28. 6 0
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java
  29. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/TeacherAttendanceController.java
  30. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/student/StudentAttendanceController.java

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

@@ -10,6 +10,7 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.poi.ss.formula.functions.Index;
 
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 import java.util.Set;
 
@@ -104,7 +105,7 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
     int countLessThenThreeClassGroupNum(@Param("organIds") Set<Integer> organIds);
     List<String> getLessThenThreeMusicGroup(@Param("organIds") Set<Integer> organIds);
 
-    int countErrInspection(@Param("organIds") Set<Integer> organIds);
+    List<Long> queryErrInspection(@Param("organIds") Set<Integer> organIds);
 
     int countNoPaymentStudentNum(@Param("organIds") Set<Integer> organIds);
     List<String> getNoPaymentMusicGroup(@Param("organIds") Set<Integer> organIds);
@@ -112,7 +113,7 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
     List<Long> queryApplyForQuitGroupNum(@Param("organIds") Set<Integer> organIds);
 
     List<Long> queryStudentAttendanceInfo(@Param("organIds") Set<Integer> organIds,
-                                   @Param("type") String type);
+                                          @Param("type") String type, @Param("firstDayOfMonth") Date firstDayOfMonth);
 
 
     /**
@@ -120,14 +121,14 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
      * @param organIds
      * @return
      */
-    List<Long> getAttendanceError(@Param("organIds") String organIds);
+    List<Long> getAttendanceError(@Param("organIds") String organIds, @Param("firstDayOfMonth") Date firstDayOfMonth);
 
     /**
      * 获取旷课考勤
      * @param organIds
      * @return
      */
-    List<Long> getNoAttendance(@Param("organIds") String organIds);
+    List<Long> getNoAttendance(@Param("organIds") String organIds, @Param("firstDayOfMonth") Date firstDayOfMonth);
 
     /**
      * 获取老师离职申请数

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.CalenderPushDto;
 import com.ym.mec.biz.dal.dto.MusicCardDto;
 import com.ym.mec.biz.dal.dto.MusicGroupRegisterDto;
@@ -350,4 +351,11 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
      * @return
      */
     List<MusicGroup> getByEduTeacher(@Param("organId") Integer organId, @Param("eduTeacherId") Integer eduTeacherId, @Param("search") String search);
+
+    /**
+     * 获取进行中的乐团的教务老师
+     * @param organId
+     * @return
+     */
+    List<SysUser> getMusicGroupEduTeacher(@Param("organId") Integer organId);
 }

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -161,4 +161,17 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
      * @return
      */
     List<Student> getStudentTeacher(@Param("studentIds") List<Integer> studentIds);
+
+    /**
+     * 当前服务指标已开启,但在系统中没有剩余课时,且在乐团中不是在读状态,这种用户需要关闭服务指标
+     * @return
+     */
+    List<Integer> queryCloseServiceTagIds();
+
+    /**
+     * 更新用户服务指标
+     * @param studentIds
+     * @param serviceTag
+     */
+    void updateServiceTag(@Param("studentIds") List<Integer> studentIds, @Param("serviceTag") Integer serviceTag);
 }

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

@@ -38,6 +38,9 @@ public class InspectionItemPlanQueryInfo extends QueryInfo {
 
     private Date endTime;
 
+    @ApiModelProperty(value = "ids",required = false)
+    private String ids;
+
     public Date getStartTime() {
         return startTime;
     }
@@ -125,4 +128,12 @@ public class InspectionItemPlanQueryInfo extends QueryInfo {
     public void setStatus(Integer status) {
         this.status = status;
     }
+
+    public String getIds() {
+        return ids;
+    }
+
+    public void setIds(String ids) {
+        this.ids = ids;
+    }
 }

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

@@ -23,4 +23,10 @@ public interface IndexBaseMonthDataService extends BaseService<Long, IndexBaseMo
      */
     List<IndexErrInfoDto> getRemindMatterData(String organIds);
 
+    /**
+     * 是否有提醒事项
+     * @param organIds
+     * @return
+     */
+    Boolean hasIndexErrData(String organIds);
 }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentServeService.java

@@ -53,4 +53,8 @@ public interface StudentServeService {
      */
     Set<Integer> getStudentWithCourse(Long courseId);
 
+    /**
+     * 更新学生服务指标
+     */
+    void closeStudentServiceTag();
 }

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

@@ -2,6 +2,8 @@ package com.ym.mec.biz.service;
 
 import java.text.ParseException;
 
+import org.springframework.http.ResponseEntity;
+
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.page.StudentQueryInfo;
 import com.ym.mec.common.page.PageInfo;

+ 90 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -323,7 +323,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		List<IndexErrInfoDto> oneChild = new ArrayList<>();
 
 		oneChild.add(new IndexErrInfoDto(IndexErrorType.HIGH_CLASS_STUDENT_LESS_THAN_THREE, IndexErrorType.HIGH_CLASS_STUDENT_LESS_THAN_THREE.getMsg(), indexBaseMonthDataDao.countLessThenThreeClassGroupNum(organIds), indexBaseMonthDataDao.getLessThenThreeMusicGroup(organIds)));
-		oneChild.add(new IndexErrInfoDto(IndexErrorType.MUSIC_PATROL_ITEM, IndexErrorType.MUSIC_PATROL_ITEM.getMsg(), indexBaseMonthDataDao.countErrInspection(organIds), null));
+		List<Long> errInspection = indexBaseMonthDataDao.queryErrInspection(organIds);
+		oneChild.add(new IndexErrInfoDto(IndexErrorType.MUSIC_PATROL_ITEM, IndexErrorType.MUSIC_PATROL_ITEM.getMsg(),errInspection.size(), errInspection));
 
 		one.setNum(oneChild.stream().mapToInt(IndexErrInfoDto::getNum).sum());
 		one.setResult(oneChild);
@@ -335,12 +336,15 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		two.setDesc(IndexErrorType.STUDENT_INFO.getMsg());
 		List<IndexErrInfoDto> twoChild = new ArrayList<>();
 
+
+		Date firstDayOfMonth = DateUtil.getFirstDayOfMonth(DateUtil.addMonths(date, -1));
+
 		twoChild.add(new IndexErrInfoDto(IndexErrorType.STUDENT_NOT_PAYMENT, IndexErrorType.STUDENT_NOT_PAYMENT.getMsg(), indexBaseMonthDataDao.countNoPaymentStudentNum(organIds), indexBaseMonthDataDao.getNoPaymentMusicGroup(organIds)));
 		List<Long> quitGroupNum = indexBaseMonthDataDao.queryApplyForQuitGroupNum(organIds);
 		twoChild.add(new IndexErrInfoDto(IndexErrorType.STUDENT_APPLY_FOR_QUIT_MUSIC_GROUP, IndexErrorType.STUDENT_APPLY_FOR_QUIT_MUSIC_GROUP.getMsg(), quitGroupNum.size(),  quitGroupNum));
-		List<Long> attendanceInfo = indexBaseMonthDataDao.queryStudentAttendanceInfo(organIds, StudentAttendanceStatusEnum.TRUANT.getCode());
+		List<Long> attendanceInfo = indexBaseMonthDataDao.queryStudentAttendanceInfo(organIds, StudentAttendanceStatusEnum.TRUANT.getCode(),firstDayOfMonth);
 		twoChild.add(new IndexErrInfoDto(IndexErrorType.COURSE_TRUANT_STUDENT_NUM, IndexErrorType.COURSE_TRUANT_STUDENT_NUM.getMsg(), attendanceInfo.size(), attendanceInfo));
-		List<Long> attendanceInfo1 = indexBaseMonthDataDao.queryStudentAttendanceInfo(organIds, StudentAttendanceStatusEnum.LEAVE.getCode());
+		List<Long> attendanceInfo1 = indexBaseMonthDataDao.queryStudentAttendanceInfo(organIds, StudentAttendanceStatusEnum.LEAVE.getCode(),null);
 		twoChild.add(new IndexErrInfoDto(IndexErrorType.COURSE_LEAVE_STUDENT_NUM, IndexErrorType.COURSE_LEAVE_STUDENT_NUM.getMsg(), attendanceInfo1.size(), attendanceInfo1));
 		two.setNum(twoChild.stream().mapToInt(IndexErrInfoDto::getNum).sum());
 		two.setResult(twoChild);
@@ -352,10 +356,10 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		three.setDesc(IndexErrorType.TEACHER_INFO.getMsg());
 		List<IndexErrInfoDto> threeChild = new ArrayList<>();
 
-		List<Long> attendanceError = indexBaseMonthDataDao.getAttendanceError(organIdsStr);
+		List<Long> attendanceError = indexBaseMonthDataDao.getAttendanceError(organIdsStr,firstDayOfMonth);
 		threeChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_EXCEPTION_ATTENDANCE, IndexErrorType.TEACHER_EXCEPTION_ATTENDANCE.getMsg(), attendanceError.size(), attendanceError));
 
-		List<Long> noAttendance = indexBaseMonthDataDao.getNoAttendance(organIdsStr);
+		List<Long> noAttendance = indexBaseMonthDataDao.getNoAttendance(organIdsStr,firstDayOfMonth);
 		threeChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_NOT_A_CLASS, IndexErrorType.TEACHER_NOT_A_CLASS.getMsg(), noAttendance.size(), noAttendance));
 
 		List<Long> teacherLeave = indexBaseMonthDataDao.queryTeacherLeave(organIdsStr);
@@ -412,4 +416,85 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		result.add(indexErrInfoDto);
 		return result;
 	}
+
+	@Override
+	public Boolean hasIndexErrData(String organIdsStr) {
+		Set<Integer> organIds = null;
+		if(StringUtils.isNotBlank(organIdsStr)){
+			organIds = Arrays.stream(organIdsStr.split(",")).map(Integer::new).collect(Collectors.toSet());
+		}
+		Date date = new Date();
+		int countLessThenThreeClassGroupNum = indexBaseMonthDataDao.countLessThenThreeClassGroupNum(organIds);
+		if(countLessThenThreeClassGroupNum > 0){
+			return true;
+		}
+		List<Long> errInspection = indexBaseMonthDataDao.queryErrInspection(organIds);
+		if(errInspection.size() > 0){
+			return true;
+		}
+		Date firstDayOfMonth = DateUtil.getFirstDayOfMonth(DateUtil.addMonths(date, -1));
+		int countNoPaymentStudentNum = indexBaseMonthDataDao.countNoPaymentStudentNum(organIds);
+		if(countNoPaymentStudentNum > 0){
+			return true;
+		}
+		List<Long> quitGroupNum = indexBaseMonthDataDao.queryApplyForQuitGroupNum(organIds);
+		if(quitGroupNum.size() > 0){
+			return true;
+		}
+		List<Long> attendanceInfo = indexBaseMonthDataDao.queryStudentAttendanceInfo(organIds, StudentAttendanceStatusEnum.TRUANT.getCode(),firstDayOfMonth);
+		if(attendanceInfo.size() > 0){
+			return true;
+		}
+		List<Long> attendanceInfo1 = indexBaseMonthDataDao.queryStudentAttendanceInfo(organIds, StudentAttendanceStatusEnum.LEAVE.getCode(),null);
+		if(attendanceInfo1.size() > 0){
+			return true;
+		}
+		List<Long> attendanceError = indexBaseMonthDataDao.getAttendanceError(organIdsStr,firstDayOfMonth);
+		if(attendanceError.size() > 0){
+			return true;
+		}
+		List<Long> noAttendance = indexBaseMonthDataDao.getNoAttendance(organIdsStr,firstDayOfMonth);
+		if(noAttendance.size() > 0){
+			return true;
+		}
+		List<Long> teacherLeave = indexBaseMonthDataDao.queryTeacherLeave(organIdsStr);
+		if(teacherLeave.size() > 0){
+			return true;
+		}
+		String monthStr = DateUtil.format(date, DateUtil.ISO_YEAR_MONTH_FORMAT);
+		List<Long> lowTeacherSalary = indexBaseMonthDataDao.queryLowTeacherSalary(organIdsStr,monthStr);
+		if(lowTeacherSalary.size() > 0){
+			return true;
+		}
+		List<Long> inspectionItem = indexBaseMonthDataDao.queryInspectionItem(organIdsStr);
+		if(inspectionItem.size() > 0){
+			return true;
+		}
+		List<Long> inspectionItemPlan = indexBaseMonthDataDao.queryInspectionItemPlan(organIdsStr);
+		if(inspectionItemPlan.size() > 0){
+			return true;
+		}
+		List<Long> studentVisit = indexBaseMonthDataDao.queryStudentVisit(organIdsStr);
+		if(studentVisit.size() > 0){
+			return true;
+		}
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			throw new BizException("用户信息获取失败");
+		}
+		//当前用户是否是分部经理
+		List<Integer> userRole = employeeDao.queryUserRole(sysUser.getId());
+		//获取关联的乐团列表
+		List<String> musicGroupIds = musicGroupDao.queryIdsByEduIdAndOrganIds(userRole.contains(3)?sysUser.getId():null,organIdsStr);
+		String configValue1 = sysConfigDao.findConfigValue("push_create_payment_calender");
+		date = new Date();
+		String format = DateUtil.format(date, DateUtil.DEFAULT_PATTERN);
+		if(musicGroupIds.size() > 0){
+			List<Long> calenderIds = musicGroupPaymentCalenderDao.queryEndIds(configValue1, format,musicGroupIds);
+			if(calenderIds.size() > 0){
+				return true;
+			}
+		}
+		return false;
+	}
 }

+ 10 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/InspectionItemPlanServiceImpl.java

@@ -2,9 +2,7 @@ package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.CheckItemDto;
-import com.ym.mec.biz.dal.entity.Inspection;
-import com.ym.mec.biz.dal.entity.InspectionItem;
-import com.ym.mec.biz.dal.entity.School;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.page.InspectionItemPlanQueryInfo;
 import com.ym.mec.biz.service.SysConfigService;
@@ -17,7 +15,6 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.date.DateUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ym.mec.biz.dal.entity.InspectionItemPlan;
 import com.ym.mec.biz.service.InspectionItemPlanService;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -41,6 +38,8 @@ public class InspectionItemPlanServiceImpl extends BaseServiceImpl<Long, Inspect
     private SysConfigDao sysConfigDao;
     @Autowired
     private SysMessageService sysMessageService;
+    @Autowired
+    private SchoolDao schoolDao;
 
     @Override
     public BaseDAO<Long, InspectionItemPlan> getDAO() {
@@ -89,10 +88,11 @@ public class InspectionItemPlanServiceImpl extends BaseServiceImpl<Long, Inspect
             throw new BizException("日程时间不能晚于工作周期结束时间");
         }
         //获取乐团教学点的GPS信息
-        School school = musicGroupDao.getMusicGroupSchool(inspectionItemPlan.getMusicGroupId());
+        MusicGroup musicGroup = musicGroupDao.get(inspectionItemPlan.getMusicGroupId());
+        School school = schoolDao.get(musicGroup.getSchoolId());
 
         inspectionItemPlan.setOrganId(inspectionItem.getOrganId());
-        inspectionItemPlan.setCooperationOrganId(school.getCooperationOrganId());
+        inspectionItemPlan.setCooperationOrganId(musicGroup.getCooperationOrganId());
         inspectionItemPlan.setInspectionId(inspectionItem.getInspectionId());
         inspectionItemPlan.setSchoolGps(school.getLongitudeLatitude());
         inspectionItemPlan.setSubmitedGps("");
@@ -134,9 +134,11 @@ public class InspectionItemPlanServiceImpl extends BaseServiceImpl<Long, Inspect
         }
         //获取乐团教学点的GPS信息
         if (oldPlan.getStatus().equals(0)) { //未提交的修改
-            School school = musicGroupDao.getMusicGroupSchool(inspectionItemPlan.getMusicGroupId());
+            //获取乐团教学点的GPS信息
+            MusicGroup musicGroup = musicGroupDao.get(inspectionItemPlan.getMusicGroupId());
+            School school = schoolDao.get(musicGroup.getSchoolId());
             inspectionItemPlan.setInspectionId(inspectionItem.getInspectionId());
-            inspectionItemPlan.setCooperationOrganId(school.getCooperationOrganId());
+            inspectionItemPlan.setCooperationOrganId(musicGroup.getCooperationOrganId());
             inspectionItemPlan.setSchoolGps(school.getLongitudeLatitude());
             inspectionItemPlan.setSubmitedGps("");
             inspectionItemPlan.setMemo("");
@@ -148,7 +150,6 @@ public class InspectionItemPlanServiceImpl extends BaseServiceImpl<Long, Inspect
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public List<InspectionItemPlan> pushNotice() {
         Date nowDate = new Date();
         Date startTime = DateUtil.getFirstDayOfMonth(nowDate);

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

@@ -102,6 +102,7 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
+import org.springframework.util.Assert;
 
 @Service
 public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> implements MusicGroupService {
@@ -1771,6 +1772,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public boolean approveQuitMusicGroup(Long id, ApprovalStatus status, String reason, boolean isRefundCourseFee, boolean isRefundInstrumentFee,
                                          boolean isRefundTeachingAssistantsFee) {
+
         MusicGroupQuit musicGroupQuit = musicGroupQuitDao.get(id);
         if (musicGroupQuit == null) {
             throw new BizException("数据不存在");

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -929,4 +929,19 @@ public class StudentServeServiceImpl implements StudentServeService {
         }
         return serviceWithCourse.stream().map(StudentExtracurricularExercisesSituation::getStudentId).collect(Collectors.toSet());
     }
+
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void closeStudentServiceTag() {
+        /**
+         * 当前服务指标已开启,但在系统中没有剩余课时,且在乐团中不是在读状态,这种用户需要关闭服务指标
+         */
+        //获取需要关闭服务指标的学员
+        List<Integer> studentIds = studentDao.queryCloseServiceTagIds();
+        if(studentIds.size() > 0){
+            studentDao.updateServiceTag(studentIds,0);
+        }
+    }
 }

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

@@ -8,7 +8,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -31,6 +33,8 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
 
 	@Autowired
 	private StudentDao studentDao;
+	@Autowired
+	private CourseScheduleDao courseScheduleDao;
 	
 	@Autowired
 	private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
@@ -167,4 +171,5 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
 	public void batchUpdateAdviser(Integer teacherId,String studentIds) {
 		studentDao.batchUpdateAdviser(teacherId,studentIds);
 	}
+
 }

+ 41 - 40
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -439,50 +439,42 @@
 
 	<select id="countLessThenThreeClassGroupNum" resultType="int">
 		SELECT COUNT(t.id_) FROM (
-			SELECT
-			DISTINCT cg.id_
-			FROM
-			class_group cg
-			LEFT JOIN class_group_student_mapper cgsm ON cg.id_ = cgsm.class_group_id_
-			LEFT JOIN music_group mg ON cg.music_group_id_=mg.id_
-			WHERE
-			cg.type_ = 'HIGH'
-			AND mg.status_ = 'PROGRESS'
-			AND cgsm.status_ = 'NORMAL'
-			<if test="organIds!=null and organIds.size()>0">
-				AND mg.organ_id_ IN
-				<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
-					#{organId}
-				</foreach>
-			</if>
-			GROUP BY
-			cg.id_
-			HAVING
-			COUNT( DISTINCT cgsm.user_id_ )&lt;3
+		SELECT cg.id_ FROM
+		class_group cg
+		LEFT JOIN class_group_student_mapper cgsm ON cg.id_ = cgsm.class_group_id_
+		LEFT JOIN music_group mg ON cg.music_group_id_=mg.id_
+		WHERE
+		cg.type_ IN ('HIGH','HIGH_ONLINE')
+		AND mg.status_ = 'PROGRESS' AND cg.del_flag_ = 0
+		<if test="organIds!=null and organIds.size()>0">
+			AND mg.organ_id_ IN
+			<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+				#{organId}
+			</foreach>
+		</if>
+		GROUP BY cg.id_
+		HAVING
+		COUNT(CASE WHEN cgsm.status_ = 'NORMAL' THEN 1 ELSE NULL END) &lt; 3
 		) t
 	</select>
 
     <select id="getLessThenThreeMusicGroup" resultType="java.lang.String">
-		SELECT
-			cg.music_group_id_
-		FROM
-			class_group cg
-			LEFT JOIN class_group_student_mapper cgsm ON cg.id_ = cgsm.class_group_id_
-			LEFT JOIN music_group mg ON cg.music_group_id_=mg.id_
+		SELECT cg.music_group_id_ FROM
+		class_group cg
+		LEFT JOIN class_group_student_mapper cgsm ON cg.id_ = cgsm.class_group_id_
+		LEFT JOIN music_group mg ON cg.music_group_id_=mg.id_
 		WHERE
-			cg.type_ = 'HIGH'
-		  	AND mg.status_ = 'PROGRESS'
-			AND cgsm.status_ = 'NORMAL'
-			<if test="organIds!=null and organIds.size()>0">
-				AND mg.organ_id_ IN
-				<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
-					#{organId}
-				</foreach>
-			</if>
-		GROUP BY
-			cg.id_
+		cg.type_ IN ('HIGH','HIGH_ONLINE')
+		AND mg.status_ = 'PROGRESS' AND cg.del_flag_ = 0
+		<if test="organIds!=null and organIds.size()>0">
+			AND mg.organ_id_ IN
+			<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+				#{organId}
+			</foreach>
+		</if>
+		GROUP BY cg.id_
 		HAVING
-			COUNT( DISTINCT cgsm.user_id_ )&lt;3
+		COUNT(CASE WHEN cgsm.status_ = 'NORMAL' THEN 1 ELSE NULL END) &lt; 3
 	</select>
 
 	<select id="countNoPaymentStudentNum" resultType="int">
@@ -551,6 +543,9 @@
 			<if test="type!=null and type=='TRUANT'">
 				(sa.status_ = 'TRUANT' OR sa.id_ IS NULL)
 			</if>
+			<if test="firstDayOfMonth != null">
+				AND cs.class_date_ >= DATE_FORMAT(#{firstDayOfMonth},'%Y-%m-%d')
+			</if>
 			<if test="organIds!=null and organIds.size()>0">
 				AND cs.organ_id_ IN
 				<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
@@ -566,6 +561,9 @@
 		<if test="organIds != null and organIds != ''">
 			AND FIND_IN_SET(cs.organ_id_,#{organIds})
 		</if>
+		<if test="firstDayOfMonth != null">
+			AND cs.class_date_ >= DATE_FORMAT(#{firstDayOfMonth},'%Y-%m-%d')
+		</if>
 	</select>
 	<select id="getNoAttendance" resultType="java.lang.Long">
 		SELECT DISTINCT ta.id_ FROM teacher_attendance ta
@@ -574,6 +572,9 @@
 		<if test="organIds != null and organIds != ''">
 			AND FIND_IN_SET(cs.organ_id_,#{organIds})
 		</if>
+		<if test="firstDayOfMonth != null">
+			AND cs.class_date_ >= DATE_FORMAT(#{firstDayOfMonth},'%Y-%m-%d')
+		</if>
 	</select>
 	<select id="queryTeacherLeave" resultType="java.lang.Long">
 		SELECT DISTINCT tlr.id_ FROM teacher_leave_record tlr
@@ -614,9 +615,9 @@
 		</if>
 	</select>
 
-    <select id="countErrInspection" resultType="int">
+    <select id="queryErrInspection" resultType="java.lang.Long">
 		SELECT
-			COUNT(*)
+			id_
 		FROM
 			inspection_item_plan
 		WHERE

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/InspectionItemPlanMapper.xml

@@ -160,6 +160,9 @@
             <if test='hasSubmit != null and hasSubmit.toString()=="0".toString()'>
                 AND iip.status_ = 0
             </if>
+            <if test="ids != null">
+                AND FIND_IN_SET(iip.id_,#{ids})
+            </if>
             <if test="startTime != null">
                 AND iip.plan_start_ >= #{startTime}
             </if>
@@ -169,6 +172,9 @@
             <if test="search != null">
                 AND mg.name_ LIKE CONCAT('%', #{search}, '%')
             </if>
+            <if test="ids != null and ids != ''">
+                AND FIND_IN_SET(iip.id_,#{ids})
+            </if>
         </where>
     </sql>
 

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

@@ -653,4 +653,11 @@
             AND name_ LIKE CONCAT('%',#{search},'%')
         </if>
     </select>
+
+    <select id="getMusicGroupEduTeacher" resultMap="com.ym.mec.biz.dal.dao.TeacherDao.SysUser">
+        SELECT su.* FROM music_group mg
+        LEFT JOIN sys_user su ON su.id_ = mg.educational_teacher_id_
+        WHERE mg.organ_id_ = #{organId} AND status_ = 'PROGRESS' AND mg.educational_teacher_id_ >0
+        GROUP BY su.id_
+    </select>
 </mapper>

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

@@ -387,7 +387,7 @@
 	<select id="queryNoPaymentTotalAmount" resultType="java.util.Map">
 		SELECT mgpcd.user_id_ 'key',SUM(mgpcd.expect_amount_) 'value' FROM music_group_payment_calender_detail mgpcd
 		LEFT JOIN music_group_payment_calender mgpc ON mgpcd.music_group_payment_calender_id_ = mgpc.id_
-		WHERE mgpcd.payment_status_ = 'NON_PAYMENT' AND mgpc.music_group_id_ = #{musicGroupId} AND mgpc.status_ IN ('OPEN','OVER','PAID')
+		WHERE mgpc.batch_no_ IS NULL AND mgpcd.payment_status_ = 'NON_PAYMENT' AND mgpc.music_group_id_ = #{musicGroupId} AND mgpc.status_ IN ('OPEN','OVER','PAID')
 		GROUP BY mgpcd.user_id_
 	</select>
 

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

@@ -218,6 +218,12 @@
     <update id="batchUpdateAdviser">
       UPDATE student s SET s.teacher_id_ = #{teacherId},s.update_time_ = NOW() WHERE FIND_IN_SET(s.user_id_,#{studentIds})
     </update>
+    <update id="updateServiceTag">
+        UPDATE student SET service_tag_ = #{serviceTag},update_time_ = NOW() WHERE user_id_ IN
+        <foreach collection="studentIds" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </update>
 
     <resultMap id="student4operating" type="com.ym.mec.biz.dal.dto.Student4operating">
         <result column="organ_name_" property="organName"/>
@@ -601,4 +607,14 @@
             #{studentId}
         </foreach>
     </select>
+    <select id="queryCloseServiceTagIds" resultType="java.lang.Integer">
+        SELECT s.user_id_ FROM student s
+        LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = s.user_id_
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+        LEFT JOIN student_registration sr ON sr.user_id_ = s.user_id_
+        LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
+        WHERE s.service_tag_ = 1
+        GROUP BY s.user_id_ HAVING COUNT(CASE WHEN cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) = 0
+        AND COUNT(CASE WHEN sr.music_group_status_ = 'NORMAL' AND mg.status_ = 'PROGRESS' THEN 1 ELSE NULL END) = 0;
+    </select>
 </mapper>

+ 6 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -153,4 +153,10 @@ public interface TaskRemoteService {
 	//巡查日程提醒
 	@GetMapping("task/inspectionPlan")
 	void inspectionPlan();
+
+	/**
+	 * 关闭学员服务指标
+	 */
+	@GetMapping("task/closeStudentServiceTag")
+    void closeStudentServiceTag();
 }

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -195,4 +195,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 	public void inspectionPlan() {
 		logger.info("巡查日程提醒提送失败");
 	}
+
+	@Override
+	public void closeStudentServiceTag() {
+		logger.info("学员服务指标关闭失败");
+	}
 }

+ 19 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/CloseStudentServiceTagTask.java

@@ -0,0 +1,19 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CloseStudentServiceTagTask extends BaseTask {
+
+	@Autowired
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.closeStudentServiceTag();
+	}
+}

+ 92 - 0
mec-util/src/main/java/com/ym/mec/util/excel/POIUtil.java

@@ -795,4 +795,96 @@ public class POIUtil {
 		return workbook;
 	}
 
+	/**
+	 * 将数据集dataset导出到fileName文件中
+	 *
+	 * @param headColumns  导出文件的列名
+	 * @param fieldColumns
+	 * @param dataset      数据源
+	 * @return
+	 * @throws IOException
+	 * @throws NoSuchMethodException
+	 * @throws InvocationTargetException
+	 * @throws IllegalAccessException
+	 */
+	public static <T> HSSFWorkbook multipleHeaderExportExcel(List<String[]> headers, String[] fieldColumns, List<T> dataset) throws IOException, IllegalAccessException,
+			InvocationTargetException, NoSuchMethodException {
+		if (headers == null || headers.size()<=0) {
+			throw new UtilException("excel列名不能为空");
+		}
+		if (dataset == null) {
+			throw new UtilException("数据集不能为空");
+		}
+		/*if (dataset.size() > MAX_DATA_SIZE) {
+			throw new UtilException("数据集太大,不能导出.最大数据集不能超过" + MAX_DATA_SIZE);
+		}*/
+		HSSFWorkbook workbook = new HSSFWorkbook();
+		HSSFCellStyle style = workbook.createCellStyle(); // 获取单元格样式
+		/************** 设置单元格样式 *************/
+		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直
+		style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平
+		style.setWrapText(true);
+		HSSFFont font = workbook.createFont();
+		font.setColor(HSSFFont.COLOR_NORMAL);
+		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+		style.setFont(font);
+
+		HSSFSheet sheet = workbook.createSheet(); // 创建sheet
+		// 设置表头
+		// 创建第一行
+		HSSFCell cell = null;
+		int k =0;
+		for (String[] headColumns : headers) {
+			HSSFRow row1 = sheet.createRow(k);
+			for (int i = 0; i < headColumns.length; i++) {
+				// 创建列
+				cell = row1.createCell(i);
+				// 定义单元格为字符串类型
+				cell.setCellType(HSSFCell.CELL_TYPE_STRING);
+				// 设置单元格的样式
+				cell.setCellStyle(style);
+				// 设置单元格的值
+				cell.setCellValue(headColumns[i]);
+			}
+			k++;
+		}
+
+		HSSFRow row = null;
+		// 添加数据
+		T data = null;
+		Object obj = null;
+		StandardEvaluationContext context = null;
+		for (int i = 1; i <= dataset.size(); i++) {
+			data = dataset.get(i - 1);
+			if (data != null) {
+
+				context = new StandardEvaluationContext(data);
+				row = sheet.createRow(i+headers.size()-1);
+				for (int j = 0; j < fieldColumns.length; j++) {
+					cell = row.createCell(j);
+					try {
+						if(data instanceof Map) {
+							obj = PropertyUtils.getNestedProperty(data, fieldColumns[j]);
+						}else {
+							obj = expressionParser.parseExpression(fieldColumns[j]).getValue(context);
+						}
+						if (obj instanceof Date) {
+							obj = sdf.format(obj);
+						}
+
+					} catch (Exception e) {
+						LOGGER.warn(e.getMessage());
+						obj = null;
+					}
+					if (obj != null) {
+						cell.setCellValue(obj.toString());
+					} else {
+						cell.setCellValue("");
+					}
+				}
+			}
+		}
+		return workbook;
+	}
+
 }

+ 24 - 0
mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java

@@ -137,6 +137,30 @@ public class IndexController extends BaseController {
 		return succeed(indexService.getIndexBaseData(dataTypes , organIds, year));
 	}
 
+
+
+	@GetMapping("/hasIndexErrData")
+	public HttpResponseResult hasIndexErrData(String organIds){
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed("用户信息获取失败");
+		}
+		if (!sysUser.getIsSuperAdmin()) {
+			Employee employee = employeeService.get(sysUser.getId());
+			if (StringUtils.isBlank(organIds)) {
+				organIds = employee.getOrganIdList();
+			}else if(StringUtils.isEmpty(employee.getOrganIdList())){
+				return failed("用户所在分部异常");
+			}else {
+				List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+				if(!list.containsAll(Arrays.asList(organIds.split(",")))){
+					return failed("非法请求");
+				}
+			}
+		}
+		return succeed(indexService.hasIndexErrData(organIds));
+	}
+
 	@GetMapping("/getIndexErrData")
 	public HttpResponseResult getIndexErrData(String organIds){
 		SysUser sysUser = sysUserFeignService.queryUserInfo();

+ 11 - 0
mec-web/src/main/java/com/ym/mec/web/controller/InspectionController.java

@@ -3,6 +3,7 @@ package com.ym.mec.web.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.Inspection;
 import com.ym.mec.biz.dal.page.InspectionQueryInfo;
@@ -31,6 +32,8 @@ public class InspectionController extends BaseController {
     private EmployeeDao employeeDao;
     @Resource
     private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private MusicGroupDao musicGroupDao;
 
     @ApiOperation(value = "添加巡查任务")
     @PostMapping("/add")
@@ -92,4 +95,12 @@ public class InspectionController extends BaseController {
         return succeed(inspectionService.getInfo(id));
     }
 
+
+    @ApiOperation(value = "获取分部进行中乐团的乐团主管")
+    @GetMapping("/getMusicGroupEduTeacher")
+    @PreAuthorize("@pcs.hasPermissions('inspection/getMusicGroupEduTeacher')")
+    public HttpResponseResult<List<SysUser>> getMusicGroupEduTeacher(Integer organId) {
+        return succeed(musicGroupDao.getMusicGroupEduTeacher(organId));
+    }
+
 }

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

@@ -48,7 +48,7 @@ public class InspectionItemController extends BaseController {
     }
 
     @ApiOperation(value = "巡查任务事项列表")
-    @GetMapping("/queryPage")
+    @RequestMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('inspectionItem/queryPage')")
     public HttpResponseResult<PageInfo<InspectionItem>> queryPage(InspectionQueryInfo queryInfo) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();

+ 45 - 4
mec-web/src/main/java/com/ym/mec/web/controller/InspectionItemPlanConclusionController.java

@@ -1,5 +1,7 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.biz.dal.dao.InspectionItemPlanDao;
+import com.ym.mec.biz.dal.entity.InspectionItemPlan;
 import com.ym.mec.biz.service.InspectionItemPlanConclusionService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -10,6 +12,8 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.CellRangeAddressList;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -25,6 +29,8 @@ import java.util.*;
 public class InspectionItemPlanConclusionController extends BaseController {
     @Autowired
     private InspectionItemPlanConclusionService InspectionItemPlanConclusionService;
+    @Autowired
+    private InspectionItemPlanDao inspectionItemPlanDao;
 
     @ApiOperation(value = "获取日程的巡查结果")
     @GetMapping("/getPlanConclusion")
@@ -59,18 +65,53 @@ public class InspectionItemPlanConclusionController extends BaseController {
                 });
             });
 
-            List<String> bodyList = new ArrayList<>();
+            List<String> bodyList = new LinkedList<>();
             conclusions.get(0).forEach((key, vak) -> {
                 bodyList.add(key);
             });
+            InspectionItemPlan planInfo = inspectionItemPlanDao.getPlanInfo(planId);
+            String dateTime = DateUtil.dateToString(planInfo.getPlanStart(), "yyyy-MM-dd") + " " + DateUtil.dateToString(planInfo.getPlanStart(), "HH:mm") + "~" + DateUtil.dateToString(planInfo.getPlanEnd(), "HH:mm");
+            String[] header = {"所属分部", planInfo.getOrganName(), "", "合作单位", planInfo.getCooperationName(), "", "巡查乐团", planInfo.getMusicGroupName(), "", "", "", "", "", "", "", ""};
+            String[] header1 = {"乐团主管", planInfo.getRealName(), "", "巡查时间", dateTime, "", "提交时间", DateUtil.dateToString(planInfo.getSubmitedTime(), "yyyy-MM-dd HH:mm"), "", "", "", "", "", "", ""};
+            String[] header2 = {"处理方式", planInfo.getMemo(), "", "", "", "", "", "", "", "", "", "", "", "", "", ""};
+            String[] header3 = {"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""};
+            String[] header4 = {"巡查项目", "课前管理", "", "", "", "", "课中管理", "", "", "", "", "", "", "课后管理", "", ""};
+            String[] header5 = {"", "老师是否提前准备板书(本课内容、作业)", "老师是否佩戴工牌", "老师是否仪容仪表整洁", "老师是否携带乐器", "老师是否携带教学资料、设备", "老师是否合理安排学员座位", "乐器箱包、书包是否摆放整齐", "课堂纪律是否保持良好", "老师是否全程站立教学", "老师是否全程使用节拍器或教学音频", "是否发现学员需要更换新乐器", "老师是否将上课照片/视频发送到声部群", "老师是否保持教室环境卫生", "老师是否关好所有电源、门窗", "老师是否有序组织学员放学"};
+
+            List<String[]> headers = new LinkedList<>();
+            headers.add(header);
+            headers.add(header1);
+            headers.add(header2);
+            headers.add(header3);
+            headers.add(header4);
+            headers.add(header5);
 
             String[] body = bodyList.toArray(new String[bodyList.size()]);
 
-            String[] header = {"老师", "老师是否提前准备板书(本课内容、作业)", "老师是否佩戴工牌", "老师是否仪容仪表整洁", "老师是否携带乐器", "老师是否携带教学资料、设备", "老师是否合理安排学员座位", "乐器箱包、书包是否摆放整齐", "课堂纪律是否保持良好", "老师是否全程站立教学", "老师是否全程使用节拍器或教学音频", "是否发现学员需要更换新乐器", "老师是否将上课照片/视频发送到声部群", "老师是否保持教室环境卫生", "老师是否关好所有电源、门窗", "老师是否有序组织学员放学"};
-            HSSFWorkbook workbook = POIUtil.exportExcel(header, body, conclusions);
+
+            HSSFWorkbook workbook = POIUtil.multipleHeaderExportExcel(headers, body, conclusions);
+            //合并单元格处理
+            CellRangeAddressList cellRangeAddressList = new CellRangeAddressList();
+            cellRangeAddressList.addCellRangeAddress(0, 1, 0, 2);
+            cellRangeAddressList.addCellRangeAddress(0, 4, 0, 5);
+            cellRangeAddressList.addCellRangeAddress(0, 7, 0, 8);
+            cellRangeAddressList.addCellRangeAddress(1, 1, 1, 2);
+            cellRangeAddressList.addCellRangeAddress(1, 4, 1, 5);
+            cellRangeAddressList.addCellRangeAddress(1, 7, 1, 8);
+            cellRangeAddressList.addCellRangeAddress(2, 1, 2, 2);
+            cellRangeAddressList.addCellRangeAddress(2, 3, 2, 8);
+            cellRangeAddressList.addCellRangeAddress(3, 0, 3, 15);
+            cellRangeAddressList.addCellRangeAddress(4, 0, 5, 0);
+            cellRangeAddressList.addCellRangeAddress(4, 1, 4, 5);
+            cellRangeAddressList.addCellRangeAddress(4, 6, 4, 12);
+            cellRangeAddressList.addCellRangeAddress(4, 13, 4, 15);
+
+            for (CellRangeAddress cellRangeAddress : cellRangeAddressList.getCellRangeAddresses()) {
+                workbook.getSheetAt(0).addMergedRegion(cellRangeAddress);
+            }
 
             response.setContentType("application/octet-stream");
-            response.setHeader("Content-Disposition", "attachment;filename=inspectionItemPlanConclusion-" + DateUtil.getDate(new Date()) + ".xls");
+            response.setHeader("Content-Disposition", "attachment;filename=conclusion-" + DateUtil.getDate(new Date()) + ".xls");
             response.flushBuffer();
             outputStream = response.getOutputStream();
             workbook.write(outputStream);

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

@@ -105,7 +105,7 @@ public class MusicGroupController extends BaseController {
 	}
 
 	@ApiOperation(value = "分页查询乐团列表")
-	@GetMapping("/queryPage")
+	@RequestMapping("/queryPage")
 	@PreAuthorize("@pcs.hasPermissions('musicGroup/queryPage')")
 	public Object queryPage(MusicGroupQueryInfo queryInfo) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();

+ 2 - 1
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupQuitController.java

@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 
+import org.springframework.beans.factory.FactoryBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -39,7 +40,7 @@ public class MusicGroupQuitController extends BaseController {
 	private SysUserFeignService sysUserFeignService;
 
 	@ApiOperation(value = "分页查询")
-	@GetMapping("/queryPage")
+	@RequestMapping("/queryPage")
 	@PreAuthorize("@pcs.hasPermissions('musicGroupQuit/queryPage')")
 	public HttpResponseResult queryPage(MusicGroupQuitQueryInfo queryInfo) throws Exception {
 		return succeed(musicGroupQuitService.queryPage(queryInfo));

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

@@ -100,6 +100,12 @@ public class TaskController extends BaseController {
 		studentGoodsSellService.affirmReceive(null);
 	}
 
+	@GetMapping(value = "/closeStudentServiceTag")
+	// 关闭指定学员服务指标
+	public void closeStudentServiceTag(){
+		studentServeService.closeStudentServiceTag();
+	}
+
 	@GetMapping(value = "/pushWaitSendMessageTask")
 	// 每天9点推送前一天22点之后的推送消息
 	public void pushWaitSendMessageTask(){

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

@@ -44,7 +44,7 @@ public class TeacherAttendanceController extends BaseController {
     }
 
     @ApiOperation(value = "获取教师考勤记录")
-    @PostMapping("/queryTeacherAttendances")
+    @RequestMapping("/queryTeacherAttendances")
     @PreAuthorize("@pcs.hasPermissions('teacherAttendance/queryTeacherAttendances')")
     public Object queryTeacherAttendances(TeacherCloseQueryInfo queryInfo){
         SysUser sysUser = sysUserFeignService.queryUserInfo();

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/student/StudentAttendanceController.java

@@ -64,7 +64,7 @@ public class StudentAttendanceController extends BaseController {
     }
 
     @ApiOperation(value = "获取某节课学生签到列表")
-    @GetMapping("/findStudentAttendance")
+    @RequestMapping("/findStudentAttendance")
     @PreAuthorize("@pcs.hasPermissions('studentAttendance/findStudentAttendance')")
     public Object findStudentAttendance(StudentAttendanceQueryInfo queryInfo){
     	SysUser sysUser = sysUserFeignService.queryUserInfo();