Forráskód Böngészése

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
#	mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
#	mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java
Joburgess 5 éve
szülő
commit
584a4797ff
28 módosított fájl, 645 hozzáadás és 404 törlés
  1. 1 0
      cms/src/main/java/com/ym/mec/cms/controller/NewsController.java
  2. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java
  3. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java
  4. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleDto.java
  5. 8 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendancesDto.java
  6. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroup.java
  7. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  8. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderDetailService.java
  9. 0 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  10. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java
  11. 319 317
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  12. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  13. 6 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  14. 11 24
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  15. 120 22
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  16. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  17. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  18. 1 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  19. 2 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  20. 7 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  21. 8 2
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  22. 6 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  23. 5 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  24. 19 0
      mec-task/src/main/java/com/ym/mec/task/jobs/PushTeacherExceptionAttendanceTask.java
  25. 53 2
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  26. 19 12
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java
  27. 5 3
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderDetailController.java
  28. 6 0
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

+ 1 - 0
cms/src/main/java/com/ym/mec/cms/controller/NewsController.java

@@ -45,6 +45,7 @@ public class NewsController extends BaseController {
 	@ApiOperation("资讯列表分页查询")
 	@GetMapping(value = "/homeList")
 	public Object getHomeList(NewsInformationQueryInfo queryInfo) {
+		queryInfo.setRows(5);
 		SysUser user = sysUserFeignService.queryUserInfo();
 		return succeed(sysNewsInformationService.getHomeList(user, queryInfo));
 	}

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java

@@ -470,4 +470,11 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
      * @return java.util.List<java.util.Map<java.lang.Long,java.util.Date>>
      */
     List<Map<Long, String>> getCoursesSettlementTime(@Param("courseScheduleIds") List<Long> courseScheduleIds);
+
+	/**
+	 * 获取课程是否有课酬
+	 * @param courseScheduleIds
+	 * @return
+	 */
+	int getHasTeacherSalaryCount(@Param("courseScheduleIds") List<Long> courseScheduleIds);
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java

@@ -212,4 +212,11 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
 	 * @param courseId
 	 */
 	void cleanCourseTeacherSignOut(@Param("courseId") Long courseId);
+
+	/**
+	 * 获取当天有异常考勤的老师列表
+	 * @param format
+	 * @return
+	 */
+    Set<Integer> queryTeacherExceptionAttendance(String format);
 }

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleDto.java

