Browse Source

Merge branch 'master_saas' of http://git.dayaedu.com/yonge/mec into master_saas

yonge 3 years ago
parent
commit
c0f18017dd
20 changed files with 355 additions and 52 deletions
  1. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  2. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentStudentCourseDetailDao.java
  3. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassGroup4MixDto.java
  4. 96 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/HasFreeCourseTimesDto.java
  5. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Employee.java
  6. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexErrorType.java
  7. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java
  8. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  9. 5 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  10. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java
  11. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  12. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  13. 42 40
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/QuestionnaireUserResultServiceImpl.java
  14. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java
  15. 7 6
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  16. 46 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  17. 13 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml
  18. 16 2
      mec-biz/src/main/resources/config/mybatis/QuestionnaireTopicMapper.xml
  19. 1 1
      mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java
  20. 12 0
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderController.java

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

@@ -477,4 +477,22 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
     * @date 2022/3/3 15:15 
     */
     List<String> queryHasSubCourseTimes(@Param("organIds") String organIds, @Param("tenantId") Integer tenantId);
+
+    /**
+    * @description: 获取课程时间消耗异常的学员数
+     * @param params
+    * @return int
+    * @author zx
+    * @date 2022/3/4 11:22
+    */
+    Integer countHasFreeCourseTimes(Map<String, Object> params);
+
+    /**
+    * @description: 获取课程时间消耗异常的学员
+     * @param params
+    * @return java.util.List<com.ym.mec.biz.dal.dto.HasFreeCourseTimesDto>
+    * @author zx
+    * @date 2022/3/4 11:40
+    */
+    List<HasFreeCourseTimesDto> queryHasFreeCourseTimes(Map<String, Object> params);
 }

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentStudentCourseDetailDao.java

@@ -113,4 +113,18 @@ public interface MusicGroupPaymentStudentCourseDetailDao extends BaseDAO<Long, M
     void updateByCourseType(@Param("courseType") String courseType,
                             @Param("musicGroupPaymentCalenderIds") String musicGroupPaymentCalenderIds,
                             @Param("courseCurrentPrice") BigDecimal courseCurrentPrice);
+
+    /**
+     * @description: 校验学员排课时长是否一致
+     * @param musicGroupId
+     * @param courseTypes
+     * @param studentIds
+     * @return void
+     * @author zx
+     * @date 2022/3/3 19:04
+     */
+    Integer checkCourseTimes(@Param("musicGroupId") String musicGroupId,
+                          @Param("courseTypes") List<CourseSchedule.CourseScheduleType> courseTypes,
+                          @Param("studentIds") List<Integer> studentIds);
+
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassGroup4MixDto.java

