Pārlūkot izejas kodu

快手 上传视频,图片等接口

yumeng 5 gadi atpakaļ
vecāks
revīzija
95deaf5df4
66 mainītis faili ar 6479 papildinājumiem un 162 dzēšanām
  1. 41 18
      jeecg-boot-module-system/src/main/java/org/jeecg/JeecgApplication.java
  2. 2 0
      jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java
  3. 87 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/controller/KuaiShouController.java
  4. 244 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/controller/KuaiShouImageGetController.java
  5. 244 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/controller/KuaiShouImageUploandController.java
  6. 244 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/controller/KuaiShouRegionListChildrenController.java
  7. 244 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/controller/KuaiShouRegionListParentController.java
  8. 244 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/controller/KuaiShouVideoGetController.java
  9. 244 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/controller/KuaiShouVideoUploadController.java
  10. 94 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/entity/KuaiShouImageGet.java
  11. 106 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/entity/KuaiShouImageUploand.java
  12. 64 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/entity/KuaiShouRegionListChildren.java
  13. 76 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/entity/KuaiShouRegionListParent.java
  14. 90 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/entity/KuaiShouVideoGet.java
  15. 88 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/entity/KuaiShouVideoUpload.java
  16. 17 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/KuaiShouImageGetMapper.java
  17. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/KuaiShouImageUploandMapper.java
  18. 15 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/KuaiShouRegionListChildrenMapper.java
  19. 15 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/KuaiShouRegionListParentMapper.java
  20. 17 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/KuaiShouVideoGetMapper.java
  21. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/KuaiShouVideoUploadMapper.java
  22. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/xml/KuaiShouImageGetMapper.xml
  23. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/xml/KuaiShouImageUploandMapper.xml
  24. 8 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/xml/KuaiShouRegionListChildrenMapper.xml
  25. 7 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/xml/KuaiShouRegionListParentMapper.xml
  26. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/xml/KuaiShouVideoGetMapper.xml
  27. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/xml/KuaiShouVideoUploadMapper.xml
  28. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/IKuaiShouImageGetService.java
  29. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/IKuaiShouImageUploandService.java
  30. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/IKuaiShouRegionListChildrenService.java
  31. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/IKuaiShouRegionListParentService.java
  32. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/IKuaiShouVideoGetService.java
  33. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/IKuaiShouVideoUploadService.java
  34. 60 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/IKuaishouInterfaceService.java
  35. 19 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaiShouImageGetServiceImpl.java
  36. 19 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaiShouImageUploandServiceImpl.java
  37. 19 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaiShouRegionListChildrenServiceImpl.java
  38. 19 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaiShouRegionListParentServiceImpl.java
  39. 19 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaiShouVideoGetServiceImpl.java
  40. 19 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaiShouVideoUploadServiceImpl.java
  41. 372 8
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaishouInterfaceServiceImpl.java
  42. 198 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/KuaiShouImageGetList.vue
  43. 208 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/KuaiShouImageUploandList.vue
  44. 157 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/KuaiShouRegionListChildrenList.vue
  45. 178 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/KuaiShouRegionListParentList.vue
  46. 193 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/KuaiShouVideoGetList.vue
  47. 193 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/KuaiShouVideoUploadList.vue
  48. 160 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouImageGetModal.vue
  49. 167 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouImageGetModal__Style#Drawer.vue
  50. 172 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouImageUploandModal.vue
  51. 179 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouImageUploandModal__Style#Drawer.vue
  52. 130 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouRegionListChildrenModal.vue
  53. 137 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouRegionListChildrenModal__Style#Drawer.vue
  54. 142 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouRegionListParentModal.vue
  55. 149 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouRegionListParentModal__Style#Drawer.vue
  56. 154 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouVideoGetModal.vue
  57. 161 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouVideoGetModal__Style#Drawer.vue
  58. 154 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouVideoUploadModal.vue
  59. 161 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouVideoUploadModal__Style#Drawer.vue
  60. 74 60
      module-common/src/main/java/cn/com/ctop/common/utils/DateUtils.java
  61. 60 0
      module-common/src/main/java/cn/com/ctop/common/utils/FileEntity.java
  62. 260 0
      module-common/src/main/java/cn/com/ctop/common/utils/FileUploadTool.java
  63. 38 28
      module-common/src/main/java/cn/com/ctop/common/utils/HttpUtils.java
  64. 47 47
      module-common/src/main/java/cn/com/ctop/common/utils/PropertiesUtils.java
  65. 133 0
      module-common/src/main/java/cn/com/ctop/common/utils/TransfMediaTool.java
  66. 5 0
      module-kuaishou/src/main/java/constant/KuaishouInterfaceConstant.java

+ 41 - 18
jeecg-boot-module-system/src/main/java/org/jeecg/JeecgApplication.java

@@ -4,38 +4,61 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.MultipartConfigFactory;
 import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
 import org.springframework.core.env.Environment;
+import org.springframework.web.client.RestTemplate;
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
+import javax.servlet.MultipartConfigElement;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 
 @Slf4j
 @EnableSwagger2
 @SpringBootApplication
-@ComponentScan(basePackages={"cn.com.ctop","org.jeecg"})
+@ComponentScan(basePackages = {"cn.com.ctop", "org.jeecg"})
 @EnableAutoConfiguration
 @ComponentScan
+@Configuration
+
 
 public class JeecgApplication {
 
-  public static void main(String[] args) throws UnknownHostException {
-    //System.setProperty("spring.devtools.restart.enabled", "true");
-
-    ConfigurableApplicationContext application = SpringApplication.run(JeecgApplication.class, args);
-    Environment env = application.getEnvironment();
-    String ip = InetAddress.getLocalHost().getHostAddress();
-    String port = env.getProperty("server.port");
-    String path = env.getProperty("server.servlet.context-path");
-    log.info("\n----------------------------------------------------------\n\t" +
-        "Application Jeecg-Boot is running! Access URLs:\n\t" +
-        "Local: \t\thttp://localhost:" + port + path + "/\n\t" +
-        "External: \thttp://" + ip + ":" + port + path + "/\n\t" +
-        "swagger-ui: \thttp://" + ip + ":" + port + path + "/swagger-ui.html\n\t" +
-        "Doc: \t\thttp://" + ip + ":" + port + path + "/doc.html\n" +
-        "----------------------------------------------------------");
-
-  }
+    public static void main(String[] args) throws UnknownHostException {
+        //System.setProperty("spring.devtools.restart.enabled", "true");
+
+        ConfigurableApplicationContext application = SpringApplication.run(JeecgApplication.class, args);
+        Environment env = application.getEnvironment();
+        String ip = InetAddress.getLocalHost().getHostAddress();
+
+
+        String port = env.getProperty("server.port");
+        String path = env.getProperty("server.servlet.context-path");
+        log.info("\n----------------------------------------------------------\n\t" +
+                "Application Jeecg-Boot is running! Access URLs:\n\t" +
+                "Local: \t\thttp://localhost:" + port + path + "/\n\t" +
+                "External: \thttp://" + ip + ":" + port + path + "/\n\t" +
+                "swagger-ui: \thttp://" + ip + ":" + port + path + "/swagger-ui.html\n\t" +
+                "Doc: \t\thttp://" + ip + ":" + port + path + "/doc.html\n" +
+                "----------------------------------------------------------");
+
+    }
+
+    @Bean
+    public MultipartConfigElement multipartConfigElement() {
+        MultipartConfigFactory factory = new MultipartConfigFactory();
+        factory.setMaxFileSize("10240000KB");
+        factory.setMaxRequestSize("102400000KB");
+        return factory.createMultipartConfig();
+    }
+
+    @Bean
+    public RestTemplate restTemplate() {
+        return new RestTemplate();
+    }
+
 }

+ 2 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java

