liujc 2 years ago
parent
commit
694f8fe37d
34 changed files with 821 additions and 232 deletions
  1. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupQuitDao.java
  2. 15 189
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupQuit.java
  3. 34 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/school/EQuitGroupAuditStatusEnum.java
  4. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/SchoolStaffMapper.java
  5. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/school/dto/ClassesForDayDto.java
  6. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/school/dto/MusicGroupQuitDetailDto.java
  7. 35 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/school/dto/MusicGroupQuitPageDto.java
  8. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/school/page/MusicGroupQuitQueryInfo.java
  9. 85 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/SchoolStaffWrapper.java
  10. 27 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/StatGroupWrapper.java
  11. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseHomeworkService.java
  12. 41 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupQuitService.java
  13. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SchoolStaffService.java
  14. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseHomeworkServiceImpl.java
  15. 25 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  16. 110 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupQuitServiceImpl.java
  17. 55 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolStaffServiceImpl.java
  18. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  19. 2 2
      mec-biz/src/main/resources/config/mybatis/CooperationOrganLinkmanMapper.xml
  20. 3 0
      mec-biz/src/main/resources/config/mybatis/CooperationOrganMapper.xml
  21. 1 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  22. 51 3
      mec-biz/src/main/resources/config/mybatis/MusicGroupQuitMapper.xml
  23. 8 1
      mec-biz/src/main/resources/config/mybatis/SchoolStaffMapper.xml
  24. 17 1
      mec-common/common-core/src/main/java/com/ym/mec/common/controller/BaseController.java
  25. 10 0
      mec-common/common-core/src/main/java/com/ym/mec/common/exception/BizException.java
  26. 2 0
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  27. 12 2
      mec-web/src/main/java/com/ym/mec/web/controller/open/OpenSchoolController.java
  28. 2 4
      mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolClassGroupController.java
  29. 4 11
      mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolCourseScheduleController.java
  30. 55 0
      mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolMusicGroupQuitController.java
  31. 61 0
      mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolStaffController.java
  32. 53 0
      mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolStudentHomeworkController.java
  33. 5 7
      mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolTeacherAttendanceController.java
  34. 4 1
      mec-web/src/main/java/com/ym/mec/web/vo/SchoolStaffVo.java

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupQuitDao.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.MusicGroupQuit;
+import com.ym.mec.biz.dal.school.dto.MusicGroupQuitPageDto;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
@@ -50,4 +51,22 @@ public interface MusicGroupQuitDao extends BaseDAO<Long, MusicGroupQuit> {
      * @return
      */
     List<Map<Integer, Long>> queryQuitMapByStudentId(@Param("studentIds") Set<Long> studentIds, @Param("musicGroupId") String musicGroupId);
+
+    /**
+    * @description: 获取学校端退团审批列表
+     * @param params
+    * @return int
+    * @author zx
+    * @date 2023/5/11 09:38
+    */
+    int countBySchool(Map<String, Object> params);
+
+    /**
+    * @description: 获取学校端退团审批列表
+     * @param params
+    * @return java.util.List<com.ym.mec.biz.dal.school.dto.MusicGroupQuitPageDto>
+    * @author zx
+    * @date 2023/5/11 09:39
+    */
+    List<MusicGroupQuitPageDto> queryPageBySchool(Map<String, Object> params);
 }

+ 15 - 189
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupQuit.java

@@ -1,9 +1,12 @@
 package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.enums.school.EQuitGroupAuditStatusEnum;
 import com.ym.mec.common.entity.BaseEntity;
 import com.ym.mec.common.enums.BaseEnum;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
@@ -12,7 +15,8 @@ import java.util.Date;
 /**
  * 对应数据库表(music_group_quit):
  */