@@ -25,6 +25,9 @@ public class ClassGroup4MixDto implements Cloneable{
     @ApiModelProperty(value = "是否只生成班级")
     private Boolean onlyCreateClassGroup;
 
+    @ApiModelProperty(value = "是否继续提交")
+    private Boolean checkCourseTimesFlag = false;
+
     @ApiModelProperty(value = "学生ids", required = true)
     private List<Integer> students;
 
@@ -79,6 +82,14 @@ public class ClassGroup4MixDto implements Cloneable{
     @ApiModelProperty(value = "预排课学期编号")
     private Integer musicGroupSchoolTermCourseDetailId;
 
+    public Boolean getCheckCourseTimesFlag() {
+        return checkCourseTimesFlag;
+    }
+
+    public void setCheckCourseTimesFlag(Boolean checkCourseTimesFlag) {
+        this.checkCourseTimesFlag = checkCourseTimesFlag;
+    }
+
     public Integer getMusicGroupSchoolTermCourseDetailId() {
         return musicGroupSchoolTermCourseDetailId;
     }

+ 96 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/HasFreeCourseTimesDto.java

@@ -0,0 +1,96 @@
+package com.ym.mec.biz.dal.dto;
+
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import io.swagger.annotations.ApiModelProperty;
+
+public class HasFreeCourseTimesDto {
+
+    @ApiModelProperty(value = "乐团编号")
+    private String musicGroupId;
+
+    @ApiModelProperty(value = "乐团名称")
+    private String musicGroupName;
+
+    @ApiModelProperty(value = "学员编号")
+    private Integer userId;
+
+    @ApiModelProperty(value = "学员姓名")
+    private String username;
+
+    @ApiModelProperty(value = "总时长")
+    private Integer totalCourseMinutes;
+
+    @ApiModelProperty(value = "消耗时长")
+    private Integer usedCourseMinutes;
+
+    @ApiModelProperty(value = "未消耗时长")
+    private Integer freeCourseMinutes;
+
+    @ApiModelProperty(value = "课程类型")
+    private CourseSchedule.CourseScheduleType courseType;
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public Integer getTotalCourseMinutes() {
+        return totalCourseMinutes;
+    }
+
+    public void setTotalCourseMinutes(Integer totalCourseMinutes) {
+        this.totalCourseMinutes = totalCourseMinutes;
+    }
+
+    public Integer getUsedCourseMinutes() {
+        return usedCourseMinutes;
+    }
+
+    public void setUsedCourseMinutes(Integer usedCourseMinutes) {
+        this.usedCourseMinutes = usedCourseMinutes;
+    }
+
+    public Integer getFreeCourseMinutes() {
+        return freeCourseMinutes;
+    }
+
+    public void setFreeCourseMinutes(Integer freeCourseMinutes) {
+        this.freeCourseMinutes = freeCourseMinutes;
+    }
+
+    public CourseSchedule.CourseScheduleType getCourseType() {
+        return courseType;
+    }
+
+    public void setCourseType(CourseSchedule.CourseScheduleType courseType) {
+        this.courseType = courseType;
+    }
+}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Employee.java

@@ -95,6 +95,9 @@ public class Employee extends SysUser {
 	@ApiModelProperty(value = "机构id列表")
 	private List<Integer> tenantIds;
 
+	@ApiModelProperty(value = "创建该机构的人")
+    private Integer createTenantUserId;
+
 	private String contactAddress;
 
 	private String postalCode;
@@ -303,4 +306,12 @@ public class Employee extends SysUser {
     public void setTenantIds(List<Integer> tenantIds) {
         this.tenantIds = tenantIds;
     }
+
+    public Integer getCreateTenantUserId() {
+        return createTenantUserId;
+    }
+
+    public void setCreateTenantUserId(Integer createTenantUserId) {
+        this.createTenantUserId = createTenantUserId;
+    }
 }

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

@@ -39,6 +39,7 @@ public enum IndexErrorType implements BaseEnum<String, IndexErrorType> {
     TEACHER_EXCEPTION_ATTENDANCE("TEACHER_EXCEPTION_ATTENDANCE", "课程考勤异常"),
     TEACHER_NOT_A_CLASS("TEACHER_NOT_A_CLASS", "课程异常"),
     TEACHER_SERVE_ERROR("TEACHER_SERVE_ERROR", "服务指标异常"),
+    HAS_FREE_COURSE_TIMES("HAS_FREE_COURSE_TIMES", "学员已排课时长未消耗完"),
     ;
 
     private String code;

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java

@@ -7,6 +7,7 @@ import java.util.Set;
 
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.page.BaseOrganQueryInfo;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
@@ -218,4 +219,13 @@ public interface MusicGroupPaymentCalenderService extends BaseService<Long, Musi
 	* @date 2021/12/30 10:41
 	*/
 	MusicGroupPaymentCalender getApplyCalenderByMusicId(String musicGroupId);
+
+	/**
+	* @description: 学员已排课时长未消耗完
+	 * @param queryInfo
+	* @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.HasFreeCourseTimesDto>
+	* @author zx
+	* @date 2022/3/4 11:35
+	*/
+	PageInfo<HasFreeCourseTimesDto> queryHasFreeCourseTimesStudent(BaseOrganQueryInfo queryInfo);
 }

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

@@ -159,6 +159,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     private MusicGroupSchoolTermStudentCourseDetailDao musicGroupSchoolTermStudentCourseDetailDao;
     @Autowired
     private MusicGroupSchoolTermCourseDetailDao musicGroupSchoolTermCourseDetailDao;
+    @Autowired
+    private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
 
     @Override
     public BaseDAO<Integer, ClassGroup> getDAO() {
@@ -2364,6 +2366,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         Date date = new Date();
         Integer classGroupId = classGroup4MixDtos.get(0).getClassGroupId();
         String musicGroupId = classGroup4MixDtos.get(0).getMusicGroupId();
+        Boolean checkCourseTimesFlag = classGroup4MixDtos.get(0).getCheckCourseTimesFlag();
         ClassGroup classGroup = classGroupDao.get(classGroupId);
         if (classGroup == null) {
             throw new BizException("班级不存在");
@@ -2444,6 +2447,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //计算每节课的课酬
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
         List<CourseSchedule> courseScheduleList = new ArrayList<>();
+        List<CourseScheduleType> courseTypes = classGroup4MixDtos.stream().map(e -> e.getCourseType()).distinct().collect(Collectors.toList());
+        if(!checkCourseTimesFlag){
+            //校验剩余时长是否一致
+            Integer checkCourseTimes = musicGroupPaymentStudentCourseDetailDao.checkCourseTimes(musicGroupId, courseTypes, studentIds);
+            if(checkCourseTimes == null || checkCourseTimes == 0){
+                return BaseController.failed(HttpStatus.MULTI_STATUS,"班级剩余排课时长不一致,请再次确认");
+            }
+        }
 
         for (ClassGroup4MixDto classGroup4MixDto : classGroup4MixDtos) {
             List<ClassGroupTeacherMapper> teacherMappers = classGroup4MixDto.getClassGroupTeacherMapperList();

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

@@ -138,8 +138,12 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
         if (user != null) {
             employee.setAvatar(user.getAvatar());
         }
+        Integer userId = employee.getId();
+        if(Objects.nonNull(employee.getCreateTenantUserId())){
+            userId = employee.getCreateTenantUserId();
+        }
         //添加平台用户和机构的关系
-        addUserTenant(employee.getTenantIds(), tenantId, employee.getId());
+        addUserTenant(employee.getTenantIds(), tenantId, userId);
         //添加到OA
         oaUserService.addOaUser(employee);
     }

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

@@ -244,11 +244,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                             roomDestroy(room.getId());
                         }
                     };
-                    //如果直播状态=1(关闭直播),并且结束直播时间 +30分钟 大于等于 现在,则销毁
+                    //如果直播状态=1(关闭直播),并且现在 大于等于 结束直播时间 +30分钟,则销毁
                     if (speakerInfo.getState() == 1) {
                         consumer.accept(speakerInfo.getEndLiveTime());
                     }
-                    //退出时间 +30分钟 大于等于 现在,则销毁
+                    //现在 大于等于 退出时间 +30分钟,则销毁
                     if (Objects.nonNull(speakerInfo.getExitRoomTime())) {
                         consumer.accept(speakerInfo.getExitRoomTime());
                     }

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

@@ -757,6 +757,12 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 				fourChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_SERVE_ERROR, IndexErrorType.TEACHER_SERVE_ERROR.getMsg(), serveErrTeacherNum, null));
 			}
 