@@ -73,6 +73,8 @@ public class ShiroConfig {
 		filterChainDefinitionMap.put("/webjars/**", "anon");
 		filterChainDefinitionMap.put("/v2/**", "anon");
 		filterChainDefinitionMap.put("/kuaishou/**", "anon");
+		filterChainDefinitionMap.put("/**/*.mp4", "anon");
+
 
 		//性能监控
 		filterChainDefinitionMap.put("/actuator/metrics/**", "anon");

+ 87 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/controller/KuaiShouController.java

@@ -1,12 +1,20 @@
 package org.jeecg.modules.kuaishou.controller;
 
+import cn.com.ctop.common.utils.FileEntity;
+import cn.com.ctop.common.utils.FileUploadTool;
+import cn.com.ctop.common.utils.TransfMediaTool;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import org.jeecg.modules.kuaishou.service.IKuaishouInterfaceService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
+import java.io.File;
+import java.io.IOException;
 import java.util.Map;
 
 @RestController
@@ -112,11 +120,89 @@ public class KuaiShouController {
 
     @RequestMapping("/getToken")
     public void getToken() {
-        String accessToken = "e7d672aeaea6a1d020c20139fe295c57";
+        String accessToken = "b565fa0dc618ec8fa08e1b32d66f3f17";
         kuaishouInterfaceService.getRefreshToken(accessToken);
 
 
     }
 
 
+    @RequestMapping(value = "/video/upload", consumes = "multipart/form-data;charset=utf-8")
+    public void upload(@RequestParam("multipartFile") MultipartFile multipartFile, HttpServletRequest request) throws IOException {
+
+        String accessToken = "8903c5a4ddbec0c236eb536b8bec58db";
+        Long advertiserId = 23212L;
+
+        kuaishouInterfaceService.videoUpload(advertiserId, accessToken, multipartFile, request);
+
+    }
+
+
+    @RequestMapping("/video/get")
+    public void videoGet() {
+
+        String accessToken = "8903c5a4ddbec0c236eb536b8bec58db";
+        Long advertiserId = 23212L;
+        String photoId = "5249789805735604135";
+        /*FileUploadTool fileUploadTool = new FileUploadTool();
+        FileEntity entity = new FileEntity();
+
+        entity = fileUploadTool.createFile(multipartFile, request);
+        System.err.println(entity);*/
+
+
+        kuaishouInterfaceService.videoGet(advertiserId, accessToken, photoId);
+
+
+    }
+
+    @RequestMapping("/image/get")
+    public void imageGet() {
+
+        String accessToken = "8903c5a4ddbec0c236eb536b8bec58db";
+        Long advertiserId = 23212L;
+        String image_token = "market825e095b83eb4456a31ce95704d03238.jpg";
+        /*FileUploadTool fileUploadTool = new FileUploadTool();
+        FileEntity entity = new FileEntity();
+
+        entity = fileUploadTool.createFile(multipartFile, request);
+        System.err.println(entity);*/
+
+
+        kuaishouInterfaceService.imageGet(advertiserId, accessToken, image_token);
+
+
+    }
+
+
+    @RequestMapping("/area/list")
+    public void areaList() {
+
+        String accessToken = "8903c5a4ddbec0c236eb536b8bec58db";
+        Long advertiserId = 23212L;
+        String image_token = "market825e095b83eb4456a31ce95704d03238.jpg";
+        /*FileUploadTool fileUploadTool = new FileUploadTool();
+        FileEntity entity = new FileEntity();
+
+        entity = fileUploadTool.createFile(multipartFile, request);
+        System.err.println(entity);*/
+
+
+        kuaishouInterfaceService.areaList(accessToken);
+
+
+    }
+
+
+    @RequestMapping(value = "/image/upload", consumes = "multipart/form-data;charset=utf-8")
+    public void imgUpload(@RequestParam("multipartFile") MultipartFile multipartFile, HttpServletRequest request) throws IOException {
+
+        String accessToken = "8903c5a4ddbec0c236eb536b8bec58db";
+        Long advertiserId = 23212L;
+
+        kuaishouInterfaceService.imageUpload(advertiserId, accessToken, multipartFile, request);
+
+    }
+
+
 }

+ 244 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/controller/KuaiShouImageGetController.java

@@ -0,0 +1,244 @@
+package org.jeecg.modules.kuaishou.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.kuaishou.entity.KuaiShouImageGet;
+import org.jeecg.modules.kuaishou.service.IKuaiShouImageGetService;
+import java.util.Date;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+ /**
+ * @Description: 快手-获取图片接口
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="快手-获取图片接口")
+@RestController
+@RequestMapping("/kuaishou/kuaiShouImageGet")
+public class KuaiShouImageGetController {
+	@Autowired
+	private IKuaiShouImageGetService kuaiShouImageGetService;
+	
+	/**
+	  * 分页列表查询
+	 * @param kuaiShouImageGet
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "快手-获取图片接口-分页列表查询")
+	@ApiOperation(value="快手-获取图片接口-分页列表查询", notes="快手-获取图片接口-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<KuaiShouImageGet>> queryPageList(KuaiShouImageGet kuaiShouImageGet,
+									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+									  HttpServletRequest req) {
+		Result<IPage<KuaiShouImageGet>> result = new Result<IPage<KuaiShouImageGet>>();
+		QueryWrapper<KuaiShouImageGet> queryWrapper = QueryGenerator.initQueryWrapper(kuaiShouImageGet, req.getParameterMap());
+		Page<KuaiShouImageGet> page = new Page<KuaiShouImageGet>(pageNo, pageSize);
+		IPage<KuaiShouImageGet> pageList = kuaiShouImageGetService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+	
+	/**
+	  *   添加
+	 * @param kuaiShouImageGet
+	 * @return
+	 */
+	@AutoLog(value = "快手-获取图片接口-添加")
+	@ApiOperation(value="快手-获取图片接口-添加", notes="快手-获取图片接口-添加")
+	@PostMapping(value = "/add")
+	public Result<KuaiShouImageGet> add(@RequestBody KuaiShouImageGet kuaiShouImageGet) {
+		Result<KuaiShouImageGet> result = new Result<KuaiShouImageGet>();
+		try {
+			kuaiShouImageGetService.save(kuaiShouImageGet);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+	
+	/**
+	  *  编辑
+	 * @param kuaiShouImageGet
+	 * @return
+	 */
+	@AutoLog(value = "快手-获取图片接口-编辑")
+	@ApiOperation(value="快手-获取图片接口-编辑", notes="快手-获取图片接口-编辑")
+	@PutMapping(value = "/edit")
+	public Result<KuaiShouImageGet> edit(@RequestBody KuaiShouImageGet kuaiShouImageGet) {
+		Result<KuaiShouImageGet> result = new Result<KuaiShouImageGet>();
+		KuaiShouImageGet kuaiShouImageGetEntity = kuaiShouImageGetService.getById(kuaiShouImageGet.getId());
+		if(kuaiShouImageGetEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = kuaiShouImageGetService.updateById(kuaiShouImageGet);
+			//TODO 返回false说明什么?
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+		
+		return result;
+	}
+	
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "快手-获取图片接口-通过id删除")
+	@ApiOperation(value="快手-获取图片接口-通过id删除", notes="快手-获取图片接口-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			kuaiShouImageGetService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "快手-获取图片接口-批量删除")
+	@ApiOperation(value="快手-获取图片接口-批量删除", notes="快手-获取图片接口-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<KuaiShouImageGet> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<KuaiShouImageGet> result = new Result<KuaiShouImageGet>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.kuaiShouImageGetService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+	
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "快手-获取图片接口-通过id查询")
+	@ApiOperation(value="快手-获取图片接口-通过id查询", notes="快手-获取图片接口-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<KuaiShouImageGet> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<KuaiShouImageGet> result = new Result<KuaiShouImageGet>();
+		KuaiShouImageGet kuaiShouImageGet = kuaiShouImageGetService.getById(id);
+		if(kuaiShouImageGet==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(kuaiShouImageGet);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+  /**
+      * 导出excel
+   *
+   * @param request
+   * @param response
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+      // Step.1 组装查询条件
+      QueryWrapper<KuaiShouImageGet> queryWrapper = null;
+      try {
+          String paramsStr = request.getParameter("paramsStr");
+          if (oConvertUtils.isNotEmpty(paramsStr)) {
+              String deString = URLDecoder.decode(paramsStr, "UTF-8");
+              KuaiShouImageGet kuaiShouImageGet = JSON.parseObject(deString, KuaiShouImageGet.class);
+              queryWrapper = QueryGenerator.initQueryWrapper(kuaiShouImageGet, request.getParameterMap());
+          }
+      } catch (UnsupportedEncodingException e) {
+          e.printStackTrace();
+      }
+
+      //Step.2 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      List<KuaiShouImageGet> pageList = kuaiShouImageGetService.list(queryWrapper);
+      //导出文件名称
+      mv.addObject(NormalExcelConstants.FILE_NAME, "快手-获取图片接口列表");
+      mv.addObject(NormalExcelConstants.CLASS, KuaiShouImageGet.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("快手-获取图片接口列表数据", "导出人:Jeecg", "导出信息"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+  }
+
+  /**
+      * 通过excel导入数据
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+  @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+  public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          MultipartFile file = entity.getValue();// 获取上传文件对象
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<KuaiShouImageGet> listKuaiShouImageGets = ExcelImportUtil.importExcel(file.getInputStream(), KuaiShouImageGet.class, params);
+              kuaiShouImageGetService.saveBatch(listKuaiShouImageGets);
+              return Result.ok("文件导入成功!数据行数:" + listKuaiShouImageGets.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+  }
+
+}

+ 244 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/controller/KuaiShouImageUploandController.java

@@ -0,0 +1,244 @@
+package org.jeecg.modules.kuaishou.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.kuaishou.entity.KuaiShouImageUploand;
+import org.jeecg.modules.kuaishou.service.IKuaiShouImageUploandService;
+import java.util.Date;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+ /**
+ * @Description: 快手-上传图片接口
+ * @Author: jeecg-boot
+ * @Date:   2019-07-26
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="快手-上传图片接口")
+@RestController
+@RequestMapping("/kuaishou/kuaiShouImageUploand")
+public class KuaiShouImageUploandController {
+	@Autowired
+	private IKuaiShouImageUploandService kuaiShouImageUploandService;
+	
+	/**
+	  * 分页列表查询
+	 * @param kuaiShouImageUploand
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "快手-上传图片接口-分页列表查询")
+	@ApiOperation(value="快手-上传图片接口-分页列表查询", notes="快手-上传图片接口-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<KuaiShouImageUploand>> queryPageList(KuaiShouImageUploand kuaiShouImageUploand,
+									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+									  HttpServletRequest req) {
+		Result<IPage<KuaiShouImageUploand>> result = new Result<IPage<KuaiShouImageUploand>>();
+		QueryWrapper<KuaiShouImageUploand> queryWrapper = QueryGenerator.initQueryWrapper(kuaiShouImageUploand, req.getParameterMap());
+		Page<KuaiShouImageUploand> page = new Page<KuaiShouImageUploand>(pageNo, pageSize);
+		IPage<KuaiShouImageUploand> pageList = kuaiShouImageUploandService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+	
+	/**
+	  *   添加
+	 * @param kuaiShouImageUploand
+	 * @return
+	 */
+	@AutoLog(value = "快手-上传图片接口-添加")
+	@ApiOperation(value="快手-上传图片接口-添加", notes="快手-上传图片接口-添加")
+	@PostMapping(value = "/add")
+	public Result<KuaiShouImageUploand> add(@RequestBody KuaiShouImageUploand kuaiShouImageUploand) {
+		Result<KuaiShouImageUploand> result = new Result<KuaiShouImageUploand>();
+		try {
+			kuaiShouImageUploandService.save(kuaiShouImageUploand);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+	
+	/**
+	  *  编辑
+	 * @param kuaiShouImageUploand
+	 * @return
+	 */
+	@AutoLog(value = "快手-上传图片接口-编辑")
+	@ApiOperation(value="快手-上传图片接口-编辑", notes="快手-上传图片接口-编辑")
+	@PutMapping(value = "/edit")
+	public Result<KuaiShouImageUploand> edit(@RequestBody KuaiShouImageUploand kuaiShouImageUploand) {
+		Result<KuaiShouImageUploand> result = new Result<KuaiShouImageUploand>();
+		KuaiShouImageUploand kuaiShouImageUploandEntity = kuaiShouImageUploandService.getById(kuaiShouImageUploand.getId());
+		if(kuaiShouImageUploandEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = kuaiShouImageUploandService.updateById(kuaiShouImageUploand);
+			//TODO 返回false说明什么?
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+		
+		return result;
+	}
+	
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "快手-上传图片接口-通过id删除")
+	@ApiOperation(value="快手-上传图片接口-通过id删除", notes="快手-上传图片接口-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			kuaiShouImageUploandService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "快手-上传图片接口-批量删除")
+	@ApiOperation(value="快手-上传图片接口-批量删除", notes="快手-上传图片接口-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<KuaiShouImageUploand> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<KuaiShouImageUploand> result = new Result<KuaiShouImageUploand>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.kuaiShouImageUploandService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+	
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "快手-上传图片接口-通过id查询")
+	@ApiOperation(value="快手-上传图片接口-通过id查询", notes="快手-上传图片接口-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<KuaiShouImageUploand> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<KuaiShouImageUploand> result = new Result<KuaiShouImageUploand>();
+		KuaiShouImageUploand kuaiShouImageUploand = kuaiShouImageUploandService.getById(id);
+		if(kuaiShouImageUploand==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(kuaiShouImageUploand);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+  /**
+      * 导出excel
+   *
+   * @param request
+   * @param response
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+      // Step.1 组装查询条件
+      QueryWrapper<KuaiShouImageUploand> queryWrapper = null;
+      try {
+          String paramsStr = request.getParameter("paramsStr");
+          if (oConvertUtils.isNotEmpty(paramsStr)) {
+              String deString = URLDecoder.decode(paramsStr, "UTF-8");
+              KuaiShouImageUploand kuaiShouImageUploand = JSON.parseObject(deString, KuaiShouImageUploand.class);
+              queryWrapper = QueryGenerator.initQueryWrapper(kuaiShouImageUploand, request.getParameterMap());
+          }
+      } catch (UnsupportedEncodingException e) {
+          e.printStackTrace();
+      }
+
+      //Step.2 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      List<KuaiShouImageUploand> pageList = kuaiShouImageUploandService.list(queryWrapper);
+      //导出文件名称
+      mv.addObject(NormalExcelConstants.FILE_NAME, "快手-上传图片接口列表");
+      mv.addObject(NormalExcelConstants.CLASS, KuaiShouImageUploand.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("快手-上传图片接口列表数据", "导出人:Jeecg", "导出信息"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+  }
+
+  /**
+      * 通过excel导入数据
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+  @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+  public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          MultipartFile file = entity.getValue();// 获取上传文件对象
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<KuaiShouImageUploand> listKuaiShouImageUploands = ExcelImportUtil.importExcel(file.getInputStream(), KuaiShouImageUploand.class, params);
+              kuaiShouImageUploandService.saveBatch(listKuaiShouImageUploands);
+              return Result.ok("文件导入成功!数据行数:" + listKuaiShouImageUploands.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+  }
+
+}

+ 244 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/controller/KuaiShouRegionListChildrenController.java

@@ -0,0 +1,244 @@
+package org.jeecg.modules.kuaishou.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.kuaishou.entity.KuaiShouRegionListChildren;
+import org.jeecg.modules.kuaishou.service.IKuaiShouRegionListChildrenService;
+import java.util.Date;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+ /**
+ * @Description: 快手-子级地域
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="快手-子级地域")
+@RestController
+@RequestMapping("/kuaishou/kuaiShouRegionListChildren")
+public class KuaiShouRegionListChildrenController {
+	@Autowired
+	private IKuaiShouRegionListChildrenService kuaiShouRegionListChildrenService;
+	
+	/**
+	  * 分页列表查询
+	 * @param kuaiShouRegionListChildren
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "快手-子级地域-分页列表查询")
+	@ApiOperation(value="快手-子级地域-分页列表查询", notes="快手-子级地域-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<KuaiShouRegionListChildren>> queryPageList(KuaiShouRegionListChildren kuaiShouRegionListChildren,
+									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+									  HttpServletRequest req) {
+		Result<IPage<KuaiShouRegionListChildren>> result = new Result<IPage<KuaiShouRegionListChildren>>();
+		QueryWrapper<KuaiShouRegionListChildren> queryWrapper = QueryGenerator.initQueryWrapper(kuaiShouRegionListChildren, req.getParameterMap());
+		Page<KuaiShouRegionListChildren> page = new Page<KuaiShouRegionListChildren>(pageNo, pageSize);
+		IPage<KuaiShouRegionListChildren> pageList = kuaiShouRegionListChildrenService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+	
+	/**
+	  *   添加
+	 * @param kuaiShouRegionListChildren
+	 * @return
+	 */
+	@AutoLog(value = "快手-子级地域-添加")
+	@ApiOperation(value="快手-子级地域-添加", notes="快手-子级地域-添加")
+	@PostMapping(value = "/add")
+	public Result<KuaiShouRegionListChildren> add(@RequestBody KuaiShouRegionListChildren kuaiShouRegionListChildren) {
+		Result<KuaiShouRegionListChildren> result = new Result<KuaiShouRegionListChildren>();
+		try {
+			kuaiShouRegionListChildrenService.save(kuaiShouRegionListChildren);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+	
+	/**
+	  *  编辑
+	 * @param kuaiShouRegionListChildren
+	 * @return
+	 */
+	@AutoLog(value = "快手-子级地域-编辑")
+	@ApiOperation(value="快手-子级地域-编辑", notes="快手-子级地域-编辑")
+	@PutMapping(value = "/edit")
+	public Result<KuaiShouRegionListChildren> edit(@RequestBody KuaiShouRegionListChildren kuaiShouRegionListChildren) {
+		Result<KuaiShouRegionListChildren> result = new Result<KuaiShouRegionListChildren>();
+		KuaiShouRegionListChildren kuaiShouRegionListChildrenEntity = kuaiShouRegionListChildrenService.getById(kuaiShouRegionListChildren.getId());
+		if(kuaiShouRegionListChildrenEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = kuaiShouRegionListChildrenService.updateById(kuaiShouRegionListChildren);
+			//TODO 返回false说明什么?
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+		
+		return result;
+	}
+	
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "快手-子级地域-通过id删除")
+	@ApiOperation(value="快手-子级地域-通过id删除", notes="快手-子级地域-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			kuaiShouRegionListChildrenService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "快手-子级地域-批量删除")
+	@ApiOperation(value="快手-子级地域-批量删除", notes="快手-子级地域-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<KuaiShouRegionListChildren> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<KuaiShouRegionListChildren> result = new Result<KuaiShouRegionListChildren>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.kuaiShouRegionListChildrenService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+	
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "快手-子级地域-通过id查询")
+	@ApiOperation(value="快手-子级地域-通过id查询", notes="快手-子级地域-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<KuaiShouRegionListChildren> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<KuaiShouRegionListChildren> result = new Result<KuaiShouRegionListChildren>();
+		KuaiShouRegionListChildren kuaiShouRegionListChildren = kuaiShouRegionListChildrenService.getById(id);
+		if(kuaiShouRegionListChildren==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(kuaiShouRegionListChildren);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+  /**
+      * 导出excel
+   *
+   * @param request
+   * @param response
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+      // Step.1 组装查询条件
+      QueryWrapper<KuaiShouRegionListChildren> queryWrapper = null;
+      try {
+          String paramsStr = request.getParameter("paramsStr");
+          if (oConvertUtils.isNotEmpty(paramsStr)) {
+              String deString = URLDecoder.decode(paramsStr, "UTF-8");
+              KuaiShouRegionListChildren kuaiShouRegionListChildren = JSON.parseObject(deString, KuaiShouRegionListChildren.class);
+              queryWrapper = QueryGenerator.initQueryWrapper(kuaiShouRegionListChildren, request.getParameterMap());
+          }
+      } catch (UnsupportedEncodingException e) {
+          e.printStackTrace();
+      }
+
+      //Step.2 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      List<KuaiShouRegionListChildren> pageList = kuaiShouRegionListChildrenService.list(queryWrapper);
+      //导出文件名称
+      mv.addObject(NormalExcelConstants.FILE_NAME, "快手-子级地域列表");
+      mv.addObject(NormalExcelConstants.CLASS, KuaiShouRegionListChildren.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("快手-子级地域列表数据", "导出人:Jeecg", "导出信息"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+  }
+
+  /**
+      * 通过excel导入数据
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+  @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+  public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          MultipartFile file = entity.getValue();// 获取上传文件对象
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<KuaiShouRegionListChildren> listKuaiShouRegionListChildrens = ExcelImportUtil.importExcel(file.getInputStream(), KuaiShouRegionListChildren.class, params);
+              kuaiShouRegionListChildrenService.saveBatch(listKuaiShouRegionListChildrens);
+              return Result.ok("文件导入成功!数据行数:" + listKuaiShouRegionListChildrens.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+  }
+
+}

+ 244 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/controller/KuaiShouRegionListParentController.java

@@ -0,0 +1,244 @@
+package org.jeecg.modules.kuaishou.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.kuaishou.entity.KuaiShouRegionListParent;
+import org.jeecg.modules.kuaishou.service.IKuaiShouRegionListParentService;
+import java.util.Date;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+ /**
+ * @Description: 快手-父级地域
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="快手-父级地域")
+@RestController
+@RequestMapping("/kuaishou/kuaiShouRegionListParent")
+public class KuaiShouRegionListParentController {
+	@Autowired
+	private IKuaiShouRegionListParentService kuaiShouRegionListParentService;
+	
+	/**
+	  * 分页列表查询
+	 * @param kuaiShouRegionListParent
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "快手-父级地域-分页列表查询")
+	@ApiOperation(value="快手-父级地域-分页列表查询", notes="快手-父级地域-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<KuaiShouRegionListParent>> queryPageList(KuaiShouRegionListParent kuaiShouRegionListParent,
+									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+									  HttpServletRequest req) {
+		Result<IPage<KuaiShouRegionListParent>> result = new Result<IPage<KuaiShouRegionListParent>>();
+		QueryWrapper<KuaiShouRegionListParent> queryWrapper = QueryGenerator.initQueryWrapper(kuaiShouRegionListParent, req.getParameterMap());
+		Page<KuaiShouRegionListParent> page = new Page<KuaiShouRegionListParent>(pageNo, pageSize);
+		IPage<KuaiShouRegionListParent> pageList = kuaiShouRegionListParentService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+	
+	/**
+	  *   添加
+	 * @param kuaiShouRegionListParent
+	 * @return
+	 */
+	@AutoLog(value = "快手-父级地域-添加")
+	@ApiOperation(value="快手-父级地域-添加", notes="快手-父级地域-添加")
+	@PostMapping(value = "/add")
+	public Result<KuaiShouRegionListParent> add(@RequestBody KuaiShouRegionListParent kuaiShouRegionListParent) {
+		Result<KuaiShouRegionListParent> result = new Result<KuaiShouRegionListParent>();
+		try {
+			kuaiShouRegionListParentService.save(kuaiShouRegionListParent);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+	
+	/**
+	  *  编辑
+	 * @param kuaiShouRegionListParent
+	 * @return
+	 */
+	@AutoLog(value = "快手-父级地域-编辑")
+	@ApiOperation(value="快手-父级地域-编辑", notes="快手-父级地域-编辑")
+	@PutMapping(value = "/edit")
+	public Result<KuaiShouRegionListParent> edit(@RequestBody KuaiShouRegionListParent kuaiShouRegionListParent) {
+		Result<KuaiShouRegionListParent> result = new Result<KuaiShouRegionListParent>();
+		KuaiShouRegionListParent kuaiShouRegionListParentEntity = kuaiShouRegionListParentService.getById(kuaiShouRegionListParent.getId());
+		if(kuaiShouRegionListParentEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = kuaiShouRegionListParentService.updateById(kuaiShouRegionListParent);
+			//TODO 返回false说明什么?
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+		
+		return result;
+	}
+	
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "快手-父级地域-通过id删除")
+	@ApiOperation(value="快手-父级地域-通过id删除", notes="快手-父级地域-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			kuaiShouRegionListParentService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "快手-父级地域-批量删除")
+	@ApiOperation(value="快手-父级地域-批量删除", notes="快手-父级地域-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<KuaiShouRegionListParent> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<KuaiShouRegionListParent> result = new Result<KuaiShouRegionListParent>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.kuaiShouRegionListParentService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+	
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "快手-父级地域-通过id查询")
+	@ApiOperation(value="快手-父级地域-通过id查询", notes="快手-父级地域-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<KuaiShouRegionListParent> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<KuaiShouRegionListParent> result = new Result<KuaiShouRegionListParent>();
+		KuaiShouRegionListParent kuaiShouRegionListParent = kuaiShouRegionListParentService.getById(id);
+		if(kuaiShouRegionListParent==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(kuaiShouRegionListParent);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+  /**
+      * 导出excel
+   *
+   * @param request
+   * @param response
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+      // Step.1 组装查询条件
+      QueryWrapper<KuaiShouRegionListParent> queryWrapper = null;
+      try {
+          String paramsStr = request.getParameter("paramsStr");
+          if (oConvertUtils.isNotEmpty(paramsStr)) {
+              String deString = URLDecoder.decode(paramsStr, "UTF-8");
+              KuaiShouRegionListParent kuaiShouRegionListParent = JSON.parseObject(deString, KuaiShouRegionListParent.class);
+              queryWrapper = QueryGenerator.initQueryWrapper(kuaiShouRegionListParent, request.getParameterMap());
+          }
+      } catch (UnsupportedEncodingException e) {
+          e.printStackTrace();
+      }
+
+      //Step.2 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      List<KuaiShouRegionListParent> pageList = kuaiShouRegionListParentService.list(queryWrapper);
+      //导出文件名称
+      mv.addObject(NormalExcelConstants.FILE_NAME, "快手-父级地域列表");
+      mv.addObject(NormalExcelConstants.CLASS, KuaiShouRegionListParent.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("快手-父级地域列表数据", "导出人:Jeecg", "导出信息"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+  }
+
+  /**
+      * 通过excel导入数据
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+  @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+  public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          MultipartFile file = entity.getValue();// 获取上传文件对象
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<KuaiShouRegionListParent> listKuaiShouRegionListParents = ExcelImportUtil.importExcel(file.getInputStream(), KuaiShouRegionListParent.class, params);
+              kuaiShouRegionListParentService.saveBatch(listKuaiShouRegionListParents);
+              return Result.ok("文件导入成功!数据行数:" + listKuaiShouRegionListParents.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+  }
+
+}

+ 244 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/controller/KuaiShouVideoGetController.java

@@ -0,0 +1,244 @@
+package org.jeecg.modules.kuaishou.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.kuaishou.entity.KuaiShouVideoGet;
+import org.jeecg.modules.kuaishou.service.IKuaiShouVideoGetService;
+import java.util.Date;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+ /**
+ * @Description: 快手-获取视频接口
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="快手-获取视频接口")
+@RestController
+@RequestMapping("/kuaishou/kuaiShouVideoGet")
+public class KuaiShouVideoGetController {
+	@Autowired
+	private IKuaiShouVideoGetService kuaiShouVideoGetService;
+	
+	/**
+	  * 分页列表查询
+	 * @param kuaiShouVideoGet
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "快手-获取视频接口-分页列表查询")
+	@ApiOperation(value="快手-获取视频接口-分页列表查询", notes="快手-获取视频接口-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<KuaiShouVideoGet>> queryPageList(KuaiShouVideoGet kuaiShouVideoGet,
+									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+									  HttpServletRequest req) {
+		Result<IPage<KuaiShouVideoGet>> result = new Result<IPage<KuaiShouVideoGet>>();
+		QueryWrapper<KuaiShouVideoGet> queryWrapper = QueryGenerator.initQueryWrapper(kuaiShouVideoGet, req.getParameterMap());
+		Page<KuaiShouVideoGet> page = new Page<KuaiShouVideoGet>(pageNo, pageSize);
+		IPage<KuaiShouVideoGet> pageList = kuaiShouVideoGetService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+	
+	/**
+	  *   添加
+	 * @param kuaiShouVideoGet
+	 * @return
+	 */
+	@AutoLog(value = "快手-获取视频接口-添加")
+	@ApiOperation(value="快手-获取视频接口-添加", notes="快手-获取视频接口-添加")
+	@PostMapping(value = "/add")
+	public Result<KuaiShouVideoGet> add(@RequestBody KuaiShouVideoGet kuaiShouVideoGet) {
+		Result<KuaiShouVideoGet> result = new Result<KuaiShouVideoGet>();
+		try {
+			kuaiShouVideoGetService.save(kuaiShouVideoGet);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+	
+	/**
+	  *  编辑
+	 * @param kuaiShouVideoGet
+	 * @return
+	 */
+	@AutoLog(value = "快手-获取视频接口-编辑")
+	@ApiOperation(value="快手-获取视频接口-编辑", notes="快手-获取视频接口-编辑")
+	@PutMapping(value = "/edit")
+	public Result<KuaiShouVideoGet> edit(@RequestBody KuaiShouVideoGet kuaiShouVideoGet) {
+		Result<KuaiShouVideoGet> result = new Result<KuaiShouVideoGet>();
+		KuaiShouVideoGet kuaiShouVideoGetEntity = kuaiShouVideoGetService.getById(kuaiShouVideoGet.getId());
+		if(kuaiShouVideoGetEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = kuaiShouVideoGetService.updateById(kuaiShouVideoGet);
+			//TODO 返回false说明什么?
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+		
+		return result;
+	}
+	
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "快手-获取视频接口-通过id删除")
+	@ApiOperation(value="快手-获取视频接口-通过id删除", notes="快手-获取视频接口-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			kuaiShouVideoGetService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "快手-获取视频接口-批量删除")
+	@ApiOperation(value="快手-获取视频接口-批量删除", notes="快手-获取视频接口-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<KuaiShouVideoGet> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<KuaiShouVideoGet> result = new Result<KuaiShouVideoGet>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.kuaiShouVideoGetService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+	
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "快手-获取视频接口-通过id查询")
+	@ApiOperation(value="快手-获取视频接口-通过id查询", notes="快手-获取视频接口-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<KuaiShouVideoGet> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<KuaiShouVideoGet> result = new Result<KuaiShouVideoGet>();
+		KuaiShouVideoGet kuaiShouVideoGet = kuaiShouVideoGetService.getById(id);
+		if(kuaiShouVideoGet==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(kuaiShouVideoGet);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+  /**
+      * 导出excel
+   *
+   * @param request
+   * @param response
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+      // Step.1 组装查询条件
+      QueryWrapper<KuaiShouVideoGet> queryWrapper = null;
+      try {
+          String paramsStr = request.getParameter("paramsStr");
+          if (oConvertUtils.isNotEmpty(paramsStr)) {
+              String deString = URLDecoder.decode(paramsStr, "UTF-8");
+              KuaiShouVideoGet kuaiShouVideoGet = JSON.parseObject(deString, KuaiShouVideoGet.class);
+              queryWrapper = QueryGenerator.initQueryWrapper(kuaiShouVideoGet, request.getParameterMap());
+          }
+      } catch (UnsupportedEncodingException e) {
+          e.printStackTrace();
+      }
+
+      //Step.2 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      List<KuaiShouVideoGet> pageList = kuaiShouVideoGetService.list(queryWrapper);
+      //导出文件名称
+      mv.addObject(NormalExcelConstants.FILE_NAME, "快手-获取视频接口列表");
+      mv.addObject(NormalExcelConstants.CLASS, KuaiShouVideoGet.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("快手-获取视频接口列表数据", "导出人:Jeecg", "导出信息"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+  }
+
+  /**
+      * 通过excel导入数据
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+  @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+  public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          MultipartFile file = entity.getValue();// 获取上传文件对象
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<KuaiShouVideoGet> listKuaiShouVideoGets = ExcelImportUtil.importExcel(file.getInputStream(), KuaiShouVideoGet.class, params);
+              kuaiShouVideoGetService.saveBatch(listKuaiShouVideoGets);
+              return Result.ok("文件导入成功!数据行数:" + listKuaiShouVideoGets.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+  }
+
+}

+ 244 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/controller/KuaiShouVideoUploadController.java

@@ -0,0 +1,244 @@
+package org.jeecg.modules.kuaishou.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.kuaishou.entity.KuaiShouVideoUpload;
+import org.jeecg.modules.kuaishou.service.IKuaiShouVideoUploadService;
+import java.util.Date;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+ /**
+ * @Description: 快手-视频上传
+ * @Author: jeecg-boot
+ * @Date:   2019-07-26
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="快手-视频上传")
+@RestController
+@RequestMapping("/kuaishou/kuaiShouVideoUpload")
+public class KuaiShouVideoUploadController {
+	@Autowired
+	private IKuaiShouVideoUploadService kuaiShouVideoUploadService;
+	
+	/**
+	  * 分页列表查询
+	 * @param kuaiShouVideoUpload
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "快手-视频上传-分页列表查询")
+	@ApiOperation(value="快手-视频上传-分页列表查询", notes="快手-视频上传-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<KuaiShouVideoUpload>> queryPageList(KuaiShouVideoUpload kuaiShouVideoUpload,
+									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+									  HttpServletRequest req) {
+		Result<IPage<KuaiShouVideoUpload>> result = new Result<IPage<KuaiShouVideoUpload>>();
+		QueryWrapper<KuaiShouVideoUpload> queryWrapper = QueryGenerator.initQueryWrapper(kuaiShouVideoUpload, req.getParameterMap());
+		Page<KuaiShouVideoUpload> page = new Page<KuaiShouVideoUpload>(pageNo, pageSize);
+		IPage<KuaiShouVideoUpload> pageList = kuaiShouVideoUploadService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+	
+	/**
+	  *   添加
+	 * @param kuaiShouVideoUpload
+	 * @return
+	 */
+	@AutoLog(value = "快手-视频上传-添加")
+	@ApiOperation(value="快手-视频上传-添加", notes="快手-视频上传-添加")
+	@PostMapping(value = "/add")
+	public Result<KuaiShouVideoUpload> add(@RequestBody KuaiShouVideoUpload kuaiShouVideoUpload) {
+		Result<KuaiShouVideoUpload> result = new Result<KuaiShouVideoUpload>();
+		try {
+			kuaiShouVideoUploadService.save(kuaiShouVideoUpload);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+	
+	/**
+	  *  编辑
+	 * @param kuaiShouVideoUpload
+	 * @return
+	 */
+	@AutoLog(value = "快手-视频上传-编辑")
+	@ApiOperation(value="快手-视频上传-编辑", notes="快手-视频上传-编辑")
+	@PutMapping(value = "/edit")
+	public Result<KuaiShouVideoUpload> edit(@RequestBody KuaiShouVideoUpload kuaiShouVideoUpload) {
+		Result<KuaiShouVideoUpload> result = new Result<KuaiShouVideoUpload>();
+		KuaiShouVideoUpload kuaiShouVideoUploadEntity = kuaiShouVideoUploadService.getById(kuaiShouVideoUpload.getId());
+		if(kuaiShouVideoUploadEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = kuaiShouVideoUploadService.updateById(kuaiShouVideoUpload);
+			//TODO 返回false说明什么?
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+		
+		return result;
+	}
+	
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "快手-视频上传-通过id删除")
+	@ApiOperation(value="快手-视频上传-通过id删除", notes="快手-视频上传-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			kuaiShouVideoUploadService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+	
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "快手-视频上传-批量删除")
+	@ApiOperation(value="快手-视频上传-批量删除", notes="快手-视频上传-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<KuaiShouVideoUpload> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<KuaiShouVideoUpload> result = new Result<KuaiShouVideoUpload>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.kuaiShouVideoUploadService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+	
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "快手-视频上传-通过id查询")
+	@ApiOperation(value="快手-视频上传-通过id查询", notes="快手-视频上传-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<KuaiShouVideoUpload> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<KuaiShouVideoUpload> result = new Result<KuaiShouVideoUpload>();
+		KuaiShouVideoUpload kuaiShouVideoUpload = kuaiShouVideoUploadService.getById(id);
+		if(kuaiShouVideoUpload==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(kuaiShouVideoUpload);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+  /**
+      * 导出excel
+   *
+   * @param request
+   * @param response
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+      // Step.1 组装查询条件
+      QueryWrapper<KuaiShouVideoUpload> queryWrapper = null;
+      try {
+          String paramsStr = request.getParameter("paramsStr");
+          if (oConvertUtils.isNotEmpty(paramsStr)) {
+              String deString = URLDecoder.decode(paramsStr, "UTF-8");
+              KuaiShouVideoUpload kuaiShouVideoUpload = JSON.parseObject(deString, KuaiShouVideoUpload.class);
+              queryWrapper = QueryGenerator.initQueryWrapper(kuaiShouVideoUpload, request.getParameterMap());
+          }
+      } catch (UnsupportedEncodingException e) {
+          e.printStackTrace();
+      }
+
+      //Step.2 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      List<KuaiShouVideoUpload> pageList = kuaiShouVideoUploadService.list(queryWrapper);
+      //导出文件名称
+      mv.addObject(NormalExcelConstants.FILE_NAME, "快手-视频上传列表");
+      mv.addObject(NormalExcelConstants.CLASS, KuaiShouVideoUpload.class);
+      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("快手-视频上传列表数据", "导出人:Jeecg", "导出信息"));
+      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+      return mv;
+  }
+
+  /**
+      * 通过excel导入数据
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+  @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+  public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+          MultipartFile file = entity.getValue();// 获取上传文件对象
+          ImportParams params = new ImportParams();
+          params.setTitleRows(2);
+          params.setHeadRows(1);
+          params.setNeedSave(true);
+          try {
+              List<KuaiShouVideoUpload> listKuaiShouVideoUploads = ExcelImportUtil.importExcel(file.getInputStream(), KuaiShouVideoUpload.class, params);
+              kuaiShouVideoUploadService.saveBatch(listKuaiShouVideoUploads);
+              return Result.ok("文件导入成功!数据行数:" + listKuaiShouVideoUploads.size());
+          } catch (Exception e) {
+              log.error(e.getMessage(),e);
+              return Result.error("文件导入失败:"+e.getMessage());
+          } finally {
+              try {
+                  file.getInputStream().close();
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+      }
+      return Result.ok("文件导入失败!");
+  }
+
+}

+ 94 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/entity/KuaiShouImageGet.java

@@ -0,0 +1,94 @@
+package org.jeecg.modules.kuaishou.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @Description: 快手-获取图片接口
+ * @Author: jeecg-boot
+ * @Date: 2019-07-25
+ * @Version: V1.0
+ */
+@Data
+@TableName("ctop_kuaishou_image_get")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_image_get对象", description = "快手-获取图片接口")
+public class KuaiShouImageGet {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 账户ID
+     */
+    @Excel(name = "账户ID", width = 15)
+    @ApiModelProperty(value = "账户ID")
+    private Long accountId;
+    /**
+     * 视频预览链接
+     */
+    @Excel(name = "视频预览链接", width = 15)
+    @ApiModelProperty(value = "视频预览链接")
+    private Object url;
+    /**
+     * 宽
+     */
+    @Excel(name = "宽", width = 15)
+    @ApiModelProperty(value = "宽")
+    private Long width;
+    /**
+     * 高
+     */
+    @Excel(name = "高", width = 15)
+    @ApiModelProperty(value = "高")
+    private Long height;
+    /**
+     * 图片大小
+     */
+    @Excel(name = "图片大小", width = 15)
+    @ApiModelProperty(value = "图片大小")
+    private Long size;
+    /**
+     * 图片格式
+     */
+    @Excel(name = "图片格式", width = 15)
+    @ApiModelProperty(value = "图片格式")
+    private String format;
+    /**
+     * 图片 token
+     */
+    @Excel(name = "图片 token", width = 15)
+    @ApiModelProperty(value = "图片 token")
+    private Object imageToken;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}

+ 106 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/entity/KuaiShouImageUploand.java

@@ -0,0 +1,106 @@
+package org.jeecg.modules.kuaishou.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @Description: 快手-上传图片接口
+ * @Author: jeecg-boot
+ * @Date: 2019-07-26
+ * @Version: V1.0
+ */
+@Data
+@TableName("ctop_kuaishou_image_uploand")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_image_uploand对象", description = "快手-上传图片接口")
+public class KuaiShouImageUploand {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 账户ID
+     */
+    @Excel(name = "账户ID", width = 15)
+    @ApiModelProperty(value = "账户ID")
+    private Long accountId;
+    /**
+     * 本地存储地址
+     */
+    @Excel(name = "本地存储地址", width = 15)
+    @ApiModelProperty(value = "本地存储地址")
+    private Object savaPath;
+    /**
+     * 图片预览地址
+     */
+    @Excel(name = "图片预览地址", width = 15)
+    @ApiModelProperty(value = "图片预览地址")
+    private Object url;
+    /**
+     * 宽
+     */
+    @Excel(name = "宽", width = 15)
+    @ApiModelProperty(value = "宽")
+    private Long width;
+    /**
+     * 高
+     */
+    @Excel(name = "高", width = 15)
+    @ApiModelProperty(value = "高")
+    private Long height;
+    /**
+     * 图片大小
+     */
+    @Excel(name = "图片大小", width = 15)
+    @ApiModelProperty(value = "图片大小")
+    private Long size;
+    /**
+     * 图片格式
+     */
+    @Excel(name = "图片格式", width = 15)
+    @ApiModelProperty(value = "图片格式")
+    private String format;
+    /**
+     * 图片 token
+     */
+    @Excel(name = "图片 token", width = 15)
+    @ApiModelProperty(value = "图片 token")
+    private Object imageToken;
+    /**
+     * 文件上传时间
+     */
+    @Excel(name = "文件上传时间", width = 15)
+    @ApiModelProperty(value = "文件上传时间")
+    private String uploadTime;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}

+ 64 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/entity/KuaiShouRegionListChildren.java

@@ -0,0 +1,64 @@
+package org.jeecg.modules.kuaishou.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @Description: 快手-子级地域
+ * @Author: jeecg-boot
+ * @Date: 2019-07-25
+ * @Version: V1.0
+ */
+@Data
+@TableName("ctop_kuaishou_region_list_children")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_region_list_children对象", description = "快手-子级地域")
+public class KuaiShouRegionListChildren {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 父级地域id
+     */
+    @Excel(name = "父级地域id", width = 15)
+    @ApiModelProperty(value = "父级地域id")
+    private Long parentId;
+    /**
+     * 地域id
+     */
+    @Excel(name = "地域id", width = 15)
+    @ApiModelProperty(value = "地域id")
+    private Long regionId;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}

+ 76 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/entity/KuaiShouRegionListParent.java

@@ -0,0 +1,76 @@
+package org.jeecg.modules.kuaishou.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @Description: 快手-父级地域
+ * @Author: jeecg-boot
+ * @Date: 2019-07-25
+ * @Version: V1.0
+ */
+@Data
+@TableName("ctop_kuaishou_region_list_parent")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_region_list_parent对象", description = "快手-父级地域")
+public class KuaiShouRegionListParent {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 地域id
+     */
+    @Excel(name = "地域id", width = 15)
+    @ApiModelProperty(value = "地域id")
+    private Long regionId;
+    /**
+     * 父级地域
+     */
+    @Excel(name = "父级地域", width = 15)
+    @ApiModelProperty(value = "父级地域")
+    private Long parent;
+    /**
+     * 地域层级
+     */
+    @Excel(name = "地域层级", width = 15)
+    @ApiModelProperty(value = "地域层级")
+    private Integer level;
+    /**
+     * 地域名称
+     */
+    @Excel(name = "地域名称", width = 15)
+    @ApiModelProperty(value = "地域名称")
+    private String name;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}

+ 90 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/entity/KuaiShouVideoGet.java

@@ -0,0 +1,90 @@
+package org.jeecg.modules.kuaishou.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * @Description: 快手-获取视频接口
+ * @Author: jeecg-boot
+ * @Date: 2019-07-25
+ * @Version: V1.0
+ */
+@Data
+@TableName("ctop_kuaishou_video_get")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_video_get对象", description = "快手-获取视频接口")
+public class KuaiShouVideoGet {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 账户ID
+     */
+    @Excel(name = "账户ID", width = 15)
+    @ApiModelProperty(value = "账户ID")
+    private Long accountId;
+    /**
+     * 视频id
+     */
+    @Excel(name = "视频id", width = 15)
+    @ApiModelProperty(value = "视频id")
+    private String photoId;
+    /**
+     * 宽
+     */
+    @Excel(name = "宽", width = 15)
+    @ApiModelProperty(value = "宽")
+    private Integer width;
+    /**
+     * 高
+     */
+    @Excel(name = "高", width = 15)
+    @ApiModelProperty(value = "高")
+    private Integer height;
+    /**
+     * 视频预览链接
+     */
+    @Excel(name = "视频预览链接", width = 15)
+    @ApiModelProperty(value = "视频预览链接")
+    private Object url;
+    /**
+     * 视频首帧图片链接
+     */
+    @Excel(name = "视频首帧图片链接", width = 15)
+    @ApiModelProperty(value = "视频首帧图片链接")
+    private Object coverUrl;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}

+ 88 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/entity/KuaiShouVideoUpload.java

@@ -0,0 +1,88 @@
+package org.jeecg.modules.kuaishou.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @Description: 快手-视频上传
+ * @Author: jeecg-boot
+ * @Date: 2019-07-26
+ * @Version: V1.0
+ */
+@Data
+@TableName("ctop_kuaishou_video_upload")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_kuaishou_video_upload对象", description = "快手-视频上传")
+public class KuaiShouVideoUpload {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 账户ID
+     */
+    @Excel(name = "账户ID", width = 15)
+    @ApiModelProperty(value = "账户ID")
+    private Long accountId;
+    /**
+     * 视频id
+     */
+    @Excel(name = "视频id", width = 15)
+    @ApiModelProperty(value = "视频id")
+    private String photoId;
+    /**
+     * 本地保存地址
+     */
+    @Excel(name = "本地保存地址", width = 15)
+    @ApiModelProperty(value = "本地保存地址")
+    private Object savaPath;
+    /**
+     * 视频大小
+     */
+    @Excel(name = "视频大小", width = 15)
+    @ApiModelProperty(value = "视频大小")
+    private String size;
+    /**
+     * 视频类型
+     */
+    @Excel(name = "视频类型", width = 15)
+    @ApiModelProperty(value = "视频类型")
+    private String type;
+    /**
+     * 视频上传时间
+     */
+    @Excel(name = "视频上传时间", width = 15)
+    @ApiModelProperty(value = "视频上传时间")
+    private String uploadTime;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}

+ 17 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/KuaiShouImageGetMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.kuaishou.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.kuaishou.entity.KuaiShouImageGet;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 快手-获取图片接口
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+public interface KuaiShouImageGetMapper extends BaseMapper<KuaiShouImageGet> {
+
+}

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/KuaiShouImageUploandMapper.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.kuaishou.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.kuaishou.entity.KuaiShouImageUploand;
+
+/**
+ * @Description: 快手-上传图片接口
+ * @Author: jeecg-boot
+ * @Date: 2019-07-26
+ * @Version: V1.0
+ */
+public interface KuaiShouImageUploandMapper extends BaseMapper<KuaiShouImageUploand> {
+
+}

+ 15 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/KuaiShouRegionListChildrenMapper.java

@@ -0,0 +1,15 @@
+package org.jeecg.modules.kuaishou.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.kuaishou.entity.KuaiShouRegionListChildren;
+
+/**
+ * @Description: 快手-子级地域
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+public interface KuaiShouRegionListChildrenMapper extends BaseMapper<KuaiShouRegionListChildren> {
+
+    void deleteAll();
+}

+ 15 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/KuaiShouRegionListParentMapper.java

@@ -0,0 +1,15 @@
+package org.jeecg.modules.kuaishou.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.kuaishou.entity.KuaiShouRegionListParent;
+
+/**
+ * @Description: 快手-父级地域
+ * @Author: jeecg-boot
+ * @Date: 2019-07-25
+ * @Version: V1.0
+ */
+public interface KuaiShouRegionListParentMapper extends BaseMapper<KuaiShouRegionListParent> {
+
+    void deleteAll();
+}

+ 17 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/KuaiShouVideoGetMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.kuaishou.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.kuaishou.entity.KuaiShouVideoGet;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 快手-获取视频接口
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+public interface KuaiShouVideoGetMapper extends BaseMapper<KuaiShouVideoGet> {
+
+}

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/KuaiShouVideoUploadMapper.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.kuaishou.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.kuaishou.entity.KuaiShouVideoUpload;
+
+/**
+ * @Description: 快手-视频上传
+ * @Author: jeecg-boot
+ * @Date:   2019-07-26
+ * @Version: V1.0
+ */
+public interface KuaiShouVideoUploadMapper extends BaseMapper<KuaiShouVideoUpload> {
+
+}

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/xml/KuaiShouImageGetMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.kuaishou.mapper.KuaiShouImageGetMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/xml/KuaiShouImageUploandMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.kuaishou.mapper.KuaiShouImageUploandMapper">
+
+</mapper>

+ 8 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/xml/KuaiShouRegionListChildrenMapper.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.kuaishou.mapper.KuaiShouRegionListChildrenMapper">
+    <delete id="deleteAll">
+        delete from ctop_kuaishou_region_list_children;
+    </delete>
+
+</mapper>

+ 7 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/xml/KuaiShouRegionListParentMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.kuaishou.mapper.KuaiShouRegionListParentMapper">
+<delete id="deleteAll">
+    DELETE FROM ctop_kuaishou_region_list_children;
+</delete>
+</mapper>

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/xml/KuaiShouVideoGetMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.kuaishou.mapper.KuaiShouVideoGetMapper">
+
+</mapper>

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/mapper/xml/KuaiShouVideoUploadMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.kuaishou.mapper.KuaiShouVideoUploadMapper">
+
+</mapper>

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/IKuaiShouImageGetService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.kuaishou.service;
+
+import org.jeecg.modules.kuaishou.entity.KuaiShouImageGet;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 快手-获取图片接口
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+public interface IKuaiShouImageGetService extends IService<KuaiShouImageGet> {
+
+}

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/IKuaiShouImageUploandService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.kuaishou.service;
+
+import org.jeecg.modules.kuaishou.entity.KuaiShouImageUploand;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 快手-上传图片接口
+ * @Author: jeecg-boot
+ * @Date:   2019-07-26
+ * @Version: V1.0
+ */
+public interface IKuaiShouImageUploandService extends IService<KuaiShouImageUploand> {
+
+}

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/IKuaiShouRegionListChildrenService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.kuaishou.service;
+
+import org.jeecg.modules.kuaishou.entity.KuaiShouRegionListChildren;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 快手-子级地域
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+public interface IKuaiShouRegionListChildrenService extends IService<KuaiShouRegionListChildren> {
+
+}

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/IKuaiShouRegionListParentService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.kuaishou.service;
+
+import org.jeecg.modules.kuaishou.entity.KuaiShouRegionListParent;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 快手-父级地域
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+public interface IKuaiShouRegionListParentService extends IService<KuaiShouRegionListParent> {
+
+}

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/IKuaiShouVideoGetService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.kuaishou.service;
+
+import org.jeecg.modules.kuaishou.entity.KuaiShouVideoGet;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 快手-获取视频接口
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+public interface IKuaiShouVideoGetService extends IService<KuaiShouVideoGet> {
+
+}

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/IKuaiShouVideoUploadService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.kuaishou.service;
+
+import org.jeecg.modules.kuaishou.entity.KuaiShouVideoUpload;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 快手-视频上传
+ * @Author: jeecg-boot
+ * @Date:   2019-07-26
+ * @Version: V1.0
+ */
+public interface IKuaiShouVideoUploadService extends IService<KuaiShouVideoUpload> {
+
+}

+ 60 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/IKuaishouInterfaceService.java

@@ -5,7 +5,10 @@ import cn.com.ctop.kuaishou.modules.material.entity.KuaishouResult;
 import cn.com.ctop.kuaishou.modules.material.entity.KuaishouResultToken;
 import cn.com.ctop.kuaishou.modules.report.entity.*;
 import com.alibaba.fastjson.JSONObject;
+import org.springframework.http.HttpRequest;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.Map;
 
 public interface IKuaishouInterfaceService {
@@ -106,4 +109,61 @@ public interface IKuaishouInterfaceService {
      * @param requestJson
      */
     Map<String, Object> creativeCreate(String accessToken, Long advertiserId, JSONObject requestJson);
+
+    /**
+     * 文件上传
+     *
+     * @param advertiserId
+     * @param accessToken
+     * @param multipartFile
+     */
+    void videoUpload(Long advertiserId, String accessToken, MultipartFile multipartFile, HttpServletRequest request);
+
+    /**
+     * 获取视频
+     *
+     * @param advertiserId
+     * @param accessToken
+     * @param photoId
+     */
+    void videoGet(Long advertiserId, String accessToken, String photoId);
+
+    /**
+     * 获取图片信息
+     *
+     * @param advertiserId
+     * @param accessToken
+     * @param image_token
+     */
+    void imageGet(Long advertiserId, String accessToken, String image_token);
+
+    /**
+     * 获取 地域列表
+     *
+     * @param accessToken
+     */
+    void areaList(String accessToken);
+
+
+    /**
+     * 图片上传
+     *
+     * @param advertiserId
+     * @param accessToken
+     * @param multipartFile
+     * @param request
+     */
+    void imageUpload(Long advertiserId, String accessToken, MultipartFile multipartFile, HttpServletRequest request);
+
+
+    /**
+     * 文件上传 发送请求
+     *
+     * @param url
+     * @param paramMap
+     * @param headerMap
+     * @param filePath
+     */
+    String exceptInfoForRestTemplate(String url, Map<String, Object> paramMap, Map<String, String> headerMap, String filePath);
+
 }

+ 19 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaiShouImageGetServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.kuaishou.service.impl;
+
+import org.jeecg.modules.kuaishou.entity.KuaiShouImageGet;
+import org.jeecg.modules.kuaishou.mapper.KuaiShouImageGetMapper;
+import org.jeecg.modules.kuaishou.service.IKuaiShouImageGetService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 快手-获取图片接口
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+@Service
+public class KuaiShouImageGetServiceImpl extends ServiceImpl<KuaiShouImageGetMapper, KuaiShouImageGet> implements IKuaiShouImageGetService {
+
+}

+ 19 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaiShouImageUploandServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.kuaishou.service.impl;
+
+import org.jeecg.modules.kuaishou.entity.KuaiShouImageUploand;
+import org.jeecg.modules.kuaishou.mapper.KuaiShouImageUploandMapper;
+import org.jeecg.modules.kuaishou.service.IKuaiShouImageUploandService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 快手-上传图片接口
+ * @Author: jeecg-boot
+ * @Date:   2019-07-26
+ * @Version: V1.0
+ */
+@Service
+public class KuaiShouImageUploandServiceImpl extends ServiceImpl<KuaiShouImageUploandMapper, KuaiShouImageUploand> implements IKuaiShouImageUploandService {
+
+}

+ 19 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaiShouRegionListChildrenServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.kuaishou.service.impl;
+
+import org.jeecg.modules.kuaishou.entity.KuaiShouRegionListChildren;
+import org.jeecg.modules.kuaishou.mapper.KuaiShouRegionListChildrenMapper;
+import org.jeecg.modules.kuaishou.service.IKuaiShouRegionListChildrenService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 快手-子级地域
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+@Service
+public class KuaiShouRegionListChildrenServiceImpl extends ServiceImpl<KuaiShouRegionListChildrenMapper, KuaiShouRegionListChildren> implements IKuaiShouRegionListChildrenService {
+
+}

+ 19 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaiShouRegionListParentServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.kuaishou.service.impl;
+
+import org.jeecg.modules.kuaishou.entity.KuaiShouRegionListParent;
+import org.jeecg.modules.kuaishou.mapper.KuaiShouRegionListParentMapper;
+import org.jeecg.modules.kuaishou.service.IKuaiShouRegionListParentService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 快手-父级地域
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+@Service
+public class KuaiShouRegionListParentServiceImpl extends ServiceImpl<KuaiShouRegionListParentMapper, KuaiShouRegionListParent> implements IKuaiShouRegionListParentService {
+
+}

+ 19 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaiShouVideoGetServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.kuaishou.service.impl;
+
+import org.jeecg.modules.kuaishou.entity.KuaiShouVideoGet;
+import org.jeecg.modules.kuaishou.mapper.KuaiShouVideoGetMapper;
+import org.jeecg.modules.kuaishou.service.IKuaiShouVideoGetService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 快手-获取视频接口
+ * @Author: jeecg-boot
+ * @Date:   2019-07-25
+ * @Version: V1.0
+ */
+@Service
+public class KuaiShouVideoGetServiceImpl extends ServiceImpl<KuaiShouVideoGetMapper, KuaiShouVideoGet> implements IKuaiShouVideoGetService {
+
+}

+ 19 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaiShouVideoUploadServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.kuaishou.service.impl;
+
+import org.jeecg.modules.kuaishou.entity.KuaiShouVideoUpload;
+import org.jeecg.modules.kuaishou.mapper.KuaiShouVideoUploadMapper;
+import org.jeecg.modules.kuaishou.service.IKuaiShouVideoUploadService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 快手-视频上传
+ * @Author: jeecg-boot
+ * @Date:   2019-07-26
+ * @Version: V1.0
+ */
+@Service
+public class KuaiShouVideoUploadServiceImpl extends ServiceImpl<KuaiShouVideoUploadMapper, KuaiShouVideoUpload> implements IKuaiShouVideoUploadService {
+
+}

+ 372 - 8
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/service/impl/KuaishouInterfaceServiceImpl.java

@@ -1,8 +1,6 @@
 package org.jeecg.modules.kuaishou.service.impl;
 
-import cn.com.ctop.common.utils.Check;
-import cn.com.ctop.common.utils.HttpUtils;
-import cn.com.ctop.common.utils.PropertiesUtils;
+import cn.com.ctop.common.utils.*;
 import cn.com.ctop.kuaishou.modules.material.entity.KuaishouResult;
 import cn.com.ctop.kuaishou.modules.material.entity.KuaishouResultToken;
 import cn.com.ctop.kuaishou.modules.report.entity.*;
@@ -16,19 +14,28 @@ import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 import constant.KuaishouInterfaceConstant;
+import org.apache.http.ParseException;
 import org.jeecg.modules.kuaishou.entity.*;
 import org.jeecg.modules.kuaishou.mapper.*;
 import org.jeecg.modules.kuaishou.service.IKuaishouInterfaceService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.http.*;
 import org.springframework.stereotype.Service;
-
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 
 @Service
 public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
@@ -272,6 +279,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
             String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.CAMPAIGN_CREATE;
             Map<String, String> headers = new HashMap<String, String>();
             headers.put("Access-Token", accessToken);
+            headers.put("Content-Type", " application/json");
             requestJson.put("advertiser_id", advertiser_id);
             String result = HttpUtils.kuaiShouhttpPostRequest(url, requestJson.toJSONString(), headers);
             JSONObject resultJson = JSONObject.parseObject(result);
@@ -347,6 +355,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
             Map<String, String> headers = new HashMap<String, String>();
             requestJson.put("advertiser_id", advertiser_id);
             headers.put("Access-Token", accessToken);
+            headers.put("Content-Type", " application/json");
 
             String result = HttpUtils.kuaiShouhttpPostRequest(url, requestJson.toJSONString(), headers);
             JSONObject resultJson = JSONObject.parseObject(result);
@@ -451,6 +460,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
         String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.CAMPAIGN_LIST;
         Map<String, String> headers = new HashMap<>();
         headers.put("Access-Token", accessToken);
+        headers.put("Content-Type", " application/json");
         JSONObject param = new JSONObject();
         param.put("advertiser_id", advertiserId);
         param.put("page", page);
@@ -526,6 +536,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
         param.put("page", page);
         Map<String, String> headers = new HashMap<>();
         headers.put("Access-Token", accessToken);
+        headers.put("Content-Type", " application/json");
         try {
             String result = HttpUtils.kuaiShouhttpPostRequest(url, param.toJSONString(), headers);
             JSONObject resultJson = JSONObject.parseObject(result);
@@ -627,7 +638,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
 
         String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.CREATIVE_LIST;
         Map<String, String> headers = new HashMap<String, String>();
-        headers.put("Content-Type", "application/json");
+        headers.put("Content-Type", " application/json");
         headers.put("Access-Token", accessToken);
         JSONObject param = new JSONObject();
         param.put("advertiser_id", advertiserId);
@@ -700,6 +711,10 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
         requestJson.put("auth_code", authCode);
         requestJson.put("app_id", PropertiesUtils.getConfig("kuaishou_appid"));
         requestJson.put("secret", PropertiesUtils.getConfig("kuaishou_secret"));
+
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", " application/json");
+
         KuaishouResultToken kuaiShouResult = null;
         try {
             String result = HttpUtils.kuaiShouhttpPostRequest(url, requestJson.toJSONString(), null);
@@ -723,7 +738,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
     public KuaishouResultToken getRefreshToken(String refreshToken) {
         String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.REFRESH_TOKEN;
         Map<String, String> headers = new HashMap<String, String>();
-        headers.put("Content-Type", "application/json");
+        headers.put("Content-Type", " application/json");
         Map<String, Object> param = new HashMap<String, Object>();
         param.put("app_id", PropertiesUtils.getConfig("kuaishou_appid"));
         param.put("secret", PropertiesUtils.getConfig("kuaishou_secret"));
@@ -766,6 +781,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
         param.put("advertiser_id", advertiserId);
         Map<String, String> headers = new HashMap<String, String>();
         headers.put("Access-Token", accessToken);
+        headers.put("Content-Type", " application/json");
         try {
             String result = HttpUtils.kuaiShouhttpPostRequest(url, param.toJSONString(), headers);
             JSONObject resultJson = JSONObject.parseObject(result);
@@ -831,6 +847,8 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
             String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.CAMPAIGN_CREATE;
             requestJson.put("advertiser_id", advertiserId);
             Map<String, String> header = new HashMap<String, String>();
+            header.put("Content-Type", " application/json");
+
             header.put("Access-Token", accessToken);
 
             String result = HttpUtils.kuaiShouhttpPostRequest(url, requestJson.toJSONString(), header);
@@ -881,6 +899,315 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
 
     }
 
+    /**
+     * 文件上传
+     *
+     * @param advertiserId
+     * @param accessToken
+     * @param multipartFile
+     */
+    @Autowired
+    private KuaiShouVideoUploadMapper videoUploadMapper;
+
+    @Override
+    public void videoUpload(Long advertiserId, String accessToken, MultipartFile multipartFile, HttpServletRequest request) {
+        Map<String, Object> returnMap = new HashMap<>();
+        try {
+            String savaPath = "D:\\tets1";
+            FileUploadTool fileUploadTool = new FileUploadTool();
+            FileEntity entity = new FileEntity();
+            entity = fileUploadTool.createFile(multipartFile, request, savaPath);
+            if (!Check.isNull(entity)) {
+                String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.VIDEO_UPLOAD;
+                JSONObject requestJson = new JSONObject();
+                requestJson.put("advertiser_id", advertiserId);
+                Map<String, String> headerMap = new HashMap<String, String>();
+                headerMap.put("Access-Token", accessToken);
+                headerMap.put("Content-Type", "multipart/form-data");
+                String result = exceptInfoForRestTemplate(url, requestJson, headerMap, entity.getPath());
+                JSONObject resultJson = JSONObject.parseObject(result);
+                if (!Check.isNull(result)) {
+                    Integer code = resultJson.getInteger("code");
+                    if (code == 0) {
+                        JSONObject dataJson = resultJson.getJSONObject("data");
+                        if (!Check.isNull(dataJson)) {
+                            KuaiShouVideoUpload videoUpload = new KuaiShouVideoUpload();
+                            videoUpload.setPhotoId(dataJson.getString("photo_id"));
+                            videoUpload.setAccountId(advertiserId);
+                            videoUpload.setSavaPath(entity.getPath());
+                            videoUpload.setSize(entity.getSize());
+                            videoUpload.setType(entity.getType());
+                            videoUpload.setUploadTime(DateUtils.timeStamp2Date(entity.getUploadTime()));
+                            int i = videoUploadMapper.insert(videoUpload);
+                            if (i > 0) {
+                                logger.info("上传快手视频完成");
+                            }
+                        }
+                    } else {
+                        logger.error("快手上传视频返回信息异常 ,advertiserId:{},异常信息:{}", advertiserId, resultJson);
+                    }
+
+                } else {
+                    logger.error("快手上传视频返回信息为空,advertiserId:{}", advertiserId);
+                }
+            }
+
+        } catch (Exception e) {
+            logger.error("上传视频失败,advertiser_id:{}", advertiserId);
+            returnMap.put("code", -1);
+            returnMap.put("message", "error");
+            returnMap.put("desc", "Interface exception");
+            e.printStackTrace();
+        }
+
+    }
+
+
+    /**
+     * 获取视频信息
+     *
+     * @param advertiserId
+     * @param accessToken
+     */
+    @Autowired
+    private KuaiShouVideoGetMapper videoGetMapper;
+
+    @Override
+    public void videoGet(Long advertiserId, String accessToken, String photoId) {
+        try {
+            String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.VIDEO_GET;
+            JSONObject param = new JSONObject();
+            param.put("advertiser_id", advertiserId);
+            ArrayList<String> strArray = new ArrayList<String>();
+            strArray.add(photoId);
+            param.put("photo_ids", strArray);
+            Map<String, String> headers = new HashMap<String, String>();
+            headers.put("Access-Token", accessToken);
+            headers.put("Content-Type", " application/json");
+            String result = HttpUtils.kuaiShouhttpPostRequest(url, param.toJSONString(), headers);
+            JSONObject resultJson = JSONObject.parseObject(result);
+            if (!Check.isNull(resultJson)) {
+                Integer code = resultJson.getInteger("code");
+                if (code == 0) {
+                    JSONArray dataArr = resultJson.getJSONArray("data");
+                    if (!Check.isNull(dataArr)) {
+                        for (int i = 0; i < dataArr.size(); i++) {
+                            JSONObject dataJson = JSONObject.parseObject(dataArr.get(i).toString());
+                            if (!Check.isNull(dataJson)) {
+                                KuaiShouVideoGet videoGet = new KuaiShouVideoGet();
+                                videoGet.setAccountId(advertiserId);
+                                videoGet.setWidth(dataJson.getInteger("width"));
+                                videoGet.setHeight(dataJson.getInteger("height"));
+                                videoGet.setUrl(dataJson.getString("url"));
+                                videoGet.setPhotoId(dataJson.getString("photo_id"));
+                                videoGet.setCoverUrl(dataJson.getString("cover_url"));
+                                videoGetMapper.insert(videoGet);
+                            }
+
+                        }
+
+                    }
+
+                } else {
+                    logger.error("获取广告视频失败,advertiser_id:{},返回信息:{}", advertiserId, resultJson);
+
+                }
+
+            } else {
+                logger.error("获取视频信息返回结果为空,advertiserId:{}", advertiserId);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+
+    }
+
+    /**
+     * 获取图片信息
+     *
+     * @param advertiserId
+     * @param accessToken
+     * @param image_token
+     */
+    @Autowired
+    private KuaiShouImageGetMapper imageGetMapper;
+
+    @Override
+    public void imageGet(Long advertiserId, String accessToken, String image_token) {
+        try {
+            String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.IMAGE_GET;
+            JSONObject param = new JSONObject();
+            param.put("advertiser_id", advertiserId);
+            param.put("image_token", image_token);
+
+            Map<String, String> headers = new HashMap<String, String>();
+            headers.put("Access-Token", accessToken);
+            headers.put("Content-Type", " application/json");
+            String result = HttpUtils.kuaiShouhttpPostRequest(url, param.toJSONString(), headers);
+            System.err.println(result);
+            JSONObject resultJson = JSONObject.parseObject(result);
+            if (!Check.isNull(resultJson)) {
+                Integer code = resultJson.getInteger("code");
+                if (code == 0) {
+                    JSONObject dataJson = resultJson.getJSONObject("data");
+                    if (!Check.isNull(dataJson)) {
+                        KuaiShouImageGet imageGet = new KuaiShouImageGet();
+                        imageGet.setAccountId(advertiserId);
+                        imageGet.setUrl(dataJson.getString("url"));
+                        imageGet.setWidth(dataJson.getLong("width"));
+                        imageGet.setHeight(dataJson.getLong("height"));
+                        imageGet.setSize(dataJson.getLong("size"));
+                        imageGet.setFormat(dataJson.getString("format"));
+                        imageGet.setImageToken(dataJson.getString("image_token"));
+                        imageGetMapper.insert(imageGet);
+                    }
+
+                } else {
+                    logger.error("获取广告图片失败,advertiser_id:{},返回信息:{}", advertiserId, resultJson);
+
+                }
+
+            } else {
+                logger.error("获取图片信息返回结果为空,advertiserId:{}", advertiserId);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 获取 地域列表
+     *
+     * @param accessToken
+     */
+    @Autowired
+    private KuaiShouRegionListChildrenMapper regionListChildrenMapper;
+    @Autowired
+    private KuaiShouRegionListParentMapper regionListParentMapper;
+
+    @Override
+    public void areaList(String accessToken) {
+        try {
+            String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.REGION_LIST;
+            Map<String, String> headers = new HashMap<String, String>();
+            headers.put("Access-Token", accessToken);
+            headers.put("Content-Type", " application/json");
+            String result = HttpUtils.httpGet(url, null, headers);
+            JSONObject resultJson = JSONObject.parseObject(result);
+            if (!Check.isNull(resultJson)) {
+                Integer code = resultJson.getInteger("code");
+                if (code == 0) {
+                    regionListParentMapper.deleteAll();
+                    regionListChildrenMapper.deleteAll();
+                    JSONObject dataJson = resultJson.getJSONObject("data");
+                    if (!Check.isNull(dataJson)) {
+                        for (Map.Entry<String, Object> entry : dataJson.entrySet()) {
+                            String key = entry.getKey();
+                            JSONObject keyJson = dataJson.getJSONObject(key);
+                            if (!Check.isNull(keyJson)) {
+                                KuaiShouRegionListParent regionListParent = new KuaiShouRegionListParent();
+                                Long id = keyJson.getLong("id");
+                                regionListParent.setRegionId(id);
+                                regionListParent.setLevel(keyJson.getInteger("level"));
+                                regionListParent.setName(keyJson.getString("name"));
+                                regionListParent.setParent(keyJson.getLong("parent"));
+                                regionListParentMapper.insert(regionListParent);
+                                JSONArray childrenArr = keyJson.getJSONArray("children");
+                                if (!Check.isNull(childrenArr)) {
+                                    for (int i = 0; i < childrenArr.size(); i++) {
+                                        KuaiShouRegionListChildren regionListChildren = new KuaiShouRegionListChildren();
+                                        regionListChildren.setParentId(id);
+                                        regionListChildren.setRegionId(childrenArr.getLong(i));
+                                        regionListChildrenMapper.insert(regionListChildren);
+
+                                    }
+                                }
+                            }
+                        }
+                    }
+
+                } else {
+                    logger.error("获取地域列表失败");
+                }
+            } else {
+                logger.error("获取地域列表返回结果为空");
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 图片上传
+     *
+     * @param advertiserId
+     * @param accessToken
+     * @param multipartFile
+     * @param request
+     */
+    @Autowired
+    private KuaiShouImageUploandMapper imageUploandMapper;
+
+    @Override
+    public void imageUpload(Long advertiserId, String accessToken, MultipartFile multipartFile, HttpServletRequest request) {
+        Map<String, Object> returnMap = new HashMap<>();
+        try {
+            String savaPath = "D:\\tets1\\image";
+            FileUploadTool fileUploadTool = new FileUploadTool();
+            FileEntity entity;
+            entity = fileUploadTool.createFile(multipartFile, request, savaPath);
+            if (!Check.isNull(entity)) {
+                String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.IMAGE_UPLOAD;
+                JSONObject requestJson = new JSONObject();
+                requestJson.put("advertiser_id", advertiserId);
+                Map<String, String> headerMap = new HashMap<String, String>();
+                headerMap.put("Content-Type", "multipart/form-data");
+                headerMap.put("Access-Token", accessToken);
+                String result = exceptInfoForRestTemplate(url, requestJson, headerMap, entity.getPath());
+                JSONObject resultJson = JSONObject.parseObject(result);
+                if (!Check.isNull(result)) {
+                    Integer code = resultJson.getInteger("code");
+                    if (code == 0) {
+                        JSONObject dataJson = resultJson.getJSONObject("data");
+                        if (!Check.isNull(dataJson)) {
+                            KuaiShouImageUploand imageUploand = new KuaiShouImageUploand();
+                            imageUploand.setAccountId(advertiserId);
+                            imageUploand.setSavaPath(entity.getPath());
+                            imageUploand.setUploadTime(DateUtils.timeStamp2Date(entity.getUploadTime()));
+                            imageUploand.setUrl(dataJson.getString("url"));
+                            imageUploand.setImageToken(dataJson.getString("image_token"));
+                            imageUploand.setHeight(dataJson.getLong("height"));
+                            imageUploand.setSize(dataJson.getLong("size"));
+                            imageUploand.setFormat(dataJson.getString("format"));
+                            imageUploand.setWidth(dataJson.getLong("width"));
+                            int i = imageUploandMapper.insert(imageUploand);
+                            if (i > 0) {
+                                logger.info("快手-图片上传成功");
+                            }
+                        }
+
+                    } else {
+                        logger.error("快手上传图片返回信息异常 ,advertiserId:{},异常信息:{}", advertiserId, resultJson);
+                    }
+
+                } else {
+                    logger.error("快手上传图片返回信息为空,advertiserId:{}", advertiserId);
+                }
+            }
+        } catch (Exception e) {
+            logger.error("上传图片失败,advertiser_id:{}", advertiserId);
+            returnMap.put("code", -1);
+            returnMap.put("message", "error");
+            returnMap.put("desc", "Interface exception");
+            e.printStackTrace();
+        }
+
+    }
+
 
     public Object jsonToObj(Object t, String jsonStr) throws
             JsonParseException, JsonMappingException, IOException {
@@ -911,4 +1238,41 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
     }
 
 
+    @Autowired
+    private RestTemplate rest;
+
+    public String exceptInfoForRestTemplate(String url, Map<String, Object> paramMap, Map<String, String> headerMap, String filePath) throws ParseException {
+
+        try {
+            FileSystemResource resource = new FileSystemResource(new File(filePath));
+            MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
+            param.add("file", resource);
+
+
+            if (!Check.isNullMap(paramMap)) {
+                for (String key : paramMap.keySet()) {
+                    param.add(key, paramMap.get(key));
+                }
+
+
+                HttpHeaders headers = new HttpHeaders();
+                if (!Check.isNullMap(headerMap)) {
+                    for (String key : headerMap.keySet()) {
+                        headers.add(key, (String) headerMap.get(key));
+                    }
+                }
+
+                HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(param, headers);
+                ResponseEntity<String> responseEntity = rest.exchange(url, HttpMethod.POST, httpEntity, String.class);
+                System.err.println(responseEntity.getBody());
+                return responseEntity.getBody();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+
 }

+ 198 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/KuaiShouImageGetList.vue

@@ -0,0 +1,198 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+
+          <a-col :md="6" :sm="8">
+            <a-form-item label="账户ID">
+              <a-input placeholder="请输入账户ID" v-model="queryParam.accountId"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="视频预览链接">
+              <a-input placeholder="请输入视频预览链接" v-model="queryParam.url"></a-input>
+            </a-form-item>
+          </a-col>
+        <template v-if="toggleSearchStatus">
+        <a-col :md="6" :sm="8">
+            <a-form-item label="宽">
+              <a-input placeholder="请输入宽" v-model="queryParam.width"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="高">
+              <a-input placeholder="请输入高" v-model="queryParam.height"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="图片大小">
+              <a-input placeholder="请输入图片大小" v-model="queryParam.size"></a-input>
+            </a-form-item>
+          </a-col>
+          </template>
+          <a-col :md="6" :sm="8" >
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('快手-获取图片接口')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <kuaiShouImageGet-modal ref="modalForm" @ok="modalFormOk"></kuaiShouImageGet-modal>
+  </a-card>
+</template>
+
+<script>
+  import KuaiShouImageGetModal from './modules/KuaiShouImageGetModal'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+  export default {
+    name: "KuaiShouImageGetList",
+    mixins:[JeecgListMixin],
+    components: {
+      KuaiShouImageGetModal
+    },
+    data () {
+      return {
+        description: '快手-获取图片接口管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+           },
+		   {
+            title: '账户ID',
+            align:"center",
+            dataIndex: 'accountId'
+           },
+		   {
+            title: '视频预览链接',
+            align:"center",
+            dataIndex: 'url'
+           },
+		   {
+            title: '宽',
+            align:"center",
+            dataIndex: 'width'
+           },
+		   {
+            title: '高',
+            align:"center",
+            dataIndex: 'height'
+           },
+		   {
+            title: '图片大小',
+            align:"center",
+            dataIndex: 'size'
+           },
+		   {
+            title: '图片格式',
+            align:"center",
+            dataIndex: 'format'
+           },
+		   {
+            title: '图片 token',
+            align:"center",
+            dataIndex: 'imageToken'
+           },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+		url: {
+          list: "/kuaishou/kuaiShouImageGet/list",
+          delete: "/kuaishou/kuaiShouImageGet/delete",
+          deleteBatch: "/kuaishou/kuaiShouImageGet/deleteBatch",
+          exportXlsUrl: "kuaishou/kuaiShouImageGet/exportXls",
+          importExcelUrl: "kuaishou/kuaiShouImageGet/importExcel",
+       },
+    }
+  },
+  computed: {
+    importExcelUrl: function(){
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+    }
+  },
+    methods: {
+     
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>

+ 208 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/KuaiShouImageUploandList.vue

@@ -0,0 +1,208 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+
+          <a-col :md="6" :sm="8">
+            <a-form-item label="账户ID">
+              <a-input placeholder="请输入账户ID" v-model="queryParam.accountId"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="本地存储地址">
+              <a-input placeholder="请输入本地存储地址" v-model="queryParam.savaPath"></a-input>
+            </a-form-item>
+          </a-col>
+        <template v-if="toggleSearchStatus">
+        <a-col :md="6" :sm="8">
+            <a-form-item label="图片预览地址">
+              <a-input placeholder="请输入图片预览地址" v-model="queryParam.url"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="宽">
+              <a-input placeholder="请输入宽" v-model="queryParam.width"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="高">
+              <a-input placeholder="请输入高" v-model="queryParam.height"></a-input>
+            </a-form-item>
+          </a-col>
+          </template>
+          <a-col :md="6" :sm="8" >
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('快手-上传图片接口')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <kuaiShouImageUploand-modal ref="modalForm" @ok="modalFormOk"></kuaiShouImageUploand-modal>
+  </a-card>
+</template>
+
+<script>
+  import KuaiShouImageUploandModal from './modules/KuaiShouImageUploandModal'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+  export default {
+    name: "KuaiShouImageUploandList",
+    mixins:[JeecgListMixin],
+    components: {
+      KuaiShouImageUploandModal
+    },
+    data () {
+      return {
+        description: '快手-上传图片接口管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+           },
+		   {
+            title: '账户ID',
+            align:"center",
+            dataIndex: 'accountId'
+           },
+		   {
+            title: '本地存储地址',
+            align:"center",
+            dataIndex: 'savaPath'
+           },
+		   {
+            title: '图片预览地址',
+            align:"center",
+            dataIndex: 'url'
+           },
+		   {
+            title: '宽',
+            align:"center",
+            dataIndex: 'width'
+           },
+		   {
+            title: '高',
+            align:"center",
+            dataIndex: 'height'
+           },
+		   {
+            title: '图片大小',
+            align:"center",
+            dataIndex: 'size'
+           },
+		   {
+            title: '图片格式',
+            align:"center",
+            dataIndex: 'format'
+           },
+		   {
+            title: '图片 token',
+            align:"center",
+            dataIndex: 'imageToken'
+           },
+		   {
+            title: '文件上传时间',
+            align:"center",
+            dataIndex: 'uploadTime'
+           },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+		url: {
+          list: "/kuaishou/kuaiShouImageUploand/list",
+          delete: "/kuaishou/kuaiShouImageUploand/delete",
+          deleteBatch: "/kuaishou/kuaiShouImageUploand/deleteBatch",
+          exportXlsUrl: "kuaishou/kuaiShouImageUploand/exportXls",
+          importExcelUrl: "kuaishou/kuaiShouImageUploand/importExcel",
+       },
+    }
+  },
+  computed: {
+    importExcelUrl: function(){
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+    }
+  },
+    methods: {
+     
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>

+ 157 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/KuaiShouRegionListChildrenList.vue

@@ -0,0 +1,157 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+
+          <a-col :md="6" :sm="8">
+            <a-form-item label="父级地域id">
+              <a-input placeholder="请输入父级地域id" v-model="queryParam.parentId"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="地域id">
+              <a-input placeholder="请输入地域id" v-model="queryParam.regionId"></a-input>
+            </a-form-item>
+          </a-col>
+          </template>
+          <a-col :md="6" :sm="8" >
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('快手-子级地域')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <kuaiShouRegionListChildren-modal ref="modalForm" @ok="modalFormOk"></kuaiShouRegionListChildren-modal>
+  </a-card>
+</template>
+
+<script>
+  import KuaiShouRegionListChildrenModal from './modules/KuaiShouRegionListChildrenModal'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+  export default {
+    name: "KuaiShouRegionListChildrenList",
+    mixins:[JeecgListMixin],
+    components: {
+      KuaiShouRegionListChildrenModal
+    },
+    data () {
+      return {
+        description: '快手-子级地域管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+           },
+		   {
+            title: '父级地域id',
+            align:"center",
+            dataIndex: 'parentId'
+           },
+		   {
+            title: '地域id',
+            align:"center",
+            dataIndex: 'regionId'
+           },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+		url: {
+          list: "/kuaishou/kuaiShouRegionListChildren/list",
+          delete: "/kuaishou/kuaiShouRegionListChildren/delete",
+          deleteBatch: "/kuaishou/kuaiShouRegionListChildren/deleteBatch",
+          exportXlsUrl: "kuaishou/kuaiShouRegionListChildren/exportXls",
+          importExcelUrl: "kuaishou/kuaiShouRegionListChildren/importExcel",
+       },
+    }
+  },
+  computed: {
+    importExcelUrl: function(){
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+    }
+  },
+    methods: {
+     
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>

+ 178 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/KuaiShouRegionListParentList.vue

@@ -0,0 +1,178 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+
+          <a-col :md="6" :sm="8">
+            <a-form-item label="地域id">
+              <a-input placeholder="请输入地域id" v-model="queryParam.regionId"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="父级地域">
+              <a-input placeholder="请输入父级地域" v-model="queryParam.parent"></a-input>
+            </a-form-item>
+          </a-col>
+        <template v-if="toggleSearchStatus">
+        <a-col :md="6" :sm="8">
+            <a-form-item label="地域层级">
+              <a-input placeholder="请输入地域层级" v-model="queryParam.level"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="地域名称">
+              <a-input placeholder="请输入地域名称" v-model="queryParam.name"></a-input>
+            </a-form-item>
+          </a-col>
+          </template>
+          <a-col :md="6" :sm="8" >
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('快手-父级地域')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <kuaiShouRegionListParent-modal ref="modalForm" @ok="modalFormOk"></kuaiShouRegionListParent-modal>
+  </a-card>
+</template>
+
+<script>
+  import KuaiShouRegionListParentModal from './modules/KuaiShouRegionListParentModal'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+  export default {
+    name: "KuaiShouRegionListParentList",
+    mixins:[JeecgListMixin],
+    components: {
+      KuaiShouRegionListParentModal
+    },
+    data () {
+      return {
+        description: '快手-父级地域管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+           },
+		   {
+            title: '地域id',
+            align:"center",
+            dataIndex: 'regionId'
+           },
+		   {
+            title: '父级地域',
+            align:"center",
+            dataIndex: 'parent'
+           },
+		   {
+            title: '地域层级',
+            align:"center",
+            dataIndex: 'level'
+           },
+		   {
+            title: '地域名称',
+            align:"center",
+            dataIndex: 'name'
+           },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+		url: {
+          list: "/kuaishou/kuaiShouRegionListParent/list",
+          delete: "/kuaishou/kuaiShouRegionListParent/delete",
+          deleteBatch: "/kuaishou/kuaiShouRegionListParent/deleteBatch",
+          exportXlsUrl: "kuaishou/kuaiShouRegionListParent/exportXls",
+          importExcelUrl: "kuaishou/kuaiShouRegionListParent/importExcel",
+       },
+    }
+  },
+  computed: {
+    importExcelUrl: function(){
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+    }
+  },
+    methods: {
+     
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>

+ 193 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/KuaiShouVideoGetList.vue

@@ -0,0 +1,193 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+
+          <a-col :md="6" :sm="8">
+            <a-form-item label="账户ID">
+              <a-input placeholder="请输入账户ID" v-model="queryParam.accountId"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="视频id">
+              <a-input placeholder="请输入视频id" v-model="queryParam.photoId"></a-input>
+            </a-form-item>
+          </a-col>
+        <template v-if="toggleSearchStatus">
+        <a-col :md="6" :sm="8">
+            <a-form-item label="宽">
+              <a-input placeholder="请输入宽" v-model="queryParam.width"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="高">
+              <a-input placeholder="请输入高" v-model="queryParam.height"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="视频预览链接">
+              <a-input placeholder="请输入视频预览链接" v-model="queryParam.url"></a-input>
+            </a-form-item>
+          </a-col>
+          </template>
+          <a-col :md="6" :sm="8" >
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('快手-获取视频接口')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <kuaiShouVideoGet-modal ref="modalForm" @ok="modalFormOk"></kuaiShouVideoGet-modal>
+  </a-card>
+</template>
+
+<script>
+  import KuaiShouVideoGetModal from './modules/KuaiShouVideoGetModal'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+  export default {
+    name: "KuaiShouVideoGetList",
+    mixins:[JeecgListMixin],
+    components: {
+      KuaiShouVideoGetModal
+    },
+    data () {
+      return {
+        description: '快手-获取视频接口管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+           },
+		   {
+            title: '账户ID',
+            align:"center",
+            dataIndex: 'accountId'
+           },
+		   {
+            title: '视频id',
+            align:"center",
+            dataIndex: 'photoId'
+           },
+		   {
+            title: '宽',
+            align:"center",
+            dataIndex: 'width'
+           },
+		   {
+            title: '高',
+            align:"center",
+            dataIndex: 'height'
+           },
+		   {
+            title: '视频预览链接',
+            align:"center",
+            dataIndex: 'url'
+           },
+		   {
+            title: '视频首帧图片链接',
+            align:"center",
+            dataIndex: 'coverUrl'
+           },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+		url: {
+          list: "/kuaishou/kuaiShouVideoGet/list",
+          delete: "/kuaishou/kuaiShouVideoGet/delete",
+          deleteBatch: "/kuaishou/kuaiShouVideoGet/deleteBatch",
+          exportXlsUrl: "kuaishou/kuaiShouVideoGet/exportXls",
+          importExcelUrl: "kuaishou/kuaiShouVideoGet/importExcel",
+       },
+    }
+  },
+  computed: {
+    importExcelUrl: function(){
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+    }
+  },
+    methods: {
+     
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>

+ 193 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/KuaiShouVideoUploadList.vue

@@ -0,0 +1,193 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline">
+        <a-row :gutter="24">
+
+          <a-col :md="6" :sm="8">
+            <a-form-item label="账户ID">
+              <a-input placeholder="请输入账户ID" v-model="queryParam.accountId"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="视频id">
+              <a-input placeholder="请输入视频id" v-model="queryParam.photoId"></a-input>
+            </a-form-item>
+          </a-col>
+        <template v-if="toggleSearchStatus">
+        <a-col :md="6" :sm="8">
+            <a-form-item label="本地保存地址">
+              <a-input placeholder="请输入本地保存地址" v-model="queryParam.savaPath"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="视频大小">
+              <a-input placeholder="请输入视频大小" v-model="queryParam.size"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+            <a-form-item label="视频类型">
+              <a-input placeholder="请输入视频类型" v-model="queryParam.type"></a-input>
+            </a-form-item>
+          </a-col>
+          </template>
+          <a-col :md="6" :sm="8" >
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('快手-视频上传')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <kuaiShouVideoUpload-modal ref="modalForm" @ok="modalFormOk"></kuaiShouVideoUpload-modal>
+  </a-card>
+</template>
+
+<script>
+  import KuaiShouVideoUploadModal from './modules/KuaiShouVideoUploadModal'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+  export default {
+    name: "KuaiShouVideoUploadList",
+    mixins:[JeecgListMixin],
+    components: {
+      KuaiShouVideoUploadModal
+    },
+    data () {
+      return {
+        description: '快手-视频上传管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+           },
+		   {
+            title: '账户ID',
+            align:"center",
+            dataIndex: 'accountId'
+           },
+		   {
+            title: '视频id',
+            align:"center",
+            dataIndex: 'photoId'
+           },
+		   {
+            title: '本地保存地址',
+            align:"center",
+            dataIndex: 'savaPath'
+           },
+		   {
+            title: '视频大小',
+            align:"center",
+            dataIndex: 'size'
+           },
+		   {
+            title: '视频类型',
+            align:"center",
+            dataIndex: 'type'
+           },
+		   {
+            title: '视频上传时间',
+            align:"center",
+            dataIndex: 'uploadTime'
+           },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+		url: {
+          list: "/kuaishou/kuaiShouVideoUpload/list",
+          delete: "/kuaishou/kuaiShouVideoUpload/delete",
+          deleteBatch: "/kuaishou/kuaiShouVideoUpload/deleteBatch",
+          exportXlsUrl: "kuaishou/kuaiShouVideoUpload/exportXls",
+          importExcelUrl: "kuaishou/kuaiShouVideoUpload/importExcel",
+       },
+    }
+  },
+  computed: {
+    importExcelUrl: function(){
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+    }
+  },
+    methods: {
+     
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>

+ 160 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouImageGetModal.vue

@@ -0,0 +1,160 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="账户ID">
+          <a-input placeholder="请输入账户ID" v-decorator="['accountId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频预览链接">
+          <a-input placeholder="请输入视频预览链接" v-decorator="['url', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="宽">
+          <a-input placeholder="请输入宽" v-decorator="['width', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="高">
+          <a-input placeholder="请输入高" v-decorator="['height', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="图片大小">
+          <a-input placeholder="请输入图片大小" v-decorator="['size', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="图片格式">
+          <a-input placeholder="请输入图片格式" v-decorator="['format', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="图片 token">
+          <a-input placeholder="请输入图片 token" v-decorator="['imageToken', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "KuaiShouImageGetModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        },
+        url: {
+          add: "/kuaishou/kuaiShouImageGet/add",
+          edit: "/kuaishou/kuaiShouImageGet/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'accountId','url','width','height','size','format','imageToken'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+
+</style>

+ 167 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouImageGetModal__Style#Drawer.vue

@@ -0,0 +1,167 @@
+<template>
+  <a-drawer
+      :title="title"
+      :width="800"
+      placement="right"
+      :closable="false"
+      @close="close"
+      :visible="visible"
+  >
+
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="账户ID">
+          <a-input placeholder="请输入账户ID" v-decorator="['accountId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频预览链接">
+          <a-input placeholder="请输入视频预览链接" v-decorator="['url', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="宽">
+          <a-input placeholder="请输入宽" v-decorator="['width', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="高">
+          <a-input placeholder="请输入高" v-decorator="['height', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="图片大小">
+          <a-input placeholder="请输入图片大小" v-decorator="['size', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="图片格式">
+          <a-input placeholder="请输入图片格式" v-decorator="['format', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="图片 token">
+          <a-input placeholder="请输入图片 token" v-decorator="['imageToken', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+    <a-button type="primary" @click="handleOk">确定</a-button>
+    <a-button type="primary" @click="handleCancel">取消</a-button>
+  </a-drawer>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "KuaiShouImageGetModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        },
+        url: {
+          add: "/kuaishou/kuaiShouImageGet/add",
+          edit: "/kuaishou/kuaiShouImageGet/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'accountId','url','width','height','size','format','imageToken'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+</style>

+ 172 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouImageUploandModal.vue

@@ -0,0 +1,172 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="账户ID">
+          <a-input placeholder="请输入账户ID" v-decorator="['accountId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="本地存储地址">
+          <a-input placeholder="请输入本地存储地址" v-decorator="['savaPath', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="图片预览地址">
+          <a-input placeholder="请输入图片预览地址" v-decorator="['url', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="宽">
+          <a-input placeholder="请输入宽" v-decorator="['width', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="高">
+          <a-input placeholder="请输入高" v-decorator="['height', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="图片大小">
+          <a-input placeholder="请输入图片大小" v-decorator="['size', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="图片格式">
+          <a-input placeholder="请输入图片格式" v-decorator="['format', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="图片 token">
+          <a-input placeholder="请输入图片 token" v-decorator="['imageToken', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="文件上传时间">
+          <a-input placeholder="请输入文件上传时间" v-decorator="['uploadTime', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "KuaiShouImageUploandModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        },
+        url: {
+          add: "/kuaishou/kuaiShouImageUploand/add",
+          edit: "/kuaishou/kuaiShouImageUploand/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'accountId','savaPath','url','width','height','size','format','imageToken','uploadTime'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+
+</style>

+ 179 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouImageUploandModal__Style#Drawer.vue

@@ -0,0 +1,179 @@
+<template>
+  <a-drawer
+      :title="title"
+      :width="800"
+      placement="right"
+      :closable="false"
+      @close="close"
+      :visible="visible"
+  >
+
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="账户ID">
+          <a-input placeholder="请输入账户ID" v-decorator="['accountId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="本地存储地址">
+          <a-input placeholder="请输入本地存储地址" v-decorator="['savaPath', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="图片预览地址">
+          <a-input placeholder="请输入图片预览地址" v-decorator="['url', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="宽">
+          <a-input placeholder="请输入宽" v-decorator="['width', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="高">
+          <a-input placeholder="请输入高" v-decorator="['height', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="图片大小">
+          <a-input placeholder="请输入图片大小" v-decorator="['size', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="图片格式">
+          <a-input placeholder="请输入图片格式" v-decorator="['format', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="图片 token">
+          <a-input placeholder="请输入图片 token" v-decorator="['imageToken', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="文件上传时间">
+          <a-input placeholder="请输入文件上传时间" v-decorator="['uploadTime', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+    <a-button type="primary" @click="handleOk">确定</a-button>
+    <a-button type="primary" @click="handleCancel">取消</a-button>
+  </a-drawer>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "KuaiShouImageUploandModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        },
+        url: {
+          add: "/kuaishou/kuaiShouImageUploand/add",
+          edit: "/kuaishou/kuaiShouImageUploand/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'accountId','savaPath','url','width','height','size','format','imageToken','uploadTime'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+</style>

+ 130 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouRegionListChildrenModal.vue

@@ -0,0 +1,130 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="父级地域id">
+          <a-input placeholder="请输入父级地域id" v-decorator="['parentId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="地域id">
+          <a-input placeholder="请输入地域id" v-decorator="['regionId', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "KuaiShouRegionListChildrenModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        },
+        url: {
+          add: "/kuaishou/kuaiShouRegionListChildren/add",
+          edit: "/kuaishou/kuaiShouRegionListChildren/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'parentId','regionId'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+
+</style>

+ 137 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouRegionListChildrenModal__Style#Drawer.vue

@@ -0,0 +1,137 @@
+<template>
+  <a-drawer
+      :title="title"
+      :width="800"
+      placement="right"
+      :closable="false"
+      @close="close"
+      :visible="visible"
+  >
+
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="父级地域id">
+          <a-input placeholder="请输入父级地域id" v-decorator="['parentId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="地域id">
+          <a-input placeholder="请输入地域id" v-decorator="['regionId', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+    <a-button type="primary" @click="handleOk">确定</a-button>
+    <a-button type="primary" @click="handleCancel">取消</a-button>
+  </a-drawer>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "KuaiShouRegionListChildrenModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        },
+        url: {
+          add: "/kuaishou/kuaiShouRegionListChildren/add",
+          edit: "/kuaishou/kuaiShouRegionListChildren/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'parentId','regionId'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+</style>

+ 142 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouRegionListParentModal.vue

@@ -0,0 +1,142 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="地域id">
+          <a-input placeholder="请输入地域id" v-decorator="['regionId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="父级地域">
+          <a-input placeholder="请输入父级地域" v-decorator="['parent', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="地域层级">
+          <a-input-number v-decorator="[ 'level', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="地域名称">
+          <a-input placeholder="请输入地域名称" v-decorator="['name', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "KuaiShouRegionListParentModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        },
+        url: {
+          add: "/kuaishou/kuaiShouRegionListParent/add",
+          edit: "/kuaishou/kuaiShouRegionListParent/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'regionId','parent','level','name'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+
+</style>

+ 149 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouRegionListParentModal__Style#Drawer.vue

@@ -0,0 +1,149 @@
+<template>
+  <a-drawer
+      :title="title"
+      :width="800"
+      placement="right"
+      :closable="false"
+      @close="close"
+      :visible="visible"
+  >
+
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="地域id">
+          <a-input placeholder="请输入地域id" v-decorator="['regionId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="父级地域">
+          <a-input placeholder="请输入父级地域" v-decorator="['parent', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="地域层级">
+          <a-input-number v-decorator="[ 'level', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="地域名称">
+          <a-input placeholder="请输入地域名称" v-decorator="['name', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+    <a-button type="primary" @click="handleOk">确定</a-button>
+    <a-button type="primary" @click="handleCancel">取消</a-button>
+  </a-drawer>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "KuaiShouRegionListParentModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        },
+        url: {
+          add: "/kuaishou/kuaiShouRegionListParent/add",
+          edit: "/kuaishou/kuaiShouRegionListParent/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'regionId','parent','level','name'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+</style>

+ 154 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouVideoGetModal.vue

@@ -0,0 +1,154 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="账户ID">
+          <a-input placeholder="请输入账户ID" v-decorator="['accountId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频id">
+          <a-input placeholder="请输入视频id" v-decorator="['photoId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="宽">
+          <a-input-number v-decorator="[ 'width', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="高">
+          <a-input-number v-decorator="[ 'height', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频预览链接">
+          <a-input placeholder="请输入视频预览链接" v-decorator="['url', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频首帧图片链接">
+          <a-input placeholder="请输入视频首帧图片链接" v-decorator="['coverUrl', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "KuaiShouVideoGetModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        },
+        url: {
+          add: "/kuaishou/kuaiShouVideoGet/add",
+          edit: "/kuaishou/kuaiShouVideoGet/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'accountId','photoId','width','height','url','coverUrl'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+
+</style>

+ 161 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouVideoGetModal__Style#Drawer.vue

@@ -0,0 +1,161 @@
+<template>
+  <a-drawer
+      :title="title"
+      :width="800"
+      placement="right"
+      :closable="false"
+      @close="close"
+      :visible="visible"
+  >
+
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="账户ID">
+          <a-input placeholder="请输入账户ID" v-decorator="['accountId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频id">
+          <a-input placeholder="请输入视频id" v-decorator="['photoId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="宽">
+          <a-input-number v-decorator="[ 'width', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="高">
+          <a-input-number v-decorator="[ 'height', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频预览链接">
+          <a-input placeholder="请输入视频预览链接" v-decorator="['url', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频首帧图片链接">
+          <a-input placeholder="请输入视频首帧图片链接" v-decorator="['coverUrl', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+    <a-button type="primary" @click="handleOk">确定</a-button>
+    <a-button type="primary" @click="handleCancel">取消</a-button>
+  </a-drawer>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "KuaiShouVideoGetModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        },
+        url: {
+          add: "/kuaishou/kuaiShouVideoGet/add",
+          edit: "/kuaishou/kuaiShouVideoGet/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'accountId','photoId','width','height','url','coverUrl'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+</style>

+ 154 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouVideoUploadModal.vue

@@ -0,0 +1,154 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="账户ID">
+          <a-input placeholder="请输入账户ID" v-decorator="['accountId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频id">
+          <a-input placeholder="请输入视频id" v-decorator="['photoId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="本地保存地址">
+          <a-input placeholder="请输入本地保存地址" v-decorator="['savaPath', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频大小">
+          <a-input placeholder="请输入视频大小" v-decorator="['size', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频类型">
+          <a-input placeholder="请输入视频类型" v-decorator="['type', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频上传时间">
+          <a-input placeholder="请输入视频上传时间" v-decorator="['uploadTime', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "KuaiShouVideoUploadModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        },
+        url: {
+          add: "/kuaishou/kuaiShouVideoUpload/add",
+          edit: "/kuaishou/kuaiShouVideoUpload/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'accountId','photoId','savaPath','size','type','uploadTime'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+
+</style>

+ 161 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/kuaishou/vue/modules/KuaiShouVideoUploadModal__Style#Drawer.vue

@@ -0,0 +1,161 @@
+<template>
+  <a-drawer
+      :title="title"
+      :width="800"
+      placement="right"
+      :closable="false"
+      @close="close"
+      :visible="visible"
+  >
+
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+      
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="账户ID">
+          <a-input placeholder="请输入账户ID" v-decorator="['accountId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频id">
+          <a-input placeholder="请输入视频id" v-decorator="['photoId', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="本地保存地址">
+          <a-input placeholder="请输入本地保存地址" v-decorator="['savaPath', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频大小">
+          <a-input placeholder="请输入视频大小" v-decorator="['size', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频类型">
+          <a-input placeholder="请输入视频类型" v-decorator="['type', {}]" />
+        </a-form-item>
+        <a-form-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="视频上传时间">
+          <a-input placeholder="请输入视频上传时间" v-decorator="['uploadTime', {}]" />
+        </a-form-item>
+		
+      </a-form>
+    </a-spin>
+    <a-button type="primary" @click="handleOk">确定</a-button>
+    <a-button type="primary" @click="handleCancel">取消</a-button>
+  </a-drawer>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import moment from "moment"
+
+  export default {
+    name: "KuaiShouVideoUploadModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+        },
+        url: {
+          add: "/kuaishou/kuaiShouVideoUpload/add",
+          edit: "/kuaishou/kuaiShouVideoUpload/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.form.resetFields();
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'accountId','photoId','savaPath','size','type','uploadTime'))
+		  //时间格式化
+        });
+
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            let formData = Object.assign(this.model, values);
+            //时间格式化
+            
+            console.log(formData)
+            httpAction(httpurl,formData,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+
+
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+</style>

+ 74 - 60
module-common/src/main/java/cn/com/ctop/common/utils/DateUtils.java

@@ -1,52 +1,54 @@
 package cn.com.ctop.common.utils;
 
+import java.sql.Timestamp;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
 public class DateUtils {
-    public static List<Map<String,String>> getDateDayRange(String startDate,String endDate) throws ParseException{
-        List<Map<String,String>> list = new ArrayList<Map<String,String>>();
-        String splitDate = DateUtils.addDay(endDate,-1);
-        splitDate = DateUtils.addDay(splitDate,1);
-        if(DateUtils.compareDate(startDate,splitDate) >= 0) {
-            Map<String,String> map = new HashMap<String,String>();
-            map.put("startDate",startDate);
-            map.put("endDate",endDate);
+    public static List<Map<String, String>> getDateDayRange(String startDate, String endDate) throws ParseException {
+        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
+        String splitDate = DateUtils.addDay(endDate, -1);
+        splitDate = DateUtils.addDay(splitDate, 1);
+        if (DateUtils.compareDate(startDate, splitDate) >= 0) {
+            Map<String, String> map = new HashMap<String, String>();
+            map.put("startDate", startDate);
+            map.put("endDate", endDate);
             list.add(map);
-        }else{
-            while (DateUtils.compareDate(startDate,splitDate) < 0 || DateUtils.compareDate(startDate,endDate) <= 0){
-                Map<String,String> map = new HashMap<String,String>();
-                map.put("startDate",splitDate);
-                map.put("endDate",endDate);
+        } else {
+            while (DateUtils.compareDate(startDate, splitDate) < 0 || DateUtils.compareDate(startDate, endDate) <= 0) {
+                Map<String, String> map = new HashMap<String, String>();
+                map.put("startDate", splitDate);
+                map.put("endDate", endDate);
                 list.add(map);
-                splitDate = DateUtils.addDay(splitDate,-1);
-                endDate = DateUtils.addDay(endDate,-1);
-                if(DateUtils.compareDate(startDate,splitDate) > 0){
+                splitDate = DateUtils.addDay(splitDate, -1);
+                endDate = DateUtils.addDay(endDate, -1);
+                if (DateUtils.compareDate(startDate, splitDate) > 0) {
                     splitDate = startDate;
                 }
             }
         }
         return list;
     }
-    public static List<Map<String,String>> getDateWeekRange(String startDate,String endDate) throws ParseException{
-        List<Map<String,String>> list = new ArrayList<Map<String,String>>();
-        String splitDate = DateUtils.addWeek(endDate,-1);
-        splitDate = DateUtils.addDay(splitDate,1);
-        if(DateUtils.compareDate(startDate,splitDate) >= 0) {
-            Map<String,String> map = new HashMap<String,String>();
-            map.put("startDate",startDate);
-            map.put("endDate",endDate);
+
+    public static List<Map<String, String>> getDateWeekRange(String startDate, String endDate) throws ParseException {
+        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
+        String splitDate = DateUtils.addWeek(endDate, -1);
+        splitDate = DateUtils.addDay(splitDate, 1);
+        if (DateUtils.compareDate(startDate, splitDate) >= 0) {
+            Map<String, String> map = new HashMap<String, String>();
+            map.put("startDate", startDate);
+            map.put("endDate", endDate);
             list.add(map);
-        }else{
-            while (DateUtils.compareDate(startDate,splitDate) < 0 || DateUtils.compareDate(startDate,endDate) <= 0){
-                Map<String,String> map = new HashMap<String,String>();
-                map.put("startDate",splitDate);
-                map.put("endDate",endDate);
+        } else {
+            while (DateUtils.compareDate(startDate, splitDate) < 0 || DateUtils.compareDate(startDate, endDate) <= 0) {
+                Map<String, String> map = new HashMap<String, String>();
+                map.put("startDate", splitDate);
+                map.put("endDate", endDate);
                 list.add(map);
-                splitDate = DateUtils.addWeek(splitDate,-1);
-                endDate = DateUtils.addWeek(endDate,-1);
-                if(DateUtils.compareDate(startDate,splitDate) > 0){
+                splitDate = DateUtils.addWeek(splitDate, -1);
+                endDate = DateUtils.addWeek(endDate, -1);
+                if (DateUtils.compareDate(startDate, splitDate) > 0) {
                     splitDate = startDate;
                 }
             }
@@ -54,24 +56,24 @@ public class DateUtils {
         return list;
     }
 
-    public static List<Map<String,String>> getDateMonthRange(String startDate,String endDate) throws ParseException{
-        List<Map<String,String>> list = new ArrayList<Map<String,String>>();
-        String splitDate = DateUtils.addMonth(endDate,-1);
-        splitDate = DateUtils.addDay(splitDate,1);
-        if(DateUtils.compareDate(startDate,splitDate) >= 0) {
-            Map<String,String> map = new HashMap<String,String>();
-            map.put("startDate",startDate);
-            map.put("endDate",endDate);
+    public static List<Map<String, String>> getDateMonthRange(String startDate, String endDate) throws ParseException {
+        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
+        String splitDate = DateUtils.addMonth(endDate, -1);
+        splitDate = DateUtils.addDay(splitDate, 1);
+        if (DateUtils.compareDate(startDate, splitDate) >= 0) {
+            Map<String, String> map = new HashMap<String, String>();
+            map.put("startDate", startDate);
+            map.put("endDate", endDate);
             list.add(map);
-        }else{
-            while (DateUtils.compareDate(startDate,splitDate) < 0 || DateUtils.compareDate(startDate,endDate) <= 0){
-                Map<String,String> map = new HashMap<String,String>();
-                map.put("startDate",splitDate);
-                map.put("endDate",endDate);
+        } else {
+            while (DateUtils.compareDate(startDate, splitDate) < 0 || DateUtils.compareDate(startDate, endDate) <= 0) {
+                Map<String, String> map = new HashMap<String, String>();
+                map.put("startDate", splitDate);
+                map.put("endDate", endDate);
                 list.add(map);
-                splitDate = DateUtils.addMonth(splitDate,-1);
-                endDate = DateUtils.addMonth(endDate,-1);
-                if(DateUtils.compareDate(startDate,splitDate) > 0){
+                splitDate = DateUtils.addMonth(splitDate, -1);
+                endDate = DateUtils.addMonth(endDate, -1);
+                if (DateUtils.compareDate(startDate, splitDate) > 0) {
                     splitDate = startDate;
                 }
             }
@@ -79,53 +81,65 @@ public class DateUtils {
         return list;
     }
 
-    public static String addMonth(String dateString,int month) throws ParseException{
+    public static String addMonth(String dateString, int month) throws ParseException {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         Date date = sdf.parse(dateString);
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
-        calendar.add(Calendar.MONTH,month);
+        calendar.add(Calendar.MONTH, month);
         return sdf.format(calendar.getTime());
     }
 
-    public static String addWeek(String dateString,int week) throws ParseException{
+    public static String addWeek(String dateString, int week) throws ParseException {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         Date date = sdf.parse(dateString);
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
-        calendar.add(Calendar.WEEK_OF_YEAR,week);
+        calendar.add(Calendar.WEEK_OF_YEAR, week);
         return sdf.format(calendar.getTime());
     }
 
-    public static String addDay(String dateString,int day) throws ParseException{
+    public static String addDay(String dateString, int day) throws ParseException {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         Date date = sdf.parse(dateString);
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
-        calendar.add(Calendar.DAY_OF_YEAR,day);
+        calendar.add(Calendar.DAY_OF_YEAR, day);
         return sdf.format(calendar.getTime());
     }
 
-    public static Date addDay(Date date,int day){
+    public static Date addDay(Date date, int day) {
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
-        calendar.add(Calendar.DAY_OF_YEAR,day);
+        calendar.add(Calendar.DAY_OF_YEAR, day);
         return calendar.getTime();
     }
 
-    public static Date addSecond(Date date,int seconds){
+    public static Date addSecond(Date date, int seconds) {
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
-        calendar.add(Calendar.SECOND,seconds);
+        calendar.add(Calendar.SECOND, seconds);
         return calendar.getTime();
     }
 
-    public static int compareDate(String firstDateString,String secondDateString) throws ParseException{
+    public static int compareDate(String firstDateString, String secondDateString) throws ParseException {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         Date firstDate = sdf.parse(firstDateString);
         Date secondDate = sdf.parse(secondDateString);
         long first = firstDate.getTime();
         long second = secondDate.getTime();
-        return first==second?0:(first>second?1:-1);
+        return first == second ? 0 : (first > second ? 1 : -1);
+    }
+
+    public static String timeStamp2Date(Timestamp timeLong) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//要转换的时间格式
+        Date date;
+        try {
+            date = sdf.parse(sdf.format(timeLong));
+            return sdf.format(date);
+        } catch (ParseException e) {
+            e.printStackTrace();
+            return null;
+        }
     }
 }

+ 60 - 0
module-common/src/main/java/cn/com/ctop/common/utils/FileEntity.java

@@ -0,0 +1,60 @@
+package cn.com.ctop.common.utils;
+
+import java.sql.Timestamp;
+
+public class FileEntity {
+    private String type;
+    private String size;
+    private String path;
+    private String titleOrig;
+    private String titleAlter;
+    private Timestamp uploadTime;
+    public String getType() {
+        return type;
+    }
+    public void setType(String type) {
+        this.type = type;
+    }
+    public String getSize() {
+        return size;
+    }
+    public void setSize(String size) {
+        this.size = size;
+    }
+    public String getPath() {
+        return path;
+    }
+    public void setPath(String path) {
+        this.path = path;
+    }
+    public String getTitleOrig() {
+        return titleOrig;
+    }
+    public void setTitleOrig(String titleOrig) {
+        this.titleOrig = titleOrig;
+    }
+    public String getTitleAlter() {
+        return titleAlter;
+    }
+    public void setTitleAlter(String titleAlter) {
+        this.titleAlter = titleAlter;
+    }
+    public Timestamp getUploadTime() {
+        return uploadTime;
+    }
+    public void setUploadTime(Timestamp uploadTime) {
+        this.uploadTime = uploadTime;
+    }
+
+    @Override
+    public String toString() {
+        return "FileEntity{" +
+                "type='" + type + '\'' +
+                ", size='" + size + '\'' +
+                ", path='" + path + '\'' +
+                ", titleOrig='" + titleOrig + '\'' +
+                ", titleAlter='" + titleAlter + '\'' +
+                ", uploadTime=" + uploadTime +
+                '}';
+    }
+}

+ 260 - 0
module-common/src/main/java/cn/com/ctop/common/utils/FileUploadTool.java

@@ -0,0 +1,260 @@
+package cn.com.ctop.common.utils;
+
+
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.File;
+import java.io.IOException;
+import java.sql.Timestamp;
+import java.text.DecimalFormat;
+import java.util.Arrays;
+import java.util.Iterator;
+
+public class FileUploadTool {
+
+
+    TransfMediaTool transfMediaTool = new TransfMediaTool();
+    // 文件最大500M
+    private static long upload_maxsize = 800 * 1024 * 1024;
+    // 文件允许格式
+    private static String[] allowFiles = {".rar", ".doc", ".docx", ".zip",
+            ".pdf", ".txt", ".swf", ".xlsx", ".gif", ".png", ".jpg", ".jpeg",
+            ".bmp", ".xls", ".mp4", ".flv", ".ppt", ".avi", ".mpg", ".wmv",
+            ".3gp", ".mov", ".asf", ".asx", ".vob", ".wmv9", ".rm", ".rmvb"};
+    // 允许转码的视频格式(ffmpeg)
+    private static String[] allowFLV = {".avi", ".mpg", ".wmv", ".3gp",
+            ".mov", ".asf", ".asx", ".vob"};
+    // 允许的视频转码格式(mencoder)
+    private static String[] allowAVI = {".wmv9", ".rm", ".rmvb"};
+
+    public FileEntity createFile(MultipartFile multipartFile, HttpServletRequest request, String savaPath) {
+        FileEntity entity = new FileEntity();
+        boolean bflag = false;
+        String fileName = multipartFile.getOriginalFilename().toString();
+        // 判断文件不为空
+        if (multipartFile.getSize() != 0 && !multipartFile.isEmpty()) {
+            bflag = true;
+            // 判断文件大小
+            if (multipartFile.getSize() <= upload_maxsize) {
+                bflag = true;
+                // 文件类型判断
+                if (this.checkFileType(fileName)) {
+                    bflag = true;
+                } else {
+                    bflag = false;
+                    System.out.println("文件类型不允许");
+                }
+            } else {
+                bflag = false;
+                System.out.println("文件大小超范围");
+            }
+        } else {
+            bflag = false;
+            System.out.println("文件为空");
+        }
+        if (bflag) {
+            //  String logoPathDir = "/video/";
+            //    String logoRealPathDir = request.getSession().getServletContext().getRealPath(logoPathDir);
+            // 上传到本地磁盘
+            // String logoRealPathDir = "E:/upload";
+            File logoSaveFile = new File(savaPath);
+            if (!logoSaveFile.exists()) {
+                logoSaveFile.mkdirs();
+            }
+            String name = fileName.substring(0, fileName.lastIndexOf("."));
+            System.out.println("文件名称:" + name);
+            // 新的文件名
+            String newFileName = this.getName(fileName);
+            // 文件扩展名
+            String fileEnd = this.getFileExt(fileName);
+            // 绝对路径
+            String fileNamedirs = savaPath + File.separator + newFileName + fileEnd;
+            System.out.println("保存的绝对路径:" + fileNamedirs);
+            File filedirs = new File(fileNamedirs);
+            // 转入文件
+            try {
+                multipartFile.transferTo(filedirs);
+            } catch (IllegalStateException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            // 相对路径
+            entity.setType(fileEnd);
+            String fileDir = savaPath + newFileName + fileEnd;
+            StringBuilder builder = new StringBuilder(fileDir);
+            String finalFileDir = builder.substring(1);
+            // size存储为String
+            String size = this.getSize(filedirs);
+            // 源文件保存路径
+            String aviPath = filedirs.getAbsolutePath();
+            // 转码Avi
+//            boolean flag = false;
+            if (this.checkAVIType(fileEnd)) {
+                // 设置转换为AVI格式后文件的保存路径
+                String codcAviPath = savaPath + File.separator + newFileName + ".avi";
+                // 获取配置的转换工具(mencoder.exe)的存放路径
+                String mencoderPath = request.getSession().getServletContext().getRealPath("/tools/mencoder.exe");
+                aviPath = transfMediaTool.processAVI(mencoderPath, filedirs.getAbsolutePath(), codcAviPath);
+                fileEnd = this.getFileExt(codcAviPath);
+            }
+            if (aviPath != null) {
+                // 转码Flv
+                if (this.checkMediaType(fileEnd)) {
+                    try {
+                        // 设置转换为flv格式后文件的保存路径
+                        String codcFilePath = savaPath + File.separator + newFileName + ".flv";
+                        // 获取配置的转换工具(ffmpeg.exe)的存放路径
+                        String ffmpegPath = request.getSession().getServletContext().getRealPath("/tools/ffmpeg.exe");
+                        transfMediaTool.processFLV(ffmpegPath, aviPath, codcFilePath);
+                        fileDir = savaPath + newFileName + ".flv";
+                        builder = new StringBuilder(fileDir);
+                        finalFileDir = builder.substring(1);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+                entity.setSize(size);
+                entity.setPath(fileNamedirs);
+                entity.setTitleOrig(name);
+                entity.setTitleAlter(newFileName);
+                Timestamp timestamp = new Timestamp(System.currentTimeMillis());
+                entity.setUploadTime(timestamp);
+                return entity;
+            } else {
+                return null;
+            }
+        } else {
+            return null;
+        }
+
+    }
+
+    /**
+     * 文件类型判断
+     *
+     * @param fileName
+     * @return
+     */
+    private boolean checkFileType(String fileName) {
+        Iterator<String> type = Arrays.asList(allowFiles).iterator();
+        while (type.hasNext()) {
+            String ext = type.next();
+            if (fileName.toLowerCase().endsWith(ext)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 视频类型判断(flv)
+     *
+     * @param
+     * @return
+     */
+    private boolean checkMediaType(String fileEnd) {
+        Iterator<String> type = Arrays.asList(allowFLV).iterator();
+        while (type.hasNext()) {
+            String ext = type.next();
+            if (fileEnd.equals(ext)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 视频类型判断(AVI)
+     *
+     * @param
+     * @return
+     */
+    private boolean checkAVIType(String fileEnd) {
+        Iterator<String> type = Arrays.asList(allowAVI).iterator();
+        while (type.hasNext()) {
+            String ext = type.next();
+            if (fileEnd.equals(ext)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 获取文件扩展名
+     *
+     * @return string
+     */
+    private String getFileExt(String fileName) {
+        return fileName.substring(fileName.lastIndexOf("."));
+    }
+
+    /**
+     * 依据原始文件名生成新文件名
+     *
+     * @return
+     */
+    private String getName(String fileName) {
+        Iterator<String> type = Arrays.asList(allowFiles).iterator();
+        while (type.hasNext()) {
+            String ext = type.next();
+            if (fileName.contains(ext)) {
+                String newFileName = fileName.substring(0, fileName.lastIndexOf(ext));
+                return newFileName;
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 文件大小,返回kb.mb
+     *
+     * @return
+     */
+    private String getSize(File file) {
+        String size = "";
+        long fileLength = file.length();
+        DecimalFormat df = new DecimalFormat("#.00");
+        if (fileLength < 1024) {
+            size = df.format((double) fileLength) + "BT";
+        } else if (fileLength < 1048576) {
+            size = df.format((double) fileLength / 1024) + "KB";
+        } else if (fileLength < 1073741824) {
+            size = df.format((double) fileLength / 1048576) + "MB";
+        } else {
+            size = df.format((double) fileLength / 1073741824) + "GB";
+        }
+        return size;
+    }
+
+
+/*
+    public static void exceptInfoForRestTemplate() throws ParseException {
+
+        String url = "https://ad.e.kuaishou.com/rest/openapi/v1/file/ad/video/upload";
+        String filePath = "D:\\tets1\\123412.mp4";
+
+        RestTemplate rest = new RestTemplate();
+        FileSystemResource resource = new FileSystemResource(new File(filePath));
+        MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
+        param.add("file", resource);
+        param.add("advertiser_id", 23212L);
+        org.springframework.http.HttpHeaders headers = new org.springframework.http.HttpHeaders();
+        headers.set("Access-Token", "b0c6767b052fc1d882ba62753e8b93d2");
+        headers.set("Content-Type", "multipart/form-data");
+
+
+
+
+
+
+        String string = rest.postForObject(url, new HttpEntity<String>(headers) ,param, String.class);
+        System.out.println(string);
+    }*/
+
+}
+
+
+

+ 38 - 28
module-common/src/main/java/cn/com/ctop/common/utils/HttpUtils.java

@@ -7,39 +7,39 @@ import org.apache.fontbox.ttf.GlyphData;
 import org.apache.fontbox.ttf.TTFParser;
 import org.apache.fontbox.ttf.TrueTypeFont;
 import org.apache.http.*;
-import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.CookieStore;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.config.CookieSpecs;
 import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
-import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPost;
-import org.apache.http.config.Registry;
-import org.apache.http.config.RegistryBuilder;
 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 import org.apache.http.conn.ssl.TrustStrategy;
 import org.apache.http.cookie.Cookie;
-import org.apache.http.cookie.CookieSpecProvider;
+import org.apache.http.entity.ContentType;
+
 import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.*;
-import org.apache.http.impl.cookie.BasicClientCookie;
-import org.apache.http.impl.cookie.BestMatchSpecFactory;
-import org.apache.http.impl.cookie.BrowserCompatSpecFactory;
+import org.apache.http.entity.mime.HttpMultipartMode;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.impl.client.BasicCookieStore;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
 import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.protocol.HTTP;
 import org.apache.http.ssl.SSLContextBuilder;
 import org.apache.http.util.EntityUtils;
 import org.eclipse.jetty.util.UrlEncoded;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.net.ssl.SSLContext;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-import java.net.HttpURLConnection;
+import java.io.*;
 import java.net.URL;
 import java.net.URLConnection;
 import java.net.URLEncoder;
@@ -47,8 +47,6 @@ import java.nio.charset.Charset;
 import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
 import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 public class HttpUtils {
     private static final Logger logger = LoggerFactory.getLogger(HttpUtils.class);
@@ -174,9 +172,11 @@ public class HttpUtils {
                 }
             }
             httppost.setHeader("User-Agent", USER_AGENT);
-            httppost.addHeader("Content-Type", "application/json");
-            httppost.setEntity(new StringEntity(body, Charset.forName("UTF-8")));
+            if (!Check.isNull(body)) {
+                httppost.setEntity(new StringEntity(body, Charset.forName("UTF-8")));
+            }
             HttpEntity respentity;
+            System.err.println(httppost);
             HttpResponse response = httpClient.execute(httppost);
             int statusCode = response.getStatusLine().getStatusCode();
             if (statusCode == HttpStatus.SC_OK) {
@@ -529,19 +529,27 @@ public class HttpUtils {
             // CloseableHttpClient httpClient = HttpClients.createDefault();
             //创建参数列表
             HttpClient httpclient = getHttpclient();
-            StringBuilder postBody = new StringBuilder();
-            for (Map.Entry<String, Object> entry : paramsMap.entrySet()) {
-                if (entry.getValue() == null) {
-                    continue;
+            StringBuilder postBody = null;
+            if (!Check.isNull(paramsMap)) {
+                postBody = new StringBuilder();
+                for (Map.Entry<String, Object> entry : paramsMap.entrySet()) {
+                    if (entry.getValue() == null) {
+                        continue;
+                    }
+                    postBody.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue().toString(),
+                            "utf-8")).append("&");
+                }
+                if (!paramsMap.isEmpty()) {
+                    postBody.deleteCharAt(postBody.length() - 1);
                 }
-                postBody.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue().toString(),
-                        "utf-8")).append("&");
             }
-            if (!paramsMap.isEmpty()) {
-                postBody.deleteCharAt(postBody.length() - 1);
+            String urlStr;
+            if (!Check.isNull(postBody)) {
+                urlStr = url + "?" + postBody;
+            } else {
+                urlStr = url;
             }
-            HttpGet httpget = new HttpGet(url + "?" + postBody);
-            httpget.setHeader("Content-Type", "application/json");
+            HttpGet httpget = new HttpGet(urlStr);
             httpget.setHeader("User-Agent", USER_AGENT);
             if (!Check.isNullMap(headers)) {
                 for (String key : headers.keySet()) {
@@ -560,4 +568,6 @@ public class HttpUtils {
         return result;
     }
 
+
+
 }

+ 47 - 47
module-common/src/main/java/cn/com/ctop/common/utils/PropertiesUtils.java

@@ -10,53 +10,53 @@ import java.util.Map;
 import java.util.Properties;
 
 public class PropertiesUtils {
-	private static final Logger log = LoggerFactory.getLogger(PropertiesUtils.class);
-	private static Map<String, String> cache = new HashMap<String, String>();
-	
-	public static String getConfig(String key){
-		return getValue("kuaishou_config",key);
-	}
+    private static final Logger log = LoggerFactory.getLogger(PropertiesUtils.class);
+    private static Map<String, String> cache = new HashMap<String, String>();
 
-	public static String getValue(String name, String key) {
-		try {
-			String cacheValue = (String) cache.get(name + key);
-			if (cacheValue != null) {
-				return cacheValue;
-			}
-			Properties props = new Properties();
-			InputStream in = PropertiesUtils.class.getResourceAsStream("/"
-					+ name + ".properties");
-			props.load(in);
-			String value = props.getProperty(key);
-			cache.put(name + key, value);
-			props.clone();
-			in.close();
-			return value;
-		} catch (Exception e) {
-			log.error("PropertiesUtil getCacheValue Error", e);
-		}
-		return null;
-	}
+    public static String getConfig(String key) {
+        return getValue("kuaishou_config", key);
+    }
 
-	public static Map<String, String> getMap(String name) {
-		try {
-			Properties props = new Properties();
-			InputStream in = PropertiesUtils.class.getResourceAsStream("/"
-					+ name + ".properties");
-			props.load(in);
-			Iterator<Object> it = props.keySet().iterator();
-			Map<String,String> map = new HashMap<String,String>();
-			while (it.hasNext()) {
-				String key = it.next().toString();
-				String value = props.getProperty(key);
-				map.put(key, value);
-			}
-			props.clone();
-			in.close();
-			return map;
-		} catch (Exception e) {
-			log.error("PropertiesUtil getMap Error", e);
-		}
-		return null;
-	}
+    public static String getValue(String name, String key) {
+        try {
+            String cacheValue = (String) cache.get(name + key);
+            if (cacheValue != null) {
+                return cacheValue;
+            }
+            Properties props = new Properties();
+            InputStream in = PropertiesUtils.class.getResourceAsStream("/"
+                    + name + ".properties");
+            props.load(in);
+            String value = props.getProperty(key);
+            cache.put(name + key, value);
+            props.clone();
+            in.close();
+            return value;
+        } catch (Exception e) {
+            log.error("PropertiesUtil getCacheValue Error", e);
+        }
+        return null;
+    }
+
+    public static Map<String, String> getMap(String name) {
+        try {
+            Properties props = new Properties();
+            InputStream in = PropertiesUtils.class.getResourceAsStream("/"
+                    + name + ".properties");
+            props.load(in);
+            Iterator<Object> it = props.keySet().iterator();
+            Map<String, String> map = new HashMap<String, String>();
+            while (it.hasNext()) {
+                String key = it.next().toString();
+                String value = props.getProperty(key);
+                map.put(key, value);
+            }
+            props.clone();
+            in.close();
+            return map;
+        } catch (Exception e) {
+            log.error("PropertiesUtil getMap Error", e);
+        }
+        return null;
+    }
 }

+ 133 - 0
module-common/src/main/java/cn/com/ctop/common/utils/TransfMediaTool.java

@@ -0,0 +1,133 @@
+package cn.com.ctop.common.utils;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class TransfMediaTool {
+
+    public static void exceptInfoForRestTemplate() {
+    }
+
+    /**
+     * 视频转码flv
+     *
+     * @param ffmpegPath   转码工具的存放路径
+     * @param upFilePath   用于指定要转换格式的文件,要截图的视频源文件
+     * @param codcFilePath 格式转换后的的文件保存路径
+     * @return
+     * @throws Exception
+     */
+    public void processFLV(String ffmpegPath, String upFilePath, String codcFilePath) {
+        // 创建一个List集合来保存转换视频文件为flv格式的命令
+        List<String> convert = new ArrayList<String>();
+        convert.add(ffmpegPath); // 添加转换工具路径
+        convert.add("-i"); // 添加参数"-i",该参数指定要转换的文件
+        convert.add(upFilePath); // 添加要转换格式的视频文件的路径
+        convert.add("-ab");
+        convert.add("56");
+        convert.add("-ar");
+        convert.add("22050");
+        convert.add("-q:a");
+        convert.add("8");
+        convert.add("-r");
+        convert.add("15");
+        convert.add("-s");
+        convert.add("600*500");
+
+        /*
+         * convert.add("-qscale"); // 指定转换的质量 convert.add("6");
+         * convert.add("-ab"); // 设置音频码率 convert.add("64"); convert.add("-ac");
+         * // 设置声道数 convert.add("2"); convert.add("-ar"); // 设置声音的采样频率
+         * convert.add("22050"); convert.add("-r"); // 设置帧频 convert.add("24");
+         * convert.add("-y"); // 添加参数"-y",该参数指定将覆盖已存在的文件
+         */
+        convert.add(codcFilePath);
+        try {
+            Process videoProcess = new ProcessBuilder(convert).redirectErrorStream(true).start();
+            new PrintStream(videoProcess.getInputStream()).start();
+            videoProcess.waitFor();
+        } catch (IOException e1) {
+            e1.printStackTrace();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等), 先用mencoder转换为avi(ffmpeg能解析的)格式
+     *
+     * @param mencoderPath 转码工具的存放路径
+     * @param upFilePath   用于指定要转换格式的文件,要截图的视频源文件
+     * @return
+     * @throws Exception
+     */
+    public String processAVI(String mencoderPath, String upFilePath, String codcAviPath) {
+//        boolean flag = false;
+        List<String> commend = new ArrayList<String>();
+        commend.add(mencoderPath);
+        commend.add(upFilePath);
+        commend.add("-oac");
+        commend.add("mp3lame");
+        commend.add("-lameopts");
+        commend.add("preset=64");
+        commend.add("-lavcopts");
+        commend.add("acodec=mp3:abitrate=64");
+        commend.add("-ovc");
+        commend.add("xvid");
+        commend.add("-xvidencopts");
+        commend.add("bitrate=600");
+        commend.add("-of");
+        commend.add("avi");
+        commend.add("-o");
+        commend.add(codcAviPath);
+        try {
+            // 预处理进程
+            ProcessBuilder builder = new ProcessBuilder();
+            builder.command(commend);
+            builder.redirectErrorStream(true);
+
+            // 进程信息输出到控制台
+            Process p = builder.start();
+            BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
+            String line = null;
+            while ((line = br.readLine()) != null) {
+                System.out.println(line);
+            }
+            p.waitFor();// 直到上面的命令执行完,才向下执行
+            return codcAviPath;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+}
+
+class PrintStream extends Thread {
+    java.io.InputStream __is = null;
+
+    public PrintStream(java.io.InputStream is) {
+        __is = is;
+    }
+
+    public void run() {
+        try {
+            while (this != null) {
+                int _ch = __is.read();
+                if (_ch != -1)
+                    System.out.print((char) _ch);
+                else
+                    break;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+}
+

+ 5 - 0
module-kuaishou/src/main/java/constant/KuaishouInterfaceConstant.java

@@ -15,6 +15,11 @@ public class KuaishouInterfaceConstant {
     public static final String AD_UNIT_CREATE = "/rest/openapi/v1/ad_unit/create"; //创建广告组
     public static final String APP_LIST = "/rest/openapi/v1/file/ad/app/list"; //创建广告获取应用列表
     public static final String DEEP_CONVERSION_INFOS = "/rest/openapi/v1/ad_unit/ocpc/conversion_infos"; //获取可选的深度转化类型
+    public static final String VIDEO_UPLOAD = "/rest/openapi/v1/file/ad/video/upload"; //视频文件上传
+    public static final String VIDEO_GET = "/rest/openapi/v1/file/ad/video/get"; //视频文件获取
+    public static final String IMAGE_GET = "/rest/openapi/v1/file/ad/image/get"; //图片文件获取获取地域信息图片文件获取
+    public static final String  REGION_LIST= "/rest/openapi/v1/region/list"; //图片文件获取获取地域信息图片文件获取
+    public static final String IMAGE_UPLOAD = "/rest/openapi/v1/file/ad/image/upload"; //视频文件上传
 
 
 }