Ver código fonte

Merge branch 'master' into payment-river

周箭河 5 anos atrás
pai
commit
124989dc73

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupStudentMapperDao.java

@@ -244,6 +244,9 @@ public interface ClassGroupStudentMapperDao extends BaseDAO<Long, ClassGroupStud
     List<Map<Integer, Integer>> countClassGroupsStudentNum(@Param("classGroupIds") List<Integer> classGroupIds,
                                                            @Param("status")ClassGroupStudentStatusEnum status);
 
+    List<Map<String, Integer>> countGroupAllStudentNum(@Param("groupIds") List<String> groupIds,
+                                                        @Param("groupType") GroupType groupType);
+
     /**
      * @param classGroupId: 班级编号
      * @return java.util.List<java.util.Map < java.lang.Integer, java.lang.Integer>>

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

@@ -44,6 +44,10 @@ public class CourseScheduleDto extends CourseSchedule {
     @ApiModelProperty(value = "教师角色")
     private TeachTypeEnum teacherRole;
 
+    @ApiModelProperty(value = "投诉状态")
+    private Integer complaintStatus;
+
+
     private String subjectName;
 
     private String subjectId;
@@ -160,6 +164,14 @@ public class CourseScheduleDto extends CourseSchedule {
         this.groupName = groupName;
     }
 
+    public Integer getComplaintStatus() {
+        return complaintStatus;
+    }
+
+    public void setComplaintStatus(Integer complaintStatus) {
+        this.complaintStatus = complaintStatus;
+    }
+
     public Integer getExpectStudentNum() {
         return expectStudentNum;
     }

+ 5 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/UploadFileService.java

@@ -14,7 +14,8 @@ import org.springframework.stereotype.Service;
 
 import com.ym.mec.common.entity.UploadReturnBean;
 import com.ym.mec.common.exception.BizException;
-import com.ym.mec.thirdparty.storage.StoragePlugin;
+import com.ym.mec.thirdparty.storage.StoragePluginContext;
+import com.ym.mec.thirdparty.storage.provider.AliyunOssStoragePlugin;
 import com.ym.mec.util.upload.UploadUtil;
 
 /** 
@@ -24,7 +25,7 @@ import com.ym.mec.util.upload.UploadUtil;
 public class UploadFileService {
 
 	@Autowired
-	private StoragePlugin storagePlugin;
+	private StoragePluginContext storagePluginContext;
 
 	/** 最大上传大小,单位kb */
 	@Value("${common.upload.maxSize:153600}")
@@ -66,7 +67,8 @@ public class UploadFileService {
 			return uploadReturn;
 		}
 
-		String url = storagePlugin.uploadFile(staticFloder + folder, file);
+		//String url = storagePlugin.uploadFile(staticFloder + folder, file);
+		String url = storagePluginContext.uploadFile(AliyunOssStoragePlugin.PLUGIN_NAME,staticFloder + folder, file);
 
 		FileUtils.deleteQuietly(file);
 

+ 8 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java

@@ -57,7 +57,8 @@ import com.ym.mec.biz.service.SysUserTsignService;
 import com.ym.mec.biz.service.VipGroupService;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.thirdparty.eseal.ESealPlugin;
-import com.ym.mec.thirdparty.storage.StoragePlugin;
+import com.ym.mec.thirdparty.storage.StoragePluginContext;
+import com.ym.mec.thirdparty.storage.provider.AliyunOssStoragePlugin;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.freemarker.FreemarkerTemplateEngine;
 import com.ym.mec.util.money.MoneyUtil;
@@ -107,7 +108,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 	private ESealPlugin eSealPlugin;
 
 	@Autowired
-	private StoragePlugin storagePlugin;
+	private StoragePluginContext storagePluginContext;
 
 	@Autowired
 	private GoodsService goodsService;
@@ -235,7 +236,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		// 上传到oss
 		String dateStrOss = dateFormatOss.format(date);
 		dateStrOss = "users/" + dateStrOss + "/" + DateUtil.getHour(date);
