Prechádzať zdrojové kódy

添加调度任务表信息

syh 5 rokov pred
rodič
commit
e73b2e0918
18 zmenil súbory, kde vykonal 818 pridanie a 50 odobranie
  1. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/JeecgApplication.java
  2. 0 1
      jeecg-boot-module-system/src/main/resources/application-dev.yml
  3. 4 0
      jeecg-boot-module-system/src/main/resources/application-test.yml
  4. 1 1
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  5. 259 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumJobBindTaskInfoController.java
  6. 247 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumJobController.java
  7. 17 19
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumTaskItemController.java
  8. 57 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumJob.java
  9. 67 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumJobBindTaskInfo.java
  10. 15 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/AppiumJobBindTaskInfoMapper.java
  11. 15 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/AppiumJobMapper.java
  12. 5 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/xml/AppiumJobBindTaskInfoMapper.xml
  13. 5 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/xml/AppiumJobMapper.xml
  14. 15 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumJobBindTaskInfoService.java
  15. 15 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumJobService.java
  16. 19 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumJobBindTaskInfoServiceImpl.java
  17. 19 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumJobServiceImpl.java
  18. 57 28
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/core/util/AppiumUtil.java

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

@@ -45,4 +45,4 @@ public class JeecgApplication {
         return new RestTemplate();
     }
 
-}
+}

+ 0 - 1
jeecg-boot-module-system/src/main/resources/application-dev.yml

@@ -144,7 +144,6 @@ jeecg:
     csv-upload: D://upFiles//csv//
 kuaishou:
   group-control:
-    #    path: http://127.0.0.1
     path: http://39.106.184.70
     port: 4723
 

+ 4 - 0
jeecg-boot-module-system/src/main/resources/application-test.yml

@@ -144,3 +144,7 @@ jeecg:
     image-upload: /data/upload/image/
     chrome-driver: /usr/bin/chromedriver
     csv-upload: /data/upload/csv/
+kuaishou:
+  group-control:
+    path: http://127.0.0.1
+    port: 4723

+ 1 - 1
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -16,7 +16,7 @@ public class SampleTest {
     private IAppiumTaskService taskService;
     @Test
     public void testJob() {
-        taskService.runTaskV2(1, 1);
+        taskService.runTask(1, 2);
     }
 
 }

+ 259 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumJobBindTaskInfoController.java