+			//学员已排课时长未消耗完
+			Map<String, Object> params = new HashMap<>();
+			params.put("organId", organIdsStr);
+			params.put("tenantId", tenantId);
+			fourChild.add(new IndexErrInfoDto(IndexErrorType.HAS_FREE_COURSE_TIMES, IndexErrorType.HAS_FREE_COURSE_TIMES.getMsg(), musicGroupDao.countHasFreeCourseTimes(params), null));
+
 			four.setNum(fourChild.stream().mapToInt(IndexErrInfoDto::getNum).sum());
 			four.setResult(fourChild);
 			all.add(four);
@@ -1220,6 +1226,15 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 				flag4 = true;
 			}
 		}
+		if(!flag4){
+			Map<String, Object> params = new HashMap<String, Object>(2);
+			params.put("organId",organIdsStr);
+			params.put("tenantId",tenantId);
+			Integer hasFreeCourseTimes = musicGroupDao.countHasFreeCourseTimes(params);
+			if(hasFreeCourseTimes != null && hasFreeCourseTimes > 0){
+				flag4 = true;
+			}
+		}
 		resultMap.put("attendanceServe",flag4);
 
 		boolean flag5 = false;

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatus
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.page.BaseOrganQueryInfo;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
 import com.ym.mec.biz.event.source.GroupEventSource;
 import com.ym.mec.biz.event.source.SendSeoMessageSource;
