Browse Source

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

zouxuan 11 months ago
parent
commit
65e2210bed
16 changed files with 124 additions and 32 deletions
  1. 2 2
      mec-application/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java
  2. 8 0
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/client/SysUserFeignService.java
  3. 14 6
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/client/fallback/SysUserFeignServiceFallback.java
  4. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/ResourceServerConfig.java
  5. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationSuccessEventHandler.java
  6. 4 4
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java
  7. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/service/CustomAuthenticationKeyGenerator.java
  8. 2 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/service/CustomTokenServices.java
  9. 20 5
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/CbsQrCodeScanServiceImpl.java
  10. 25 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/OpenMutualTLSController.java
  11. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  12. 10 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendanceDto.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  14. 20 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  15. 13 5
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  16. 1 1
      mec-common/common-core/src/main/java/com/ym/mec/common/security/BaseAuthenticationEntryPoint.java

+ 2 - 2
mec-application/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java

@@ -98,8 +98,8 @@ public class TeacherCourseScheduleController extends BaseController {
 
     @ApiOperation(value = "获取最近的一节课")
     @PostMapping("/getRecentCourseSchedule")
-    public HttpResponseResult<CourseScheduleDto> getRecentCourseSchedule(){
-        return succeed(scheduleService.getRecentCourseSchedule(sysUserService.getUserId()));
+    public HttpResponseResult<CourseScheduleDto> getRecentCourseSchedule(Long courseId){
+        return succeed(scheduleService.getRecentCourseSchedule(sysUserService.getUserId(),courseId));
     }
 
     @ApiOperation(value = "根据月份获取该月历史有课的日期")

+ 8 - 0
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/client/SysUserFeignService.java

@@ -7,11 +7,13 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.common.config.FeignConfiguration;
 import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.ApiOperation;
+import org.json.JSONObject;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 @FeignClient(contextId = "sysUserFeignService", name = "auth-server", configuration = { FeignConfiguration.class }, fallback = SysUserFeignServiceFallback.class)
 public interface SysUserFeignService {
@@ -57,4 +59,10 @@ public interface SysUserFeignService {
 
 	@PostMapping(value = "open/qrcode/login")
 	CbsQrCodeScanWrapper.QrCodeScanToken login(@RequestBody CbsQrCodeScanWrapper.QrCodeScanReq req);
+
+	@PostMapping(value = "smsLogin")
+	HttpResponseResult<Map<String,Object>> smsLogin(@RequestParam("phone")String phone,
+													@RequestParam("clientId")String clientId,
+													@RequestParam("clientType")String clientType,
+													@RequestParam("clientSecret")String clientSecret);
 }

+ 14 - 6
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/client/fallback/SysUserFeignServiceFallback.java

@@ -1,15 +1,15 @@
 package com.ym.mec.auth.api.client.fallback;
 
-import java.util.List;
-import java.util.Map;
-
 import com.dayaedu.cbs.openfeign.wrapper.qrcode.CbsQrCodeScanWrapper;
-import com.ym.mec.auth.api.dto.SysUserQueryInfo;
-import org.springframework.stereotype.Component;
-
 import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.dto.SysUserQueryInfo;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.common.entity.HttpResponseResult;
+import org.json.JSONObject;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+import java.util.Map;
 
 //@Component
 public class SysUserFeignServiceFallback implements SysUserFeignService {
@@ -73,4 +73,12 @@ public class SysUserFeignServiceFallback implements SysUserFeignService {
 		return null;
 	}
 
+	@Override
+	public HttpResponseResult<Map<String,Object>> smsLogin(@RequestParam("phone")String phone,
+														   @RequestParam("clientId")String clientId,
+														   @RequestParam("clientType")String clientType,
+														   @RequestParam("clientSecret")String clientSecret) {
+		return null;
+	}
+
 }

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

@@ -28,7 +28,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                 .authorizeRequests().antMatchers(
                         "/task/**", "/user/updatePassword", "/user/noAuth/queryUserByPhone",
                         "/user/queryUserByPhone", "/user/queryClient", "/user/add",
-                        "/user/queryUserById/*","/open/qrcode/*",
+                        "/user/queryUserById/*","/open/**",
                         "/queryUserInfo","/api/queryUserInfo").hasIpAddress("0.0.0.0/0")
                 .anyRequest().authenticated().and().httpBasic();
     }

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationSuccessEventHandler.java

@@ -128,7 +128,7 @@ public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuth
 		sysUserLoginLogService.insert(sysUserLoginLog);
 		
 		try {
-			String clientId = request.getParameter("clientId").replace("QR_", "");
+			String clientId = request.getParameter("clientId");
 			String clientSecret = request.getParameter("clientSecret");
 			if (clientId == null || clientSecret == null) {
 				throw new UnapprovedClientAuthenticationException("请求头中client信息为空");

+ 4 - 4
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java

@@ -59,7 +59,7 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
         String clientId = loginEntity.getClientId();
 
         // 验证码验证
-        if (!clientId.startsWith("QR_") && !smsCodeService.verifyValidCode(phone, smsCode)) {
+        if (!loginEntity.getClientId().toLowerCase().startsWith("qr_") && !smsCodeService.verifyValidCode(phone, smsCode)) {
             throw new BadCredentialsException("验证码校验失败");
         }
 
@@ -71,7 +71,7 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 
         SysUserInfo userInfo;
 
-        if (clientId.startsWith("QR_")) {
+        /*if (clientId.startsWith("QR_")) {
             Object data = redisCache.get(loginEntity.getPhone());
             if (data == null) {
                 throw new LockedException("用户不存在");
@@ -86,8 +86,8 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
                 }
             }
         } else {
-            userInfo = sysUserService.queryUserInfoByPhone(phone);
-        }
+        }*/
+        userInfo = sysUserService.queryUserInfoByPhone(phone);
 
 		if (userInfo == null) {
 

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/service/CustomAuthenticationKeyGenerator.java

@@ -27,7 +27,7 @@ public class CustomAuthenticationKeyGenerator extends DefaultAuthenticationKeyGe
 			values.put(USERNAME, StringUtils.substringAfter(authentication.getName(), ":"));
 		}
 		String clientId = authorizationRequest.getClientId();
-		clientId = clientId.replace("QR_", "");
+//		clientId = clientId.replace("QR_", "");
 		values.put(CLIENT_ID, clientId);
 		if (authorizationRequest.getScope() != null) {
 			values.put(SCOPE, OAuth2Utils.formatParameterList(new TreeSet<String>(authorizationRequest.getScope())));

+ 2 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/service/CustomTokenServices.java

@@ -234,7 +234,8 @@ public class CustomTokenServices implements AuthorizationServerTokenServices, Re
 
 		OAuth2Authentication authentication = tokenStore.readAuthentication(accessToken);
 
-		if (StringUtils.equalsIgnoreCase("system", authentication.getOAuth2Request().getClientId())) {
+		if (StringUtils.equalsIgnoreCase("system", authentication.getOAuth2Request().getClientId())
+		|| StringUtils.equalsIgnoreCase("qr_teacher", authentication.getOAuth2Request().getClientId())) {
 			int validitySeconds = getAccessTokenValiditySeconds(authentication.getOAuth2Request());
 			if (validitySeconds > 0) {
 				oAuth2AccessToken.setExpiration(new Date(System.currentTimeMillis() + (validitySeconds * 1000L)));

+ 20 - 5
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/CbsQrCodeScanServiceImpl.java

@@ -1,16 +1,20 @@
 package com.ym.mec.auth.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.dayaedu.cbs.openfeign.wrapper.qrcode.CbsQrCodeScanWrapper;
+import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.core.service.CustomTokenServices;
 import com.ym.mec.auth.service.SysUserService;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import org.springframework.http.HttpStatus;
-import org.springframework.security.oauth2.common.OAuth2AccessToken;
 import org.springframework.security.oauth2.provider.OAuth2Authentication;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.Map;
+import java.util.UUID;
 
 @Service
 public class CbsQrCodeScanServiceImpl{
@@ -19,6 +23,8 @@ public class CbsQrCodeScanServiceImpl{
     private CustomTokenServices customTokenServices;
     @Resource
     private SysUserService sysUserService;
+    @Resource
+    private SysUserFeignService sysUserFeignService;
 
     public CbsQrCodeScanWrapper.UserInfo userInfo(CbsQrCodeScanWrapper.QrCodeScanUserInfoReq req) {
         CbsQrCodeScanWrapper.UserInfo userInfo = new CbsQrCodeScanWrapper.UserInfo();
@@ -28,15 +34,24 @@ public class CbsQrCodeScanServiceImpl{
     }
 
     public CbsQrCodeScanWrapper.QrCodeScanToken login(CbsQrCodeScanWrapper.QrCodeScanReq req) {
+        //校验是否过期
         OAuth2Authentication auth2Authentication = customTokenServices.loadAuthentication(req.getPassword());
         String phone = auth2Authentication.getName().split(":")[1];
         SysUser sysUser = sysUserService.queryByPhone(phone);
         if (sysUser == null) {
             throw new BizException(HttpStatus.UNAUTHORIZED.value(), "用户不存在");
         }
-        OAuth2AccessToken accessToken = customTokenServices.newAccessToken(auth2Authentication);
-        CbsQrCodeScanWrapper.QrCodeScanToken qrCodeScanToken = new CbsQrCodeScanWrapper.QrCodeScanToken();
-        qrCodeScanToken.setTokenData(accessToken.getValue());
-        return qrCodeScanToken;
+        //调用登陆接口
+        HttpResponseResult<Map<String,Object>> result = sysUserFeignService.smsLogin(phone, "qr_teacher", UUID.randomUUID().toString(), "qr_teacher");
+        if (result != null){
+            if(result.getCode() != 200){
+                throw new BizException("扫码登陆失败", result.getMsg());
+            }
+            CbsQrCodeScanWrapper.QrCodeScanToken qrCodeScanToken = new CbsQrCodeScanWrapper.QrCodeScanToken();
+            JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(result.getData().get("authentication")));
+            qrCodeScanToken.setTokenData(jsonObject.getString("access_token"));
+            return qrCodeScanToken;
+        }
+        throw new BizException("扫码登陆失败", "调用登陆接口失败");
     }
 }

+ 25 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/OpenMutualTLSController.java

@@ -0,0 +1,25 @@
+package com.ym.mec.auth.web.controller;
+
+import com.microsvc.toolkit.common.response.template.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/open/mutualTLS")
+@Api(tags = "HTTPS双向认证")
+public class OpenMutualTLSController {
+
+    @ApiOperation(value = "HTTPS双向认证查询")
+    @GetMapping(value = "query")
+    public R<Boolean> queryByParamNameList() {
+        return R.from(true);
+    }
+
+}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -2093,5 +2093,5 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     void configCourseware(@Param("courseId") Long courseId, @Param("coursewareDetailId") String coursewareDetailId);
 
     //获取最近的一节线下课
-    CourseScheduleDto getRecentCourseSchedule(@Param("userId") Integer userId);
+    CourseScheduleDto getRecentCourseSchedule(@Param("userId") Integer userId, @Param("courseId") Long courseId);
 }

+ 10 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendanceDto.java

@@ -1,6 +1,5 @@
 package com.ym.mec.biz.dal.dto;
 
-import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.enums.*;
 import io.swagger.annotations.ApiModelProperty;
@@ -110,6 +109,16 @@ public class TeacherAttendanceDto {
 
     @ApiModelProperty(value = "课程规划")
     private String coursePlan;
+    @ApiModelProperty(value = "关联课件编号")
+    private String coursewareDetailId;
+
+    public String getCoursewareDetailId() {
+        return coursewareDetailId;
+    }
+
+    public void setCoursewareDetailId(String coursewareDetailId) {
+        this.coursewareDetailId = coursewareDetailId;
+    }
 
     public TeachModeEnum getTeachMode() {
         return teachMode;

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

@@ -171,7 +171,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	/**
 	 * 获取最近的一节课
 	 */
-	CourseScheduleDto getRecentCourseSchedule(Integer userId);
+	CourseScheduleDto getRecentCourseSchedule(Integer userId,Long courseId);
 
 	/**
 	 * @describe 根据日期获取

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

@@ -1350,8 +1350,26 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     }
 
 	@Override
-	public CourseScheduleDto getRecentCourseSchedule(Integer userId) {
-		return courseScheduleDao.getRecentCourseSchedule(userId);
+	public CourseScheduleDto getRecentCourseSchedule(Integer userId,Long courseId) {
+		CourseScheduleDto courseSchedule = courseScheduleDao.getRecentCourseSchedule(userId,courseId);
+		if(Objects.nonNull(courseSchedule)){
+			if (Objects.nonNull(courseSchedule.getClassGroupId())) {
+				List<StudentNameAndPhoneDto> courseStudentNameAndPhone = classGroupStudentMapperDao.findCourseStudentNameAndPhone(courseSchedule.getId().intValue());
+				if(!CollectionUtils.isEmpty(courseStudentNameAndPhone)){
+					List<String> studentNames = courseStudentNameAndPhone.stream().filter(s->Objects.nonNull(s)&&Objects.nonNull(s.getUserName())).map(StudentNameAndPhoneDto::getUserName).collect(Collectors.toList());
+					courseSchedule.setStudentNames(StringUtils.join(studentNames, ","));
+//					courseSchedule.setStudents(courseStudentNameAndPhone);
+				}
+			}
+			Map<Integer, Long> studentNumCourseMap = MapUtil.convertIntegerMap(studentAttendanceDao.countStudentAttendancesByCourses(Collections.singletonList(courseSchedule.getId())));
+			Long studentNum = studentNumCourseMap.get(courseSchedule.getId());
+			if (Objects.nonNull(studentNum)) {
+				courseSchedule.setIsCallNames(studentNum > 0 ? YesOrNoEnum.YES : YesOrNoEnum.NO);
+			} else {
+				courseSchedule.setIsCallNames(YesOrNoEnum.NO);
+			}
+		}
+		return courseSchedule;
 	}
 
 	// 数据整理

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

@@ -492,6 +492,7 @@
         <result column="total_class_times_" property="totalClassTimes"/>
         <result column="current_class_times_" property="currentClassTimes"/>
         <result column="student_num_" property="studentNum"/>
+        <result column="courseware_detail_id_" property="coursewareDetailId"/>
     </resultMap>
 
     <select id="getCurrentCourseDetail"
@@ -516,7 +517,8 @@
                s.longitude_latitude_,
                su.real_name_                                     teacher_name_,
                ta.sign_in_time_,
-               cs.teach_mode_
+               cs.teach_mode_,
+               cs.courseware_detail_id_
         FROM course_schedule cs
                  LEFT JOIN class_group cg ON cs.class_group_id_ = cg.id_
                  LEFT JOIN music_group mg ON cg.music_group_id_ = mg.id_
@@ -776,10 +778,16 @@
         LEFT JOIN class_group cg ON cs.class_group_id_ = cg.id_
         LEFT JOIN school s ON cs.schoole_id_ = s.id_
         LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_ AND ta.teacher_id_=#{userId}
-        WHERE cs.del_flag_ = 0 AND cs.is_lock_ = 0 AND cs.merge_flag_ = 0
-        AND cs.class_date_ &lt;= DATE_FORMAT(NOW(),'%Y%m%d')
-        AND cs.status_ IN ('NOT_START','UNDERWAY')
-        AND csts.user_id_ = #{userId} AND cs.pre_course_flag_ != 1 LIMIT 1
+        WHERE cs.del_flag_ = 0 AND cs.is_lock_ = 0 AND cs.merge_flag_ = 0 AND cs.pre_course_flag_ != 1
+        AND csts.user_id_ = #{userId}
+        <if test="courseId != null">
+            AND cs.id_ = #{courseId}
+        </if>
+        <if test="courseId == null">
+            AND cs.class_date_ >= DATE_FORMAT(NOW(),'%Y%m%d')
+            AND cs.status_ IN ('NOT_START','UNDERWAY')
+        </if>
+        ORDER BY cs.class_date_,cs.start_class_time_ LIMIT 1
     </select>
 
     <select id="getTeacherCourseSchedulesWithDate" resultMap="courseScheduleDto">

+ 1 - 1
mec-common/common-core/src/main/java/com/ym/mec/common/security/BaseAuthenticationEntryPoint.java

@@ -39,7 +39,7 @@ public class BaseAuthenticationEntryPoint implements AuthenticationEntryPoint {
 			errorCode = HttpServletResponse.SC_FORBIDDEN;
 		}
 
-		HttpResponseResult result = new HttpResponseResult(false, errorCode, null, e.getMessage());
+		HttpResponseResult result = new HttpResponseResult(false, errorCode, null, "登录过期,请重新登录");
 
 		ObjectMapper objectMapper = new ObjectMapper();