-		String pdfFilePath = storagePlugin.uploadFile(dateStrOss, srcFile);
+		String pdfFilePath = storagePluginContext.uploadFile(AliyunOssStoragePlugin.PLUGIN_NAME, dateStrOss, srcFile);
 
 		SysUserContracts sysUserContracts = new SysUserContracts();
 		sysUserContracts.setCreateTime(date);
@@ -380,7 +381,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		// 上传到oss
 		String dateStrOss = dateFormatOss.format(date);
 		dateStrOss = "musicCourses/" + dateStrOss + "/" + DateUtil.getHour(date);
-		String pdfFilePath = storagePlugin.uploadFile(dateStrOss, srcFile);
+		String pdfFilePath = storagePluginContext.uploadFile(AliyunOssStoragePlugin.PLUGIN_NAME, dateStrOss, srcFile);
 
 		SysUserContracts sysUserContracts = new SysUserContracts();
 		sysUserContracts.setCreateTime(date);
@@ -543,7 +544,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		// 上传到oss
 		String dateStrOss = dateFormatOss.format(date);
 		dateStrOss = "vipCourses/" + dateStrOss + "/" + DateUtil.getHour(date);
-		String pdfFilePath = storagePlugin.uploadFile(dateStrOss, srcFile);
+		String pdfFilePath = storagePluginContext.uploadFile(AliyunOssStoragePlugin.PLUGIN_NAME, dateStrOss, srcFile);
 
 		SysUserContracts sysUserContracts = new SysUserContracts();
 		sysUserContracts.setCreateTime(date);
@@ -710,7 +711,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		// 上传到oss
 		String dateStrOss = dateFormatOss.format(date);
 		dateStrOss = "goods/" + dateStrOss + "/" + DateUtil.getHour(date);
-		String pdfFilePath = storagePlugin.uploadFile(dateStrOss, srcFile);
+		String pdfFilePath = storagePluginContext.uploadFile(AliyunOssStoragePlugin.PLUGIN_NAME, dateStrOss, srcFile);
 
 		SysUserContracts sysUserContracts = new SysUserContracts();
 		sysUserContracts.setCreateTime(date);
@@ -893,7 +894,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		// 上传到oss
 		String dateStrOss = dateFormatOss.format(date);
 		dateStrOss = "practice/" + dateStrOss + "/" + DateUtil.getHour(date);
-		String pdfFilePath = storagePlugin.uploadFile(dateStrOss, srcFile);
+		String pdfFilePath = storagePluginContext.uploadFile(AliyunOssStoragePlugin.PLUGIN_NAME, dateStrOss, srcFile);
 
 		SysUserContracts sysUserContracts = new SysUserContracts();
 		sysUserContracts.setCreateTime(date);

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