@@ -1260,6 +1261,27 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
     }
 
     @Override
+    public PageInfo<HasFreeCourseTimesDto> queryHasFreeCourseTimesStudent(BaseOrganQueryInfo queryInfo) {
+        PageInfo<HasFreeCourseTimesDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<HasFreeCourseTimesDto> dataList = null;
+
+        int count = musicGroupDao.countHasFreeCourseTimes(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = musicGroupDao.queryHasFreeCourseTimes(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public boolean autoUpdateMusicGroupPaymentCalenderStatus() {
         Date date = new Date();

+ 42 - 40
mec-biz/src/main/java/com/ym/mec/biz/service/impl/QuestionnaireUserResultServiceImpl.java

@@ -1,42 +1,38 @@
 package com.ym.mec.biz.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.ExportDto;
 import com.ym.mec.biz.dal.dto.QuestionnaireUserResultDto;
 import com.ym.mec.biz.dal.dto.ReplacementInstrumentActivityDto;
-import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.ExportEnum;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.entity.QuestionnaireQuestion;
+import com.ym.mec.biz.dal.entity.QuestionnaireQuestionItem;
+import com.ym.mec.biz.dal.entity.QuestionnaireTopic;
+import com.ym.mec.biz.dal.entity.QuestionnaireUserResult;
 import com.ym.mec.biz.dal.enums.QuestionnaireActiveTypeEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.QuestionnaireUserResultQueryInfo;
-import com.ym.mec.biz.dal.page.ReplacementInstrumentActivityQueryInfo;
-import com.ym.mec.biz.service.CooperationOrganService;
 import com.ym.mec.biz.service.ExportService;
+import com.ym.mec.biz.service.QuestionnaireUserResultService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
-import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.excel.POIUtil;
-import com.ym.mec.util.http.HttpUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
-import com.ym.mec.common.service.impl.BaseServiceImpl;
-import com.ym.mec.biz.service.QuestionnaireUserResultService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.time.Instant;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -179,37 +175,43 @@ public class QuestionnaireUserResultServiceImpl extends BaseServiceImpl<Long, Qu
     @Override
 	@Transactional(rollbackFor = Exception.class)
     public void add(ReplacementInstrumentActivityDto replacementInstrumentActivity) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			throw new BizException("用户信息获取失败,请重新登陆");
-		}
 		Integer topicId = replacementInstrumentActivity.getTopicId();
-
-		List<QuestionnaireUserResult> questionnaireUserResultList = replacementInstrumentActivity.getQuestionnaireUserResultList();
-		if(questionnaireUserResultList == null || questionnaireUserResultList.size() == 0){
-			throw new BizException("请填写问卷结果");
-		}
-		QuestionnaireActiveTypeEnum activeType = replacementInstrumentActivity.getActiveType();
 		QuestionnaireTopic topic = questionnaireTopicDao.get(topicId);
-		if(topic.getAgainCommitFlag() == 0){
-			HashMap<String, Object> paramMap = new HashMap<>(3);
-			paramMap.put("activeId",replacementInstrumentActivity.getReplacementInstrumentCooperationId());
-			paramMap.put("activeType",activeType.getCode());
-			paramMap.put("userId",sysUser.getId());
-			List<QuestionnaireUserResult> userResults = questionnaireUserResultDao.findAll(paramMap);
-			if(userResults != null && userResults.size() > 0){
-				throw new BizException("您已提交问卷,请勿重复操作");
+		if(topic.getLoginFlag() == 1){
+			if(topic.getStatus() == 0){
+				throw new BizException("当前问卷已停用");
 			}
+			SysUser sysUser = sysUserFeignService.queryUserInfo();
+			if (sysUser == null) {
+				throw new BizException("用户信息获取失败,请重新登陆");
+			}
+			List<QuestionnaireUserResult> questionnaireUserResultList = replacementInstrumentActivity.getQuestionnaireUserResultList();
+			if(questionnaireUserResultList == null || questionnaireUserResultList.size() == 0){
+				throw new BizException("请填写问卷结果");
+			}
+			QuestionnaireActiveTypeEnum activeType = replacementInstrumentActivity.getActiveType();
+			if(topic.getAgainCommitFlag() == 0){
+				HashMap<String, Object> paramMap = new HashMap<>(3);
+				paramMap.put("activeId",replacementInstrumentActivity.getReplacementInstrumentCooperationId());
+				paramMap.put("activeType",activeType.getCode());
+				paramMap.put("userId",sysUser.getId());
+				List<QuestionnaireUserResult> userResults = questionnaireUserResultDao.findAll(paramMap);
+				if(userResults != null && userResults.size() > 0){
+					throw new BizException("您已提交问卷,请勿重复操作");
+				}
+			}
+			//删除原来的问卷结果
+			questionnaireUserResultDao.delByActiveIdAndUserId(null, sysUser.getId(),activeType.getCode());
+			for (QuestionnaireUserResult result : questionnaireUserResultList) {
+				result.setUserId(sysUser.getId());
+				result.setQuestionnaireTopicId(topicId);
+				result.setActiveType(activeType);
+			}
+			//新增问卷结果
+			questionnaireUserResultDao.batchInsert1(questionnaireUserResultList);
+		}else {
+			this.addResult(replacementInstrumentActivity);
 		}
-		//删除原来的问卷结果
-		questionnaireUserResultDao.delByActiveIdAndUserId(null, sysUser.getId(),activeType.getCode());
-		for (QuestionnaireUserResult result : questionnaireUserResultList) {
-			result.setUserId(sysUser.getId());
-			result.setQuestionnaireTopicId(topicId);
-			result.setActiveType(activeType);
-		}
-		//新增问卷结果
-		questionnaireUserResultDao.batchInsert1(questionnaireUserResultList);
 	}
 
     @Override
@@ -221,9 +223,9 @@ public class QuestionnaireUserResultServiceImpl extends BaseServiceImpl<Long, Qu
 		if(questionnaireUserResultList == null || questionnaireUserResultList.size() == 0){
 			throw new BizException("请填写问卷结果");
 		}
-		Long time = new Date().getTime();
+		int epochSecond = (int)Instant.now().getEpochSecond();
 		for (QuestionnaireUserResult result : questionnaireUserResultList) {
-			result.setUserId(time.intValue());
+			result.setUserId(epochSecond);
 			result.setQuestionnaireTopicId(topicId);
 			result.setActiveType(QuestionnaireActiveTypeEnum.ENTERPRISE_CUSTOMIZATION);
 		}

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

@@ -492,6 +492,8 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         e.setUserType(SysUserType.SYSTEM.getCode());
         e.setOrganIdList(String.valueOf(orgId));
         e.setPassword(pw);
+        e.setTenantIds(Lists.newArrayList(tenantInfo.getId()));
+        e.setCreateTenantUserId(tenantInfo.getCreatedBy());
         try {
             log.info("createUser >>>> {}", e);
             employeeService.add(e);

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

@@ -3968,7 +3968,7 @@
     <select id="countStudyStandard" resultType="java.lang.Integer">
         SELECT COUNT(sa.user_id_)
         FROM student_attendance sa
-        WHERE sa.id_ IS NOT NULL AND sa.course_schedule_id_ = #{courseScheduleId}
+        WHERE sa.id_ IS NOT NULL AND sa.course_schedule_id_ = #{courseScheduleId} AND sa.status_ = 'NORMAL'
     </select>
     <resultMap id="StudentStandardDto" type="com.ym.mec.biz.dal.dto.StudentStandardDto">
         <result property="courseScheduleId" column="course_schedule_id_"/>
@@ -3988,7 +3988,7 @@
         LEFT JOIN student s ON s.user_id_ = sa.user_id_
         LEFT JOIN `subject` sb ON sb.id_ = s.subject_id_list_
         LEFT JOIN sys_user su ON su.id_ = s.user_id_
-        WHERE sa.id_ IS NOT NULL AND sa.course_schedule_id_ = #{courseScheduleId}
+        WHERE sa.id_ IS NOT NULL AND sa.course_schedule_id_ = #{courseScheduleId} AND sa.status_ = 'NORMAL'
         <include refid="global.limit"/>
     </select>
     <select id="countStudyStandardWaitVisit" resultType="java.lang.Integer">
@@ -4010,11 +4010,12 @@
         LEFT JOIN `subject` sb ON sb.id_ = s.subject_id_list_
         LEFT JOIN sys_user su ON su.id_ = s.user_id_
         WHERE csts.user_id_ = #{teacherId} AND cs.evaluate_flag_ = 1 AND sa.qualified_flag_ = 0 AND sv.id_ IS NULL
-        <if test="startTime != null and startTime != ''">
-            AND cs.class_date_ >= #{startTime}
+        AND sa.status_ = 'NORMAL'
+        <if test="startDate != null and startDate != ''">
+            AND cs.class_date_ >= #{startDate}
         </if>
-        <if test="endTime != null and endTime != ''">
-            AND cs.class_date_ &lt;= #{endTime}
+        <if test="endDate != null and endDate != ''">
+            AND cs.class_date_ &lt;= #{endDate}
         </if>
         ORDER BY cs.class_date_ DESC,cs.start_class_time_ DESC
         <include refid="global.limit"/>

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

@@ -1009,4 +1009,50 @@
             AND FIND_IN_SET(mgpc.organ_id_,#{organIds})
         </if>
     </select>
+    <select id="countHasFreeCourseTimes" resultType="java.lang.Integer">
+        SELECT COUNT(mgpscd.user_id_)
+        FROM music_group_payment_student_course_detail mgpscd
+        LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpscd.music_group_payment_calender_id_
+        LEFT JOIN music_group mg ON mg.id_ = mgpc.music_group_id_
+        <include refid="queryHasFreeCourseTimesSql"/>
+    </select>
+    <resultMap id="HasFreeCourseTimesDto" type="com.ym.mec.biz.dal.dto.HasFreeCourseTimesDto">
+        <result property="userId" column="user_id_"/>
+        <result property="courseType" column="course_type_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="musicGroupName" column="music_group_name_"/>
+        <result property="musicGroupId" column="music_group_id_"/>
+        <result property="username" column="username_"/>
+        <result property="freeCourseMinutes" column="free_course_minutes_"/>
+        <result property="totalCourseMinutes" column="total_course_minutes_"/>
+        <result property="usedCourseMinutes" column="used_course_minutes_"/>
+    </resultMap>
+    <sql id="queryHasFreeCourseTimesSql">
+        <where>
+            mgpscd.used_course_minutes_ &lt; mgpscd.total_course_minutes_ AND mgpscd.used_course_minutes_ > 0
+            AND mg.status_ = 'PROGRESS'
+            <if test="tenantId != null">
+                AND mgpscd.tenant_id_ = #{tenantId}
+            </if>
+            <if test="organId != null and organId != ''">
+                AND FIND_IN_SET(mg.organ_id_,#{organId})
+            </if>
+            <if test="search != null and search != ''">
+                AND (mgpscd.user_id_ = #{search}
+                OR su.username_ LIKE CONCAT('%' ,#{search}, '%' )
+                OR mg.id_ LIKE CONCAT('%' ,#{search}, '%' )
+                OR mg.name_ LIKE CONCAT('%' ,#{search}, '%' ))
+            </if>
+        </where>
+    </sql>
+    <select id="queryHasFreeCourseTimes" resultMap="HasFreeCourseTimesDto">
+        SELECT mg.id_ music_group_id_,mg.name_ music_group_name_,mgpscd.user_id_,mgpscd.total_course_minutes_,
+        mgpscd.used_course_minutes_,mgpscd.total_course_minutes_ - mgpscd.used_course_minutes_ free_course_minutes_,su.username_
+        FROM music_group_payment_student_course_detail mgpscd
+        LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpscd.music_group_payment_calender_id_
+        LEFT JOIN music_group mg ON mg.id_ = mgpc.music_group_id_
+        LEFT JOIN sys_user su ON su.id_ = mgpscd.user_id_
+        <include refid="queryHasFreeCourseTimesSql"/>
+        ORDER BY mgpscd.update_time_ DESC
+        <include refid="global.limit"/>
+    </select>
 </mapper>

+ 13 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml

@@ -271,4 +271,17 @@
             AND user_id_ = #{userId}
         </if>
     </select>
+    <select id="checkCourseTimes" resultType="integer">
+        SELECT COUNT(DISTINCT mgpscd.course_type_) >= COUNT(mgpscd.total_course_minutes_) FROM music_group_payment_student_course_detail mgpscd
+        LEFT JOIN music_group_payment_calender mgpc ON mgpscd.music_group_payment_calender_id_ = mgpc.id_
+        WHERE mgpc.music_group_id_ = #{musicGroupId} AND mgpscd.used_course_minutes_ = 0
+        AND mgpscd.course_type_ IN
+        <foreach collection="courseTypes" item="courseType" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+        AND mgpscd.user_id_ IN
+        <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+    </select>
 </mapper>

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

@@ -16,6 +16,8 @@
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
         <result column="tenant_id_" property="tenantId"/>
+        <result column="login_flag_" property="loginFlag"/>
+        <result column="commit_type_" property="commitType"/>
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -30,13 +32,19 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.QuestionnaireTopic" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO questionnaire_topic (title_,status_,creator_id_,create_time_,update_time_,again_commit_flag_,tenant_id_)
-		VALUES(#{title},#{status},#{creatorId},NOW(),NOW(),#{againCommitFlag},#{tenantId})
+		INSERT INTO questionnaire_topic (title_,status_,creator_id_,create_time_,update_time_,again_commit_flag_,tenant_id_,login_flag_,commit_type_)
+		VALUES(#{title},#{status},#{creatorId},NOW(),NOW(),#{againCommitFlag},#{tenantId},#{loginFlag},#{commitType})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.QuestionnaireTopic">
 		UPDATE questionnaire_topic <set>
+		<if test="loginFlag != null">
+			login_flag_ = #{loginFlag},
+		</if>
+		<if test="commitType != null">
+			commit_type_ = #{commitType},
+		</if>
 		<if test="tenantId != null">
 			tenant_id_ = #{tenantId},
 		</if>
@@ -69,6 +77,12 @@
 			<if test="status != null">
 				AND status_ = #{status}
 			</if>
+			<if test="loginFlag != null">
+				AND login_flag_ = #{loginFlag}
+			</if>
+			<if test="commitType != null">
+				AND commit_type_ = #{commitType}
+			</if>
 		</where>
 	</sql>
 	<!-- 分页查询 -->

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java

@@ -47,7 +47,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                 "/musicGroup/getGradeList",
                 "/studentCompetition/get","/musicGroup/preRegister",
                 "/tenantInfo/queryTenantInfoByOrgan/**",
-                "/subject/list","/tenantApply/add",
+                "/subject/list","/tenantApply/add","/questionnaireUserResult/add",
                 "/musicEnlightenmentQuestionnaire/addEnlightenmentQuestionnaire", "/musicEnlightenmentQuestionnaire/getUserMusicEnlightenmentQuestionnaire").permitAll().anyRequest().authenticated().and().httpBasic();
     }
 

+ 12 - 0
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderController.java

@@ -2,10 +2,12 @@ package com.ym.mec.web.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
+import com.ym.mec.biz.dal.dto.HasFreeCourseTimesDto;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentBaseCalender;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
+import com.ym.mec.biz.dal.page.BaseOrganQueryInfo;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderCourseSettingsService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
@@ -13,6 +15,8 @@ import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
@@ -169,4 +173,12 @@ public class MusicGroupPaymentCalenderController extends BaseController {
         }
         return succeed(musicGroupPaymentCalenderCourseSettingsService.getMusicCourseSettingsWithStudents(musicGroupId,studentIdList));
     }
+
+    @ApiOperation(value = "学员已排课时长未消耗完")
+    @GetMapping("/queryHasFreeCourseTimesStudent")
+    @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalender/queryHasFreeCourseTimesStudent')")
+    public HttpResponseResult<PageInfo<HasFreeCourseTimesDto>> queryHasFreeCourseTimesStudent(BaseOrganQueryInfo queryInfo) {
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
+        return succeed(musicGroupPaymentCalenderService.queryHasFreeCourseTimesStudent(queryInfo));
+    }
 }