Procházet zdrojové kódy

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

liujunchi před 3 roky
rodič
revize
1d221f39c7

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/QuestionnaireTopic.java

@@ -48,6 +48,28 @@ public class QuestionnaireTopic extends BaseEntity {
 
 	private Boolean modifyFlag = true;
 
+	//分享标题
+	private String shareTitle;
+
+	//分享标题
+	private String shareDescribe;
+
+	public String getShareTitle() {
+		return shareTitle;
+	}
+
+	public void setShareTitle(String shareTitle) {
+		this.shareTitle = shareTitle;
+	}
+
+	public String getShareDescribe() {
+		return shareDescribe;
+	}
+
+	public void setShareDescribe(String shareDescribe) {
+		this.shareDescribe = shareDescribe;
+	}
+
 	public Boolean getModifyFlag() {
 		return modifyFlag;
 	}

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

@@ -1,5 +1,7 @@
 package com.ym.mec.biz.service;
 
+import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.ym.mec.thirdparty.entity.UploadSign;
 import com.ym.mec.common.entity.UploadReturnBean;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.thirdparty.storage.StoragePluginContext;
@@ -127,4 +129,13 @@ public class UploadFileService {
 		return file;
 	}
 
+	/**
+	 * 获取上传文件签名
+	 *
+	 * @param uploadSign
+	 * @return
+	 */
+	public PostObjectFormFields getUploadSign(UploadSign uploadSign) {
+		return storagePluginContext.getUploadSign(KS3StoragePlugin.PLUGIN_NAME, uploadSign);
+	}
 }

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

@@ -458,7 +458,7 @@ public class PayServiceImpl implements PayService {
         unionPay.put("type", paymentChannel.getCode());
         unionPay.put("payMap", payMap);
         unionPay.put("tenantId", hfMerchantConfig.getTenantId());
-        //unionPay.put("routingMerNos", payeeMerNo);
+        unionPay.put("routingMerNos", hfMerchantConfig.getPlatformPayeeMemberId());
         
 		return unionPay;
 	}

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

