Browse Source

Merge remote-tracking branch 'origin/master'

weifanli 2 years ago
parent
commit
01dabc61c1
14 changed files with 155 additions and 89 deletions
  1. 2 2
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UploadFileController.java
  2. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/constant/CourseConstant.java
  3. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroupMemberAudit.java
  4. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  5. 2 11
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  6. 25 15
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  7. 10 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java
  8. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonPurchaseStudent.java
  9. 1 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupDetailMapper.xml
  10. 46 24
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UploadFileController.java
  11. 1 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/config/ResourceServerConfig.java
  12. 6 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseGroupController.java
  13. 0 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseScheduleController.java
  14. 46 24
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UploadFileController.java

+ 2 - 2
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UploadFileController.java

@@ -32,7 +32,7 @@ public class UploadFileController extends BaseController {
     @Autowired
     private UploadFileService uploadFileService;
 
-    @PostMapping(value = "uploadFile")
+    @PostMapping("/uploadFile")
     public Object uploadFile(@ApiParam(value = "上传的文件", required = true) @RequestParam("file") MultipartFile file) {
         try {
             if (file != null && StringUtils.isNotBlank(file.getOriginalFilename())) {
@@ -55,7 +55,7 @@ public class UploadFileController extends BaseController {
                     "2.提供js sdk中的key值,例\"key\":\"20150115/中文/${filename}\""),
             @ApiImplicitParam(name = "unknowValueField", dataType = "List", value = "对于用户无法确定表单值的放在unknownValueField中(比如有的上传控件会添加一些表单项,但表单项的值可能是随机的)"),
     })
-    @ApiOperation(value="获取上传文件签名",notes = "{\n" +
+    @ApiOperation(value = "获取上传文件签名", notes = "{\n" +
             "    \"fileName\":\"aa\",\n" +
             "    \"postData\":{\n" +
             "        \"acl\":\"public-read\",\n" +

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/constant/CourseConstant.java

@@ -9,5 +9,5 @@ public interface CourseConstant {
      * <p>用途将未写入数据库的排课数据写入缓存,然后生成日历及陪练课买课时校验课时将缓存时间拿出来比对
      * <p>返回结果 List<CourseTimeEntity>
      */
-    String LOCK_COURSE_TIME_INFO = String.join(":", LiveRoomConstant.COOLESHOW, CourseConstant.LOCK_COURSE_TIME_INFO, TEACHER_ID);
+    String LOCK_COURSE_TIME_INFO = String.join(":", LiveRoomConstant.COOLESHOW, "LOCK_COURSE_TIME_INFO", TEACHER_ID);
 }

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroupMemberAudit.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
 
+import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -44,6 +45,7 @@ public class ImGroupMemberAudit implements Serializable {
 
     @TableField("audit_status_")
     @ApiModelProperty(value = "审核状态")
+    @EnumValue
     private AuditStatusEnum auditStatus = AuditStatusEnum.AUDITING;
 
     @TableField("create_time_")

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java

@@ -98,8 +98,8 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
      *              <p> - teacherId 老师id
      *              <p> - year 年
      *              <p> - month 月
-     *              <p> - day 日
-     *              <p> - singleCourseMinutes 单课时时长(包含休息时间)
+     *              <p> - singleCourseMinutes 单课时时长(不包含休息时间)
+     *              <p> - freeCourseMinutes 单课时休息时长
      * @return 返回传入时间当月每日的剩余时间段
      */
     List<CourseCalendarEntity> createLiveCourseCalendar(Map<String, Object> param);

+ 2 - 11
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -1,9 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
-
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -11,7 +8,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.constant.CourseConstant;
-import com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant;
 import com.yonge.cooleshow.biz.dal.dao.CourseGroupDao;
 import com.yonge.cooleshow.biz.dal.dto.CheckCourseTimeDto;
 import com.yonge.cooleshow.biz.dal.dto.LiveCourseGroupDto;
@@ -21,12 +17,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentCourseSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.CourseGroupEnum;
-import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
-
-import com.yonge.cooleshow.biz.dal.enums.StudentCourseEnum;
-
-import com.yonge.cooleshow.biz.dal.enums.TeacherSalaryEnum;
+import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
@@ -310,7 +301,7 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
      * @return 自动排课后的全部课时
      */
     private List<CourseTimeEntity> autoPlanningLiveCourseTime(Long teacherId, int totalCourseNum, List<CourseTimeEntity> paramTimeList, CourseScheduleEnum courseType) {
-        //是否跳过节假日  0:不跳过 1跳过
+        //是否跳过节假日
         boolean skipHoliday = false;
         //true 陪练课
         boolean courseTypeFlag = courseType.equals(CourseScheduleEnum.PRACTICE);

+ 25 - 15
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -46,6 +47,7 @@ import java.time.LocalDate;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.function.BiConsumer;
+import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -443,31 +445,37 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      */
     private List<CourseCalendarEntity> generatePracticeCalendar(TeacherFreeTime teacherTime, LocalDate firstDay, LocalDate lastDay) {
         //将老师设置的陪练课时间结构化   key::数字周几 1~7  value:具体的时间 开始时间-结束时间
-        Map<Integer, List<CourseTimeEntity>> teacherPracticeTime = getTeacherPracticeTime(teacherTime);
+        Map<Integer, JSONArray> teacherPracticeTime = getTeacherPracticeTime(teacherTime);
         //每日日期数据
         List<CourseCalendarEntity> list = new ArrayList<>();
-        //添加的天数
-        int addDay = 0;
+
         //获取每日日期数据
         while (firstDay.isBefore(lastDay) || firstDay.isEqual(lastDay)) {
             CourseCalendarEntity entity = new CourseCalendarEntity();
-            List<CourseTimeEntity> times = new ArrayList<>();
             //获取当前日期
             entity.setDate(firstDay.toString());
             //获取当前日期周几
             int weekNum = firstDay.getDayOfWeek().getValue();
-            List<CourseTimeEntity> timeEntities = teacherPracticeTime.get(weekNum);
-            if (CollectionUtils.isNotEmpty(timeEntities)) {
-                //将每日上课时间时间添加到日历中
-                opsCourseDayTime(addDay, entity, times, timeEntities);
-            }
+            JSONArray jsonArray = teacherPracticeTime.get(weekNum);
+            List<CourseTimeEntity> timeEntities = jsonArray.stream()
+                    .map(t -> getCourseTimeEntity(entity, (JSONObject) t))
+                    .collect(Collectors.toList());
+            entity.setCourseTime(timeEntities);
             list.add(entity);
             firstDay = firstDay.plusDays(1L);
-            addDay++;
         }
         return list;
     }
 
+    private CourseTimeEntity getCourseTimeEntity(CourseCalendarEntity entity, JSONObject t) {
+        //拼接时间
+        BiFunction<String, String, Date> canCatTime = (date, time) -> DateUtil.toDateTime(date + " " + time);
+        CourseTimeEntity timeEntity = new CourseTimeEntity();
+        timeEntity.setStartTime(canCatTime.apply(entity.getDate(), t.getString("startTime")));
+        timeEntity.setEndTime(canCatTime.apply(entity.getDate(), t.getString("endTime")));
+        return timeEntity;
+    }
+
     /**
      * 将每日上课时间时间添加到日历中
      *
@@ -491,15 +499,17 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      *
      * @return key::数字周几 1~7  value:具体的时间 开始时间-结束时间
      */
-    private Map<Integer, List<CourseTimeEntity>> getTeacherPracticeTime(TeacherFreeTime teacherTime) {
-        Map<Integer, List<CourseTimeEntity>> teacherPracticeTime = new HashMap<>();
+    private Map<Integer, JSONArray> getTeacherPracticeTime(TeacherFreeTime teacherTime) {
+        Map<Integer, JSONArray> teacherPracticeTime = new HashMap<>();
         //将老师设置的陪练课时间放入map中
         BiConsumer<String, Integer> timeCon = (timeStr, weekNum) -> {
             if (StringUtils.isBlank(timeStr)) {
                 return;
             }
-            List<CourseTimeEntity> timeEntityList = new ArrayList<>(JSONObject.parseArray(timeStr, CourseTimeEntity.class));
-            teacherPracticeTime.put(weekNum, timeEntityList);
+            JSONArray objects = JSONObject.parseArray(timeStr);
+            if (CollectionUtils.isNotEmpty(objects)) {
+                teacherPracticeTime.put(weekNum, objects);
+            }
         };
         timeCon.accept(teacherTime.getMonday(), 1);
         timeCon.accept(teacherTime.getTuesday(), 2);
@@ -983,7 +993,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * @Author: cy
      * @Date: 2022/4/26
      */
-    public List<TeacherSubjectPrice> teacherSubjectPrice(Long teacherId){
+    public List<TeacherSubjectPrice> teacherSubjectPrice(Long teacherId) {
         return teacherFreeTimeDao.selectPriceByTeacherId(teacherId);
     }
 }

+ 10 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java

@@ -576,14 +576,16 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         //result
         Map<String, Object> result = new HashMap<>();
         //{"day":"01","month":"05","year":"2022","singleCourseMinutes":60,"teacherId":4}
-        Map<String, Object> param = new HashMap<>();
-        param.put("day", "01");
-        param.put("month", "05");
-        param.put("year", "2022");
-        param.put("singleCourseMinutes", 60);
-        param.put("teacherId", 4);
-        List<CourseCalendarEntity> courseTimeEntities = courseScheduleService.createLiveCourseCalendar(param);
-        result.put("自动生成课时", courseTimeEntities);
+//        Map<String, Object> param = new HashMap<>();
+//        param.put("day", "01");
+//        param.put("month", "04");
+//        param.put("year", "2022");
+//        param.put("singleCourseMinutes", 60);
+//        param.put("teacherId", "4");
+//        param.put("studentId", 143);
+//        List<CourseCalendarEntity> courseTimeEntities = courseScheduleService.createPracticeCourseCalender(param);
+//        List<CourseCalendarEntity> courseTimeEntities = courseScheduleService.createLiveCourseCalendar(param);
+//        result.put("自动生成课时", courseTimeEntities);
 
         //获取房间信息
         RBucket<RoomInfoCache> speakerCache = redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, roomUid));

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonPurchaseStudent.java

@@ -12,6 +12,9 @@ import java.util.Date;
  */
 @ApiModel(value = "VideoLessonPurchaseStudent对象")
 public class VideoLessonPurchaseStudent extends BaseEntity {
+    @ApiModelProperty("用户id")
+    private Long userId;
+
     @ApiModelProperty("头像地址")
     private String avatar;
 
@@ -21,6 +24,14 @@ public class VideoLessonPurchaseStudent extends BaseEntity {
     @ApiModelProperty(value = "性别 0女 1男")
     private Integer gender;
 
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
     private java.util.Date createTime;
 
     public String getAvatar() {

+ 1 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupDetailMapper.xml

@@ -64,6 +64,7 @@
 	</select>
 	<select id="selectPageStudent" resultType="com.yonge.cooleshow.biz.dal.vo.VideoLessonPurchaseStudent">
 		SELECT
+		id_ AS userId,
 		<include refid="userDetail"/>
 		FROM sys_user
 		WHERE id_ IN

+ 46 - 24
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UploadFileController.java

@@ -1,13 +1,16 @@
 package com.yonge.cooleshow.student.controller;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiParam;
+import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.thirdparty.entity.UploadSign;
+import io.swagger.annotations.*;
 
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
@@ -17,32 +20,51 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.UploadReturnBean;
 import com.yonge.toolset.utils.upload.UploadUtil;
 
-/** 
+/**
  * 上传控制层
  */
 @RestController
 @Api(tags = "文件上传服务")
 public class UploadFileController extends BaseController {
 
-	private final static Logger LOGGER = LoggerFactory.getLogger(UploadFileController.class);
-
-	@Autowired
-	private UploadFileService uploadFileService;
-
-	@PostMapping(value = "uploadFile")
-	public Object uploadFile(@ApiParam(value = "上传的文件", required = true) @RequestParam("file") MultipartFile file) {
-		try {
-			if (file != null && StringUtils.isNotBlank(file.getOriginalFilename())) {
-				UploadReturnBean bean = uploadFileService.uploadFile(file.getInputStream(), UploadUtil.getExtension(file.getOriginalFilename()));
-				bean.setName(file.getOriginalFilename());
-				if (bean.isStatus()) {
-					return succeed(bean);
-				}
-				return failed(bean.getMessage());
-			}
-		} catch (Exception e) {
-			LOGGER.error("上传失败", e);
-		}
-		return failed("上传失败");
-	}
+    private final static Logger LOGGER = LoggerFactory.getLogger(UploadFileController.class);
+
+    @Autowired
+    private UploadFileService uploadFileService;
+
+    @PostMapping("/uploadFile")
+    public Object uploadFile(@ApiParam(value = "上传的文件", required = true) @RequestParam("file") MultipartFile file) {
+        try {
+            if (file != null && StringUtils.isNotBlank(file.getOriginalFilename())) {
+                UploadReturnBean bean = uploadFileService.uploadFile(file.getInputStream(), UploadUtil.getExtension(file.getOriginalFilename()));
+                bean.setName(file.getOriginalFilename());
+                if (bean.isStatus()) {
+                    return succeed(bean);
+                }
+                return failed(bean.getMessage());
+            }
+        } catch (Exception e) {
+            LOGGER.error("上传失败", e);
+        }
+        return failed("上传失败");
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "fileName", dataType = "String", value = "要上传的文件名称,不包含路径信息"),
+            @ApiImplicitParam(name = "postData", dataType = "Map", value = "1.如果使用js sdk上传的时候设置了ACL请设置,例\"acl\":\"public-read\"值要与SDK中一致,没有则删除该项</br>" +
+                    "2.提供js sdk中的key值,例\"key\":\"20150115/中文/${filename}\""),
+            @ApiImplicitParam(name = "unknowValueField", dataType = "List", value = "对于用户无法确定表单值的放在unknownValueField中(比如有的上传控件会添加一些表单项,但表单项的值可能是随机的)"),
+    })
+    @ApiOperation(value = "获取上传文件签名", notes = "{\n" +
+            "    \"fileName\":\"aa\",\n" +
+            "    \"postData\":{\n" +
+            "        \"acl\":\"public-read\",\n" +
+            "        \"key\":\"20150115/中文/${filename}\"\n" +
+            "    },\n" +
+            "    \"unknowValueField\":[\"test\"]\n" +
+            "}")
+    @PostMapping("/getUploadSign")
+    public HttpResponseResult<PostObjectFormFields> getUploadSign(@RequestBody UploadSign uploadSign) {
+        return succeed(uploadFileService.getUploadSign(uploadSign));
+    }
 }

+ 1 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/config/ResourceServerConfig.java

@@ -33,7 +33,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 				.authorizeRequests()
 				.antMatchers("/task/**").hasIpAddress("0.0.0.0/0")
 				.antMatchers("/v2/api-docs", "/code/*","/payment/callback",
-                        "/liveRoom/test","/liveRoom/syncUserStatus")
+                        "/liveRoom/test","/liveRoom/syncUserStatus","/courseGroup/getLockCache")
                 .permitAll().anyRequest().authenticated().and().httpBasic();
 	}
 

+ 6 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseGroupController.java

@@ -72,5 +72,11 @@ public class TeacherCourseGroupController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation("获取老师排直播课时锁定的课时")
+    @GetMapping("/getLockCache")
+    public HttpResponseResult<Object> getLockCache(@RequestParam("teacherId") Long teacherId) {
+        return succeed(courseGroupService.getLiveLockTimeCache(teacherId).get(teacherId));
+    }
+
 }
 

+ 0 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherCourseScheduleController.java

@@ -63,7 +63,6 @@ public class TeacherCourseScheduleController extends BaseController {
     @ApiImplicitParams({
             @ApiImplicitParam(name = "year", dataType = "Integer", value = "年"),
             @ApiImplicitParam(name = "month", dataType = "Integer", value = "月"),
-            @ApiImplicitParam(name = "day", dataType = "Integer", value = "日"),
             @ApiImplicitParam(name = "singleCourseMinutes", dataType = "Integer", value = "单课时时长(不包含休息时间)"),
             @ApiImplicitParam(name = "freeCourseMinutes", dataType = "Integer", value = "单课时休息时长)"),
             @ApiImplicitParam(name = "teacherId", dataType = "Long", value = "老师id"),

+ 46 - 24
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UploadFileController.java

@@ -1,13 +1,16 @@
 package com.yonge.cooleshow.teacher.controller;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiParam;
+import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.thirdparty.entity.UploadSign;
+import io.swagger.annotations.*;
 
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
@@ -17,32 +20,51 @@ import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.UploadReturnBean;
 import com.yonge.toolset.utils.upload.UploadUtil;
 
-/** 
+/**
  * 上传控制层
  */
 @RestController
 @Api(tags = "文件上传服务")
 public class UploadFileController extends BaseController {
 
-	private final static Logger LOGGER = LoggerFactory.getLogger(UploadFileController.class);
-
-	@Autowired
-	private UploadFileService uploadFileService;
-
-	@PostMapping(value = "uploadFile")
-	public Object uploadFile(@ApiParam(value = "上传的文件", required = true) @RequestParam("file") MultipartFile file) {
-		try {
-			if (file != null && StringUtils.isNotBlank(file.getOriginalFilename())) {
-				UploadReturnBean bean = uploadFileService.uploadFile(file.getInputStream(), UploadUtil.getExtension(file.getOriginalFilename()));
-				bean.setName(file.getOriginalFilename());
-				if (bean.isStatus()) {
-					return succeed(bean);
-				}
-				return failed(bean.getMessage());
-			}
-		} catch (Exception e) {
-			LOGGER.error("上传失败", e);
-		}
-		return failed("上传失败");
-	}
+    private final static Logger LOGGER = LoggerFactory.getLogger(UploadFileController.class);
+
+    @Autowired
+    private UploadFileService uploadFileService;
+
+    @PostMapping("/uploadFile")
+    public Object uploadFile(@ApiParam(value = "上传的文件", required = true) @RequestParam("file") MultipartFile file) {
+        try {
+            if (file != null && StringUtils.isNotBlank(file.getOriginalFilename())) {
+                UploadReturnBean bean = uploadFileService.uploadFile(file.getInputStream(), UploadUtil.getExtension(file.getOriginalFilename()));
+                bean.setName(file.getOriginalFilename());
+                if (bean.isStatus()) {
+                    return succeed(bean);
+                }
+                return failed(bean.getMessage());
+            }
+        } catch (Exception e) {
+            LOGGER.error("上传失败", e);
+        }
+        return failed("上传失败");
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "fileName", dataType = "String", value = "要上传的文件名称,不包含路径信息"),
+            @ApiImplicitParam(name = "postData", dataType = "Map", value = "1.如果使用js sdk上传的时候设置了ACL请设置,例\"acl\":\"public-read\"值要与SDK中一致,没有则删除该项</br>" +
+                    "2.提供js sdk中的key值,例\"key\":\"20150115/中文/${filename}\""),
+            @ApiImplicitParam(name = "unknowValueField", dataType = "List", value = "对于用户无法确定表单值的放在unknownValueField中(比如有的上传控件会添加一些表单项,但表单项的值可能是随机的)"),
+    })
+    @ApiOperation(value = "获取上传文件签名", notes = "{\n" +
+            "    \"fileName\":\"aa\",\n" +
+            "    \"postData\":{\n" +
+            "        \"acl\":\"public-read\",\n" +
+            "        \"key\":\"20150115/中文/${filename}\"\n" +
+            "    },\n" +
+            "    \"unknowValueField\":[\"test\"]\n" +
+            "}")
+    @PostMapping("/getUploadSign")
+    public HttpResponseResult<PostObjectFormFields> getUploadSign(@RequestBody UploadSign uploadSign) {
+        return succeed(uploadFileService.getUploadSign(uploadSign));
+    }
 }