@@ -35,10 +35,10 @@ public class CourseScheduleDto extends CourseSchedule {
     @ApiModelProperty(value = "班级编号,房间号",required = false)
     private String sealClassId;
 
-    @ApiModelProperty(value = "签到状态(1已签到,0未签到)",required = false)
+    @ApiModelProperty(value = "签到状态(1正常,0异常,3未签到)",required = false)
     private Integer signInStatus;
 
-    @ApiModelProperty(value = "签退状态(1已签到,0未签到)",required = false)
+    @ApiModelProperty(value = "签退状态(11正常,0异常,3未签到)",required = false)
     private Integer signOutStatus;
 
     @ApiModelProperty(value = "教师角色")

+ 8 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendancesDto.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import com.ym.mec.biz.dal.enums.SignInStatusEnum;
+import com.ym.mec.biz.dal.enums.SignOutStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.util.Date;
@@ -39,11 +41,11 @@ public class TeacherAttendancesDto {
     private CourseSchedule.CourseScheduleType courseScheduleType;
 
     @ApiModelProperty(value = "签到状态(1正常签到,0异常签到) ",required = false)
-    private Integer signInStatus;
+    private SignInStatusEnum signInStatus;
 
     /** 状态(正常签到,异常签到) */
     @ApiModelProperty(value = "签退状态(1正常签到,0异常签到) ",required = false)
-    private Integer signOutStatus;
+    private SignOutStatusEnum signOutStatus;
 
     /** 备注 */
     @ApiModelProperty(value = "备注",required = false)
@@ -135,19 +137,19 @@ public class TeacherAttendancesDto {
         this.courseScheduleType = courseScheduleType;
     }
 
-    public Integer getSignInStatus() {
+    public SignInStatusEnum getSignInStatus() {
         return signInStatus;
     }
 
-    public void setSignInStatus(Integer signInStatus) {
+    public void setSignInStatus(SignInStatusEnum signInStatus) {
         this.signInStatus = signInStatus;
     }
 
-    public Integer getSignOutStatus() {
+    public SignOutStatusEnum getSignOutStatus() {
         return signOutStatus;
     }
 
-    public void setSignOutStatus(Integer signOutStatus) {
+    public void setSignOutStatus(SignOutStatusEnum signOutStatus) {
         this.signOutStatus = signOutStatus;
     }
 

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroup.java

@@ -75,13 +75,13 @@ public class ClassGroup {
 
 	/** 班级类型(普通班级、合奏班级) */
 	@ApiModelProperty(value = "是否删除,1是 0否", required = false)
-	private Integer delFlag;
+	private Integer delFlag = 0;
 
 	@ApiModelProperty(value = "总统课次",required = false)
-	private Integer totalClassTimes;
+	private Integer totalClassTimes = 0;
 
 	@ApiModelProperty(value = "当前课次",required = false)
-	private Integer currentClassTimes;
+	private Integer currentClassTimes = 0;
 	
 	@ApiModelProperty(value = "班级图标",required = false)
 	private String img;

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -96,6 +96,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     TEACHER_PUSH_STUDENT_LEAVE("TEACHER_PUSH_STUDENT_LEAVE", "学员请假"),
     TEACHER_PUSH_CLASS_MESSAGE("TEACHER_PUSH_CLASS_MESSAGE", "班级消息"),
     COURSE_SALARY_COMPLAINTS_RESULT("COURSE_SALARY_COMPLAINTS_RESULT", "课酬申述结果"),
+    PUSH_TEACHER_EXCEPTION_ATTENDANCE("PUSH_TEACHER_EXCEPTION_ATTENDANCE", "异常考勤通知"),
 
     EDUCATION_PUSH_MUSIC_GROUP_FOUND("EDUCATION_PUSH_MUSIC_GROUP_FOUND", "乐团成立"),
     EDUCATION_PUSH_MUSIC_GROUP_CLOSE("EDUCATION_PUSH_MUSIC_GROUP_CLOSE", "乐团关闭"),

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderDetailService.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.service.BaseService;
 
 import java.math.BigDecimal;
@@ -21,7 +22,7 @@ public interface MusicGroupPaymentCalenderDetailService extends BaseService<Long
      * 开启缴费
      * @param ids
      */
-    void openPayment(String ids);
+    String openPayment(String ids);
 
     /**
      * 根据声部获取乐团下完成缴费的学员

+ 0 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -15,7 +15,6 @@ import com.ym.mec.biz.dal.dto.SporadicPayDto;
 import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
 import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
 import com.ym.mec.biz.dal.entity.ApprovalStatus;
-import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;

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

@@ -132,4 +132,9 @@ public interface TeacherAttendanceService extends BaseService<Long, TeacherAtten
 	 * @return
 	 */
 	TeacherAttendanceDetailDto getTeacherPersonalAttendanceDetail(Integer courseScheduleId);
+
+	/**
+	 * 推送教师异常考勤
+	 */
+    void pushTeacherExceptionAttendanceTask();
 }

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 319 - 317
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java


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

@@ -3676,7 +3676,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             List<Long> courseScheduleIds = results.stream().map(CourseScheduleEndDto::getId).collect(Collectors.toList());
 //            List<TeacherAttendance> teacherAttendances = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
 //            Map<Long, List<TeacherAttendance>> courseTeacherAttendanceMap = teacherAttendances.stream().collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
-//            Map<Integer, Long> studentNumCourseMap = MapUtil.convertIntegerMap(studentAttendanceDao.countStudentAttendancesByCourses(courseScheduleIds));
+            Map<Integer, Long> studentNumCourseMap = MapUtil.convertIntegerMap(studentAttendanceDao.countStudentAttendancesByCourses(courseScheduleIds));
             Map<Long, String> studentIdMap = MapUtil.convertIntegerMap(courseScheduleStudentPaymentDao.getStudentIdMap(courseScheduleIds));
             List<Integer> teacherIds=results.stream().filter(t->Objects.nonNull(t.getActualTeacherId())).map(CourseSchedule::getActualTeacherId).collect(Collectors.toList());
 
@@ -3704,13 +3704,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					result.setSignInTime(teacherAttendance.getSignInTime());
 					result.setSignOutTime(teacherAttendance.getSignOutTime());
 					result.setRemark(teacherAttendance.getRemark());
-				}
+				}*/
 				Long studentNum = studentNumCourseMap.get(result.getId());
 				if (Objects.nonNull(studentNum)) {
 					result.setIsCallNames(studentNum > 0 ? YesOrNoEnum.YES : YesOrNoEnum.NO);
 				} else {
 					result.setIsCallNames(YesOrNoEnum.NO);
-				}*/
+				}
 				result.setSettlementTime(coursesSettlementTimeMap.get(result.getId()));
 			}
         }

+ 6 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java

@@ -111,15 +111,16 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void openPayment(String ids) {
+	public String openPayment(String ids) {
 		if(StringUtils.isEmpty(ids)){
 			throw new BizException("参数校验失败");
 		}
 		//获取可开启缴费列表
 		List<MusicGroupPaymentCalenderDetail> calenderDetails = musicGroupPaymentCalenderDetailDao.queryCanOpenList(ids);
 		if(calenderDetails.size() == 0){
-			return;
+			return "操作失败,没有可以开启缴费的学员";
 		}
+		int length = ids.split(",").length;
 		Date date = new Date();
 		Iterator<MusicGroupPaymentCalenderDetail> iterator = calenderDetails.iterator();
 		MusicGroupPaymentCalenderDetail next;
@@ -132,7 +133,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 			}
 		}
 		if(calenderDetails.size() == 0){
-			return;
+			return "操作失败,学员有未完成的订单";
 		}
 		String musicGroupId = calenderDetails.get(0).getMusicGroupId();
 		calenderDetails.forEach(e->{
@@ -158,6 +159,8 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 			// 发送续费通知
 			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push, null, 0, memo,"STUDENT",musicGroup.getName());
 		}
+		StringBuffer append = new StringBuffer("操作成功: 成功开启缴费").append(studentIds.size()).append("条,失败").append(length - studentIds.size()).append("条");
+		return append.toString();
 	}
 
 	@Override