@@ -347,7 +347,7 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         if (StringUtils.equals(orderRecord.getPaymentChannel(), PaymentChannelEnum.ADAPAY.getCode())) {
             Map<String, Object> payment;
             try {
-                Integer tenantId = -1;
+                Integer tenantId = orderRecord.getTenantId();
                 HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
                 if (hfMerchantConfig == null) {
                     throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
@@ -456,6 +456,10 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
                     log.error("error tenant callback request orderNo is null param:{}", data);
                     return "failed";
                 }
+                //只处理未支付状态的订单
+                if(!record.getOrderState().equals(0)){
+                    return "succeeded";
+                }
                 switch (transType) {
                     case "payment.succeeded":// 支付成功
                         Consumer<TenantOrderRecord> consumer = checkOrder.get(record.getOrderType());

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

@@ -19,6 +19,8 @@
         <result column="login_flag_" property="loginFlag"/>
         <result column="commit_type_" property="commitType"/>
         <result column="template_type_" property="templateType"/>
+        <result column="share_title_" property="shareTitle"/>
+        <result column="share_describe_" property="shareDescribe"/>
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -34,8 +36,8 @@
 	<!-- 向数据库增加一条记录 -->
 	<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_,login_flag_,commit_type_,template_type_)
-		VALUES(#{title},#{status},#{creatorId},NOW(),NOW(),#{againCommitFlag},#{tenantId},#{loginFlag},#{commitType},#{templateType})
+		update_time_,again_commit_flag_,tenant_id_,login_flag_,commit_type_,template_type_,share_title_,share_describe_)
+		VALUES(#{title},#{status},#{creatorId},NOW(),NOW(),#{againCommitFlag},#{tenantId},#{loginFlag},#{commitType},#{templateType},#{shareTitle},#{shareDescribe})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -62,6 +64,12 @@
 		<if test="title != null">
 			title_ = #{title},
 		</if>
+		<if test="shareTitle != null">
+			share_title_ = #{shareTitle},
+		</if>
+		<if test="shareDescribe != null">
+			share_describe_ = #{shareDescribe},
+		</if>
 		<if test="updateTime != null">
 			update_time_ = #{updateTime},
 		</if>

+ 24 - 3
mec-student/src/main/java/com/ym/mec/student/controller/StudentManageController.java

@@ -1,8 +1,8 @@
 package com.ym.mec.student.controller;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
+import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.ym.mec.thirdparty.entity.UploadSign;
+import io.swagger.annotations.*;
 
 import java.util.Date;
 import java.util.HashMap;
@@ -117,6 +117,27 @@ public class StudentManageController extends BaseController {
         return failed("上传失败");
     }
 
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "bucketName", dataType = "String", value = "为空时默认使用daya"),
+            @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" +
+            "    \"bucketName\":\"\",\n" +
+            "    \"filename\":\"test.png\",\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));
+    }
+
     @ApiOperation(value = "新增建议")
     @PostMapping("suggestion/add")
     public Object add(SysSuggestion sysSuggestion) {

+ 26 - 7
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherManageController.java

@@ -1,18 +1,16 @@
 package com.ym.mec.teacher.controller;
 
+import com.ksyun.ks3.dto.PostObjectFormFields;
 import com.ym.mec.biz.dal.enums.SuggestionType;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.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.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
@@ -73,6 +71,27 @@ public class TeacherManageController extends BaseController {
         return failed("上传失败");
     }
 
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "bucketName", dataType = "String", value = "为空时默认使用daya"),
+            @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" +
+            "    \"bucketName\":\"\",\n" +
+            "    \"filename\":\"test.png\",\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));
+    }
+
     @ApiOperation(value = "新增建议")
     @PostMapping("suggestion/add")
     public Object add(SysSuggestion sysSuggestion) {

+ 10 - 11
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java

@@ -13,7 +13,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.util.DigestUtils;
 
 public class Payment {
-	
+
 	private final static Logger LOGGER = LoggerFactory.getLogger(Payment.class);
     /**
      * 执行一个支付交易
@@ -23,13 +23,13 @@ public class Payment {
      */
     public static Map<String, Object> executePayment(String appId, String merchantKey, Map<String, Object> paymentParams) throws Exception {
         paymentParams.put("app_id", appId);
-        
+
         LOGGER.info("汇付[创建支付对象] Req:{}", paymentParams);
 
         //调用sdk方法,创建支付,得到支付对象
         Map<String, Object> payment = new HashMap<>();
         payment = com.huifu.adapay.model.Payment.create(paymentParams, merchantKey);
-        
+
         LOGGER.info("汇付[创建支付对象] Resp:{}", payment);
 
         String errorCode = (String) payment.get("error_code");
@@ -67,25 +67,24 @@ public class Payment {
      * @throws Exception 异常
      */
     public static Map<String, Object> queryPayment(String paymentId, String merchantKey) throws Exception {
-        System.out.println("=======query payment begin=======");
+        LOGGER.info("=======query payment begin=======");
         //查询支付对象的参数,全部参数请参考 https://docs.adapay.tech/api/04-trade.html#id7
         //调用sdk方法,查询支付交易,得到支付对象
         Map<String, Object> payment = new HashMap<>();
         try {
-            System.out.println("支付查询请求参数:" + JSON.toJSONString(paymentId));
+            LOGGER.info("queryPayment >>> 支付查询请求参数:{}", paymentId);
             payment = com.huifu.adapay.model.Payment.query(paymentId, merchantKey);
         } catch (ThirdpartyException e) {
-            e.printStackTrace();
+            LOGGER.error("queryPayment >>> 支付查询异常", e.getCause());
         }
-
-        System.out.println("支付查询返回参数:" + JSON.toJSONString(payment));
+        LOGGER.info("queryPayment >>> 支付查询返回参数:{}", JSON.toJSONString(payment));
 
         String error_code = (String) payment.get("error_code");
         if (null != error_code) {
             String error_msg = (String) payment.get("error_msg");
-            System.out.println("error_code:" + error_code + "............." + error_msg);
+            LOGGER.error("queryPayment >>>  error_code:" + error_code + "............." + error_msg);
         }
-        System.out.println("=======query payment end=======");
+        LOGGER.info("queryPayment >>> =======query payment end=======");
         return payment;
     }
 
@@ -121,7 +120,7 @@ public class Payment {
     }
 
     public static Map<String, Object> getPayMap(HfMerchantConfig hfMerchantConfig, BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody) throws Exception {
-    	
+
         Map<String, Object> paymentParams = new LinkedHashMap<>();
         paymentParams.put("appId", hfMerchantConfig.getAppId());
         paymentParams.put("amount", amount.setScale(2, BigDecimal.ROUND_HALF_UP));

+ 52 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/entity/UploadSign.java

@@ -0,0 +1,52 @@
+package com.ym.mec.thirdparty.entity;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author: cy
+ * @Date: 2022/4/27
+ */
+public class UploadSign implements Serializable {
+    private String bucketName;
+
+    private String filename;
+
+    private Map<String, String> postData;
+
+    private List<String> unknowValueField;
+
+    public String getBucketName() {
+        return bucketName;
+    }
+
+    public void setBucketName(String bucketName) {
+        this.bucketName = bucketName;
+    }
+
+    public String getFilename() {
+        return filename;
+    }
+
+    public void setFilename(String filename) {
+        this.filename = filename;
+    }
+
+    public Map<String, String> getPostData() {
+        return postData;
+    }
+
+    public void setPostData(Map<String, String> postData) {
+        this.postData = postData;
+    }
+
+    public List<String> getUnknowValueField() {
+        return unknowValueField;
+    }
+
+    public void setUnknowValueField(List<String> unknowValueField) {
+        this.unknowValueField = unknowValueField;
+    }
+}
+

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

@@ -1,5 +1,8 @@
 package com.ym.mec.thirdparty.storage;
 
+import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.ym.mec.thirdparty.entity.UploadSign;
+
 import java.io.File;
 import java.io.IOException;
 
@@ -32,4 +35,12 @@ public interface StoragePlugin {
 	 * @throws IOException
 	 */
 	byte[] getFile(String folderName, String fileName) throws IOException;
+
+	/**
+	 * 获取上传文件签名
+	 *
+	 * @param uploadSign
+	 * @return
+	 */
+	PostObjectFormFields getUploadSign(UploadSign uploadSign);
 }

+ 7 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/StoragePluginContext.java

@@ -4,6 +4,8 @@ import java.io.File;
 import java.util.HashMap;
 import java.util.Map;
 
+import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.ym.mec.thirdparty.entity.UploadSign;
 import org.springframework.stereotype.Component;
 
 import com.ym.mec.thirdparty.exception.ThirdpartyException;
@@ -30,6 +32,11 @@ public class StoragePluginContext {
 		return StoragePlugin.asyncUploadFile(folderName, file, delLocalFile);
 	}
 
+	public PostObjectFormFields getUploadSign(String storagePluginName, UploadSign uploadSign) {
+		StoragePlugin StoragePlugin = getStoragePlugin(storagePluginName);
+		return StoragePlugin.getUploadSign(uploadSign);
+	}
+
 	private StoragePlugin getStoragePlugin(String storagePluginName) {
 		StoragePlugin storagePlugin = mapper.get(storagePluginName);
 

+ 49 - 1
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/provider/AliyunOssStoragePlugin.java

@@ -2,9 +2,17 @@ package com.ym.mec.thirdparty.storage.provider;
 
 import java.io.File;
 import java.io.IOException;
-
+import java.util.List;
+import java.util.Map;
+
+import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.ksyun.ks3.service.Ks3;
+import com.ksyun.ks3.service.Ks3Client;
+import com.ksyun.ks3.service.Ks3ClientConfig;
+import com.ym.mec.thirdparty.entity.UploadSign;
 import com.ym.mec.thirdparty.threadLocal.BucketContextHolder;
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.util.IOUtils;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.InitializingBean;
@@ -121,6 +129,46 @@ public class AliyunOssStoragePlugin implements StoragePlugin, InitializingBean,
 	}
 
 	@Override
+	public PostObjectFormFields getUploadSign(UploadSign uploadSign) {
+		//要上传的文件名称,不包含路径信息
+		String fileName = uploadSign.getFilename();
+		//可以确定值得表单项
+		Map<String, String> postData = uploadSign.getPostData();
+		//无法确定值得表单项
+		List<String> unknowValueField = uploadSign.getUnknowValueField();
+
+		Ks3ClientConfig config = new Ks3ClientConfig();
+		// 设置域名
+		config.setEndpoint(endpoint);
+		// 创建Ks3Client实例
+		Ks3 client = new Ks3Client(accessKeyId, accessKeySecret, config);
+
+		/**
+		 * 需要用户在postData和unknowValueField中提供所有的除KSSAccessKeyId, signature, file, policy外的所有表单项。否则用生成的签名上传会返回403</br>
+		 * 对于用户可以确定表单值的放在 postData中,对于用户无法确定表单值的放在unknownValueField中(比如有的上传控件会添加一些表单项,但表单项的值可能是随机的)</br>
+		 */
+		//Map<String, String> postData = new HashMap<String, String>();
+		// 如果使用js sdk上传的时候设置了ACL,请提供以下一行,且值要与SDK中一致,否则删除下面一行代码
+		//postData.put("acl","public-read");
+		// 提供js sdk中的key值
+		//postData.put("key","20150115/中文/${filename}");
+		// 设置无法确定的表单值
+		//List<String> unknowValueField = new ArrayList<String>();
+
+		// js sdk上传的时候会自动加上一个name的表单项,所以下面需要加上这样的代码。
+		unknowValueField.add("name");
+
+		// 如果计算签名时提供的key里不包含${filename}占位符,第二个参数传一个空字符串。
+		String postDataKey = postData.get("key");
+		if (StringUtils.isNotBlank(postDataKey)) {
+			if (postDataKey.indexOf("${filename}") == -1) {
+				return client.postObject(bucketName, "", postData, unknowValueField);
+			}
+		}
+		return client.postObject(bucketName, fileName, postData, unknowValueField);
+	}
+
+	@Override
 	public void destroy() throws Exception {
 		if (ossClient != null) {
 			ossClient.shutdown();

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

@@ -2,8 +2,14 @@ package com.ym.mec.thirdparty.storage.provider;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 
+import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.ym.mec.thirdparty.entity.UploadSign;
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.util.IOUtils;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.InitializingBean;
@@ -139,6 +145,53 @@ public class KS3StoragePlugin implements StoragePlugin, InitializingBean, Dispos
 	}
 
 	@Override
+	public PostObjectFormFields getUploadSign(UploadSign uploadSign) {
+		String bucketName = uploadSign.getBucketName();
+		if (bucketName == null) {
+			bucketName = this.bucketName;
+		}
+		//要上传的文件名称,不包含路径信息
+		String fileName = uploadSign.getFilename();
+		//可以确定值得表单项
+		Map<String, String> postData = uploadSign.getPostData();
+		//无法确定值得表单项
+		List<String> unknowValueField = uploadSign.getUnknowValueField();
+		if (unknowValueField == null) {
+			unknowValueField = new ArrayList<>();
+		}
+
+		Ks3ClientConfig config = new Ks3ClientConfig();
+		// 设置域名
+		config.setEndpoint(endpoint);
+		// 创建Ks3Client实例
+		Ks3 client = new Ks3Client(accessKeyId, accessKeySecret, config);
+
+		/**
+		 * 需要用户在postData和unknowValueField中提供所有的除KSSAccessKeyId, signature, file, policy外的所有表单项。否则用生成的签名上传会返回403</br>
+		 * 对于用户可以确定表单值的放在 postData中,对于用户无法确定表单值的放在unknownValueField中(比如有的上传控件会添加一些表单项,但表单项的值可能是随机的)</br>
+		 */
+		//Map<String, String> postData = new HashMap<String, String>();
+		// 如果使用js sdk上传的时候设置了ACL,请提供以下一行,且值要与SDK中一致,否则删除下面一行代码
+		//postData.put("acl","public-read");
+		// 提供js sdk中的key值
+		//postData.put("key","20150115/中文/${filename}");
+		// 设置无法确定的表单值
+		//List<String> unknowValueField = new ArrayList<String>();
+
+		// js sdk上传的时候会自动加上一个name的表单项,所以下面需要加上这样的代码。
+		unknowValueField.add("name");
+
+		// 如果计算签名时提供的key里不包含${filename}占位符,第二个参数传一个空字符串。
+		String postDataKey = postData.get("key");
+		if (StringUtils.isNotBlank(postDataKey)) {
+			if (postDataKey.indexOf("${filename}") == -1) {
+				return client.postObject(bucketName, "", postData, unknowValueField);
+			}
+		}
+		return client.postObject(bucketName, fileName, postData, unknowValueField);
+	}
+
+	@Override
 	public void destroy() throws Exception {
 	}
 

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

@@ -40,7 +40,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                         "/activity/organDoubleEleven2021Statis", "/activity/doubleEleven2021Statis", "/questionnaireTopic/getDetail", "/questionnaireUserResult/add",
                         "/tenantInfo/info/*", "/tenantInfo/checkInfo/*", "/tenantInfo/pay/*","/tenantInfo/testCheck", "/tenantInfo/getContract/*",
                         "/tenantPreJoin/add","/imLiveBroadcastRoom/queryRoomInfo","/imLiveBroadcastRoom/test",
-                        "/eduOrganization/queryAllOrgan","/eduOrganization/getOrganCooperation","/import/oaUploadFile"
+                        "/eduOrganization/queryAllOrgan","/eduOrganization/getOrganCooperation","/import/oaUploadFile",
+                        "/tenantInfo/callback"
                 )
                 .permitAll().anyRequest().authenticated().and().httpBasic();
     }

+ 26 - 4
mec-web/src/main/java/com/ym/mec/web/controller/UploadFileController.java

@@ -1,13 +1,13 @@
 package com.ym.mec.web.controller;
 
+import com.ksyun.ks3.dto.PostObjectFormFields;
+import com.ym.mec.thirdparty.entity.UploadSign;
 import com.ym.mec.biz.service.UploadFileService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.UploadReturnBean;
-import com.ym.mec.thirdparty.threadLocal.BucketEnum;
-import com.ym.mec.thirdparty.threadLocal.BucketContextHolder;
 import com.ym.mec.util.upload.UploadUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.*;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -15,6 +15,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.Base64Utils;
 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;
@@ -89,4 +90,25 @@ public class UploadFileController extends BaseController {
 		
 		return failed();
 	}
+
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "bucketName", dataType = "String", value = "为空时默认使用daya"),
+			@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" +
+			"    \"bucketName\":\"\",\n" +
+			"    \"filename\":\"test.png\",\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));
+	}
 }