@@ -0,0 +1,259 @@
+package cn.com.ctop.crawler.modules.appium.controller;
+
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
+import cn.com.ctop.crawler.modules.appium.entity.AppiumJobBindTaskInfo;
+import cn.com.ctop.crawler.modules.appium.service.IAppiumJobBindTaskInfoService;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+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 javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 爬虫调度任务绑定信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-14
+ */
+@Slf4j
+@Api(tags = "爬虫调度任务绑定信息")
+@RestController
+@RequestMapping("/ctop/appiumJobBindTaskInfo")
+public class AppiumJobBindTaskInfoController {
+    @Autowired
+    private IAppiumJobBindTaskInfoService appiumJobBindTaskInfoService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param appiumJobBindTaskInfo
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "爬虫调度任务绑定信息-分页列表查询")
+    @ApiOperation(value = "爬虫调度任务绑定信息-分页列表查询", notes = "爬虫调度任务绑定信息-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<AppiumJobBindTaskInfo>> queryPageList(AppiumJobBindTaskInfo appiumJobBindTaskInfo,
+                                                              @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                              @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                              HttpServletRequest req) {
+        Result<IPage<AppiumJobBindTaskInfo>> result = new Result<>();
+        QueryWrapper<AppiumJobBindTaskInfo> queryWrapper = QueryGenerator.initQueryWrapper(appiumJobBindTaskInfo, req.getParameterMap());
+        Page<AppiumJobBindTaskInfo> page = new Page<>(pageNo, pageSize);
+        IPage<AppiumJobBindTaskInfo> pageList = appiumJobBindTaskInfoService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param appiumJobBindTaskInfo
+     * @return
+     */
+    @AutoLog(value = "爬虫调度任务绑定信息-添加")
+    @ApiOperation(value = "爬虫调度任务绑定信息-添加", notes = "爬虫调度任务绑定信息-添加")
+    @PostMapping(value = "/add")
+    public Result<AppiumJobBindTaskInfo> add(@RequestBody AppiumJobBindTaskInfo appiumJobBindTaskInfo) {
+        Result<AppiumJobBindTaskInfo> result = new Result<>();
+        try {
+            appiumJobBindTaskInfoService.save(appiumJobBindTaskInfo);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param appiumJobBindTaskInfo
+     * @return
+     */
+    @AutoLog(value = "爬虫调度任务绑定信息-编辑")
+    @ApiOperation(value = "爬虫调度任务绑定信息-编辑", notes = "爬虫调度任务绑定信息-编辑")
+    @PutMapping(value = "/edit")
+    public Result<AppiumJobBindTaskInfo> edit(@RequestBody AppiumJobBindTaskInfo appiumJobBindTaskInfo) {
+        Result<AppiumJobBindTaskInfo> result = new Result<>();
+        AppiumJobBindTaskInfo appiumJobBindTaskInfoEntity = appiumJobBindTaskInfoService.getById(appiumJobBindTaskInfo.getId());
+        if (appiumJobBindTaskInfoEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = appiumJobBindTaskInfoService.updateById(appiumJobBindTaskInfo);
+            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 {
+            appiumJobBindTaskInfoService.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<AppiumJobBindTaskInfo> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<AppiumJobBindTaskInfo> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.appiumJobBindTaskInfoService.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<AppiumJobBindTaskInfo> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<AppiumJobBindTaskInfo> result = new Result<>();
+        AppiumJobBindTaskInfo appiumJobBindTaskInfo = appiumJobBindTaskInfoService.getById(id);
+        if (appiumJobBindTaskInfo == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(appiumJobBindTaskInfo);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<AppiumJobBindTaskInfo> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                AppiumJobBindTaskInfo appiumJobBindTaskInfo = JSON.parseObject(deString, AppiumJobBindTaskInfo.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(appiumJobBindTaskInfo, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<AppiumJobBindTaskInfo> pageList = appiumJobBindTaskInfoService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "爬虫调度任务绑定信息列表");
+        mv.addObject(NormalExcelConstants.CLASS, AppiumJobBindTaskInfo.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<AppiumJobBindTaskInfo> listAppiumJobBindTaskInfos = ExcelImportUtil.importExcel(file.getInputStream(), AppiumJobBindTaskInfo.class, params);
+                appiumJobBindTaskInfoService.saveBatch(listAppiumJobBindTaskInfos);
+                return Result.ok("文件导入成功!数据行数:" + listAppiumJobBindTaskInfos.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("文件导入失败!");
+    }
+
+    @PostMapping("bindInfo")
+    public Map<String, Object> bindInfo(Long jobId, Long taskId) {
+        Map<String, Object> result = new HashMap<>();
+        if (null == jobId || jobId == 0 || null == taskId || taskId == 0) {
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR.getCode());
+        }
+        return result;
+    }
+}

+ 247 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumJobController.java

@@ -0,0 +1,247 @@
+package cn.com.ctop.crawler.modules.appium.controller;
+
+import cn.com.ctop.crawler.modules.appium.entity.AppiumJob;
+import cn.com.ctop.crawler.modules.appium.service.IAppiumJobService;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+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 javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 爬虫调度任务
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-14
+ */
+@Slf4j
+@Api(tags = "爬虫调度任务")
+@RestController
+@RequestMapping("/ctop/appiumJob")
+public class AppiumJobController {
+    @Autowired
+    private IAppiumJobService appiumJobService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param appiumJob
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "爬虫调度任务-分页列表查询")
+    @ApiOperation(value = "爬虫调度任务-分页列表查询", notes = "爬虫调度任务-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<AppiumJob>> queryPageList(AppiumJob appiumJob,
+                                                  @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                  @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                  HttpServletRequest req) {
+        Result<IPage<AppiumJob>> result = new Result<>();
+        QueryWrapper<AppiumJob> queryWrapper = QueryGenerator.initQueryWrapper(appiumJob, req.getParameterMap());
+        Page<AppiumJob> page = new Page<>(pageNo, pageSize);
+        IPage<AppiumJob> pageList = appiumJobService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param appiumJob
+     * @return
+     */
+    @AutoLog(value = "爬虫调度任务-添加")
+    @ApiOperation(value = "爬虫调度任务-添加", notes = "爬虫调度任务-添加")
+    @PostMapping(value = "/add")
+    public Result<AppiumJob> add(@RequestBody AppiumJob appiumJob) {
+        Result<AppiumJob> result = new Result<>();
+        try {
+            appiumJobService.save(appiumJob);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param appiumJob
+     * @return
+     */
+    @AutoLog(value = "爬虫调度任务-编辑")
+    @ApiOperation(value = "爬虫调度任务-编辑", notes = "爬虫调度任务-编辑")
+    @PutMapping(value = "/edit")
+    public Result<AppiumJob> edit(@RequestBody AppiumJob appiumJob) {
+        Result<AppiumJob> result = new Result<>();
+        AppiumJob appiumJobEntity = appiumJobService.getById(appiumJob.getId());
+        if (appiumJobEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = appiumJobService.updateById(appiumJob);
+            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 {
+            appiumJobService.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<AppiumJob> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<AppiumJob> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.appiumJobService.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<AppiumJob> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<AppiumJob> result = new Result<>();
+        AppiumJob appiumJob = appiumJobService.getById(id);
+        if (appiumJob == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(appiumJob);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<AppiumJob> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                AppiumJob appiumJob = JSON.parseObject(deString, AppiumJob.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(appiumJob, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<AppiumJob> pageList = appiumJobService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "爬虫调度任务列表");
+        mv.addObject(NormalExcelConstants.CLASS, AppiumJob.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<AppiumJob> listAppiumJobs = ExcelImportUtil.importExcel(file.getInputStream(), AppiumJob.class, params);
+                appiumJobService.saveBatch(listAppiumJobs);
+                return Result.ok("文件导入成功!数据行数:" + listAppiumJobs.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("文件导入失败!");
+    }
+}

+ 17 - 19
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumTaskItemController.java

@@ -1,39 +1,37 @@
 package cn.com.ctop.crawler.modules.appium.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 cn.com.ctop.crawler.modules.appium.entity.AppiumTaskItem;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumTaskItemService;
-import java.util.Date;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
 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;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 任务内容表
@@ -63,7 +61,7 @@ public class AppiumTaskItemController {
     @GetMapping(value = "/list")
     public Result<IPage<AppiumTaskItem>> queryPageList(AppiumTaskItem appiumTaskItem,
                                                        @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
-                                                       @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                       @RequestParam(name = "pageSize", defaultValue = "100") Integer pageSize,
                                                        HttpServletRequest req) {
         Result<IPage<AppiumTaskItem>> result = new Result<IPage<AppiumTaskItem>>();
         QueryWrapper<AppiumTaskItem> queryWrapper = QueryGenerator.initQueryWrapper(appiumTaskItem, req.getParameterMap());

+ 57 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumJob.java

@@ -0,0 +1,57 @@
+package cn.com.ctop.crawler.modules.appium.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+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 java.util.Date;
+
+/**
+ * 爬虫调度任务
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-14
+ */
+@Data
+@TableName("ctop_appium_job")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_appium_job对象", description = "爬虫调度任务")
+public class AppiumJob {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "id")
+    private Integer id;
+    /**
+     * 调度任务名称
+     */
+    @Excel(name = "调度任务名称", width = 15)
+    @ApiModelProperty(value = "调度任务名称")
+    private String jobName;
+    /**
+     * status
+     */
+    @Excel(name = "status", width = 15)
+    @ApiModelProperty(value = "status")
+    private Integer status;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 67 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumJobBindTaskInfo.java

@@ -0,0 +1,67 @@
+package cn.com.ctop.crawler.modules.appium.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;
+
+/**
+ * 爬虫调度任务绑定信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-14
+ */
+@Data
+@TableName("ctop_appium_job_bind_task_info")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_appium_job_bind_task_info对象", description = "爬虫调度任务绑定信息")
+public class AppiumJobBindTaskInfo {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "id")
+    private Integer id;
+    /**
+     * 任务号
+     */
+    @Excel(name = "任务号", width = 15)
+    @ApiModelProperty(value = "任务号")
+    private Integer jobId;
+    /**
+     * 执行任务id
+     */
+    @Excel(name = "执行任务id", width = 15)
+    @ApiModelProperty(value = "执行任务id")
+    private Integer taskId;
+    /**
+     * 任务绑定状态
+     */
+    @Excel(name = "任务绑定状态", width = 15)
+    @ApiModelProperty(value = "任务绑定状态")
+    private Integer status;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 15 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/AppiumJobBindTaskInfoMapper.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.crawler.modules.appium.mapper;
+
+import cn.com.ctop.crawler.modules.appium.entity.AppiumJobBindTaskInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 爬虫调度任务绑定信息
+ *
+ * @author: jeecg-boot
+ * @date: 2019-11-14
+ * @cersion: V1.0
+ */
+public interface AppiumJobBindTaskInfoMapper extends BaseMapper<AppiumJobBindTaskInfo> {
+
+}

+ 15 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/AppiumJobMapper.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.crawler.modules.appium.mapper;
+
+import cn.com.ctop.crawler.modules.appium.entity.AppiumJob;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 爬虫调度任务
+ *
+ * @author: jeecg-boot
+ * @date: 2019-11-14
+ * @cersion: V1.0
+ */
+public interface AppiumJobMapper extends BaseMapper<AppiumJob> {
+
+}

+ 5 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/xml/AppiumJobBindTaskInfoMapper.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="cn.com.ctop.crawler.modules.appium.mapper.AppiumJobBindTaskInfoMapper">
+
+</mapper>

+ 5 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/xml/AppiumJobMapper.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="cn.com.ctop.crawler.modules.appium.mapper.AppiumJobMapper">
+
+</mapper>

+ 15 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumJobBindTaskInfoService.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.crawler.modules.appium.service;
+
+import cn.com.ctop.crawler.modules.appium.entity.AppiumJobBindTaskInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 爬虫调度任务绑定信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-14
+ */
+public interface IAppiumJobBindTaskInfoService extends IService<AppiumJobBindTaskInfo> {
+
+}

+ 15 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumJobService.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.crawler.modules.appium.service;
+
+import cn.com.ctop.crawler.modules.appium.entity.AppiumJob;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 爬虫调度任务
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-14
+ */
+public interface IAppiumJobService extends IService<AppiumJob> {
+
+}

+ 19 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumJobBindTaskInfoServiceImpl.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.crawler.modules.appium.service.impl;
+
+import cn.com.ctop.crawler.modules.appium.entity.AppiumJobBindTaskInfo;
+import cn.com.ctop.crawler.modules.appium.mapper.AppiumJobBindTaskInfoMapper;
+import cn.com.ctop.crawler.modules.appium.service.IAppiumJobBindTaskInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 爬虫调度任务绑定信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-14
+ */
+@Service
+public class AppiumJobBindTaskInfoServiceImpl extends ServiceImpl<AppiumJobBindTaskInfoMapper, AppiumJobBindTaskInfo> implements IAppiumJobBindTaskInfoService {
+
+}

+ 19 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumJobServiceImpl.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.crawler.modules.appium.service.impl;
+
+import cn.com.ctop.crawler.modules.appium.entity.AppiumJob;
+import cn.com.ctop.crawler.modules.appium.mapper.AppiumJobMapper;
+import cn.com.ctop.crawler.modules.appium.service.IAppiumJobService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 爬虫调度任务
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-14
+ */
+@Service
+public class AppiumJobServiceImpl extends ServiceImpl<AppiumJobMapper, AppiumJob> implements IAppiumJobService {
+
+}

+ 57 - 28
module-crawler/src/main/java/cn/com/ctop/crawler/modules/core/util/AppiumUtil.java

@@ -399,35 +399,16 @@ public class AppiumUtil {
 
     public WebElement getElementByType(AndroidDriver androidDriver, String type, String typeInfo) {
         WebElement element = null;
-        if (type.equals(FIND_ELEMENT_TYPE_ID)) {
-            try {
-                List<WebElement> elements = androidDriver.findElementsById(typeInfo);
-                if (elements != null && elements.size() > 0) {
-                    element = elements.get(0);
-                }
-            } catch (Exception e) {
-                System.out.println("元素ID:" + typeInfo + "不存在");
-            }
-        }
-        if (type.equals(FIND_ELEMENT_TYPE_CLASS)) {
-            try {
-                List<WebElement> elements = androidDriver.findElementsByClassName(typeInfo);
-                if (elements != null && elements.size() > 0) {
-                    element = elements.get(0);
-                }
-            } catch (Exception e) {
-                System.out.println("元素class:" + typeInfo + "不存在");
-            }
-        }
-        if (type.equals(FIND_ELEMENT_TYPE_XPATH)) {
-            try {
-                List<WebElement> elements = androidDriver.findElementsByXPath(typeInfo);
-                if (elements != null && elements.size() > 0) {
-                    element = elements.get(0);
-                }
-            } catch (Exception e) {
-                System.out.println("元素xpath:" + typeInfo + "不存在");
+        try {
+            if (type.equals(FIND_ELEMENT_TYPE_ID)) {
+                element = androidDriver.findElementById(typeInfo);
+            } else if (type.equals(FIND_ELEMENT_TYPE_CLASS)) {
+                element = androidDriver.findElementByClassName(typeInfo);
+            } else if (type.equals(FIND_ELEMENT_TYPE_XPATH)) {
+                element = androidDriver.findElementByXPath(typeInfo);
             }
+        } catch (Exception e) {
+            log.info("元素不存在===>type:{};typeInfo:{}", type, typeInfo);
         }
         return element;
     }
@@ -480,6 +461,21 @@ public class AppiumUtil {
                             WebElement downloadElement = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/ad_download_text");
                             if (null != downloadElement) {
                                 downloadElement.click();
+                                for (int i = 0; i < 60; i++) {
+                                    Thread.sleep(10000L);
+                                    WebElement okButton = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.android.packageinstaller:id/ok_button");
+                                    if (null != okButton) {
+                                        okButton.click();
+                                        break;
+                                    }
+
+                                }
+                                Thread.sleep(3000L);
+                                WebElement launchButton = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.android.packageinstaller:id/launch_button");
+                                if (null != launchButton) {
+                                    launchButton.click();
+                                    break;
+                                }
                                 return;
                             }
                             System.out.println("download元素查询失败");
@@ -493,12 +489,45 @@ public class AppiumUtil {
         }
     }
 
+    public void checkActivity(AndroidDriver androidDriver) {
+        try {
+            Thread.sleep(2000L);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        String packageName = androidDriver.getCurrentPackage();
+        String activity = androidDriver.currentActivity();
+        if (null == packageName || !"com.smile.gifmaker".equals(packageName)) {
+            log.error("app启动异常");
+            return;
+        }
+
+        if (null != activity && activity.equals("com.yxcorp.gifshow.webview.KwaiWebViewActivity")) {
+            //激活账号页面
+            WebElement backButton = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/left_tv");
+            if (null != backButton) {
+                backButton.click();
+
+            }
+            //悬浮层??我知道了
+            WebElement positive = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/positive");
+            if (positive != null) {
+                positive.click();
+            }
+        }
+        //大屏模式悬浮层
+        WebElement negativeElement = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/negative");
+        if (null != negativeElement) {
+            negativeElement.click();
+        }
+    }
     public void runTask(AndroidDriver androidDriver, AppiumTaskItem appiumTaskItem, WebElement loopElement) throws Exception {
         if (appiumTaskItem != null) {
             System.out.println(new Gson().toJson(appiumTaskItem));
             if (appiumTaskItem.getWaitTime() != null && appiumTaskItem.getWaitTime() > 0) {
                 Thread.sleep(appiumTaskItem.getWaitTime());
             }
+            checkActivity(androidDriver);
             if (appiumTaskItem.getLoopType() != null && appiumTaskItem.getLoopType().equals("noloop")) {
                 //非循环类型任务
                 if (appiumTaskItem.getFindType() != null) {