Explorar o código

Merge branch 'test' into test-V2

yumeng %!s(int64=5) %!d(string=hai) anos
pai
achega
79f5ac40bf
Modificáronse 47 ficheiros con 648 adicións e 471 borrados
  1. 0 10
      jeecg-boot-module-system/src/main/java/org/jeecg/JeecgApplication.java
  2. 1 2
      jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java
  3. 17 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/AdvertiserController.java
  4. 2 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CallbackController.java
  5. 23 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CrawlerController.java
  6. 0 24
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialInfoController.java
  7. 31 23
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectController.java
  8. 27 10
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectMemberController.java
  9. 6 9
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestMqController.java
  10. 3 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ProjectMember.java
  11. 9 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/ICrawlerService.java
  12. 111 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CrawlerServiceImpl.java
  13. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/vo/KuaishouAppiumJobVO.java
  14. 24 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
  15. 33 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysUserVo.java
  16. 3 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
  17. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
  18. 3 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
  19. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
  20. 5 1
      jeecg-boot-module-system/src/main/resources/application-dev.yml
  21. 10 0
      jeecg-boot-module-system/src/main/resources/application-prod.yml
  22. 6 5
      jeecg-boot-module-system/src/main/resources/application-test.yml
  23. 57 0
      jeecg-boot-module-system/src/main/resources/logback-dev.xml
  24. 57 0
      jeecg-boot-module-system/src/main/resources/logback-prod.xml
  25. 57 0
      jeecg-boot-module-system/src/main/resources/logback-test.xml
  26. 0 23
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  27. 11 11
      module-common/pom.xml
  28. 55 55
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialInfoServiceImpl.java
  29. 4 1
      module-common/src/main/java/cn/com/ctop/common/module/utils/StatusCode.java
  30. 0 24
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumJobController.java
  31. 0 12
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumTaskController.java
  32. 14 103
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumTaskLogController.java
  33. 1 1
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumTaskItem.java
  34. 5 3
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumTaskLog.java
  35. 1 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumDeviceService.java
  36. 5 7
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumJobService.java
  37. 1 1
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumTaskItemService.java
  38. 1 1
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumTaskService.java
  39. 7 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumDeviceServiceImpl.java
  40. 10 94
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumJobServiceImpl.java
  41. 1 1
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumTaskItemServiceImpl.java
  42. 5 5
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumTaskServiceImpl.java
  43. 5 5
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/core/util/AppiumUtil.java
  44. 1 1
      module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/impl/MaterialUploadServiceImpl.java
  45. 3 7
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java
  46. 0 2
      module-kuaishou/src/main/resources/log4j.properties
  47. 0 19
      module-kuaishou/src/main/resources/logback.xml

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

@@ -47,14 +47,4 @@ public class JeecgApplication {
         return new RestTemplate();
     }
 
-    @Bean
-    public MultipartConfigElement multipartConfigElement() {
-        MultipartConfigFactory factory = new MultipartConfigFactory();
-        //  单个数据大小
-        factory.setMaxFileSize("10240KB"); // KB,MB
-        /// 总上传数据大小
-        factory.setMaxRequestSize("102400KB");
-        return factory.createMultipartConfig();
-    }
-
 }

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