+ 11 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -1,29 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
-import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.NO;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
@@ -42,6 +19,16 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.NO;
 
 @Service
 public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long, MusicGroupPaymentCalender> implements MusicGroupPaymentCalenderService {

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

@@ -1,18 +1,114 @@
 package com.ym.mec.biz.service.impl;
 
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
-import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.dao.ChargeTypeDao;
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
+import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
+import com.ym.mec.biz.dal.dao.CooperationOrganDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.MusicGroupBuildLogDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentEntitiesDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPurchaseListDao;
+import com.ym.mec.biz.dal.dao.MusicGroupQuitDao;
+import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
+import com.ym.mec.biz.dal.dao.MusicGroupSubjectGoodsGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupSubjectPlanDao;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.dao.SchoolDao;
+import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
+import com.ym.mec.biz.dal.dao.StudentDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.CourseScheduleTeachersDto;
+import com.ym.mec.biz.dal.dto.HighClassGroupDto;
+import com.ym.mec.biz.dal.dto.MusicCardDto;
+import com.ym.mec.biz.dal.dto.RegisterPayDto;
+import com.ym.mec.biz.dal.dto.SporadicPayDto;
+import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
+import com.ym.mec.biz.dal.dto.SubjectRegisterDto;
+import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
+import com.ym.mec.biz.dal.entity.ApprovalStatus;
+import com.ym.mec.biz.dal.entity.ChargeType;
+import com.ym.mec.biz.dal.entity.ClassGroup;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.FeeType;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
+import com.ym.mec.biz.dal.entity.MusicGroupQuit;
+import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
-import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.School;
+import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
+import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GoodsType;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.service.ClassGroupService;
+import com.ym.mec.biz.service.ClassGroupStudentMapperService;
+import com.ym.mec.biz.service.GoodsService;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.MusicGroupSubjectGoodsGroupService;
+import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
+import com.ym.mec.biz.service.PayService;
+import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserCashAccountDetailService;
+import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
 import com.ym.mec.common.entity.ImGroupModel;
@@ -26,19 +122,6 @@ import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
 @Service
 public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> implements MusicGroupService {
 
@@ -942,7 +1025,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //生成学员费用表
         List<MusicGroupStudentFee> musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
         if (musicGroupStudentFees != null && musicGroupStudentFees.size() > 0) {
-            if (musicGroup.getFeeType() != FeeType.OFFLINE) {
+            if (musicGroup.getFeeType() != null && musicGroup.getFeeType() != FeeType.OFFLINE) {
                 for (MusicGroupStudentFee sf : musicGroupStudentFees) {
                     sf.setRemainNetworkClassTimes(sf.getRemainNetworkClassTimes() + 1);
                 }
@@ -1046,6 +1129,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType() == CooperationOrgan.OwnershipType.OWN) {
             List<HighClassGroupDto> highClassGroup = classGroupDao.findHighClassGroup(musicGroupId, classGroupIds);
             Set<ClassGroupTypeEnum> classGroupTypeSet = highClassGroup.stream().map(HighClassGroupDto::getType).collect(Collectors.toSet());
+            String HighClassGroupSubjectIds = highClassGroup.stream().filter(e -> e.getType().equals(ClassGroupTypeEnum.HIGH)).map(HighClassGroupDto::getSubjectIdList).collect(Collectors.joining(","));
+            String HighOnlineClassGroupSubjectIds = highClassGroup.stream().filter(e -> e.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)).map(HighClassGroupDto::getMemo).collect(Collectors.joining(","));
+            if (!HighClassGroupSubjectIds.isEmpty() && !HighOnlineClassGroupSubjectIds.isEmpty()) {
+                HighClassGroupSubjectIds += "," + HighOnlineClassGroupSubjectIds;
+            } else {
+                HighClassGroupSubjectIds += HighOnlineClassGroupSubjectIds;
+            }
+
+            String[] subjectIds = HighClassGroupSubjectIds.split(",");
 
             List<StudentRegistration> students = new ArrayList<>();
             if (classGroupTypeSet.contains(ClassGroupTypeEnum.HIGH)) {
@@ -1056,14 +1148,20 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 List<StudentRegistration> noHighOnlineClassGroupStudents = studentRegistrationService.findMusicGroupStuNoClassType(musicGroupId, ClassGroupTypeEnum.HIGH_ONLINE, null);
                 students.addAll(noHighOnlineClassGroupStudents);
             }
-            if (students.size() == 0) {
-                return;
-            }
+
+
             Map<Integer, String> studentMap = new HashMap<>();
             for (StudentRegistration student : students) {
+                if(!Arrays.asList(subjectIds).contains(student.getActualSubjectId().toString())){
+                    continue;
+                }
                 studentMap.put(student.getUserId(), student.getUserId().toString());
             }
 
+            if (studentMap.size() == 0) {
+                return;
+            }
+
             String baseURL = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
             String url = baseURL + "/#/smallRegister?musicGroupId=" + musicGroupId;
             String serverPhone = sysConfigDao.findConfigValue(SysConfigService.SERVER_PHONE);

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

@@ -659,7 +659,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             MusicGroupStudentFee musicGroupStudentFee = new MusicGroupStudentFee(musicGroupId,
                     userId, studentRegistration.getSubjectId(), studentAddDto.getCourseFee(),
                     null, studentAddDto.getTemporaryCourseFee(), paymentStatus);
-            if(musicGroup.getFeeType() != FeeType.OFFLINE && musicGroupStudentFee.getTemporaryCourseFee().doubleValue() * 100 == 0){
+            if(musicGroup.getFeeType() != null && musicGroup.getFeeType() != FeeType.OFFLINE && musicGroupStudentFee.getTemporaryCourseFee().doubleValue() * 100 == 0){
             	musicGroupStudentFee.setRemainNetworkClassTimes(musicGroupStudentFee.getRemainNetworkClassTimes() + 1);
             }
             musicGroupStudentFeeDao.insert(musicGroupStudentFee);
@@ -820,7 +820,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 musicGroupStudentFee.setLatestPaidTime(nowDate);
                 musicGroupStudentFee.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED);
                 musicGroupStudentFee.setTemporaryCourseFee(BigDecimal.ZERO);
-                if(musicGroup.getFeeType() != FeeType.OFFLINE){
+                if(musicGroup.getFeeType() != null && musicGroup.getFeeType() != FeeType.OFFLINE){
                 	musicGroupStudentFee.setRemainNetworkClassTimes(musicGroupStudentFee.getRemainNetworkClassTimes() + 1);
                 }
                 musicGroupStudentFee.setUpdateTime(nowDate);

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -587,4 +587,21 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		}
 		return result;
 	}
+
+	@Override
+	public void pushTeacherExceptionAttendanceTask() {
+		//获取前一天的日期
+		Date date = new Date();
+		String format = DateUtil.format(DateUtil.addDays(date,-1), DateUtil.DEFAULT_PATTERN);
+		Set<Integer> teacherId = teacherAttendanceDao.queryTeacherExceptionAttendance(format);
+		if(teacherId == null || teacherId.size() == 0){
+			return;
+		}
+		Map<Integer,String> receivers = new HashMap(teacherId.size());
+		teacherId.forEach(e->{
+			receivers.put(e,e.toString());
+		});
+		String url = new StringBuffer("8?").append(sysConfigDao.findConfigValue(SysConfigService.TEACHER_BASE_URL)).append("/#/appealResult?date=").append(format).toString();
+		sysMessageService.batchSendMessage(MessageSender.JIGUANG,MessageTypeEnum.PUSH_TEACHER_EXCEPTION_ATTENDANCE,receivers,null,0,url,"TEACHER",format);
+	}
 }

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

@@ -1288,6 +1288,7 @@
         SELECT * FROM class_group WHERE music_group_id_=#{musicGroupId}
         <if test="classGroupIds != null">
             AND FIND_IN_SET(id_,#{classGroupIds})
+            AND total_class_times_ = 0
         </if>
         AND type_ IN ('HIGH','HIGH_ONLINE') AND del_flag_ = '0'
     </select>

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

@@ -270,8 +270,9 @@
 
     <!-- 查询班级某状态的所有学生 -->
     <select id="findClassStudentList" resultMap="com.ym.mec.biz.dal.dao.StudentRegistrationDao.StudentRegistration">
-        SELECT sr.* FROM class_group_student_mapper cgsm
+        SELECT sr.*,su.username_ FROM class_group_student_mapper cgsm
         LEFT JOIN student_registration sr ON (sr.user_id_ = cgsm.user_id_ AND sr.music_group_id_ = cgsm.music_group_id_)
+        LEFT JOIN sys_user su on sr.user_id_ = su.id_
         WHERE cgsm.class_group_id_ = #{classGroupId} AND sr.music_group_status_ != 'QUIT'
         AND cgsm.status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
     </select>

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

@@ -951,4 +951,11 @@
 		</foreach>
 		GROUP BY course_schedule_id_;
 	</select>
+    <select id="getHasTeacherSalaryCount" resultType="int">
+		SELECT COUNT(*) FROM course_schedule_teacher_salary
+		WHERE course_schedule_id_ IN
+		<foreach collection="courseScheduleIds" item="courseScheduleId" open="(" close=")" separator=",">
+			#{courseScheduleId}
+		</foreach>
+	</select>
 </mapper>

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

@@ -176,8 +176,8 @@
         <result column="teacher_name_" property="teacherName"/>
         <result column="organ_name_" property="organName"/>
         <result column="teacher_id_" property="teacherId"/>
-        <result column="sign_in_status_" property="signInStatus"/>
-        <result column="sign_out_status_" property="signOutStatus"/>
+        <result column="sign_in_status_" property="signInStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="sign_out_status_" property="signOutStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="sign_in_time_" property="signInTime"/>
         <result column="sign_out_time_" property="signOutTime"/>
         <result column="remark_" property="remark"/>
@@ -432,6 +432,12 @@
         LEFT JOIN course_schedule cs ON cs.id_ = ta.course_schedule_id_
         WHERE ta.course_schedule_id_ = #{courseId} AND ta.teacher_id_ = #{teacherId}
     </select>
+    <select id="queryTeacherExceptionAttendance" resultType="java.lang.Integer">
+        SELECT DISTINCT ta.teacher_id_ FROM teacher_attendance ta
+        LEFT JOIN course_schedule cs ON cs.id_ = ta.course_schedule_id_
+        WHERE cs.class_date_ = #{format} AND ta.teacher_id_ = cs.actual_teacher_id_
+        AND (ta.sign_in_status_ IS NULL OR ta.sign_in_status_ = 0 OR ta.sign_out_status_ IS NULL OR ta.sign_out_status_ = 0)
+    </select>
 
     <update id="updateViPSignOutStatus" parameterType="string">
     	UPDATE teacher_attendance SET sign_out_status_ = 1,sign_out_time_= now()

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

@@ -6,10 +6,16 @@ import org.springframework.web.bind.annotation.GetMapping;
 
 import com.ym.mec.common.config.FeignConfiguration;
 import com.ym.mec.task.fallback.TaskRemoteServiceFallback;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
 
 @FeignClient(name = "web-server", contextId = "TaskRemoteService", configuration = { FeignConfiguration.class }, fallback = TaskRemoteServiceFallback.class)
 public interface TaskRemoteService {
 
+	@GetMapping(value = "task/pushTeacherExceptionAttendanceTask")
+	// 教师异常考勤推送
+	public void pushTeacherExceptionAttendanceTask();
+
 	@GetMapping(value = "task/refreshPaymentFeeStatus")
 	// 刷新付费状态
 	public void refreshPaymentFeeStatus();

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

@@ -155,4 +155,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 	public void practiceGroupRenewRemind() {
 		logger.info("网管课续费提醒失败");
 	}
+
+	@Override
+	public void pushTeacherExceptionAttendanceTask() {
+		logger.info("教师异常考勤推送失败");
+	}
 }

+ 19 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/PushTeacherExceptionAttendanceTask.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 PushTeacherExceptionAttendanceTask extends BaseTask {
+
+	@Autowired
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.pushTeacherExceptionAttendanceTask();
+	}
+}

+ 53 - 2
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -81,8 +81,59 @@ public class ExportController extends BaseController {
     @Autowired
     private TeacherSalaryComplaintsService teacherSalaryComplaintsService;
     @Autowired
+    private TeacherAttendanceService teacherAttendanceService;
+    @Autowired
     private TeacherCourseRewardService teacherCourseRewardService;
 
+    @ApiOperation(value = "导出教师考勤列表")
+    @PostMapping("export/queryTeacherAttendances")
+    @PreAuthorize("@pcs.hasPermissions('export/queryTeacherAttendances')")
+    public void exportTeacherAttendances(HttpServletResponse response, TeacherCloseQueryInfo queryInfo) throws IOException {
+        queryInfo.setRows(49999);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+                queryInfo.setOrganId(employee.getOrganIdList());
+            }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+                throw new BizException("用户所在分部异常");
+            }else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                    throw new BizException("非法请求");
+                }
+            }
+        }
+        List rows = teacherAttendanceService.queryTeacherAttendances(queryInfo).getRows();
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "老师编号", "老师姓名", "课程编号", "课程名称", "上课日期",
+                    "课程开始时间","课程结束时间","课程类型","签到时间","签到状态","签退时间","签退状态","备注"}, new String[]{
+                    "organName", "teacherId", "teacherName", "courseScheduleId", "courseScheduleName", "classDate",
+                    "startClassTime", "endClassTime", "courseScheduleType", "signInTime", "signInStatus", "signOutTime", "signOutStatus",
+                    "remark"}, rows);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
     @ApiOperation(value = "导出申述处理列表")
     @PostMapping("export/teacherSalaryComplaints")
     @PreAuthorize("@pcs.hasPermissions('export/teacherSalaryComplaints')")