-public class MusicGroupQuit extends BaseEntity {
+@Data
+public class MusicGroupQuit {
 
 	/**  */
 	private Long id;
@@ -69,6 +73,15 @@ public class MusicGroupQuit extends BaseEntity {
 	@ApiModelProperty(value = "云教练金额",required = false)
 	private BigDecimal cloudTeacherAmount = BigDecimal.ZERO;
 
+	@ApiModelProperty(value = "学校审核人",required = false)
+	private Integer auditSchoolStaff;
+
+	@ApiModelProperty(value = "学校审核状态",required = false)
+	private EQuitGroupAuditStatusEnum schoolStaffAuditStatus;
+
+	@ApiModelProperty(value = "学校审核原因",required = true)
+	private String schoolStaffAuditReason;
+
 	//毕业、不感兴趣、时间冲突、身体不适、其他(必选)
 	public enum ReasonEnum implements BaseEnum<String, MusicGroupQuit.ReasonEnum> {
 		GRADUATE("GRADUATE", "毕业"),
@@ -96,192 +109,5 @@ public class MusicGroupQuit extends BaseEntity {
 		}
 	}
 
-	public Integer getOperatorId() {
-		return operatorId;
-	}
-
-	public void setOperatorId(Integer operatorId) {
-		this.operatorId = operatorId;
-	}
-
-	public ReasonEnum getReasonEnum() {
-		return reasonEnum;
-	}
-
-	public void setReasonEnum(ReasonEnum reasonEnum) {
-		this.reasonEnum = reasonEnum;
-	}
-
-	public String getApplyUserName() {
-		return applyUserName;
-	}
-
-	public void setApplyUserName(String applyUserName) {
-		this.applyUserName = applyUserName;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public Long getId() {
-		return this.id;
-	}
-
-	public void setUserId(Integer userId) {
-		this.userId = userId;
-	}
-
-	public Integer getUserId() {
-		return this.userId;
-	}
-
-	public void setMusicGroupId(String musicGroupId) {
-		this.musicGroupId = musicGroupId;
-	}
-
-	public String getMusicGroupId() {
-		return this.musicGroupId;
-	}
-
-	public void setJoinDate(java.util.Date joinDate) {
-		this.joinDate = joinDate;
-	}
-
-	public java.util.Date getJoinDate() {
-		return this.joinDate;
-	}
-
-	public void setQuitDate(java.util.Date quitDate) {
-		this.quitDate = quitDate;
-	}
-
-	public java.util.Date getQuitDate() {
-		return this.quitDate;
-	}
-
-	public void setCreateTime(java.util.Date createTime) {
-		this.createTime = createTime;
-	}
-
-	public java.util.Date getCreateTime() {
-		return this.createTime;
-	}
-
-	public void setReason(String reason) {
-		this.reason = reason;
-	}
-
-	public String getReason() {
-		return this.reason;
-	}
-
-	public String getUserComment() {
-		return userComment;
-	}
-
-	public void setUserComment(String userComment) {
-		this.userComment = userComment;
-	}
-
-	public ApprovalStatus getStatus() {
-		return status;
-	}
-
-	public void setStatus(ApprovalStatus status) {
-		this.status = status;
-	}
-
-	public SysUser getUser() {
-		return user;
-	}
-
-	public void setUser(SysUser user) {
-		this.user = user;
-	}
-
-	public MusicGroup getMusicGroup() {
-		return musicGroup;
-	}
-
-	public void setMusicGroup(MusicGroup musicGroup) {
-		this.musicGroup = musicGroup;
-	}
-
-	public Integer getApplyUserId() {
-		return applyUserId;
-	}
-
-	public void setApplyUserId(Integer applyUserId) {
-		this.applyUserId = applyUserId;
-	}
-
-	public Boolean getIsVisit() {
-		return isVisit;
-	}
-
-	public void setIsVisit(Boolean isVisit) {
-		this.isVisit = isVisit;
-	}
-
-	public Date getVisitTime() {
-		return visitTime;
-	}
-
-	public void setVisitTime(Date visitTime) {
-		this.visitTime = visitTime;
-	}
-
-	public String getFeeJson() {
-		return feeJson;
-	}
-
-	public void setFeeJson(String feeJson) {
-		this.feeJson = feeJson;
-	}
-
-	public String getCurrentApproveRole() {
-		return currentApproveRole;
-	}
-
-	public void setCurrentApproveRole(String currentApproveRole) {
-		this.currentApproveRole = currentApproveRole;
-	}
-
-	@Override
-	public String toString() {
-		return ToStringBuilder.reflectionToString(this);
-	}
-
-	public Boolean getHasMaintenance() {
-		return hasMaintenance;
-	}
-
-	public void setHasMaintenance(Boolean hasMaintenance) {
-		this.hasMaintenance = hasMaintenance;
-	}
-
-	public BigDecimal getCloudTeacherAmount() {
-		return cloudTeacherAmount;
-	}
-
-	public void setCloudTeacherAmount(BigDecimal cloudTeacherAmount) {
-		this.cloudTeacherAmount = cloudTeacherAmount;
-	}
-
-	public MusicGroupReturnFeeDto getReturnFeeDto() {
-		return returnFeeDto;
-	}
-
-	public void setReturnFeeDto(MusicGroupReturnFeeDto returnFeeDto) {
-		this.returnFeeDto = returnFeeDto;
-	}
-
-	public BigDecimal getReturnTotalFee() {
-		return returnTotalFee;
-	}
-
-	public void setReturnTotalFee(BigDecimal returnTotalFee) {
-		this.returnTotalFee = returnTotalFee;
-	}
+	private Integer tenantId = TenantContextHolder.getTenantId();
 }

+ 34 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/school/EQuitGroupAuditStatusEnum.java

@@ -0,0 +1,34 @@
+package com.ym.mec.biz.dal.enums.school;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.google.common.collect.Lists;
+import com.ym.mec.common.enums.BaseEnum;
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+
+@Getter
+public enum EQuitGroupAuditStatusEnum implements BaseEnum<String, EQuitGroupAuditStatusEnum> {
+
+	ING("待审核"),
+	PASS("审核通过"),
+	REJECT("拒绝"),
+	;
+
+	private final String describe;
+
+	@EnumValue
+	private final String code;
+
+	EQuitGroupAuditStatusEnum(String describe) {
+		this.describe = describe;
+
+		this.code = this.name();
+	}
+
+	@Override
+	public String getCode() {
+		return this.name();
+	}
+}

+ 8 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/SchoolStaffMapper.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ym.mec.biz.dal.wrapper.StatGroupWrapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 import com.ym.mec.biz.dal.entity.SchoolStaff;
@@ -23,5 +24,11 @@ public interface SchoolStaffMapper extends BaseMapper<SchoolStaff> {
 	 * @return List<SchoolStaffWrapper.SchoolStaff>
 	 */
 	List<SchoolStaffWrapper.SchoolStaff> selectPage(@Param("page") IPage<SchoolStaffWrapper.SchoolStaff> page, @Param("param") SchoolStaffWrapper.SchoolStaffQuery param);
-	
+
+	/**
+	 * 学校员工身份数统计
+	 * @param schoolId 学校Id
+	 * @return List<StatGroupWrapper>
+	 */
+    List<StatGroupWrapper> selectUserTypeNumsStat(@Param("schoolId") Integer schoolId);
 }

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

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.school.dto;
 
 import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -50,4 +51,13 @@ public class ClassesForDayDto {
 
     @ApiModelProperty(value = "退学人数",required = false)
     private Integer attendanceDropNum;
+
+    @ApiModelProperty(value = "教学模式",required = false)
+    private TeachModeEnum teachMode;
+
+    @ApiModelProperty(value = "作业类型,HOMEWORK,LESSON",required = false)
+    private String homeworkType;
+
+    @ApiModelProperty(value = "作业编号",required = false)
+    private Long homeworkId;
 }

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

@@ -0,0 +1,21 @@
+package com.ym.mec.biz.dal.school.dto;
+
+import com.ym.mec.biz.dal.entity.MusicGroupQuit;
+import com.ym.mec.biz.dal.enums.school.EQuitGroupAuditStatusEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class MusicGroupQuitDetailDto extends MusicGroupQuitPageDto{
+
+    @ApiModelProperty(value = "审核原因",required = true)
+    private String schoolStaffAuditReason;
+
+    @ApiModelProperty(value = "学员退团原因",required = true)
+    private String userComment;
+
+    @ApiModelProperty(value = "学员编号",required = true)
+    private MusicGroupQuit.ReasonEnum reasonEnum;
+}

+ 35 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/school/dto/MusicGroupQuitPageDto.java

@@ -0,0 +1,35 @@
+package com.ym.mec.biz.dal.school.dto;
+
+import com.ym.mec.biz.dal.enums.school.EQuitGroupAuditStatusEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class MusicGroupQuitPageDto {
+
+    @ApiModelProperty(value = "审核状态",required = true)
+    private EQuitGroupAuditStatusEnum status;
+
+    @ApiModelProperty(value = "提交时间",required = true)
+    private Date createTime;
+
+    @ApiModelProperty(value = "学员编号",required = true)
+    private Integer studentId;
+
+    @ApiModelProperty(value = "学员名称",required = true)
+    private String studentName;
+
+    @ApiModelProperty(value = "学员头像",required = true)
+    private String studentAvatar;
+
+    @ApiModelProperty(value = "声部",required = true)
+    private Integer subjectId;
+
+    @ApiModelProperty(value = "声部",required = true)
+    private String subjectName;
+
+    @ApiModelProperty(value = "退团id",required = true)
+    private Long musicGroupQuitId;
+}

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/school/page/MusicGroupQuitQueryInfo.java

@@ -0,0 +1,16 @@
+package com.ym.mec.biz.dal.school.page;
+
+import com.ym.mec.biz.dal.enums.school.EQuitGroupAuditStatusEnum;
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class MusicGroupQuitQueryInfo  extends QueryInfo {
+
+    @ApiModelProperty(value = "审核状态",required = true)
+    private EQuitGroupAuditStatusEnum status;
+
+    @ApiModelProperty(value = "合作单位编号",required = true)
+    private Integer coopId;
+}

+ 85 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/SchoolStaffWrapper.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.wrapper;
 import com.alibaba.fastjson.JSON;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.ym.mec.auth.api.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import io.swagger.annotations.ApiModel;
@@ -12,8 +13,8 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
 
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
@@ -103,6 +104,9 @@ public class SchoolStaffWrapper {
 
         @ApiModelProperty("用户头像")
         private String avatar;
+
+        @ApiModelProperty("验证码")
+        private String smsCode;
         
         public String jsonString() {
             return JSON.toJSONString(this);
@@ -273,4 +277,84 @@ public class SchoolStaffWrapper {
             return this;
         }
     }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("学校统计信息")
+    public static class SchoolStaffStat implements Serializable {
+
+        @ApiModelProperty("校长数")
+        private Integer schoolmasterNums;
+
+        @ApiModelProperty("分管领导数")
+        private Integer schoolLeaderNums;
+
+        @ApiModelProperty("乐团领队")
+        private Integer orchestraLeaderNums;
+
+        @ApiModelProperty("负责老师数")
+        private Integer teacherNums;
+
+        @ApiModelProperty("乐团数")
+        private Integer orchestraNums;
+
+        @ApiModelProperty("在读学员数")
+        private Integer studentNums;
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("学校合作单位")
+    public static class SchoolCooperation implements Serializable {
+
+        @ApiModelProperty("合作单位")
+        private CooperationOrgan cooperation;
+
+        @ApiModelProperty("员工身份统计")
+        private SchoolStaffStat staffStat;
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("合作单位")
+    public static class Cooperation implements Serializable {
+
+        @ApiModelProperty("合作单位编号")
+        private Integer id;
+
+        @ApiModelProperty("合作单位logo")
+        private String logo;
+
+        @ApiModelProperty("合作单位名称")
+        private String name;
+
+        @ApiModelProperty("更新时间")
+        private Date updateTime;
+
+        @ApiModelProperty("机构编号")
+        private Integer tenantId;
+
+        public Date getUpdateTime() {
+            return Optional.ofNullable(updateTime).orElse(DateTime.now().toDate());
+        }
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public Integer getTenantId() {
+            return Optional.ofNullable(tenantId).orElse(TenantContextHolder.getTenantId());
+        }
+
+        public Cooperation tenantId(Integer tenantId) {
+            this.tenantId = tenantId;
+            return this;
+        }
+    }
 }

+ 27 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/StatGroupWrapper.java

@@ -0,0 +1,27 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 分组统计指标
+ * Created by Eric.Shang on 28/7/17.
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class StatGroupWrapper implements Serializable {
+
+    private Long id;
+    private Integer total;
+    private String gid; // 字符串分组ID
+
+    private Double number;
+
+}

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseHomeworkService.java

@@ -70,4 +70,13 @@ public interface CourseHomeworkService extends BaseService<Long, CourseHomework>
      * @param extraId 作业id
      */
     CourseHomeworkWrapper.CourseHomeworkList findCourseExtraHomeworkDetail(Integer extraId);
+
+	/**
+	* @description: 获取课程关联的课后作业
+	 * @param courseIds
+	* @return java.util.List<com.ym.mec.biz.dal.entity.CourseHomework>
+	* @author zx
+	* @date 2023/5/11 11:30
+	*/
+	List<CourseHomework> findHomeworkByCourse(List<Long> courseIds);
 }

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupQuitService.java

@@ -1,8 +1,49 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.entity.MusicGroupQuit;
+import com.ym.mec.biz.dal.school.dto.MusicGroupQuitDetailDto;
+import com.ym.mec.biz.dal.school.dto.MusicGroupQuitPageDto;
+import com.ym.mec.biz.dal.school.page.MusicGroupQuitQueryInfo;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
+
 public interface MusicGroupQuitService extends BaseService<Long, MusicGroupQuit> {
 
+    /**
+    * @description: 学校端退团审批列表
+     * @param queryInfo
+    * @return java.util.List<com.ym.mec.biz.dal.school.dto.MusicGroupQuitPageDto>
+    * @author zx
+    * @date 2023/5/10 19:03
+    */
+    PageInfo<MusicGroupQuitPageDto> queryPageBySchool(MusicGroupQuitQueryInfo queryInfo);
+
+    /**
+    * @description: 获取退团详情
+     * @param musicGroupQuitId
+    * @return com.ym.mec.biz.dal.school.dto.MusicGroupQuitDetailDto
+    * @author zx
+    * @date 2023/5/11 13:57
+    */
+    MusicGroupQuitDetailDto getDetailBySchool(Long musicGroupQuitId);
+
+    /**
+    * @description: 学校退团审批通过
+     * @param musicGroupQuitId
+    * @return void
+    * @author zx
+    * @date 2023/5/11 14:08
+    */
+    void auditPassBySchool(Long musicGroupQuitId,String reason);
+
+    /**
+    * @description: 学校退团审批拒绝
+     * @param musicGroupQuitId
+    * @return void
+    * @author zx
+    * @date 2023/5/11 14:08
+    */
+    void auditRejectBySchool(Long musicGroupQuitId,String reason);
 }

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SchoolStaffService.java

@@ -55,4 +55,17 @@ public interface SchoolStaffService extends IService<SchoolStaff>  {
      * @return List<SchoolStaffWrapper.SchoolStaff>
      */
     List<SchoolStaffWrapper.SchoolStaff> getAllStaffsBySchoolId(Long userId);
+
+    /**
+     * 根据用户ID获取学校所有员工身份
+     * @param schoolId 学校ID
+     * @return SchoolStaffWrapper.SchoolStaffStat
+     */
+    SchoolStaffWrapper.SchoolStaffStat getUserTypeStatByCooperationId(Integer schoolId);
+
+    /***
+     * 更新合作单位信息
+     * @param info SchoolStaffWrapper.Cooperation
+     */
+    void updateCooperation(SchoolStaffWrapper.Cooperation info);
 }

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

@@ -306,4 +306,9 @@ public class CourseHomeworkServiceImpl extends BaseServiceImpl<Long, CourseHomew
         courseHomeworkList.setTrainingDetailList(baseLessonTrainingDetail);
         return courseHomeworkList;
     }
+
+	@Override
+	public List<CourseHomework> findHomeworkByCourse(List<Long> courseIds) {
+		return courseHomeworkDao.findByCourseSchedules(courseIds);
+	}
 }

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

@@ -178,15 +178,14 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	private StudentTeacherMapperService studentTeacherMapperService;
     @Autowired
 	private CourseScheduleConvertDao courseScheduleConvertDao;
-
     @Autowired
     private CourseSchedulePlusMapper courseSchedulePlusMapper;
-
     @Autowired
     private TeacherService teacherService;
-
     @Autowired
     private TeacherAttendanceService teacherAttendanceService;
+    @Autowired
+    private LessonExaminationService lessonExaminationService;
 
     private final Logger LOGGER = LoggerFactory
             .getLogger(this.getClass());
@@ -6213,6 +6212,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			List<Integer> studentIds = courseStudentDtos.stream().map(e -> e.getStudentId()).collect(Collectors.toList());
 			List<SimpleUserDto> usersSimpleInfo = teacherDao.getUsersSimpleInfo(studentIds);
 			Map<Integer, SimpleUserDto> simpleUserDtoMap = usersSimpleInfo.stream().collect(Collectors.groupingBy(e -> e.getUserId(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
+			//获取
 			for (CourseStudentDto dto : courseStudentDtos) {
 				SimpleUserDto userDto = simpleUserDtoMap.get(dto.getStudentId());
 				if(Objects.nonNull(userDto)){
@@ -6237,6 +6237,18 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			List<Long> courseIds = listClassesForDay.stream().map(e -> e.getCourseId()).collect(Collectors.toList());
 			List<ClassesForDayDto> dtoList = studentAttendanceDao.statisticalAttendanceInformation(courseIds);
 			Map<Long, ClassesForDayDto> dtoMap = dtoList.stream().collect(Collectors.groupingBy(e -> e.getCourseId(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
+			//获取课程关联的作业
+			List<CourseHomework> homeworks = courseHomeworkService.findHomeworkByCourse(courseIds);
+			Map<Long, Long> homeworkMap = new HashMap<>();
+			if(CollectionUtils.isNotEmpty(homeworks)){
+				homeworkMap = homeworks.stream().collect(Collectors.groupingBy(e -> e.getCourseScheduleId(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0).getId())));
+			}
+			//获取课程关联的测评
+			List<LessonExamination> lessonExaminations = lessonExaminationService.lambdaQuery().in(LessonExamination::getCourseScheduleId, courseIds).list();
+			Map<Long, Long> examinationMap = new HashMap<>();
+			if(CollectionUtils.isNotEmpty(lessonExaminations)){
+				examinationMap = lessonExaminations.stream().collect(Collectors.groupingBy(e -> e.getCourseScheduleId(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0).getId())));
+			}
 			for (ClassesForDayDto dto : listClassesForDay) {
 				SimpleUserDto userDto = simpleUserDtoMap.get(dto.getTeacherId());
 				if(Objects.nonNull(userDto)){
@@ -6253,6 +6265,16 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					dto.setAttendanceTruantNum(dayDto.getAttendanceTruantNum());
 					dto.setAttendanceDropNum(dayDto.getAttendanceDropNum());
 				}
+				Long homeworkId = homeworkMap.get(dayDto.getCourseId());
+				if(homeworkId != null){
+					dto.setHomeworkType("HOMEWORK");
+					dto.setHomeworkId(homeworkId);
+				}
+				Long lessonId = examinationMap.get(dayDto.getCourseId());
+				if(lessonId != null){
+					dto.setHomeworkType("LESSON");
+					dto.setHomeworkId(lessonId);
+				}
 			}
 		}
 	}

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

@@ -1,5 +1,20 @@
 package com.ym.mec.biz.service.impl;
 
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.SubjectDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.enums.school.EQuitGroupAuditStatusEnum;
+import com.ym.mec.biz.dal.school.dto.MusicGroupQuitDetailDto;
+import com.ym.mec.biz.dal.school.dto.MusicGroupQuitPageDto;
+import com.ym.mec.biz.dal.school.page.MusicGroupQuitQueryInfo;
+import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.util.collection.MapUtil;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -8,16 +23,110 @@ import com.ym.mec.biz.dal.entity.MusicGroupQuit;
 import com.ym.mec.biz.service.MusicGroupQuitService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class MusicGroupQuitServiceImpl extends BaseServiceImpl<Long, MusicGroupQuit>  implements MusicGroupQuitService {
 	
 	@Autowired
 	private MusicGroupQuitDao musicGroupQuitDao;
+	@Autowired
+	private TeacherDao teacherDao;
+	@Autowired
+	private SubjectDao subjectDao;
+	@Autowired
+	private StudentRegistrationDao studentRegistrationDao;
+	@Autowired
+	private SysUserService sysUserService;
 
 	@Override
 	public BaseDAO<Long, MusicGroupQuit> getDAO() {
 		return musicGroupQuitDao;
 	}
-	
+
+    @Override
+    public PageInfo<MusicGroupQuitPageDto> queryPageBySchool(MusicGroupQuitQueryInfo queryInfo) {
+		PageInfo<MusicGroupQuitPageDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<MusicGroupQuitPageDto> dataList = null;
+		int count = musicGroupQuitDao.countBySchool(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = musicGroupQuitDao.queryPageBySchool(params);
+			if(CollectionUtils.isNotEmpty(dataList)){
+				List<Integer> studentIds = dataList.stream().map(e -> e.getStudentId()).collect(Collectors.toList());
+				List<SimpleUserDto> usersSimpleInfo = teacherDao.getUsersSimpleInfo(studentIds);
+				Map<Integer, SimpleUserDto> simpleUserDtoMap = usersSimpleInfo.stream().collect(Collectors.groupingBy(e -> e.getUserId(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
+				List<Integer> subjectIds = dataList.stream().map(e -> e.getSubjectId()).distinct().collect(Collectors.toList());
+				Map<Integer, String> subjectNameMap = subjectDao.findBySubjectIds(subjectIds).stream().collect(Collectors.groupingBy(e -> e.getId(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0).getName())));
+				for (MusicGroupQuitPageDto dto : dataList) {
+					dto.setSubjectName(subjectNameMap.get(dto.getSubjectId()));
+					SimpleUserDto userDto = simpleUserDtoMap.get(dto.getStudentId());
+					if(Objects.nonNull(userDto)){
+						dto.setStudentAvatar(userDto.getAvatar());
+						dto.setStudentName(userDto.getNickName());
+					}
+				}
+			}
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+    }
+
+    @Override
+    public MusicGroupQuitDetailDto getDetailBySchool(Long musicGroupQuitId) {
+		MusicGroupQuit musicGroupQuit = musicGroupQuitDao.get(musicGroupQuitId);
+		if(Objects.isNull(musicGroupQuit)){
+			throw new BizException("退团申请不存在");
+		}
+		MusicGroupQuitDetailDto detailDto = new MusicGroupQuitDetailDto();
+		StudentRegistration studentRegistration = studentRegistrationDao.getStudentRegister(musicGroupQuit.getMusicGroupId(),musicGroupQuit.getUserId());
+		Subject subject = subjectDao.get(studentRegistration.getActualSubjectId());
+		SimpleUserDto simpleUser = teacherDao.getSimpleUser(musicGroupQuit.getUserId());
+		detailDto.setStudentId(musicGroupQuit.getUserId());
+		detailDto.setReasonEnum(musicGroupQuit.getReasonEnum());
+		detailDto.setUserComment(musicGroupQuit.getUserComment());
+		detailDto.setSchoolStaffAuditReason(musicGroupQuit.getSchoolStaffAuditReason());
+		detailDto.setStudentName(simpleUser.getNickName());
+		detailDto.setStudentAvatar(simpleUser.getAvatar());
+		detailDto.setCreateTime(musicGroupQuit.getCreateTime());
+		detailDto.setSubjectName(subject.getName());
+		return detailDto;
+    }
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void auditPassBySchool(Long musicGroupQuitId,String reason) {
+		this.schoolAudit(musicGroupQuitId,reason,EQuitGroupAuditStatusEnum.PASS);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void auditRejectBySchool(Long musicGroupQuitId,String reason) {
+		this.schoolAudit(musicGroupQuitId,reason,EQuitGroupAuditStatusEnum.REJECT);
+	}
+
+	public void schoolAudit(Long musicGroupQuitId,String reason,EQuitGroupAuditStatusEnum status){
+		MusicGroupQuit musicGroupQuit = musicGroupQuitDao.get(musicGroupQuitId);
+		if(Objects.isNull(musicGroupQuit)){
+			throw new BizException("退团申请不存在");
+		}
+		if(musicGroupQuit.getSchoolStaffAuditStatus() != EQuitGroupAuditStatusEnum.ING){
+			throw new BizException("当前审批状态不支持此操作");
+		}
+		Integer userId = sysUserService.getUserId();
+		musicGroupQuit.setAuditSchoolStaff(userId);
+		musicGroupQuit.setSchoolStaffAuditStatus(status);
+		musicGroupQuit.setSchoolStaffAuditReason(reason);
+		musicGroupQuitDao.update(musicGroupQuit);
+	}
 }

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

@@ -10,6 +10,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.enums.SysUserType;
 import com.ym.mec.auth.api.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.dao.SysMessageConfigDao;
+import com.ym.mec.biz.dal.dao.CooperationOrganDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.dal.entity.SchoolStaff;
@@ -19,8 +20,10 @@ import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
 import com.ym.mec.biz.dal.mapper.SchoolStaffMapper;
 import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
+import com.ym.mec.biz.dal.wrapper.StatGroupWrapper;
 import com.ym.mec.biz.service.CooperationOrganService;
 import com.ym.mec.biz.service.SchoolStaffService;
+import com.ym.mec.biz.service.SmsCodeService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.exception.BizException;
@@ -33,6 +36,7 @@ import org.joda.time.DateTime;
 import org.redisson.api.RBucket;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -58,6 +62,14 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
     private TeacherDao teacherDao;
     @Autowired
     private SysConfigService sysConfigService;
+    @Autowired
+    private CooperationOrganDao cooperationOrganDao;
+    @Autowired
+    private SmsCodeService smsCodeService;
+
+
+    @Value("${message.debugMode:false}")
+    private boolean debugMode;
 
     @Autowired
     private SysMessageService sysMessageService;
@@ -107,6 +119,13 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
             throw new BizException("请勿重复提交");
         }
 
+        // 验证码合法性校验
+        if(smsCodeService.verifyValidCode(schoolStaff.getMobile(), schoolStaff.getSmsCode())
+                && !debugMode) {
+
+            throw new BizException("验证码错误");
+        }
+
         // 合作单位编号
         CooperationOrgan cooperation = cooperationOrganService.get(schoolStaff.getSchoolId().intValue());
         if (Objects.isNull(cooperation)) {
@@ -230,7 +249,7 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
         if (Objects.nonNull(user)) {
             // 学校员工帐号平台惟一,不能与其他帐号共存
             if (StringUtils.isNotBlank(user.getUserType())) {
-                throw new BizException("帐号已存在");
+                throw new BizException(999, "帐号已存在");
             }
 
             // 后续流程暂时忽略,用户允许存在多个身份时才走以下创建账号流程
@@ -376,4 +395,39 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
         return sorted;
     }
 
+    /**
+     * 根据用户ID获取学校所有员工身份
+     *
+     * @param schoolId 学校ID
+     * @return SchoolStaffWrapper.SchoolStaffStat
+     */
+    @Override
+    public SchoolStaffWrapper.SchoolStaffStat getUserTypeStatByCooperationId(Integer schoolId) {
+
+        Map<String, Integer> collect = baseMapper.selectUserTypeNumsStat(schoolId).stream()
+                .collect(Collectors.toMap(StatGroupWrapper::getGid, StatGroupWrapper::getTotal, (o, n) -> n));
+
+        // 统计学校员工身份
+        return SchoolStaffWrapper.SchoolStaffStat.builder()
+                .schoolmasterNums(collect.getOrDefault(ESchoolStaffType.SCHOOLMASTER.getCode(), 0))
+                .schoolLeaderNums(collect.getOrDefault(ESchoolStaffType.SCHOOL_LEADER.getCode(), 0))
+                .orchestraNums(collect.getOrDefault(ESchoolStaffType.ORCHESTRA_LEADER.getCode(), 0))
+                .teacherNums(collect.getOrDefault(ESchoolStaffType.TEACHER.getCode(), 0))
+                .orchestraNums(0)
+                .studentNums(0)
+                .build();
+    }
+
+    /***
+     * 更新合作单位信息
+     * @param info SchoolStaffWrapper.Cooperation
+     */
+    @Override
+    public void updateCooperation(SchoolStaffWrapper.Cooperation info) {
+
+        // 合作单位信息
+        cooperationOrganDao.update(JSON.parseObject(info.jsonString(), CooperationOrgan.class));
+    }
+
+
 }

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

@@ -1193,18 +1193,18 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			info.setStartTerm(monday);
 			info.setEndTerm(sunday);
 			info.setMusicGroupIds(queryInfo.getMusicGroupIds());
-			Map<Integer,Integer> weekCount = MapUtil.convertIntegerMap(teacherAttendanceDao.queryTeacherAttendanceForWeek(info));
+			Map<Integer,Long> weekCount = MapUtil.convertIntegerMap(teacherAttendanceDao.queryTeacherAttendanceForWeek(info));
 			for (TeacherAttendanceSumDto dto : dtoList) {
 				SimpleUserDto userDto = simpleUserDtoMap.get(dto.getTeacherId());
 				if(Objects.nonNull(userDto)){
 					dto.setTeacherName(userDto.getUserName());
 					dto.setTeacherAvatar(userDto.getAvatar());
 				}
-				Integer errCourseNum = weekCount.get(dto.getTeacherId());
+				Long errCourseNum = weekCount.get(dto.getTeacherId());
 				if(errCourseNum == null){
 					dto.setTeacherAttendanceStatus(TeacherAttendanceQueryInfo.TeacherAttendanceEnum.NO_COURSE);
 				}else {
-					if(errCourseNum > 0){
+					if(errCourseNum > 0L){
 						dto.setTeacherAttendanceStatus(TeacherAttendanceQueryInfo.TeacherAttendanceEnum.ERR);
 					}else {
 						dto.setTeacherAttendanceStatus(TeacherAttendanceQueryInfo.TeacherAttendanceEnum.NORMAL);

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

@@ -38,10 +38,10 @@
 	
 	<insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO cooperation_organ_linkman
-		(id_,cooperation_organ_id_,linkman_,mobile_no_,job_,create_time_,tenant_id_,logo_)
+		(id_,cooperation_organ_id_,linkman_,mobile_no_,job_,create_time_,tenant_id_)
 		VALUES
 		<foreach collection="list" item="item" separator=",">
-		(#{item.id},#{item.cooperationOrganId},#{item.linkman},#{item.mobileNo},#{item.job},#{item.createTime},#{item.tenantId},#{item.logo})
+		(#{item.id},#{item.cooperationOrganId},#{item.linkman},#{item.mobileNo},#{item.job},#{item.createTime},#{item.tenantId})
 		</foreach>
 	</insert>
 

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/CooperationOrganMapper.xml

@@ -94,6 +94,9 @@
             <if test="isEnable != null">
                 is_enable_ = #{isEnable},
             </if>
+            <if test="logo != null">
+                logo_ = #{logo},
+            </if>
         </set>
         WHERE id_ = #{id} and tenant_id_ = #{tenantId}
     </update>

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

@@ -4238,7 +4238,7 @@
     </select>
     <select id="getListClassesForDay" resultType="com.ym.mec.biz.dal.school.dto.ClassesForDayDto">
         select cs.id_ courseId,CONCAT(cs.class_date_,' ',cs.start_class_time_,'~',cs.end_class_time_) classDate,cs.status_ courseStatus,cs.name_ courseName,
-        actual_teacher_id_ teacherId,cs.music_group_id_ musicGroupId
+        actual_teacher_id_ teacherId,cs.music_group_id_ musicGroupId,cs.teach_mode_ teachMode
         from course_schedule cs
         where cs.group_type_ = 'MUSIC' AND cs.is_lock_ = 0 AND cs.del_flag_ = 0 AND cs.pre_course_flag_ = 0 AND cs.new_course_id_ IS NULL
         <if test="classDate != null and classDate != ''">

+ 51 - 3
mec-biz/src/main/resources/config/mybatis/MusicGroupQuitMapper.xml

@@ -21,6 +21,9 @@
         <result column="fee_json_" property="feeJson"/>
         <result column="current_approve_role_" property="currentApproveRole"/>
         <result column="apply_user_id_" property="applyUserId"/>
+        <result column="audit_school_staff_" property="auditSchoolStaff"/>
+        <result column="school_staff_audit_status_" property="schoolStaffAuditStatus"/>
+        <result column="school_staff_audit_reason_" property="schoolStaffAuditReason"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <association property="musicGroup" javaType="com.ym.mec.biz.dal.entity.MusicGroup">
             <result column="music_group_name_" property="name"/>
@@ -51,10 +54,12 @@
             useGeneratedKeys="true" keyColumn="id" keyProperty="id">
         INSERT INTO music_group_quit
         (id_,user_id_,music_group_id_,join_date_,quit_date_,create_time_,reason_,user_comment_,status_,
-         apply_user_id_,is_visit_,visit_time_,fee_json_,current_approve_role_,return_total_fee_,tenant_id_,reason_enum_)
+         apply_user_id_,is_visit_,visit_time_,fee_json_,current_approve_role_,return_total_fee_,tenant_id_,
+         reason_enum_,audit_school_staff_,school_staff_audit_status_,school_staff_audit_reason_)
         VALUES(#{id},#{userId},#{musicGroupId},#{joinDate},#{quitDate},#{createTime},#{reason},#{userComment},
         #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{applyUserId},#{isVisit},#{visitTime},
-               #{feeJson},#{currentApproveRole},#{returnTotalFee},#{tenantId},#{reasonEnum,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+               #{feeJson},#{currentApproveRole},#{returnTotalFee},#{tenantId},#{reasonEnum,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+               #{auditSchoolStaff},#{schoolStaffAuditStatus},#{schoolStaffAuditReason})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -67,6 +72,15 @@
             <if test="userId != null">
                 user_id_ = #{userId},
             </if>
+            <if test="schoolStaffAuditReason != null and schoolStaffAuditReason != ''">
+                school_staff_audit_reason_ = #{schoolStaffAuditReason},
+            </if>
+            <if test="auditSchoolStaff != null">
+                audit_school_staff_ = #{auditSchoolStaff},
+            </if>
+            <if test="schoolStaffAuditStatus != null">
+                school_staff_audit_status_ = #{schoolStaffAuditStatus},
+            </if>
             <if test="joinDate != null">
                 join_date_ = #{joinDate},
             </if>
@@ -124,7 +138,7 @@
     </select>
     <sql id="queryPageSql">
         <where>
-        	mgq.tenant_id_ = #{tenantId}
+        	mgq.tenant_id_ = #{tenantId} AND (mgq.school_staff_audit_status_ IS NULL OR mgq.school_staff_audit_status_ = 'PASS')
             <if test="ids != null and ids != ''">
                 AND FIND_IN_SET(mgq.id_,#{ids})
             </if>
@@ -197,4 +211,38 @@
         AND music_group_id_ = #{musicGroupId} AND status_ = 'PROCESSING'
         GROUP BY user_id_
     </select>
+    <select id="queryPageBySchool" resultType="com.ym.mec.biz.dal.school.dto.MusicGroupQuitPageDto">
+        select mgq.user_id_ studentId,mgq.create_time_ createTime,mgq.school_staff_audit_status_ status,
+               sr.actual_subject_id_ subjectId,mgq.id_ musicGroupQuitId
+        from music_group_quit mgq
+                 left join student_registration sr ON sr.music_group_id_ = mgq.music_group_id_ AND sr.user_id_ = mgq.user_id_
+        <where>
+            <if test="coopId != null">
+                AND mgq.school_staff_audit_status_ = #{coopId}
+            </if>
+            <if test="status != null">
+                AND mgq.school_staff_audit_status_ = #{status}
+            </if>
+            <if test="status == null">
+                AND mgq.school_staff_audit_status_ IN ('PASS','REJECT')
+            </if>
+        </where>
+        ORDER BY mgq.id_ DESC
+        <include refid="global.limit"/>
+    </select>
+    <select id="countBySchool" resultType="java.lang.Integer">
+        select COUNT(mgq.id_)
+        from music_group_quit mgq
+        <where>
+            <if test="coopId != null">
+                AND mgq.school_staff_audit_status_ = #{coopId}
+            </if>
+            <if test="status != null">
+                AND mgq.school_staff_audit_status_ = #{status}
+            </if>
+            <if test="status == null">
+                AND mgq.school_staff_audit_status_ IN ('PASS','REJECT')
+            </if>
+        </where>
+    </select>
 </mapper>

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

@@ -27,5 +27,12 @@
 		</where>
 		ORDER BY id_ DESC
 	</select>
-    
+
+	<!--学校员工身份数统计-->
+	<select id="selectUserTypeNumsStat" resultType="com.ym.mec.biz.dal.wrapper.StatGroupWrapper">
+		SELECT t1.user_type_ AS gid, COUNT(t1.user_id_) AS total
+		FROM school_staff t1 WHERE t1.school_id_ = #{schoolId} GROUP BY t1.user_type_
+	</select>
+	<!--学校员工身份数统计-->
+
 </mapper>

+ 17 - 1
mec-common/common-core/src/main/java/com/ym/mec/common/controller/BaseController.java

@@ -26,7 +26,6 @@ import javax.servlet.http.HttpServletRequest;
 import java.net.URLEncoder;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Optional;
 import java.util.stream.Collectors;
 
 @ControllerAdvice
@@ -75,6 +74,15 @@ public class BaseController {
 		return obj;
 	}
 
+	private static <T> HttpResponseResult<T> getResponseData(boolean status, int statusCode, T data, String message) {
+		HttpResponseResult<T> obj = new HttpResponseResult<T>();
+		obj.setStatus(status);
+		obj.setCode(statusCode);
+		obj.setData(data);
+		obj.setMsg(message);
+		return obj;
+	}
+
 	/**
 	 * 处理一般异常
 	 *
@@ -94,6 +102,14 @@ public class BaseController {
 			if(e.getMessage().equals("205")){
 				return failed(HttpStatus.RESET_CONTENT,e.getMessage());
 			}
+
+			// 自定义错误码
+			if (e instanceof BizException) {
+				BizException bizException = (BizException) e;
+				return getResponseData(false, bizException.getCode(), null, bizException.getMessage());
+			}
+
+			// 默认返回错误码
 			return failed(e.getMessage());
 		} else if (e instanceof AccessDeniedException) {
 			return failed("禁止访问");

+ 10 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/exception/BizException.java

@@ -4,6 +4,7 @@ import com.ym.mec.util.string.MessageFormatter;
 
 public class BizException extends RuntimeException {
 
+	private int code = 200;
 	/**
 	 * 
 	 */
@@ -17,6 +18,12 @@ public class BizException extends RuntimeException {
 		super(message);
 	}
 
+	public BizException(Integer code, String message) {
+		super(message);
+		// 统一错误码
+		this.code = code;
+	}
+
 	public BizException(Throwable cause) {
 		super(cause);
 	}
@@ -33,4 +40,7 @@ public class BizException extends RuntimeException {
 		super(MessageFormatter.arrayFormat(message, args), cause);
 	}
 
+	public int getCode() {
+		return code;
+	}
 }

+ 2 - 0
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java

@@ -13,6 +13,7 @@ import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
+import com.ym.mec.biz.dal.enums.school.EQuitGroupAuditStatusEnum;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -211,6 +212,7 @@ public class MusicGroupController extends BaseController {
         musicGroupQuit.setReasonEnum(reasonEnum);
 		musicGroupQuit.setStatus(ApprovalStatus.PROCESSING);
         musicGroupQuit.setOperatorId(userId);
+        musicGroupQuit.setSchoolStaffAuditStatus(EQuitGroupAuditStatusEnum.ING);
         return succeed(musicGroupService.applyQuitMusicGroup(null, musicGroupQuit,"STUDENT"));
     }
 

+ 12 - 2
mec-web/src/main/java/com/ym/mec/web/controller/open/OpenSchoolController.java

@@ -61,14 +61,24 @@ public class OpenSchoolController extends BaseController {
             @ApiImplicitParam(name = "id", value = "合作单位ID", dataType = "long")
     })
     @GetMapping("/cooperation")
-    public HttpResponseResult<CooperationOrgan> queryCooperationById(@RequestParam Long id) {
+    public HttpResponseResult<SchoolStaffWrapper.SchoolCooperation> queryCooperationById(@RequestParam Long id) {
 
     	CooperationOrgan cooperationOrgan = cooperationOrganService.get(Optional.ofNullable(id).orElse(-1L).intValue());
         if (Objects.isNull(cooperationOrgan)) {
             throw new BizException("合作单位编号无效");
         }
 
-    	return succeed(cooperationOrgan);
+        // 学校员工身份统计
+        SchoolStaffWrapper.SchoolStaffStat staffStat = schoolStaffService.getUserTypeStatByCooperationId(cooperationOrgan.getId());
+
+        // 数据对象转换
+        SchoolStaffWrapper.SchoolCooperation schoolCooperation = SchoolStaffWrapper.SchoolCooperation
+                .builder()
+                .cooperation(cooperationOrgan)
+                .staffStat(staffStat)
+                .build();
+
+        return succeed(schoolCooperation);
     }
 
 }

+ 2 - 4
mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolClassGroupController.java

@@ -17,6 +17,7 @@ import io.swagger.annotations.ApiOperation;
 import org.snaker.engine.model.BaseModel;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -33,10 +34,7 @@ public class SchoolClassGroupController extends BaseController {
 
     @ApiOperation(value = "获取合作单位所有班级列表")
     @GetMapping("/queryClassGroup")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "coopId", dataType = "Integer", required = true, value = "合作单位"),
-    })
-    public HttpResponseResult<List<BaseMapDto>> queryClassGroup(Integer coopId) {
+    public HttpResponseResult<List<BaseMapDto>> queryClassGroup(@RequestHeader Integer coopId) {
         return succeed(classGroupService.queryClassGroup(coopId));
     }
 }

+ 4 - 11
mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolCourseScheduleController.java

@@ -13,6 +13,7 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -29,29 +30,22 @@ public class SchoolCourseScheduleController extends BaseController {
 
     @ApiOperation(value = "课时顶部统计接口---获取当前学期课程汇总")
     @GetMapping("/getSummaryOfCurrentSemesterCourses")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "coopId", dataType = "Integer", required = true, value = "合作单位"),
-    })
-    public HttpResponseResult<List<SummaryOfCurrentSemesterCoursesDto>> getSummaryOfCurrentSemesterCourses(Integer coopId) {
+    public HttpResponseResult<List<SummaryOfCurrentSemesterCoursesDto>> getSummaryOfCurrentSemesterCourses(@RequestHeader Integer coopId) {
         return succeed(courseScheduleService.getSummaryOfCurrentSemesterCourses(coopId));
     }
 
     @ApiOperation(value = "课时每周分组数据接口----获取当前学期每天课程汇总")
     @GetMapping("/getDailySummaryOfClassesForTheCurrentSemester")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "coopId", dataType = "Integer", required = true, value = "合作单位"),
-    })
-    public HttpResponseResult<Map<String, List<DailySummaryOfClassesForTheCurrentSemesterDto>>> getDailySummaryOfClassesForTheCurrentSemester(Integer coopId) {
+    public HttpResponseResult<Map<String, List<DailySummaryOfClassesForTheCurrentSemesterDto>>> getDailySummaryOfClassesForTheCurrentSemester(@RequestHeader Integer coopId) {
         return succeed(courseScheduleService.getDailySummaryOfClassesForTheCurrentSemester(coopId));
     }
 
     @ApiImplicitParams({
             @ApiImplicitParam(name = "classDate", dataType = "String", required = true, value = "上课时间(年月日)"),
-            @ApiImplicitParam(name = "coopId", dataType = "Integer", required = true, value = "合作单位"),
     })
     @ApiOperation(value = "课时每天课程数据详情----获取当天课程列表")
     @GetMapping("/queryListClassesForDay")
-    public HttpResponseResult<List<ClassesForDayDto>> queryListClassesForDay(Integer coopId,String classDate) {
+    public HttpResponseResult<List<ClassesForDayDto>> queryListClassesForDay(String classDate,@RequestHeader Integer coopId) {
         return succeed(courseScheduleService.getListClassesForDay(coopId,classDate));
     }
 
@@ -72,5 +66,4 @@ public class SchoolCourseScheduleController extends BaseController {
     public HttpResponseResult<List<CourseStudentDto>> queryCourseStudentList(Long courseId) {
         return succeed(courseScheduleService.queryCourseStudentList(courseId));
     }
-
 }

+ 55 - 0
mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolMusicGroupQuitController.java

@@ -0,0 +1,55 @@
+package com.ym.mec.web.controller.school;
+
+import com.ym.mec.biz.dal.school.dto.MusicGroupQuitDetailDto;
+import com.ym.mec.biz.dal.school.dto.MusicGroupQuitPageDto;
+import com.ym.mec.biz.dal.school.page.MusicGroupQuitQueryInfo;
+import com.ym.mec.biz.service.MusicGroupQuitService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/musicGroupQuit")
+@Api(tags = "学校学员退团服务")
+public class SchoolMusicGroupQuitController extends BaseController {
+
+    @Autowired
+    private MusicGroupQuitService musicGroupQuitService;
+
+	@ApiOperation(value = "分页查询")
+    @PostMapping("/queryPage")
+    public HttpResponseResult<PageInfo<MusicGroupQuitPageDto>> queryPage(@RequestBody MusicGroupQuitQueryInfo queryInfo,@RequestHeader Integer coopId) {
+        queryInfo.setCoopId(coopId);
+        return succeed(musicGroupQuitService.queryPageBySchool(queryInfo));
+	}
+
+	@ApiOperation(value = "获取退团详情")
+    @GetMapping("/getDetail")
+    public HttpResponseResult<MusicGroupQuitDetailDto> getDetail(Long musicGroupQuitId) {
+        return succeed(musicGroupQuitService.getDetailBySchool(musicGroupQuitId));
+	}
+
+	@ApiOperation(value = "退团审批通过")
+    @GetMapping("/auditPass")
+    public HttpResponseResult auditPass(Long musicGroupQuitId,String reason) {
+        musicGroupQuitService.auditPassBySchool(musicGroupQuitId,reason);
+        return succeed();
+	}
+
+	@ApiOperation(value = "退团审批拒绝")
+    @GetMapping("/auditReject")
+    public HttpResponseResult auditReject(Long musicGroupQuitId,String reason) {
+        musicGroupQuitService.auditRejectBySchool(musicGroupQuitId,reason);
+        return succeed();
+	}
+}

+ 61 - 0
mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolStaffController.java

@@ -163,4 +163,65 @@ public class SchoolStaffController extends BaseController {
 
         return succeed(user);
     }
+
+    @ApiOperation(value = "合作单位查询", notes = "学校合作单位查询")
+    @GetMapping("/cooperation")
+    public HttpResponseResult<SchoolStaffWrapper.SchoolCooperation> queryCooperation() {
+
+        // 查询用户信息
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(sysUser)) {
+            throw new BizException("请先登录");
+        }
+
+        // 查询学校员工信息
+        SchoolStaff schoolStaff = schoolStaffService.queryByUserId(Long.valueOf(sysUser.getId()));
+        if (Objects.isNull(schoolStaff)) {
+            throw new BizException("员工账号不存在");
+        }
+
+        CooperationOrgan cooperationOrgan = cooperationOrganService.get(schoolStaff.getSchoolId().intValue());
+        if (Objects.isNull(cooperationOrgan)) {
+            throw new BizException("合作单位编号无效");
+        }
+
+        // 学校员工身份统计
+        SchoolStaffWrapper.SchoolStaffStat staffStat = schoolStaffService.getUserTypeStatByCooperationId(cooperationOrgan.getId());
+
+        // 数据对象转换
+        SchoolStaffWrapper.SchoolCooperation schoolCooperation = SchoolStaffWrapper.SchoolCooperation
+                .builder()
+                .cooperation(cooperationOrgan)
+                .staffStat(staffStat)
+                .build();
+
+        return succeed(schoolCooperation);
+    }
+
+    @ApiOperation(value = "更新合作单位", notes = "学校合作单位查询")
+    @GetMapping("/updateCooperation")
+    public HttpResponseResult<Boolean> updateCooperation(@RequestBody SchoolStaffWrapper.Cooperation info) {
+
+        // 查询用户信息
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(sysUser)) {
+            throw new BizException("请先登录");
+        }
+
+        // 查询学校员工信息
+        SchoolStaff schoolStaff = schoolStaffService.queryByUserId(Long.valueOf(sysUser.getId()));
+        if (Objects.isNull(schoolStaff)) {
+            throw new BizException("员工账号不存在");
+        }
+
+        // 设置默认参数
+        info.tenantId(schoolStaff.getTenantId())
+                .setId(schoolStaff.getSchoolId().intValue());
+
+        // 更新合作单位信息
+        schoolStaffService.updateCooperation(info);
+
+        return succeed();
+    }
+
 }

+ 53 - 0
mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolStudentHomeworkController.java

@@ -0,0 +1,53 @@
+package com.ym.mec.web.controller.school;
+
+
+import com.ym.mec.biz.dal.dto.StudentLessonExaminationDetailDto;
+import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto;
+import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryDto;
+import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryInfo;
+import com.ym.mec.biz.service.StudentLessonExaminationDetailService;
+import com.ym.mec.biz.service.StudentLessonExaminationService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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 javax.annotation.Resource;
+import java.util.List;
+
+@Api(tags = "学校学员课后作业")
+@RestController
+@RequestMapping("/schoolStudentHomework")
+public class SchoolStudentHomeworkController extends BaseController {
+
+    @Resource
+    private StudentLessonExaminationService studentLessonExaminationService;
+    @Resource
+    private StudentLessonExaminationDetailService studentLessonExaminationDetailService;
+
+    @ApiOperation(value = "获取课后评测学员列表")
+    @PostMapping("queryLessonStudent")
+    public HttpResponseResult<PageInfo<StudentLessonExaminationDto>> queryLessonStudent(@RequestBody StudentLessonExaminationQueryInfo queryInfo) {
+        return succeed(studentLessonExaminationService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "获取单个学员评测")
+    @PostMapping("getLessonStudent")
+    public HttpResponseResult<StudentLessonExaminationDto> getLessonStudent(@RequestBody StudentLessonExaminationQueryInfo queryInfo) {
+        return succeed(studentLessonExaminationService.queryPage(queryInfo).getRows().get(0));
+    }
+
+    @ApiOperation(value = "获取学员评测详情列表")
+    @PostMapping("queryStudentLessonDetail")
+    public HttpResponseResult<List<StudentLessonExaminationDetailDto>> queryStudentLessonDetail(@RequestBody StudentLessonExaminationQueryDto query) {
+        return succeed(studentLessonExaminationDetailService.queryAll(query));
+    }
+
+
+}
+

+ 5 - 7
mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolTeacherAttendanceController.java

@@ -14,10 +14,7 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -31,15 +28,16 @@ public class SchoolTeacherAttendanceController extends BaseController {
 
     @ApiOperation(value = "首页教师考勤列表查询----获取本学期课程关联的老师列表,以及老师考勤状况汇总")
     @PostMapping("/queryTeacherAttendance")
-    public HttpResponseResult<List<TeacherAttendanceSumDto>> queryTeacherAttendance(TeacherAttendanceQueryInfo queryInfo){
+    public HttpResponseResult<List<TeacherAttendanceSumDto>> queryTeacherAttendance(@RequestBody TeacherAttendanceQueryInfo queryInfo,@RequestHeader Integer coopId){
+        queryInfo.setCoopId(coopId);
         return succeed(teacherAttendanceService.queryTeacherAttendance(queryInfo));
     }
 
     @ApiOperation(value = "获取单个老师本学期考勤汇总")
     @PostMapping("/getTeacherAttendance")
-    public HttpResponseResult<TeacherAttendanceSumDto> getTeacherAttendance(TeacherAttendanceQueryDto queryDto){
+    public HttpResponseResult<TeacherAttendanceSumDto> getTeacherAttendance(@RequestBody TeacherAttendanceQueryDto queryDto,@RequestHeader Integer coopId){
         TeacherAttendanceQueryInfo queryInfo = new TeacherAttendanceQueryInfo();
-        queryInfo.setCoopId(queryDto.getCoopId());
+        queryInfo.setCoopId(coopId);
         queryInfo.setTeacherId(queryDto.getTeacherId());
         queryInfo.setClassGroupId(queryDto.getClassGroupId());
         List<TeacherAttendanceSumDto> sumDtos = teacherAttendanceService.queryTeacherAttendance(queryInfo);

+ 4 - 1
mec-web/src/main/java/com/ym/mec/web/vo/SchoolStaffVo.java

@@ -61,7 +61,10 @@ public class SchoolStaffVo {
         @Pattern(regexp = "1[3456789][0-9]{9}", message = "手机号码格式不正确")
         @ApiModelProperty("手机号码")
         private String mobile;
-                
+
+        @NotBlank(message = "验证码不能为空")
+        @ApiModelProperty("验证码")
+        private String smsCode;
                 
         public String jsonString() {
             return JSON.toJSONString(this);