@@ -129,7 +129,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		//上课时间
 		Date classStartDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
 		Date classEndDateTime = DateUtil.stringToDate(classDate + " " + endClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-		Date classEndDateAdd60Minutes = DateUtil.addMinutes(classEndDateTime, 60);
+		Date classEndDateAdd60Minutes = DateUtil.addMinutes(classEndDateTime, 180);
 		Date add20Minutes = DateUtil.addMinutes(classStartDateTime, advanceSignMinutes * -1);
 		if(teacherAttendance.getSignInTime() == null && teacherSignOutDto.getTeacherAttendanceInfo().getStatus().equals(SignStatusEnum.SIGN_IN.getCode())){
 

+ 29 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -319,7 +319,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         //获取vip课类型信息
         VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupCategoryId().intValue());
 
-        VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(vipGroup.getVipGroupApplyBaseInfo().getVipGroupCategoryId(), teacher.getTeacherOrganId());
+        VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(vipGroup.getVipGroupApplyBaseInfo().getVipGroupCategoryId(), vipGroup.getVipGroupApplyBaseInfo().getOrganId());
 
         if(Objects.isNull(vipGroupDefaultClassesUnitPrice)){
             vipGroupApplyBaseInfoDto.setAuditStatus(AuditStatusEnum.ING);
@@ -647,6 +647,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			if(dataList != null && dataList.size() > 0){
 				List<String> vipGroupIds = dataList.stream().map(vipGroup -> String.valueOf(vipGroup.getId())).distinct().collect(Collectors.toList());
 				List<Map<Long, Integer>> vipGroupOverCourses = courseScheduleDao.countGroupOverCourse(vipGroupIds,"VIP");
+				List<Map<String, Integer>> groupStudentNumMaps = classGroupStudentMapperDao.countGroupAllStudentNum(vipGroupIds, GroupType.VIP);
 				Map<String,Integer> vipGroupOverCourseMaps = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertIntegerMap(vipGroupOverCourses)),HashMap.class);
 				List<Integer> educationalTeacherIds=dataList.stream().filter(data -> Objects.nonNull(data.getEducationalTeacherId())).map(VipGroup::getEducationalTeacherId).collect(Collectors.toList());
 
@@ -659,6 +660,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				Map<String,Long> totalClassTimeMap = MapUtil.convertIntegerMap(courseScheduleDao.countTotalCourseScheduleNum(vipGroupIds,"VIP"));
 				Map<String,Long> currentClassTimeMap = MapUtil.convertIntegerMap(courseScheduleDao.countCourseScheduleNum(vipGroupIds,"VIP"));
 				Map<String,String> lastOverTimeMap = MapUtil.convertIntegerMap(courseScheduleDao.findLastOverTime(vipGroupIds));
+				Map<String,Long> groupStudentNumMap = MapUtil.convertIntegerMap(groupStudentNumMaps);
 
 				List<Map<String, BigDecimal>> groupCoursesUnitPriceMaps = courseScheduleStudentPaymentDao.findGroupCoursesUnitPrice(GroupType.VIP, vipGroupIds);
 				Map<String,BigDecimal> groupCoursesUnitPrice=new HashMap<>();
@@ -689,7 +691,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 					vipGroup.setTotalClassTimes(aLong==null?0:aLong.intValue());
 					Long aLong1 = currentClassTimeMap.get(vipGroup.getId() + "");
 					vipGroup.setCurrentClassTimes(aLong1==null?0:aLong1.intValue());
+
+					Long allStudentNum=groupStudentNumMap.get(vipGroup.getId().toString());
+					if(Objects.isNull(allStudentNum)){
+						allStudentNum=Long.valueOf(0);
+					}
+
 					if((Objects.isNull(aLong)||aLong<=0)
+							&&(allStudentNum<=0)
 							&&(VipGroupStatusEnum.NOT_START.equals(vipGroup.getStatus())
 							||VipGroupStatusEnum.APPLYING.equals(vipGroup.getStatus()))){
 						vipGroup.setEnableDelete(1);
@@ -2026,6 +2035,19 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         }
 
 		result.put("suplusCourseFee", bigDecimal);
+
+		if(VipGroupStatusEnum.APPLYING.equals(vipGroup.getStatus())){
+			StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.findByStudentVipGroup(vipGroupId, studentId, DealStatusEnum.SUCCESS.getCode());
+			if(Objects.nonNull(studentPaymentOrder)){
+				result.put("suplusCourseOriginalFee", studentPaymentOrder.getExpectAmount());
+				if(vipGroupCategory.getStudentNum()<=1){
+					result.put("suplusCourseFee", studentPaymentOrder.getExpectAmount().multiply(new BigDecimal(0.8)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+				}else{
+					result.put("suplusCourseFee", studentPaymentOrder.getExpectAmount().multiply(new BigDecimal(0.7)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+				}
+			}
+		}
+
 		return result;
 	}
 
@@ -2240,6 +2262,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 //			stopVipPush(vipGroup.getId(),vipGroup.getName());
     		return;
 		}
+    	if(VipGroupStatusEnum.APPLYING.equals(vipGroup.getStatus())){
+			Integer studentNum = classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId());
+			if(studentNum>0){
+				throw new BizException("无法停止课程,需要全部学员退学后,才能停止,请先操作学员退学。");
+			}
+		}
 		List<Map<Integer, BigDecimal>> maps = vipGroupDao.countSurplusCourseFee(vipGroupId);
     	if(CollectionUtils.isEmpty(maps)||(maps.size()==1&&Objects.isNull(maps.get(0)))){
 			if(courseScheduleIds != null && courseScheduleIds.size() > 0){

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

@@ -315,6 +315,22 @@
             class_group_id_
     </select>
 
+    <select id="countGroupAllStudentNum" resultType="map">
+        SELECT
+            music_group_id_ AS 'key',
+            COUNT( user_id_ ) AS 'value'
+        FROM
+          class_group_student_mapper
+        WHERE
+            music_group_id_ IN
+            <foreach collection="groupIds" item="groupId" open="(" close=")" separator=",">
+                #{groupId}
+            </foreach>
+            AND group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        GROUP BY
+        music_group_id_
+    </select>
+
     <select id="countClassGroupStudentNum" resultType="int">
         SELECT
             COUNT( user_id_ )

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

@@ -70,7 +70,7 @@
                 typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="attendance_status_" property="attendanceStatus"
                 typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-        <result column="complaint_status_" property="complaintsStatus"/>
+        <result column="complaint_status_" property="complaintStatus"/>
         <result column="student_id_" property="studentId"/>
     </resultMap>
 

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

@@ -591,6 +591,8 @@
           LEFT JOIN sys_user su ON t.id_=su.id_
         WHERE
             FIND_IN_SET(#{subjectId}, t.subject_id_)
+            AND su.del_flag_=0 AND su.lock_flag_=0
+            AND t.is_support_extra_practice_lesson_=1
             AND (t.organ_id_ = #{studentOrganId} OR FIND_IN_SET(#{studentOrganId},t.flow_organ_range_))
             AND NOT EXISTS (SELECT
                 cs.actual_teacher_id_

+ 9 - 5
mec-teacher/src/main/java/com/ym/mec/teacher/controller/VipGroupCategoryController.java

@@ -42,16 +42,20 @@ public class VipGroupCategoryController extends BaseController {
 
 	@ApiOperation("全查询")
 	@GetMapping(value = "/queryAll")
-	public Object queryAll() {
+	public Object queryAll(Integer organId) {
 		SysUser user = sysUserFeignService.queryUserInfo();
 		if (Objects.isNull(user)) {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
 		}
-		Teacher teacher = teacherDao.get(user.getId());
-		if(Objects.isNull(teacher)){
-			return failed("教师信息不存在");
+		if(Objects.nonNull(organId)){
+			return succeed(vipGroupCategoryService.findAllByOrgan(organId.toString()));
+		}else{
+			Teacher teacher = teacherDao.get(user.getId());
+			if(Objects.isNull(teacher)){
+				return failed("教师信息不存在");
+			}
+			return succeed(vipGroupCategoryService.findAllByOrgan(teacher.getTeacherOrganId().toString()));
 		}
-		return succeed(vipGroupCategoryService.findAllByOrgan(teacher.getTeacherOrganId().toString()));
 	}
 
 	@ApiOperation("新增")

+ 6 - 0
mec-thirdparty/pom.xml

@@ -104,6 +104,12 @@
 			<artifactId>feign-form-spring</artifactId>
 			<version>2.0.5</version>
 		</dependency>
+        
+		<dependency>
+			<groupId>com.ksyun</groupId>
+			<artifactId>ks3-kss-java-sdk</artifactId>
+			<version>0.8.14</version>
+		</dependency>
 	</dependencies>
 
 </project>

+ 2 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/StoragePlugin.java

@@ -4,6 +4,8 @@ import java.io.File;
 import java.io.IOException;
 
 public interface StoragePlugin {
+	
+	String getName();
 
 	/**
 	 * 上传文件

+ 16 - 75
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/StoragePluginContext.java

@@ -1,97 +1,38 @@
 package com.ym.mec.thirdparty.storage;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
 import org.springframework.stereotype.Component;
 
 import com.ym.mec.thirdparty.exception.ThirdpartyException;
-import com.ym.mec.thirdparty.storage.provider.AliyunOssStoragePlugin;
 
 @Component
-public class StoragePluginContext implements ApplicationContextAware, InitializingBean {
+public class StoragePluginContext {
 
-	@Value("${thirdparty.storagePluginName:Aliyun}")
-	private String storagePluginName;
-
-	private ApplicationContext applicationContext;
-
-	private final Map<String, String> mapper = new HashMap<String, String>() {
-		/**
-		 * 
-		 */
-		private static final long serialVersionUID = -9071481806931421021L;
-
-		{
-			put(AliyunOssStoragePlugin.getName(), StringUtils.uncapitalize(AliyunOssStoragePlugin.class.getSimpleName()));
-		}
-	};
-
-	private StoragePlugin storagePlugin;
-
-	@Override
-	public void afterPropertiesSet() throws Exception {
-		if (StringUtils.isBlank(storagePluginName)) {
-			throw new ThirdpartyException("存储插件变量thirdparty.storagePlugName不能为空");
-		}
-
-		storagePlugin = getStoragePlugin(storagePluginName);
-
-		if (storagePlugin == null) {
-			throw new ThirdpartyException("存储插件{}不存在", storagePluginName);
+	private static final Map<String, StoragePlugin> mapper = new HashMap<String, StoragePlugin>();
+	
+	public static void addStoragePlugin(StoragePlugin storagePlugin) {
+		if (mapper.containsKey(storagePlugin.getName())) {
+			throw new ThirdpartyException("存储插件:{}已存在", storagePlugin.getName());
 		}
+		mapper.put(storagePlugin.getName(), storagePlugin);
 	}
-
-	@Override
-	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
-		this.applicationContext = applicationContext;
-	}
-
-	/**
-	 * 上传文件
-	 * @param vendors 供应商
-	 * @param folderName 文件夹
-	 * @param file 需要上传的文件
-	 * @return 返回文件路径
-	 */
-	public String uploadFile(String folderName, File file) {
-
-		return storagePlugin.uploadFile(folderName, file);
-	}
-
-	/**
-	 * 下载文件
-	 * @param vendors 供应商
-	 * @param folderName 文件夹
-	 * @param fileName 文件名称
-	 * @return 返回文件内容
-	 * @throws IOException
-	 */
-	public byte[] getFile(String folderName, String fileName) throws IOException {
-
-		return storagePlugin.getFile(folderName, fileName);
+	
+	public String uploadFile(String storagePluginName, String folderName, File file){
+		StoragePlugin StoragePlugin = getStoragePlugin(storagePluginName);
+		return StoragePlugin.uploadFile(folderName, file);
 	}
 
-	public void setStoragePluginName(String storagePluginName) {
-		this.storagePluginName = storagePluginName;
-	}
+	private StoragePlugin getStoragePlugin(String storagePluginName) {
+		StoragePlugin storagePlugin = mapper.get(storagePluginName);
 
-	private StoragePlugin getStoragePlugin(String vendors) {
-		String beanId = mapper.get(vendors);
-
-		if (StringUtils.isBlank(beanId)) {
-			throw new ThirdpartyException("存储提供方不存在");
+		if (storagePlugin == null) {
+			throw new ThirdpartyException("存储插件:{}不存在", storagePluginName);
 		}
 
-		return applicationContext.getBean(beanId, StoragePlugin.class);
+		return storagePlugin;
 	}
 
 }

+ 8 - 3
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/provider/AliyunOssStoragePlugin.java

@@ -3,7 +3,7 @@ package com.ym.mec.thirdparty.storage.provider;
 import java.io.File;
 import java.io.IOException;
 
-import org.apache.commons.io.IOUtils;
+import org.apache.poi.util.IOUtils;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Value;
@@ -14,10 +14,13 @@ import com.aliyun.oss.OSSClient;
 import com.aliyun.oss.model.OSSObject;
 import com.ym.mec.thirdparty.exception.ThirdpartyException;
 import com.ym.mec.thirdparty.storage.StoragePlugin;
+import com.ym.mec.thirdparty.storage.StoragePluginContext;
 
 @Component
 public class AliyunOssStoragePlugin implements StoragePlugin, InitializingBean, DisposableBean {
 
+	public final static String PLUGIN_NAME = "Aliyun";
+
 	@Value("${storage.oss.endpoint:oss-cn-beijing.aliyuncs.com}")
 	private String endpoint;
 
@@ -32,8 +35,8 @@ public class AliyunOssStoragePlugin implements StoragePlugin, InitializingBean,
 
 	private OSSClient ossClient;
 
-	public static String getName() {
-		return "Aliyun";
+	public String getName() {
+		return PLUGIN_NAME;
 	}
 
 	@Override
@@ -57,6 +60,8 @@ public class AliyunOssStoragePlugin implements StoragePlugin, InitializingBean,
 		conf.setSupportCname(true);
 
 		ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret, conf);
+		
+		StoragePluginContext.addStoragePlugin(this);
 	}
 
 	@Override

+ 145 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/provider/KS3StoragePlugin.java

@@ -0,0 +1,145 @@
+package com.ym.mec.thirdparty.storage.provider;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.poi.util.IOUtils;
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import com.ksyun.ks3.dto.CannedAccessControlList;
+import com.ksyun.ks3.dto.GetObjectResult;
+import com.ksyun.ks3.dto.Ks3Object;
+import com.ksyun.ks3.http.HttpClientConfig;
+import com.ksyun.ks3.service.Ks3;
+import com.ksyun.ks3.service.Ks3Client;
+import com.ksyun.ks3.service.Ks3ClientConfig;
+import com.ksyun.ks3.service.Ks3ClientConfig.PROTOCOL;
+import com.ksyun.ks3.service.request.GetObjectRequest;
+import com.ksyun.ks3.service.request.PutObjectRequest;
+import com.ym.mec.thirdparty.exception.ThirdpartyException;
+import com.ym.mec.thirdparty.storage.StoragePlugin;
+import com.ym.mec.thirdparty.storage.StoragePluginContext;
+
+@Component
+public class KS3StoragePlugin implements StoragePlugin, InitializingBean, DisposableBean {
+
+	public final static String PLUGIN_NAME = "Ksyun";
+
+	@Value("${storage.oss.endpoint:ks3-cn-beijing.ksyun.com}")
+	private String endpoint;
+
+	@Value("${storage.oss.accessKeyId:AKLTtTeIbadpRG-pil4S0Q4m-Q}")
+	private String accessKeyId;
+
+	@Value("${storage.oss.accessKeySecret:OB1HmNOfDNW95wHoxMkP6IPFZXormk2ngA800TkvKAw7ozhiJGRqrMnnV8ZrAU3WRQ==}")
+	private String accessKeySecret;
+
+	@Value("${storage.oss.bucketName:daya}")
+	private String bucketName;
+
+	private Ks3 client;
+
+	public String getName() {
+		return PLUGIN_NAME;
+	}
+
+	@Override
+	public void afterPropertiesSet() throws Exception {
+		Ks3ClientConfig config = new Ks3ClientConfig();
+		config.setEndpoint(endpoint);// 如果使用自定义域名,设置endpoint为自定义域名,同时设置domainMode为true
+		/**
+		 * true:表示以自定义域名访问 
+		 * false:表示以KS3的外网域名或内网域名访问
+		 * 默认为false
+		 */
+		config.setDomainMode(false);
+		config.setProtocol(PROTOCOL.http);
+
+		/**
+		 * true表示以   endpoint/{bucket}/{key}的方式访问
+		 * false表示以  {bucket}.endpoint/{key}的方式访问
+		 * 如果domainMode设置为true,pathStyleAccess可忽略设置
+		 */
+		config.setPathStyleAccess(false);
+		HttpClientConfig hconfig = new HttpClientConfig();
+		// 在HttpClientConfig中可以设置httpclient的相关属性,比如代理,超时,重试等。
+		config.setHttpClientConfig(hconfig);
+		client = new Ks3Client(accessKeyId, accessKeySecret, config);
+
+		StoragePluginContext.addStoragePlugin(this);
+	}
+
+	@Override
+	public String uploadFile(String folderName, File file) {
+		if (!file.exists()) {
+			throw new ThirdpartyException("需要上传的文件[{}]不存在", file.getAbsolutePath());
+		}
+
+		if (folderName.endsWith("/")) {
+			folderName = folderName.substring(0, folderName.length() - 1);
+		}
+
+		PutObjectRequest request = new PutObjectRequest(bucketName, folderName + "/" + file.getName(), file);
+
+		// 上传一个公开文件
+		request.setCannedAcl(CannedAccessControlList.PublicRead);
+
+		client.putObject(request);
+
+		return "https://" + bucketName + "." + endpoint + "/" + folderName + "/" + file.getName();
+	}
+
+	@Override
+	public byte[] getFile(String folderName, String fileName) throws IOException {
+		GetObjectRequest request = new GetObjectRequest(bucketName, folderName + "/" + fileName);
+		GetObjectResult result = client.getObject(request);
+
+		Ks3Object object = result.getObject();
+		try {
+			return IOUtils.toByteArray(object.getObjectContent());
+		} finally {
+			if (object != null) {
+				object.close();
+			}
+		}
+	}
+
+	@Override
+	public void destroy() throws Exception {
+	}
+
+	public void setEndpoint(String endpoint) {
+		this.endpoint = endpoint;
+	}
+
+	public void setAccessKeyId(String accessKeyId) {
+		this.accessKeyId = accessKeyId;
+	}
+
+	public void setAccessKeySecret(String accessKeySecret) {
+		this.accessKeySecret = accessKeySecret;
+	}
+
+	public void setBucketName(String bucketName) {
+		this.bucketName = bucketName;
+	}
+
+	public static void main(String[] args) throws Exception {
+		KS3StoragePlugin aliyunOssStorageService = new KS3StoragePlugin();
+		aliyunOssStorageService.setAccessKeyId("LTAIwZW9XqrfsZ4r");
+		aliyunOssStorageService.setAccessKeySecret("5uDsNZmHMxcnxav8w9byII4zcPpu5G");
+		aliyunOssStorageService.setBucketName("yooma-test");
+		aliyunOssStorageService.setEndpoint("oss-cn-beijing.aliyuncs.com");
+		aliyunOssStorageService.afterPropertiesSet();
+
+		File file = new File("e:/var/2.jpg");
+		System.out.println(aliyunOssStorageService.uploadFile("aaa", file));
+
+		System.err.println("***********" + aliyunOssStorageService.getFile("aaa", file.getName()).length);
+
+		aliyunOssStorageService.destroy();
+	}
+}

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

@@ -71,6 +71,17 @@ public class StudentManageController extends BaseController {
         return succeed(studentManageService.findStudentsByOrganId(queryInfo));
     }
 
+    @ApiOperation(value = "获取指定分部学生列表")
+    @GetMapping("/queryOrganStudentList")
+    @PreAuthorize("@pcs.hasPermissions('studentManage/queryOrganStudentList')")
+    public Object queryOrganStudentList(StudentManageQueryInfo queryInfo){
+        if(StringUtils.isBlank(queryInfo.getOrganId())){
+            return failed("请指定分部");
+        }
+        queryInfo.setIsExport(false);
+        return succeed(studentManageService.findStudentsByOrganId(queryInfo));
+    }
+
     @ApiOperation(value = "学员注册")
     @PostMapping("/register")
     @PreAuthorize("@pcs.hasPermissions('studentManage/register')")