@@ -72,8 +72,8 @@ public class ShiroConfig {
 		filterChainDefinitionMap.put("/ctop/bytedanceAreaInfo/**", "anon");
 		filterChainDefinitionMap.put("/ctop/bytedanceInterestCategory/**", "anon");
 		filterChainDefinitionMap.put("/template/creative/words/get", "anon");
+        filterChainDefinitionMap.put("/appium/crawler/startJob", "anon");
 
-        //pdf预览需要文件
         filterChainDefinitionMap.put("/generic/**", "anon");
 		filterChainDefinitionMap.put("/", "anon");
 		filterChainDefinitionMap.put("/doc.html", "anon");
@@ -93,7 +93,6 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/kuaishou/report", "anon");
 		filterChainDefinitionMap.put("/ctop/bindAccount/**", "anon");
 		filterChainDefinitionMap.put("/**/*.mp4", "anon");
-        filterChainDefinitionMap.put("/bytedance", "anon");
 
 
 		//性能监控

+ 17 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/AdvertiserController.java

@@ -84,10 +84,14 @@ public class AdvertiserController {
 
         Result<IPage<Advertiser>> result = new Result<IPage<Advertiser>>();
         String roleCode = materialReportMapper.getRoleCodeByUserId(advertiser.getUserId());
+        String userId = advertiser.getUserId();
+        if ("admin".equals(roleCode) || "kuaishouOperationManager".equals(roleCode)) {
+            advertiser.setUserId(null);
+        }
         QueryWrapper<Advertiser> queryWrapper = QueryGenerator.initQueryWrapper(advertiser, req.getParameterMap());
-        if (!"admin".equals(roleCode) && !Check.isNull(roleCode)) {
+        if ("kuaishouOperationManager".equals(roleCode)) {
             QueryWrapper<UserCompany> userCompanyQueryWrapper = new QueryWrapper<>();
-            userCompanyQueryWrapper.eq("user_id", advertiser.getUserId());
+            userCompanyQueryWrapper.eq("user_id", userId);
             userCompanyQueryWrapper.orderByDesc("create_time");
             userCompanyQueryWrapper.last("limit 1");
             UserCompany userCompany = userCompanyMapper.selectOne(userCompanyQueryWrapper);
@@ -124,6 +128,16 @@ public class AdvertiserController {
     public Result<Advertiser> add(@RequestBody Advertiser advertiser) {
         Result<Advertiser> result = new Result<Advertiser>();
         try {
+            String name = advertiser.getName().trim();
+            QueryWrapper<Advertiser> advertiserQueryWrapper = new QueryWrapper<>();
+            advertiserQueryWrapper.eq("name", name);
+            advertiserQueryWrapper.last("limit 1");
+            advertiserQueryWrapper.orderByDesc("create_time");
+            Advertiser checkAdvertiser = advertiserService.getOne(advertiserQueryWrapper);
+            if (!Check.isNull(checkAdvertiser)) {
+                throw new Exception("广告主已存在");
+            }
+
             String userId = advertiser.getUserId();
             if (!Check.isNull(userId)) {
                 QueryWrapper<UserCompany> userCompanyQueryWrapper = new QueryWrapper<>();
@@ -139,7 +153,7 @@ public class AdvertiserController {
             result.success("添加成功!");
         } catch (Exception e) {
             log.error(e.getMessage(), e);
-            result.error500("操作失败");
+            result.error500("添加失败 " + e.getMessage());
         }
         return result;
     }

+ 2 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CallbackController.java

@@ -2,7 +2,6 @@ package org.jeecg.modules.ctop.controller;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.entity.UserAllocation;
-import cn.com.ctop.common.module.mapper.CtopOauthTokenMapper;
 import cn.com.ctop.common.module.mapper.UserAllocationMapper;
 import cn.com.ctop.common.module.service.IBindAccountAuthService;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
@@ -84,7 +83,7 @@ public class CallbackController {
                     userAllocationQueryWrapper.orderByDesc("create_time");
                     userAllocationQueryWrapper.last("limit 1");
                     UserAllocation checkUserAllocation = allocationMapper.selectOne(userAllocationQueryWrapper);
-                    if (Check.isNull(checkUserAllocation)) {
+                    if (!Check.isNull(checkUserAllocation)) {
                         return "授权失败,该账号已被:" + checkUserAllocation.getAuthName() + "绑定!";
                     }
                     String advertiserId = json.getString("advertiserId");
@@ -219,7 +218,7 @@ public class CallbackController {
             userAllocationQueryWrapper.orderByDesc("create_time");
             userAllocationQueryWrapper.last("limit 1");
             UserAllocation checkUserAllocation = allocationMapper.selectOne(userAllocationQueryWrapper);
-            if (Check.isNull(checkUserAllocation)) {
+            if (!Check.isNull(checkUserAllocation)) {
                 returnMap.put("code", -1);
                 returnMap.put("desc", "授权失败,账号已被:" + checkUserAllocation.getUserName() + "绑定");
             }

+ 23 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CrawlerController.java

@@ -0,0 +1,23 @@
+package org.jeecg.modules.ctop.controller;
+
+import org.jeecg.modules.ctop.service.ICrawlerService;
+import org.jeecg.modules.ctop.vo.KuaishouAppiumJobVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+@RestController
+@RequestMapping("appium/crawler")
+public class CrawlerController {
+    @Autowired
+    private ICrawlerService crawlerService;
+
+    @PostMapping("startJob")
+    public Map<String, Object> runTask(@RequestBody KuaishouAppiumJobVO jobVO) {
+        return crawlerService.startJob(jobVO);
+    }
+}

+ 0 - 24
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialInfoController.java

@@ -4,9 +4,6 @@ package org.jeecg.modules.ctop.controller;
 import cn.com.ctop.common.module.entity.MaterialInfo;
 import cn.com.ctop.common.module.service.IMaterialInfoService;
 import cn.com.ctop.common.module.utils.Check;
-import cn.com.ctop.common.module.utils.FileEntity;
-import cn.com.ctop.common.module.utils.FileUploadTool;
-import cn.com.ctop.common.module.utils.LoadFileUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -38,7 +35,6 @@ import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.text.ParseException;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -64,26 +60,6 @@ public class MaterialInfoController {
     }
 
 
-    @RequestMapping(value = "/getMd5", consumes = "multipart/form-data;charset=utf-8")
-    public String getMd5(@RequestParam("multipartFile") MultipartFile multipartFile, HttpServletRequest request) throws IOException {
-
-        Map<String, Object> returnMap = new HashMap<>();
-        try {
-            String savaPath = "D:\\tets1\\image";
-            FileUploadTool fileUploadTool = new FileUploadTool();
-            FileEntity entity;
-            entity = fileUploadTool.createFile(multipartFile, request, savaPath);
-
-            String path = entity.getPath();
-            String md5 = LoadFileUtil.getMD5(path);
-            return md5;
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-
-
     @GetMapping(value = "/getDetail")
     public JSONObject getDetail(String materialId) {
 

+ 31 - 23
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectController.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.ctop.controller;
 
 
+import cn.com.ctop.bytedance.mapper.MaterialReportMapper;
 import cn.com.ctop.common.module.utils.Check;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -20,6 +21,8 @@ import org.jeecg.modules.ctop.mapper.ProjectMapper;
 import org.jeecg.modules.ctop.service.IAdvertiserService;
 import org.jeecg.modules.ctop.service.IProjectMemberService;
 import org.jeecg.modules.ctop.service.IProjectService;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysUserService;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
@@ -67,6 +70,9 @@ public class ProjectController {
     @Autowired
     private ProjectMapper projectMapper;
 
+    @Autowired
+    private MaterialReportMapper materialReportMapper;
+
 
     /**
      * 我管理的
@@ -80,29 +86,12 @@ public class ProjectController {
     public Map<String, Object> responsibleList(String userId) {
         Map<String, Object> map = new HashMap<>();
 
-      /*  String roleCode = materialReportMapper.getRoleCodeByUserId(userId);
-        if (Check.isNull(roleCode)) {
-            map.put("code", -1);
-            return map;
-        }
+        String roleCode = materialReportMapper.getRoleCodeByUserId(userId);
         QueryWrapper<Project> queryWrapper = new QueryWrapper<>();
         if (!"admin".equals(roleCode)) {
-            QueryWrapper<UserCompany> userCompanyQueryWrapper = new QueryWrapper<>();
-            userCompanyQueryWrapper.eq("user_id", userId);
-            userCompanyQueryWrapper.orderByDesc("create_time");
-            userCompanyQueryWrapper.last("limit 1");
-            UserCompany userCompany = userCompanyMapper.selectOne(userCompanyQueryWrapper);
-            queryWrapper.eq("company_id", userCompany.getCompanyId());
-            if ("kuaishouOperationManager".equals(roleCode)) {
-
-                queryWrapper.eq("media_id", "2");
-            } else if ("toutiaoOperationManager".equals(roleCode)) {
-                queryWrapper.eq("media_id", "1");
-            }
-        }*/
-        QueryWrapper<Project> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("responsible_id", userId);
-        queryWrapper.orderByDesc("create_time");
+            queryWrapper.eq("responsible_id", userId);
+            queryWrapper.orderByDesc("create_time");
+        }
         List<Project> projects = projectMapper.selectList(queryWrapper);
         map.put("success", true);
         map.put("code", 0);
@@ -144,6 +133,9 @@ public class ProjectController {
      * @param project
      * @return
      */
+    @Autowired
+    private ISysUserService sysUserService;
+
     @AutoLog(value = "项目-添加")
     @ApiOperation(value = "项目-添加", notes = "项目-添加")
     @PostMapping(value = "/add")
@@ -155,6 +147,10 @@ public class ProjectController {
             if (!Check.isNull(advertiser)) {
                 project.setCompanyId(advertiser.getCompanyId());
             }
+            SysUser sysUser = sysUserService.getById(project.getResponsibleId());
+            if (!Check.isNull(sysUser)) {
+                project.setResponsibleName(sysUser.getRealname());
+            }
             projectService.save(project);
             Long id = project.getId();
             Map<String, Object> map = new HashMap<>();
@@ -165,11 +161,17 @@ public class ProjectController {
             member.setProjectId(id);
             member.setProjectName(project.getProjectName());
             member.setUserId(project.getResponsibleId());
-            member.setUserName(project.getResponsibleName());
+            if (!Check.isNull(sysUser)) {
+                member.setUserName(sysUser.getRealname());
+            }
+            String roleCode = materialReportMapper.getRoleCodeByUserId(project.getUserId());
+            if (!Check.isNull(roleCode)) {
+                member.setRoleCode(roleCode);
+            }
             projectMemberService.save(member);
             result.success("添加成功!");
         } catch (Exception e) {
-            log.error(e.getMessage(), e);
+            e.printStackTrace();
             result.error500("操作失败");
         }
         return result;
@@ -186,6 +188,12 @@ public class ProjectController {
     @PutMapping(value = "/edit")
     public Result<Project> edit(@RequestBody Project project) {
         Result<Project> result = new Result<Project>();
+
+        SysUser sysUser = sysUserService.getById(project.getResponsibleId());
+        if (!Check.isNull(sysUser)) {
+            project.setResponsibleName(sysUser.getRealname());
+        }
+
         Project projectEntity = projectService.getById(project.getId());
         if (projectEntity == null) {
             result.error500("未找到对应实体");

+ 27 - 10
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectMemberController.java

@@ -20,6 +20,8 @@ import org.jeecg.modules.ctop.entity.ProjectMember;
 import org.jeecg.modules.ctop.mapper.ProjectMemberMapper;
 import org.jeecg.modules.ctop.service.IProjectMemberService;
 import org.jeecg.modules.ctop.service.IProjectService;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysUserService;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
@@ -58,6 +60,8 @@ public class ProjectMemberController {
     private IProjectService projectService;
     @Autowired
     private MaterialReportMapper materialReportMapper;
+    @Autowired
+    private ISysUserService sysUserService;
 
 
     /**
@@ -101,7 +105,11 @@ public class ProjectMemberController {
         Map<String, Object> map = new HashMap<>();
         try {
             QueryWrapper<ProjectMember> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("user_id", userId);
+            String roleCode = materialReportMapper.getRoleCodeByUserId(userId);
+            if (!"admin".equals(roleCode)) {
+                queryWrapper.eq("user_id", userId);
+
+            }
             queryWrapper.groupBy("project_id");
             queryWrapper.orderByDesc("create_time");
             List<ProjectMember> projectMembers = projectMemberMapper.selectList(queryWrapper);
@@ -109,17 +117,21 @@ public class ProjectMemberController {
             if (!Check.isNull(projectMembers)) {
                 for (ProjectMember projectMember : projectMembers) {
                     Project project = projectService.getById(projectMember.getProjectId());
-                    projectMember.setResponsibleName(project.getResponsibleName());
-                    projectMember.setAdvertiserName(project.getAdvertiserName());
-                    projectMember.setAdvertiserId(project.getAdvertiserId());
-                    projectMember.setMediaId(project.getMediaId());
-                    projectMemberList.add(projectMember);
+                    if (!Check.isNull(project)) {
+                        projectMember.setResponsibleName(project.getResponsibleName());
+                        projectMember.setAdvertiserName(project.getAdvertiserName());
+                        projectMember.setAdvertiserId(project.getAdvertiserId());
+                        projectMember.setMediaId(project.getMediaId());
+                        projectMemberList.add(projectMember);
+                    }
+
                 }
             }
             map.put("code", 0);
             map.put("success", true);
             map.put("result", projectMemberList);
         } catch (Exception e) {
+            e.printStackTrace();
             map.put("success", false);
             map.put("code", -1);
         }
@@ -160,6 +172,8 @@ public class ProjectMemberController {
      * @param jsonObject
      * @return
      */
+
+
     @AutoLog(value = "项目成员-添加")
     @ApiOperation(value = "项目成员-添加", notes = "项目成员-添加")
     @PostMapping(value = "/batchAdd")
@@ -176,9 +190,8 @@ public class ProjectMemberController {
                 throw new Exception("请选择项目成员");
             }
             for (int i = 0; i < memberArr.size(); i++) {
-                JSONObject memberJson = memberArr.getJSONObject(i);
-                if (!Check.isNull(memberJson)) {
-                    String userId = memberJson.getString("userId");
+                String userId = memberArr.get(i).toString();
+                if (!Check.isNull(userId)) {
                     QueryWrapper<ProjectMember> queryWrapper = new QueryWrapper<>();
                     queryWrapper.eq("user_id", userId);
                     queryWrapper.eq("project_id", projectId);
@@ -194,7 +207,11 @@ public class ProjectMemberController {
                     member.setProjectId(projectId);
                     member.setProjectName(projectName);
                     member.setUserId(userId);
-                    member.setUserName(memberJson.getString("userName"));
+                    SysUser sysUser = sysUserService.getById(userId);
+                    if (!Check.isNull(sysUser)) {
+                        member.setUserName(sysUser.getRealname());
+                    }
+
                     projectMemberService.save(member);
                 }
             }

+ 6 - 9
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestMqController.java

@@ -2,6 +2,8 @@ package org.jeecg.modules.ctop.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.AppiumDevice;
+import cn.com.ctop.crawler.modules.appium.service.IAppiumDeviceService;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumJobService;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumTaskService;
 import org.jeecg.modules.mq.Sender;
@@ -17,6 +19,8 @@ import java.util.Map;
 @RequestMapping("mq")
 public class TestMqController {
     @Autowired
+    private IAppiumDeviceService deviceService;
+    @Autowired
     private Sender sender;
     @Autowired
     private IAppiumJobService jobService;
@@ -34,15 +38,8 @@ public class TestMqController {
     @GetMapping("task1")
     public Map<String, Object> task1() {
         Map<String, Object> result = new HashMap<>();
-        jobService.loginTask(2L);
-        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
-        return result;
-    }
-
-    @GetMapping("task2")
-    public Map<String, Object> task2() {
-        Map<String, Object> result = new HashMap<>();
-        appiumTaskService.runTask(1, 1);
+        AppiumDevice device = deviceService.getById(1);
+        jobService.loginTask(2L, device);
         ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
         return result;
     }

+ 3 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ProjectMember.java

@@ -57,6 +57,8 @@ public class ProjectMember {
     @ApiModelProperty(value = "成员名称")
     private String userName;
 
+    private String roleCode;
+
 
     @TableField(exist = false)
     private String responsibleName;
@@ -70,7 +72,7 @@ public class ProjectMember {
     @TableField(exist = false)
     private String mediaId;
 
-    private String roleCode;
+
 
     /**
      * 创建时间

+ 9 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/ICrawlerService.java

@@ -0,0 +1,9 @@
+package org.jeecg.modules.ctop.service;
+
+import org.jeecg.modules.ctop.vo.KuaishouAppiumJobVO;
+
+import java.util.Map;
+
+public interface ICrawlerService {
+    Map<String, Object> startJob(KuaishouAppiumJobVO jobVO);
+}

+ 111 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CrawlerServiceImpl.java

@@ -0,0 +1,111 @@
+package org.jeecg.modules.ctop.service.impl;
+
+import cn.com.ctop.common.module.entity.BindAccountLogin;
+import cn.com.ctop.common.module.service.IBindAccountLoginService;
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
+import cn.com.ctop.crawler.modules.appium.entity.AppiumDevice;
+import cn.com.ctop.crawler.modules.appium.entity.AppiumTaskLog;
+import cn.com.ctop.crawler.modules.appium.mapper.AppiumTaskLogMapper;
+import cn.com.ctop.crawler.modules.appium.service.IAppiumDeviceService;
+import cn.com.ctop.crawler.modules.appium.service.IAppiumJobService;
+import cn.com.ctop.crawler.modules.appium.service.IAppiumTaskService;
+import org.jeecg.modules.ctop.service.ICrawlerService;
+import org.jeecg.modules.ctop.vo.KuaishouAppiumJobVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@Service
+public class CrawlerServiceImpl implements ICrawlerService {
+    static ExecutorService executorService = null;
+    @Autowired
+    private IBindAccountLoginService bindAccountLoginService;
+    @Autowired
+    private IAppiumJobService jobService;
+    @Autowired
+    private IAppiumTaskService taskService;
+    @Autowired
+    private IAppiumDeviceService deviceService;
+    @Autowired
+    private AppiumTaskLogMapper taskLogMapper;
+
+    @Override
+    public Map<String, Object> startJob(KuaishouAppiumJobVO jobVO) {
+        Map<String, Object> result = new HashMap<>();
+        //TODO 需要考虑多个任务并行的问题
+        //1:根据id查询快手账号信息
+        BindAccountLogin accountLogin = bindAccountLoginService.getById(jobVO.getAccountId());
+        if (null == accountLogin) {
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR.getCode());
+            return result;
+        }
+        if (jobVO.getJobId() == null || jobVO.getJobId() == 0 || jobVO.getNum() == null || jobVO.getNum() == 0 || jobVO.getCreativeName() == null || "".equals(jobVO.getCreativeName()) || jobVO.getPublishName() == null || "".equals(jobVO.getPublishName().trim())) {
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR.getCode());
+            return result;
+        }
+        Long num = jobVO.getNum();
+        //获取手机设备信息
+        AppiumDevice device = deviceService.getEnabled();
+        if (null == device || device.getStatus() != 1) {
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_NO_ENABLED_DEVICE.getCode());
+            return result;
+        }
+        executorService = Executors.newFixedThreadPool(2);
+        executorService.submit(new Runnable() {
+            @Override
+            public void run() {
+                int i = 0;
+                while (i < num) {
+                    if (i > num) {
+                        break;
+                    }
+                    deviceService.updateById(device);
+                    AppiumTaskLog log = new AppiumTaskLog();
+                    log.setDeviceId(device.getId());
+                    log.setDeviceIp(device.getIp());
+                    log.setDevicePort(device.getPort());
+                    log.setStatus(1 + "");
+                    log.setTaskId(jobVO.getJobId());
+                    log.setTaskName("快手刷量任务");
+                    taskLogMapper.insert(log);
+                    log.setId(log.getId());
+                    try {
+                        //一键新机
+                        boolean success = jobService.refreshWebPhone();
+                        if (!success) {
+                            jobService.updateStatus(device, log, -4, 1);
+                            continue;
+                        }
+                        Thread.sleep(10000L);
+                        String ksId = jobService.loginTask(2L, device);
+                        if (null == ksId) {
+                            i++;
+                            jobService.updateStatus(device, log, -1, 1);
+                            continue;
+                        }
+                        boolean isBind = jobService.bindCreative(accountLogin.getAccountName(), accountLogin.getPassword(), jobVO.getPublishName(), ksId);
+                        if (!isBind) {
+                            i++;
+                            jobService.updateStatus(device, log, -2, 1);
+                            continue;
+                        }
+                        taskService.runTask(1L, device.getId(), jobVO.getPublishName());
+                        jobService.updateStatus(device, log, 2, 1);
+                        i++;
+                    } catch (Exception e) {
+                        jobService.updateStatus(device, log, -3, 1);
+                        i++;
+                        continue;
+                    }
+                }
+            }
+        });
+        ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_JOB_StART.getCode());
+        return result;
+    }
+}

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/vo/KuaishouAppiumJobVO.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.ctop.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class KuaishouAppiumJobVO implements Serializable {
+    private Long jobId;
+    private Long num;
+    private String creativeName;
+    private String accountId;
+    private String publishName;
+}

+ 24 - 4
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java

@@ -18,10 +18,8 @@ import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.PasswordUtil;
 import org.jeecg.common.util.RedisUtil;
 import org.jeecg.common.util.oConvertUtils;
-import org.jeecg.modules.system.entity.SysDepart;
-import org.jeecg.modules.system.entity.SysUser;
-import org.jeecg.modules.system.entity.SysUserDepart;
-import org.jeecg.modules.system.entity.SysUserRole;
+import org.jeecg.modules.system.entity.*;
+import org.jeecg.modules.system.mapper.SysUserMapper;
 import org.jeecg.modules.system.model.DepartIdModel;
 import org.jeecg.modules.system.model.SysUserDepartsVO;
 import org.jeecg.modules.system.service.*;
@@ -76,6 +74,8 @@ public class SysUserController {
 
     @Autowired
     private IUserCompanyService userCompanyService;
+    @Autowired
+    private SysUserMapper sysUserMapper;
 
 
     @RequestMapping(value = "/getRoleInfo", method = RequestMethod.GET)
@@ -100,6 +100,26 @@ public class SysUserController {
         return result;
     }
 
+
+    @RequestMapping(value = "/getAllUserList", method = RequestMethod.GET)
+    public Result<List<SysUserVo>> getAllList() {
+        Result<List<SysUserVo>> result = new Result<>();
+        try {
+
+            List<SysUserVo> userList = sysUserService.getAllUser();
+            result.setSuccess(true);
+            result.setResult(userList);
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+            result.setMessage("请求失败");
+
+        }
+
+        return result;
+    }
+
+
     @RequestMapping(value = "/add", method = RequestMethod.POST)
     @RequiresPermissions("user:add")
     public Result<SysUser> add(@RequestBody JSONObject jsonObject) {

+ 33 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/entity/SysUserVo.java

@@ -0,0 +1,33 @@
+package org.jeecg.modules.system.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 用户表
+ * </p>
+ *
+ * @Author scott
+ * @since 2018-12-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class SysUserVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    private String userId;
+
+    private String username;
+
+    private String realName;
+
+    private String roleName;
+
+}

+ 3 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.entity.SysUserVo;
 
 import java.util.List;
 import java.util.Map;
@@ -73,4 +74,6 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      SysUser getUserByEmail(@Param("email") String email);
 
     Map<String, Object> queryRoleCode(@Param("userId") String userId);
+
+    List<SysUserVo> getAllUser();
 }

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

@@ -67,4 +67,18 @@ SELECT
 </select>
 
 
+    <select id="getAllUser" resultType="org.jeecg.modules.system.entity.SysUserVo">
+
+      SELECT
+      t1.id userId,
+      t1.username userName,
+      t1.realname realName,
+      (SELECT role_name FROM sys_role WHERE id = t2.role_id ) roleName
+    FROM sys_user t1
+    LEFT JOIN sys_user_role t2 on t1.id = t2.user_id;
+
+
+</select>
+
+
 </mapper>

+ 3 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysUserService.java

@@ -12,6 +12,7 @@ import org.jeecg.common.system.vo.SysUserCacheInfo;
 import org.jeecg.modules.system.entity.SysUser;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.system.entity.SysUserVo;
 
 /**
  * <p>
@@ -125,4 +126,6 @@ public interface ISysUserService extends IService<SysUser> {
 	Result checkUserIsEffective(SysUser sysUser);
 
     Map<String, Object> queryRoleCode(String userId);
+
+    List<SysUserVo> getAllUser();
 }

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java

@@ -264,4 +264,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     public Map<String, Object> queryRoleCode(String userId) {
         return userMapper.queryRoleCode(userId);
     }
+
+    @Override
+    public List<SysUserVo> getAllUser() {
+        return userMapper.getAllUser();
+    }
 }

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

@@ -1,3 +1,4 @@
+
 server:
   port: 8080
   servlet:
@@ -151,4 +152,7 @@ kuaishou:
   group-control:
     path: http://39.106.184.70
     port: 4723
-
+logging:
+  level:
+    root: info
+  config: classpath:logback-dev.xml

+ 10 - 0
jeecg-boot-module-system/src/main/resources/application-prod.yml

@@ -12,7 +12,13 @@ management:
       exposure:
         include: metrics,httptrace
 
+
 spring:
+  rabbitmq:
+    host: 39.106.184.70
+    port: 5672
+    username: guest
+    password: guest
   servlet:
     multipart:
       max-file-size: -1
@@ -143,4 +149,8 @@ kuaishou:
   group-control:
     path: http://39.106.184.70
     port: 4723
+logging:
+  level:
+    root: info
+  config: classpath:logback-prod.xml
 

+ 6 - 5
jeecg-boot-module-system/src/main/resources/application-test.yml

@@ -99,12 +99,9 @@ spring:
         connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
       datasource:
         master:
-          #          url: jdbc:mysql://192.168.0.23:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
-          #          url: jdbc:mysql://39.106.184.70:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
-          url: jdbc:mysql://33.97.120.42:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+          url: jdbc:mysql://39.106.184.70:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
           username: hcst
-          #          password: hcst2019
-          password: test@20190531
+          password: hcst2019
           driver-class-name: com.mysql.jdbc.Driver
           # 多数据源配置
           #multi-datasource1:
@@ -155,3 +152,7 @@ kuaishou:
   group-control:
     path: http://127.0.0.1
     port: 4723
+logging:
+  level:
+    root: info
+  config: classpath:logback-test.xml

+ 57 - 0
jeecg-boot-module-system/src/main/resources/logback-dev.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="10 seconds">
+
+    <contextName>logback</contextName>
+
+
+    <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
+    <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
+
+    <!-- 定义日志存储的路径,不要配置相对路径 -->
+    <property name="FILE_PATH" value="D:/Desktop/log/spring-log.%d{yyyy-MM-dd}.%i.log"/>
+
+    <!-- 控制台输出日志 -->
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <!-- 日志级别过滤INFO以下 -->
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>INFO</level>
+        </filter>
+        <encoder>
+            <!-- 按照上面配置的LOG_PATTERN来打印日志 -->
+            <pattern>${LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+
+    <!--每天生成一个日志文件,保存30天的日志文件。rollingFile用来切分文件的 -->
+    <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+
+            <fileNamePattern>${FILE_PATH}</fileNamePattern>
+
+            <!-- keep 15 days' worth of history -->
+            <maxHistory>30</maxHistory>
+
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <!-- 日志文件的最大大小 -->
+                <maxFileSize>2MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+
+            <!-- 超出删除老文件 -->
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+
+        <encoder>
+            <pattern>${LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- project default level -->
+    <logger name="net.sh.rgface.serive" level="ERROR"/>
+
+    <!-- 日志输出级别 -->
+    <root level="INFO">
+        <appender-ref ref="console"/>
+        <appender-ref ref="rollingFile"/>
+    </root>
+</configuration>

+ 57 - 0
jeecg-boot-module-system/src/main/resources/logback-prod.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="10 seconds">
+
+    <contextName>logback</contextName>
+
+
+    <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
+    <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
+
+    <!-- 定义日志存储的路径,不要配置相对路径 -->
+    <property name="FILE_PATH" value="/mnt/webapps/logs/spring-log.%d{yyyy-MM-dd}.%i.log"/>
+
+    <!-- 控制台输出日志 -->
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <!-- 日志级别过滤INFO以下 -->
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>INFO</level>
+        </filter>
+        <encoder>
+            <!-- 按照上面配置的LOG_PATTERN来打印日志 -->
+            <pattern>${LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+
+    <!--每天生成一个日志文件,保存30天的日志文件。rollingFile用来切分文件的 -->
+    <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+
+            <fileNamePattern>${FILE_PATH}</fileNamePattern>
+
+            <!-- keep 15 days' worth of history -->
+            <maxHistory>30</maxHistory>
+
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <!-- 日志文件的最大大小 -->
+                <maxFileSize>2MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+
+            <!-- 超出删除老文件 -->
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+
+        <encoder>
+            <pattern>${LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- project default level -->
+    <logger name="net.sh.rgface.serive" level="ERROR"/>
+
+    <!-- 日志输出级别 -->
+    <root level="INFO">
+        <appender-ref ref="console"/>
+        <appender-ref ref="rollingFile"/>
+    </root>
+</configuration>

+ 57 - 0
jeecg-boot-module-system/src/main/resources/logback-test.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="10 seconds">
+
+    <contextName>logback</contextName>
+
+
+    <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
+    <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
+
+    <!-- 定义日志存储的路径,不要配置相对路径 -->
+    <property name="FILE_PATH" value="/data/webapp/log/spring-log.%d{yyyy-MM-dd}.%i.log"/>
+
+    <!-- 控制台输出日志 -->
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <!-- 日志级别过滤INFO以下 -->
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>INFO</level>
+        </filter>
+        <encoder>
+            <!-- 按照上面配置的LOG_PATTERN来打印日志 -->
+            <pattern>${LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+
+    <!--每天生成一个日志文件,保存30天的日志文件。rollingFile用来切分文件的 -->
+    <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+
+            <fileNamePattern>${FILE_PATH}</fileNamePattern>
+
+            <!-- keep 15 days' worth of history -->
+            <maxHistory>30</maxHistory>
+
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <!-- 日志文件的最大大小 -->
+                <maxFileSize>2MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+
+            <!-- 超出删除老文件 -->
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+
+        <encoder>
+            <pattern>${LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- project default level -->
+    <logger name="net.sh.rgface.serive" level="ERROR"/>
+
+    <!-- 日志输出级别 -->
+    <root level="INFO">
+        <appender-ref ref="console"/>
+        <appender-ref ref="rollingFile"/>
+    </root>
+</configuration>

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

@@ -32,16 +32,6 @@ public class SampleTest {
     @Autowired
     private IAppiumTaskService appiumTaskService;
     @Test
-    public void testGetKuaishouId() {
-        jobService.loginTask(2L);
-    }
-
-    @Test
-    public void testKsDown() {
-        appiumTaskService.runTask(1, 1);
-    }
-
-    @Test
     public void testKs() throws InterruptedException {
         String url = "https://ad.e.kuaishou.com/#/welcome?redirectUrl=https%3A%2F%2Fad.e.kuaishou.com%2F%23%2Findex";
         System.getProperties().setProperty("webdriver.chrome.driver", chromeDriver);
@@ -109,19 +99,6 @@ public class SampleTest {
     }
 
     @Test
-    public void testCrawler() {
-        String account = "";
-        String password = "";
-        String creativeName = "";
-        //1:获取快手账号id
-        String ksId = jobService.loginTask(2L);
-        //2:绑定体验账号
-        boolean isbind = jobService.bindCreative(account, password, creativeName, ksId);
-        //3:转化
-        appiumTaskService.runTask(1, 1);
-    }
-
-    @Test
     public void testMq() {
         Sender sender = new Sender();
         sender.send();

+ 11 - 11
module-common/pom.xml

@@ -76,16 +76,16 @@
 
     </dependencies>
     <build>
-<!--
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <includeSystemScope>true</includeSystemScope>
-                </configuration>
-            </plugin>
-        </plugins>-->
+        <!--
+                <plugins>
+                    <plugin>
+                        <groupId>org.springframework.boot</groupId>
+                        <artifactId>spring-boot-maven-plugin</artifactId>
+                        <configuration>
+                            <includeSystemScope>true</includeSystemScope>
+                        </configuration>
+                    </plugin>
+                </plugins>-->
 
 
         <resources>
@@ -104,7 +104,6 @@
             </resource>
 
 
-
             <!-- 解决MyBatis配置文件引入问题 -->
             <resource>
                 <directory>src/main/java</directory>
@@ -119,5 +118,6 @@
                 <directory>src/main/resources</directory>
             </resource>
         </resources>
+
     </build>
 </project>

+ 55 - 55
module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialInfoServiceImpl.java

@@ -9,10 +9,7 @@ import cn.com.ctop.common.module.mapper.MaterialInfoMapper;
 import cn.com.ctop.common.module.mapper.MaterialParameterMapper;
 import cn.com.ctop.common.module.mapper.MaterialTagMapper;
 import cn.com.ctop.common.module.service.IMaterialInfoService;
-import cn.com.ctop.common.module.utils.Check;
-import cn.com.ctop.common.module.utils.LoadFileUtil;
-import cn.com.ctop.common.module.utils.ResultMapUtils;
-import cn.com.ctop.common.module.utils.StatusCode;
+import cn.com.ctop.common.module.utils.*;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -46,7 +43,7 @@ import java.util.regex.Pattern;
 @Slf4j
 @Service
 public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, MaterialInfo> implements IMaterialInfoService {
-    static ExecutorService executorService = Executors.newFixedThreadPool(5);
+    private static ExecutorService uploadExecutorService = Executors.newFixedThreadPool(5);
 
     @Override
     public MaterialInfo getMaterialInfoByCode(String code) {
@@ -148,7 +145,7 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
                     }
                 }
             }
-            getFile(info);
+            //  getFile(info);
             ResultMapUtils.setResultMap(resultMap, StatusCode.COMMON_SUCCESS.getCode());
         } catch (Exception e) {
             ResultMapUtils.setResultMap(resultMap, StatusCode.MATERIAL_UPLOAD_FAIL.getCode());
@@ -193,8 +190,13 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
         queryWrapper.orderByDesc("create_time");
         queryWrapper.last("limit 1");
         MaterialParameter materialParameter = materialParameterMapper.selectOne(queryWrapper);
+
         if (!Check.isNull(materialParameter)) {
             json.put("parameter", materialParameter);
+        } else {
+            MaterialParameter materialParameter1 = new MaterialParameter();
+            materialParameter1.setMaterialId(materialId);
+            json.put("parameter", materialParameter1);
         }
         JSONObject ascriptionJson = materialAscriptionMapper.selectByMaterialId(materialId);
         if (!Check.isNull(ascriptionJson)) {
@@ -250,59 +252,57 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
     private MaterialParameterMapper materialParameterMapper;
 
     public void getFile(MaterialInfo materialInfo) {
-        executorService.submit(new Runnable() {
+       /* uploadExecutorService.submit(new Runnable() {
             @Override
-            public void run() {
-                try {
-                    this.loadFile(materialInfo);
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
+            public void run() {*/
+        try {
+            System.err.println("开始获取素材基本信息");
+            System.err.println(materialInfo);
+            if (!Check.isNull(materialInfo)) {
+                String url = materialInfo.getUrl();
+                long l = System.currentTimeMillis();
+                //PropertiesUtils.getValue("kuaishou_config", "video_sava_path")
+                String localUrl = LoadFileUtil.downLoadFromUrl(url, PropertiesUtils.getValue("kuaishou_config", "video_sava_path"));
+                File file = new File(localUrl);
+                it.sauronsoftware.jave.Encoder encoder = new Encoder();
+                /*try {*/
+                it.sauronsoftware.jave.MultimediaInfo m = encoder.getInfo(file);
+                long duration = m.getDuration();
+                long secondDuration = duration / 1000;
+                MaterialParameter materialParameter = new MaterialParameter();
+                materialParameter.setMaterialId(materialInfo.getId());
+                materialParameter.setSecond(secondDuration); // 视频秒数
+                materialParameter.setFormat(m.getFormat()); // 视频格式
+                materialParameter.setWidth(String.valueOf(m.getVideo().getSize().getWidth()));// 视频宽
+                materialParameter.setHeight(String.valueOf(m.getVideo().getSize().getHeight()));// 视频高
+
+                FileInputStream fis = new FileInputStream(file);
+                FileChannel fc = fis.getChannel();
+                BigDecimal fileSize = new BigDecimal(fc.size());
+                String size = fileSize.divide(new BigDecimal(1048576), 2, RoundingMode.HALF_UP) + "MB";
+                materialParameter.setSize(size);
+
+                Map<String, Object> deleteMap = new HashMap<>();
+                deleteMap.put("material_id", materialInfo.getId());
+                materialParameterMapper.deleteByMap(deleteMap);
+
+                int insert = materialParameterMapper.insert(materialParameter);
+                if (insert > 0) {
+                    log.info("素材基本信息入库完成,用时:{} s", (System.currentTimeMillis() - l) / 1000);
 
-            private void loadFile(MaterialInfo materialInfo) throws IOException {
-                if (!Check.isNull(materialInfo)) {
-                    String url = materialInfo.getUrl();
-                    long l = System.currentTimeMillis();
-                    String localUrl = LoadFileUtil.downLoadFromUrl(url, "D:\\tets1\\video");
-                    File file = new File(localUrl);
-                    it.sauronsoftware.jave.Encoder encoder = new Encoder();
-                    try {
-                        it.sauronsoftware.jave.MultimediaInfo m = encoder.getInfo(file);
-                        long duration = m.getDuration();
-                        long secondDuration = duration / 1000;
-                        MaterialParameter materialParameter = new MaterialParameter();
-                        materialParameter.setMaterialId(materialInfo.getId());
-                        materialParameter.setSecond(secondDuration); // 视频秒数
-                        materialParameter.setFormat(m.getFormat()); // 视频格式
-                        materialParameter.setWidth(String.valueOf(m.getVideo().getSize().getWidth()));// 视频宽
-                        materialParameter.setHeight(String.valueOf(m.getVideo().getSize().getHeight()));// 视频高
-
-                        FileInputStream fis = new FileInputStream(file);
-                        FileChannel fc = fis.getChannel();
-                        BigDecimal fileSize = new BigDecimal(fc.size());
-                        String size = fileSize.divide(new BigDecimal(1048576), 2, RoundingMode.HALF_UP) + "MB";
-                        materialParameter.setSize(size);
-
-                        Map<String, Object> deleteMap = new HashMap<>();
-                        deleteMap.put("material_id", materialInfo.getId());
-                        materialParameterMapper.deleteByMap(deleteMap);
-
-                        int insert = materialParameterMapper.insert(materialParameter);
-                        if (insert > 0) {
-                            log.info("素材基本信息入库完成,用时:{} s", (System.currentTimeMillis() - l) / 1000);
-
-                        }
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    } finally {
-                        file.delete();
-                    }
                 }
-
-
+                System.err.println(2222222);
+               /* } catch (Exception e) {
+                    e.printStackTrace();
+                } *//*finally {
+                    file.delete();
+                }*/
             }
-        });
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+       /*     }
+        });*/
     }
 
 

+ 4 - 1
module-common/src/main/java/cn/com/ctop/common/module/utils/StatusCode.java

@@ -33,8 +33,11 @@ public enum StatusCode {
     KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL("此快手元素获取不到", -1003, false),
     KUAISHOU_CRAWLER_APP_MOBILE_CODE_IS_NULL("短信验证码未获取到", -1004, false),
     KUAISHOU_CRAWLER_APP_ELEMENT_DETAIL_ERROR("快手元素内容异常", -1005, false),
+    KUAISHOU_CRAWLER_APP_NO_ENABLED_DEVICE("暂无可用设备", -2001, false),
     KUAISHOU_CRAWLER_APP_SUCCESS("爬虫运行正常", 0, true),
-    KUAISHOU_CRAWLER_APP_TASK_END("爬虫任务运行结束", 1, true);
+    KUAISHOU_CRAWLER_APP_TASK_END("爬虫任务运行结束", 1, true),
+    KUAISHOU_CRAWLER_APP_JOB_StART("任务开始执行开始", 0, true),
+    KUAISHOU_CRAWLER_APP_JOB_END("任务运行结束", 1, true);
     private String desc;
     private int code;
     private boolean flag;

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

@@ -1,7 +1,5 @@
 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.AppiumJob;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumJobService;
 import com.alibaba.fastjson.JSON;
@@ -32,7 +30,6 @@ 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;
 
@@ -247,25 +244,4 @@ public class AppiumJobController {
         }
         return Result.ok("文件导入失败!");
     }
-
-    @PostMapping("runTask")
-    public Map<String, Object> runTask(Long jobId, Long num) {
-        Map<String, Object> result = new HashMap<>();
-        if (null == jobId || jobId == 0 || null == num || num == 0) {
-            ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR.getCode());
-            return result;
-        }
-        try {
-            appiumJobService.runTask(jobId, num);
-            ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
-        } catch (Exception e) {
-            ResultMapUtils.setResultMap(result, StatusCode.COMMON_SERVER_ERROR.getCode());
-        }
-        return result;
-    }
-
-    @PostMapping("startTask")
-    public Map<String, Object> startTask(String account, String password, String creativeName, Integer num) {
-        return appiumJobService.startTask(account, password, creativeName, num);
-    }
 }

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

@@ -209,18 +209,6 @@ public class AppiumTaskController {
         return mv;
     }
 
-    @RequestMapping(value = "/run", method = RequestMethod.POST)
-    public Result<?> run(HttpServletRequest request, HttpServletResponse response, Integer taskId, Integer deviceId) {
-        Thread thread = new Thread() {
-            @Override
-            public void run() {
-                appiumTaskService.runTask(taskId, deviceId);
-            }
-        };
-        thread.start();
-        return Result.ok("任务已启动");
-    }
-
     @RequestMapping(value = "/run/login", method = RequestMethod.POST)
     public Result<?> runLogin(HttpServletRequest request, HttpServletResponse response, Integer taskId, Integer deviceId) {
         Thread thread = new Thread() {

+ 14 - 103
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumTaskLogController.java

@@ -1,42 +1,21 @@
 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.AppiumTaskLog;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumTaskLogService;
-
-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 io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 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.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
 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 java.util.Arrays;
 
 /**
  * 任务日志表
@@ -69,9 +48,9 @@ public class AppiumTaskLogController {
                                                       @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                                       @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                       HttpServletRequest req) {
-        Result<IPage<AppiumTaskLog>> result = new Result<IPage<AppiumTaskLog>>();
+        Result<IPage<AppiumTaskLog>> result = new Result<>();
         QueryWrapper<AppiumTaskLog> queryWrapper = QueryGenerator.initQueryWrapper(appiumTaskLog, req.getParameterMap());
-        Page<AppiumTaskLog> page = new Page<AppiumTaskLog>(pageNo, pageSize);
+        Page<AppiumTaskLog> page = new Page<>(pageNo, pageSize);
         IPage<AppiumTaskLog> pageList = appiumTaskLogService.page(page, queryWrapper);
         result.setSuccess(true);
         result.setResult(pageList);
@@ -88,7 +67,7 @@ public class AppiumTaskLogController {
     @ApiOperation(value = "任务日志表-添加", notes = "任务日志表-添加")
     @PostMapping(value = "/add")
     public Result<AppiumTaskLog> add(@RequestBody AppiumTaskLog appiumTaskLog) {
-        Result<AppiumTaskLog> result = new Result<AppiumTaskLog>();
+        Result<AppiumTaskLog> result = new Result<>();
         try {
             appiumTaskLogService.save(appiumTaskLog);
             result.success("添加成功!");
@@ -109,7 +88,7 @@ public class AppiumTaskLogController {
     @ApiOperation(value = "任务日志表-编辑", notes = "任务日志表-编辑")
     @PutMapping(value = "/edit")
     public Result<AppiumTaskLog> edit(@RequestBody AppiumTaskLog appiumTaskLog) {
-        Result<AppiumTaskLog> result = new Result<AppiumTaskLog>();
+        Result<AppiumTaskLog> result = new Result<>();
         AppiumTaskLog appiumTaskLogEntity = appiumTaskLogService.getById(appiumTaskLog.getId());
         if (appiumTaskLogEntity == null) {
             result.error500("未找到对应实体");
@@ -152,7 +131,7 @@ public class AppiumTaskLogController {
     @ApiOperation(value = "任务日志表-批量删除", notes = "任务日志表-批量删除")
     @DeleteMapping(value = "/deleteBatch")
     public Result<AppiumTaskLog> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
-        Result<AppiumTaskLog> result = new Result<AppiumTaskLog>();
+        Result<AppiumTaskLog> result = new Result<>();
         if (ids == null || "".equals(ids.trim())) {
             result.error500("参数不识别!");
         } else {
@@ -172,7 +151,7 @@ public class AppiumTaskLogController {
     @ApiOperation(value = "任务日志表-通过id查询", notes = "任务日志表-通过id查询")
     @GetMapping(value = "/queryById")
     public Result<AppiumTaskLog> queryById(@RequestParam(name = "id", required = true) String id) {
-        Result<AppiumTaskLog> result = new Result<AppiumTaskLog>();
+        Result<AppiumTaskLog> result = new Result<>();
         AppiumTaskLog appiumTaskLog = appiumTaskLogService.getById(id);
         if (appiumTaskLog == null) {
             result.error500("未找到对应实体");
@@ -182,72 +161,4 @@ public class AppiumTaskLogController {
         }
         return result;
     }
-
-    /**
-     * 导出excel
-     *
-     * @param request
-     * @param response
-     */
-    @RequestMapping(value = "/exportXls")
-    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
-        // Step.1 组装查询条件
-        QueryWrapper<AppiumTaskLog> queryWrapper = null;
-        try {
-            String paramsStr = request.getParameter("paramsStr");
-            if (oConvertUtils.isNotEmpty(paramsStr)) {
-                String deString = URLDecoder.decode(paramsStr, "UTF-8");
-                AppiumTaskLog appiumTaskLog = JSON.parseObject(deString, AppiumTaskLog.class);
-                queryWrapper = QueryGenerator.initQueryWrapper(appiumTaskLog, request.getParameterMap());
-            }
-        } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
-        }
-
-        //Step.2 AutoPoi 导出Excel
-        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
-        List<AppiumTaskLog> pageList = appiumTaskLogService.list(queryWrapper);
-        //导出文件名称
-        mv.addObject(NormalExcelConstants.FILE_NAME, "任务日志表列表");
-        mv.addObject(NormalExcelConstants.CLASS, AppiumTaskLog.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<AppiumTaskLog> listAppiumTaskLogs = ExcelImportUtil.importExcel(file.getInputStream(), AppiumTaskLog.class, params);
-                appiumTaskLogService.saveBatch(listAppiumTaskLogs);
-                return Result.ok("文件导入成功!数据行数:" + listAppiumTaskLogs.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("文件导入失败!");
-    }
-
 }

+ 1 - 1
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumTaskItem.java

@@ -38,7 +38,7 @@ public class AppiumTaskItem {
 	 */
 	@Excel(name = "任务ID", width = 15)
 	@ApiModelProperty(value = "任务ID")
-	private Integer taskId;
+	private Long taskId;
 	/**
 	 * 父ID
 	 */

+ 5 - 3
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumTaskLog.java

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
 import org.jeecgframework.poi.excel.annotation.Excel;
 
 import java.util.Date;
@@ -31,13 +32,13 @@ public class AppiumTaskLog {
      */
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "主键")
-    private Integer id;
+    private Long id;
     /**
      * 任务ID
      */
     @Excel(name = "任务ID", width = 15)
     @ApiModelProperty(value = "任务ID")
-    private Integer taskId;
+    private Long taskId;
     /**
      * 设备ID
      */
@@ -66,8 +67,9 @@ public class AppiumTaskLog {
      * 状态
      */
     @Excel(name = "状态", width = 15)
+    @Dict(dicCode = "appium_ks_log_status")
     @ApiModelProperty(value = "状态")
-    private Integer status;
+    private String status;
     /**
      * 创建时间
      */

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

@@ -11,4 +11,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IAppiumDeviceService extends IService<AppiumDevice> {
 
+    AppiumDevice getEnabled();
 }

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

@@ -1,10 +1,10 @@
 package cn.com.ctop.crawler.modules.appium.service;
 
+import cn.com.ctop.crawler.modules.appium.entity.AppiumDevice;
 import cn.com.ctop.crawler.modules.appium.entity.AppiumJob;
+import cn.com.ctop.crawler.modules.appium.entity.AppiumTaskLog;
 import com.baomidou.mybatisplus.extension.service.IService;
 
-import java.util.Map;
-
 /**
  * 爬虫调度任务
  *
@@ -14,13 +14,11 @@ import java.util.Map;
  */
 public interface IAppiumJobService extends IService<AppiumJob> {
 
-    void runTask(Long jobId, Long num);
-
-    String loginTask(Long taskId);
+    String loginTask(Long taskId, AppiumDevice device);
 
     boolean bindCreative(String account, String password, String creativeName, String ksId);
 
-    Map<String, Object> startTask(String account, String password, String creativeName, Integer num);
-
     boolean refreshWebPhone();
+
+    void updateStatus(AppiumDevice appiumDevice, AppiumTaskLog log, Integer logStatus, Integer deviceStatus);
 }

+ 1 - 1
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumTaskItemService.java

@@ -19,5 +19,5 @@ public interface IAppiumTaskItemService extends IService<AppiumTaskItem> {
      * @param parentId
      * @return
      */
-    List<AppiumTaskItem> initTaskItemList(Integer taskId, Integer parentId);
+    List<AppiumTaskItem> initTaskItemList(Long taskId, Integer parentId);
 }

+ 1 - 1
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumTaskService.java

@@ -16,7 +16,7 @@ public interface IAppiumTaskService extends IService<AppiumTask> {
      * @param taskId
      * @param deviceId
      */
-    public void runTask(Integer taskId, Integer deviceId);
+    public void runTask(Long taskId, Integer deviceId, String publishName);
 
     public void runKuaishouLoginTask();
 }

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

@@ -3,6 +3,7 @@ package cn.com.ctop.crawler.modules.appium.service.impl;
 import cn.com.ctop.crawler.modules.appium.entity.AppiumDevice;
 import cn.com.ctop.crawler.modules.appium.mapper.AppiumDeviceMapper;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumDeviceService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -16,4 +17,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 @Service
 public class AppiumDeviceServiceImpl extends ServiceImpl<AppiumDeviceMapper, AppiumDevice> implements IAppiumDeviceService {
 
+    @Override
+    public AppiumDevice getEnabled() {
+        QueryWrapper<AppiumDevice> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("status", 1).orderByDesc("id").last("limit 1");
+        return getOne(queryWrapper);
+    }
 }

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

@@ -7,6 +7,7 @@ import cn.com.ctop.crawler.modules.appium.entity.*;
 import cn.com.ctop.crawler.modules.appium.mapper.AppiumJobMapper;
 import cn.com.ctop.crawler.modules.appium.mapper.AppiumTaskItemMapper;
 import cn.com.ctop.crawler.modules.appium.mapper.AppiumTaskLogMapper;
+import cn.com.ctop.crawler.modules.appium.mapper.AppiumTaskMapper;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumDeviceService;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumJobService;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumTaskService;
@@ -27,7 +28,6 @@ import org.springframework.stereotype.Service;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Stack;
 
 /**
  * 爬虫调度任务
@@ -40,7 +40,7 @@ import java.util.Stack;
 @Service
 public class AppiumJobServiceImpl extends ServiceImpl<AppiumJobMapper, AppiumJob> implements IAppiumJobService {
     @Autowired
-    private AppiumJobMapper appiumJobMapper;
+    private AppiumTaskMapper taskMapper;
     @Autowired
     private AppiumTaskItemMapper taskItemMapper;
     @Value("${jeecg.path.chrome-driver}")
@@ -51,19 +51,12 @@ public class AppiumJobServiceImpl extends ServiceImpl<AppiumJobMapper, AppiumJob
     private AppiumTaskLogMapper appiumTaskLogMapper;
 
     @Override
-    public void runTask(Long jobId, Long num) {
-        //TODO 需要考虑多个任务并列
-        //1:根据jobId查询所属执行task信息
-        List<AppiumTask> taskList = appiumJobMapper.getTaskByJobId(jobId);
-    }
-
-    @Override
-    public String loginTask(Long taskId) {
+    public String loginTask(Long taskId, AppiumDevice device) {
         String kuaishouId = null;
         try {
+            AppiumTask task = taskMapper.selectById(taskId);
             AppiumUtil appiumUtil = new AppiumUtil();
-            AndroidDriver androidDriver = appiumUtil.initAndroidDriver("http://39.106.184.70:4723/wd/hub", "183.131.157.66:10005", "com.smile.gifmaker", "com.yxcorp.gifshow.HomeActivity");
-//            appiumUtil.loginTask(androidDriver, null, null);
+            AndroidDriver androidDriver = appiumUtil.initAndroidDriver("http://39.106.184.70:4723/wd/hub", device.getIp() + ":" + device.getPort(), task.getAppPackage(), task.getAppActivity());
             Map<String, Object> result = new HashMap<>();
             ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
             boolean loop = true;
@@ -162,56 +155,12 @@ public class AppiumJobServiceImpl extends ServiceImpl<AppiumJobMapper, AppiumJob
     private IAppiumTaskService appiumTaskService;
 
     @Override
-    public Map<String, Object> startTask(String account, String password, String creativeName, Integer num) {
-        Map<String, Object> result = new HashMap<>();
-        int i = 0;
-        while (i < num) {
-            if (i > num) {
-                break;
-            }
-            //获取手机设备信息
-            AppiumDevice appiumDevice = appiumDeviceService.getById(2L);
-            appiumDevice.setStatus(2);
-            appiumDeviceService.updateById(appiumDevice);
-            AppiumTaskLog log = new AppiumTaskLog();
-            log.setDeviceId(2);
-            log.setDeviceIp(appiumDevice.getIp());
-            log.setDevicePort(appiumDevice.getPort());
-            log.setStatus(1);
-            log.setTaskId(1);
-            log.setTaskName("快手刷量任务");
-            appiumTaskLogMapper.insert(log);
-            log.setId(log.getId());
-            try {
-                //一键新机
-                boolean success = refreshWebPhone();
-                String ksId = loginTask(2L);
-                if (null == ksId) {
-                    updateStatus(appiumDevice, log, -1, 1);
-                    continue;
-                }
-                boolean isBind = bindCreative(account, password, creativeName, ksId);
-                if (!isBind) {
-                    updateStatus(appiumDevice, log, -2, 1);
-                    continue;
-                }
-                appiumTaskService.runTask(1, 1);
-                i++;
-            } catch (Exception e) {
-                updateStatus(appiumDevice, log, -3, 1);
-                continue;
-            }
-        }
-        return result;
-    }
-
-    @Override
     public boolean refreshWebPhone() {
         boolean success = false;
         String url = "https://lcloud.longene.com.cn/";
         System.getProperties().setProperty("webdriver.chrome.driver", chromeDriver);
         ChromeOptions chromeOptions = new ChromeOptions();
-//        chromeOptions.addArguments("--headless");
+        chromeOptions.addArguments("--headless");
         chromeOptions.addArguments("--incognito");
         chromeOptions.addArguments("--disable-gpu");
 //        chromeOptions.addArguments("--no-sandbox");
@@ -256,44 +205,11 @@ public class AppiumJobServiceImpl extends ServiceImpl<AppiumJobMapper, AppiumJob
         }
     }
 
-    private void updateStatus(AppiumDevice appiumDevice, AppiumTaskLog log, Integer logStatus, Integer deviceStatus) {
-        log.setStatus(3);
+    @Override
+    public void updateStatus(AppiumDevice appiumDevice, AppiumTaskLog log, Integer logStatus, Integer deviceStatus) {
+        log.setStatus(logStatus + "");
         appiumTaskLogMapper.updateById(log);
-        appiumDevice.setStatus(1);
+        appiumDevice.setStatus(deviceStatus);
         appiumDeviceService.updateById(appiumDevice);
     }
-
-    public static boolean isValid(String s) {
-        if (null == s || s.length() <= 0) {
-            return true;
-        }
-        if (s.length() % 2 == 1) {
-            return false;
-        }
-        Stack<Character> stack = new Stack<>();
-        for (int i = 0; i < s.length(); i++) {
-            char getchar = s.charAt(i);
-            if (getchar == '(' || getchar == '{' || getchar == '[') {
-                stack.push(getchar);
-            }
-            if (getchar == ')' || getchar == '}' || getchar == ']') {
-                if (stack.empty()) {
-                    return false;
-                }
-                char sufix = stack.pop();
-                if ((getchar == ')' && sufix != '(') || (getchar == '}' && sufix != '{') || (getchar == ']' && sufix != '[')) {
-                    stack.push(sufix);
-                }
-            }
-        }
-        if (stack.empty()) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    public static void main(String[] args) {
-        System.out.println(isValid("[]()[]"));
-    }
 }

+ 1 - 1
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumTaskItemServiceImpl.java

@@ -18,7 +18,7 @@ import java.util.List;
 @Service
 public class AppiumTaskItemServiceImpl extends ServiceImpl<AppiumTaskItemMapper, AppiumTaskItem> implements IAppiumTaskItemService {
     @Override
-    public List<AppiumTaskItem> initTaskItemList(Integer taskId, Integer parentId) {
+    public List<AppiumTaskItem> initTaskItemList(Long taskId, Integer parentId) {
         QueryWrapper<AppiumTaskItem> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("task_id", taskId);
         if (parentId == null) {

+ 5 - 5
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumTaskServiceImpl.java

@@ -49,7 +49,7 @@ public class AppiumTaskServiceImpl extends ServiceImpl<AppiumTaskMapper, AppiumT
     }
 
     @Override
-    public void runTask(Integer taskId, Integer deviceId) {
+    public void runTask(Long taskId, Integer deviceId, String publishName) {
         //获取当前需要执行的任务信息
         AppiumTask task = this.getById(taskId);
         //获取手机设备信息
@@ -60,7 +60,7 @@ public class AppiumTaskServiceImpl extends ServiceImpl<AppiumTaskMapper, AppiumT
         log.setDeviceId(deviceId);
         log.setDeviceIp(appiumDevice.getIp());
         log.setDevicePort(appiumDevice.getPort());
-        log.setStatus(1);
+        log.setStatus(1 + "");
         log.setTaskId(taskId);
         log.setTaskName(task.getTaskName());
         appiumTaskLogMapper.insert(log);
@@ -72,16 +72,16 @@ public class AppiumTaskServiceImpl extends ServiceImpl<AppiumTaskMapper, AppiumT
             AndroidDriver androidDriver = appiumUtil.initAndroidDriver(groupControlPath + ":" + groupControlPort + "/wd/hub", appiumDevice.getIp() + ":" + appiumDevice.getPort(), task.getAppPackage(), task.getAppActivity());
             if (taskItemList != null && taskItemList.size() > 0) {
                 for (AppiumTaskItem appiumTaskItem : taskItemList) {
-                    appiumUtil.runTask(androidDriver, appiumTaskItem, null);
+                    appiumUtil.runTask(androidDriver, appiumTaskItem, null, publishName);
                 }
-                log.setStatus(2);
+                log.setStatus(2 + "");
                 appiumTaskLogMapper.updateById(log);
                 appiumDevice.setStatus(1);
                 iAppiumDeviceService.updateById(appiumDevice);
             }
         } catch (Exception e) {
             e.printStackTrace();
-            log.setStatus(3);
+            log.setStatus(3 + "");
             appiumTaskLogMapper.updateById(log);
             appiumDevice.setStatus(1);
             iAppiumDeviceService.updateById(appiumDevice);

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

@@ -701,7 +701,7 @@ public class AppiumUtil {
         return getText;
     }
 
-    public String runTask(AndroidDriver androidDriver, AppiumTaskItem appiumTaskItem, WebElement loopElement) throws Exception {
+    public String runTask(AndroidDriver androidDriver, AppiumTaskItem appiumTaskItem, WebElement loopElement, String publishName) throws Exception {
         String getText = null;
         if (appiumTaskItem != null) {
             System.out.println(new Gson().toJson(appiumTaskItem));
@@ -729,7 +729,7 @@ public class AppiumUtil {
                                     return getText;
                                 }
                             } else if (appiumTaskItem.getTextEqualType().equals("start")) {
-                                boolean check = checkAdvertiser(androidDriver, appiumTaskItem.getTextEqualKey());
+                                boolean check = checkAdvertiser(androidDriver, publishName);
                                 if (!check) {
                                     return getText;
                                 }
@@ -760,7 +760,7 @@ public class AppiumUtil {
                         List<AppiumTaskItem> subTask = appiumTaskItem.getSubList();
                         if (subTask != null && subTask.size() > 0) {
                             for (AppiumTaskItem task : subTask) {
-                                runTask(androidDriver, task, element);
+                                runTask(androidDriver, task, element, publishName);
                             }
                         }
                     } else {
@@ -769,7 +769,7 @@ public class AppiumUtil {
                             if (appiumTaskItem.getLoopRate() != null && appiumTaskItem.getLoopRate() > 0) {
                                 Thread.sleep(appiumTaskItem.getLoopRate());
                             }
-                            runTask(androidDriver, appiumTaskItem, element);
+                            runTask(androidDriver, appiumTaskItem, element, publishName);
                         }
                         //非必须执行情况下
                         if (appiumTaskItem.getClickType() != null && appiumTaskItem.getClickType().equals("point")) {
@@ -796,7 +796,7 @@ public class AppiumUtil {
                                 List<AppiumTaskItem> subTask = appiumTaskItem.getSubList();
                                 if (subTask != null && subTask.size() > 0) {
                                     for (AppiumTaskItem task : subTask) {
-                                        runTask(androidDriver, task, element);
+                                        runTask(androidDriver, task, element, publishName);
                                     }
                                 }
                             }

+ 1 - 1
module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/impl/MaterialUploadServiceImpl.java

@@ -132,7 +132,7 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
                 continue;
             }
             try {
-                String localUrl = LoadFileUtil.downLoadFromUrl(materialInfo.getUrl(), "D:\\tets1\\video");
+                String localUrl = LoadFileUtil.downLoadFromUrl(materialInfo.getUrl(), PropertiesUtils.getValue("kuaishou_config", "video_sava_path"));
                 FileSystemResource resource = new FileSystemResource(new File(localUrl));
                 Map<String, String> headerMap = new HashMap<>();
                 headerMap.put("Content-Type", "multipart/form-data");

+ 3 - 7
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java

@@ -13,7 +13,6 @@ import cn.com.ctop.kuaishou.modules.batch.service.*;
 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 cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportDailyAccountMapper;
 import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportDailyCampaignMapper;
 import cn.com.ctop.kuaishou.modules.report.service.*;
 import com.alibaba.fastjson.JSONArray;
@@ -59,14 +58,12 @@ import java.util.concurrent.Executors;
 @Slf4j
 @Service
 public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
-    @Autowired
-    private KuaishouReportDailyAccountMapper dailyAccountMapper;
+
     @Autowired
     KuaishouReportDailyCampaignMapper dailyCampaignMapper;
     @Autowired
     private KuaiShouCampaignCreateMapper kuaiShouCampaignCreateMapper;
-    @Autowired
-    private KuaiShouCampaignMapper campaignMapper;
+
     @Autowired
     private KuaiShouGroupMapper groupMapper;
     @Autowired
@@ -85,8 +82,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
     private KuaiShouVideoUploadMapper videoUploadMapper;
     @Autowired
     private KuaiShouVideoMapper kuaiShouVideoMapper;
-    @Autowired
-    private KuaiShouVideoGetMapper videoGetMapper;
+
     @Autowired
     private KuaiShouImageGetMapper imageGetMapper;
     @Autowired

+ 0 - 2
module-kuaishou/src/main/resources/log4j.properties

@@ -1,2 +0,0 @@
-log4j.logger.org.apache.http=debug
-log4j.logger.httpclient.wire=debug

+ 0 - 19
module-kuaishou/src/main/resources/logback.xml

@@ -1,19 +0,0 @@
-<configuration debug="true">
-    <logger name="org.apache" level="DEBUG"/>
-    <logger name="org.apache.http.wire" level="DEBUG"/>
-    <logger name="org.apache.http.headers" level="DEBUG"/>
-
-    <property name="CONSOLE_LOG_PATTERN"
-              value="%date{yyyy-MM-dd HH:mm:ss}  %highlight(%-5level) %magenta(%-4relative) --- [%yellow(%15.15thread)] %cyan(%-40.40logger{39}) : %msg%n"/>
-
-
-    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
-        </encoder>
-    </appender>
-
-    <root level="ERROR">
-        <appender-ref ref="STDOUT"/>
-    </root>
-</configuration>