@@ -478,9 +529,9 @@ public class ExportController extends BaseController {
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部名称", "课程编号", "开始时间", "结束时间",
                     "班级名称", "班级声部", "课程名称", "课程类型", "教学模式",
-                    "教学点", "课程状态", "指导老师", "学员编号"}, new String[]{
+                    "教学点", "课程状态", "指导老师", "学员编号", "是否点名"}, new String[]{
                     "organName", "id", "startClassTime", "endClassTime", "classGroupName", "subjectName", "name",
-                    "groupType.desc", "teachMode.msg", "schoolName", "status.msg", "teacherName", "studentId"}, rows);
+                    "groupType.desc", "teachMode.msg", "schoolName", "status.msg", "teacherName", "studentId","isCallNames.msg"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             ouputStream = response.getOutputStream();

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

@@ -1,5 +1,24 @@
 package com.ym.mec.web.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+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.dao.EmployeeDao;
@@ -10,18 +29,6 @@ import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
 import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.exception.BizException;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
 
 @RequestMapping("musicGroup")
 @Api(tags = "乐团服务")

+ 5 - 3
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderDetailController.java

@@ -3,6 +3,7 @@ package com.ym.mec.web.controller;
 import com.ym.mec.biz.dal.page.MusicCalenderDetailQueryInfo;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderDetailService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -48,8 +49,9 @@ public class MusicGroupPaymentCalenderDetailController extends BaseController {
     @ApiOperation(value = "开启缴费")
     @PostMapping("/openPayment")
     @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalenderDetail/openPayment')")
-    public Object openPayment(String ids) {
-        musicGroupPaymentCalenderDetailService.openPayment(ids);
-        return succeed();
+    public HttpResponseResult openPayment(String ids) {
+        HttpResponseResult<Object> succeed = succeed();
+        succeed.setMsg(musicGroupPaymentCalenderDetailService.openPayment(ids));
+        return succeed;
     }
 }

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

@@ -246,6 +246,12 @@ public class TaskController extends BaseController {
 		musicGroupPaymentCalenderService.autoUpdateMusicGroupPaymentCalenderStatus();
 	}
 
+	// 推送教师异常考勤
+	@GetMapping("/pushTeacherExceptionAttendanceTask")
+	public void pushTeacherExceptionAttendanceTask() {
+		teacherAttendanceService.pushTeacherExceptionAttendanceTask();
+	}
+
 	//网管课续费提醒
 	@GetMapping("/practiceGroupRenewRemind")
 	public void practiceGroupRenewRemind(){

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott