Przeglądaj źródła

Merge branch 'test' into test-V2

# Conflicts:
#	jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java
#	jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/AdvertiserController.java
#	jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/BindAccountAuthController.java
#	jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CallbackController.java
#	jeecg-boot-module-system/src/main/java/org/jeecg/modules/fileupload/controller/FileController.java
#	jeecg-boot-module-system/src/main/resources/application-prod.yml
yumeng 5 lat temu
rodzic
commit
aa82e118ed
100 zmienionych plików z 2919 dodań i 1805 usunięć
  1. 69 70
      jeecg-boot-base-common/src/main/java/org/jeecg/common/system/query/QueryGenerator.java
  2. 15 21
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/DateUtils.java
  3. 4 4
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/oConvertUtils.java
  4. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/JeecgApplication.java
  5. 19 16
      jeecg-boot-module-system/src/main/java/org/jeecg/config/RedisConfig.java
  6. 2 1
      jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java
  7. 3 2
      jeecg-boot-module-system/src/main/java/org/jeecg/config/WebMvcConfiguration.java
  8. 3 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/AdvertiserController.java
  9. 2 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/BindAccountAuthController.java
  10. 3 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/BindAccountLoginController.java
  11. 7 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceAdvertiserPostController.java
  12. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CallbackController.java
  13. 4 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CtopOauthTokenController.java
  14. 3 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/FileInfoController.java
  15. 4 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/KuaishouAdvertiserController.java
  16. 4 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/KuaishouAppAccountController.java
  17. 2 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/SourceFileController.java
  18. 2 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UserAllocationController.java
  19. 4 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/YardController.java
  20. 12 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceHourlyReportLoadJob.java
  21. 60 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceMaterialsLoadJob.java
  22. 2 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouDailyReportLoadJob.java
  23. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouHourlyReportLoadJob.java
  24. 1 6
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouMaterialsLoadJob.java
  25. 24 6
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CreateInternalServiceImpl.java
  26. 3 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/test/controller/JeecgDemoController.java
  27. 14 14
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/test/controller/JeecgOrderMainController.java
  28. 30 41
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/test/controller/JoaDemoController.java
  29. 4 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/fileupload/service/IUploadService.java
  30. 2 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/media/controller/MediaController.java
  31. 16 25
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/controller/SysMessageController.java
  32. 3 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/job/SendMsgJob.java
  33. 133 129
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/domain/RedisInfo.java
  34. 5 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ngalain/aop/LogRecordAspect.java
  35. 30 42
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java
  36. 8 19
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java
  37. 2 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/LoginController.java
  38. 19 54
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictController.java
  39. 9 5
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java
  40. 51 75
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java
  41. 34 33
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/TreeModel.java
  42. 13 14
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java
  43. 5 0
      jeecg-boot-module-system/src/main/resources/application-dev.yml
  44. 5 10
      jeecg-boot-module-system/src/main/resources/application-prod.yml
  45. 4 0
      jeecg-boot-module-system/src/main/resources/application-test.yml
  46. 4 4
      jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei
  47. 3 184
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  48. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/MaterialInfo.java
  49. 15 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/CtopOauthTokenMapper.java
  50. 19 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IBindAccountAuthService.java
  51. 6 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IBindAccountLoginService.java
  52. 2 1
      module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialInfoService.java
  53. 0 6
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/CtopOauthTokenServiceImpl.java
  54. 8 4
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/FileInfoServiceImpl.java
  55. 20 1
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialInfoServiceImpl.java
  56. 2 2
      module-common/src/main/java/cn/com/ctop/common/module/utils/Base64Utils.java
  57. 4 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/CsvUtils.java
  58. 0 4
      module-common/src/main/java/cn/com/ctop/common/module/utils/FileUploadTool.java
  59. 9 12
      module-common/src/main/java/cn/com/ctop/common/module/utils/HttpClientUtils.java
  60. 1 3
      module-common/src/main/java/cn/com/ctop/common/module/utils/HttpUtils2.java
  61. 2 1
      module-common/src/main/java/cn/com/ctop/common/module/utils/JsonUtil.java
  62. 4 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/OSSUtils.java
  63. 4 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/PropertiesUtils.java
  64. 8 1
      module-common/src/main/java/cn/com/ctop/common/module/utils/StatusCode.java
  65. 1 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/StringUtils.java
  66. 4 1
      module-common/src/main/java/cn/com/ctop/common/module/utils/TransfMediaTool.java
  67. 265 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumJobBindTaskInfoController.java
  68. 266 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumJobController.java
  69. 11 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumTaskController.java
  70. 17 19
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/controller/AppiumTaskItemController.java
  71. 57 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumJob.java
  72. 63 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumJobBindTaskInfo.java
  73. 10 7
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/entity/AppiumTaskItem.java
  74. 15 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/AppiumJobBindTaskInfoMapper.java
  75. 21 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/AppiumJobMapper.java
  76. 4 3
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/AppiumTaskItemMapper.java
  77. 5 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/xml/AppiumJobBindTaskInfoMapper.xml
  78. 11 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/xml/AppiumJobMapper.xml
  79. 19 2
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/xml/AppiumTaskItemMapper.xml
  80. 15 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumJobBindTaskInfoService.java
  81. 18 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumJobService.java
  82. 8 1
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumTaskItemService.java
  83. 8 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/IAppiumTaskService.java
  84. 19 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumJobBindTaskInfoServiceImpl.java
  85. 79 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumJobServiceImpl.java
  86. 3 5
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumTaskItemServiceImpl.java
  87. 22 10
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/service/impl/AppiumTaskServiceImpl.java
  88. 669 123
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/core/util/AppiumUtil.java
  89. 2 1
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/core/util/FateadmUtil.java
  90. 42 22
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/core/util/KuaimiUtil.java
  91. 3 229
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/log/controller/CrawlerLogController.java
  92. 461 524
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/test/AppiumTest.java
  93. 19 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/app/mapper/AppAdMapper.java
  94. 15 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/app/service/IAppAdService.java
  95. 4 2
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/app/service/impl/KuaishouAppServiceImpl.java
  96. 2 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaiShouActionBarTextController.java
  97. 2 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaiShouAdvertiserBaseInfoController.java
  98. 2 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaiShouAppCreateController.java
  99. 2 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaiShouAppInfoController.java
  100. 0 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaiShouAppListController.java

+ 69 - 70
jeecg-boot-base-common/src/main/java/org/jeecg/common/system/query/QueryGenerator.java

@@ -24,9 +24,9 @@ import java.util.regex.Pattern;
 
 @Slf4j
 public class QueryGenerator {
-	
+
 	public static final String SQL_RULES_COLUMN = "SQL_RULES_COLUMN";
-	
+
 	private static final String BEGIN = "_begin";
 	private static final String END = "_end";
 	private static final String STAR = "*";
@@ -34,13 +34,13 @@ public class QueryGenerator {
 	private static final String NOT_EQUAL = "!";
 	/**高级查询前端传来的参数名*/
 	private static final String SUPER_QUERY_PARAMS = "superQueryParams";
-	
+
 	/**排序列*/
 	private static final String ORDER_COLUMN = "column";
 	/**排序方式*/
 	private static final String ORDER_TYPE = "order";
 	private static final String ORDER_TYPE_ASC = "ASC";
-	
+
 	/**时间格式化 */
 	private static final ThreadLocal<SimpleDateFormat> local = new ThreadLocal<SimpleDateFormat>();
 	private static SimpleDateFormat getTime(){
@@ -51,7 +51,7 @@ public class QueryGenerator {
 		}
 		return time;
 	}
-	
+
 	/**
 	 * 获取查询条件构造器QueryWrapper实例 通用查询条件已被封装完成
 	 * @param searchObj 查询实体
@@ -65,35 +65,35 @@ public class QueryGenerator {
 		log.debug("---查询条件构造器初始化完成,耗时:"+(System.currentTimeMillis()-start)+"毫秒----");
 		return queryWrapper;
 	}
-	
+
 	/**
 	 * 组装Mybatis Plus 查询条件
-	 * <p>使用此方法 需要有如下几点注意:   
+     * <p>使用此方法 需要有如下几点注意:
 	 * <br>1.使用QueryWrapper 而非LambdaQueryWrapper;
-	 * <br>2.实例化QueryWrapper时不可将实体传入参数   
+     * <br>2.实例化QueryWrapper时不可将实体传入参数
 	 * <br>错误示例:如QueryWrapper<JeecgDemo> queryWrapper = new QueryWrapper<JeecgDemo>(jeecgDemo);
 	 * <br>正确示例:QueryWrapper<JeecgDemo> queryWrapper = new QueryWrapper<JeecgDemo>();
 	 * <br>3.也可以不使用这个方法直接调用 {@link #initQueryWrapper}直接获取实例
 	 */
 	public static void installMplus(QueryWrapper<?> queryWrapper,Object searchObj,Map<String, String[]> parameterMap) {
-		
+
 		/*
 		 * 注意:权限查询由前端配置数据规则 当一个人有多个所属部门时候 可以在规则配置包含条件 orgCode 包含 #{sys_org_code}
-		但是不支持在自定义SQL中写orgCode in #{sys_org_code} 
+		但是不支持在自定义SQL中写orgCode in #{sys_org_code}
 		当一个人只有一个部门 就直接配置等于条件: orgCode 等于 #{sys_org_code} 或者配置自定义SQL: orgCode = '#{sys_org_code}'
 		*/
-		
+
 		//区间条件组装 模糊查询 高级查询组装 简单排序 权限查询
 		PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(searchObj);
 		Map<String,SysPermissionDataRule> ruleMap = getRuleMap();
-		
+
 		//权限规则自定义SQL表达式
 		for (String c : ruleMap.keySet()) {
 			if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){
 				queryWrapper.and(i ->i.apply(getSqlRuleValue(ruleMap.get(c).getRuleValue())));
 			}
 		}
-		
+
 		String name, type;
 		for (int i = 0; i < origDescriptors.length; i++) {
 			//aliasName = origDescriptors[i].getName();  mybatis  不存在实体属性 不用处理别名的情况
@@ -103,25 +103,25 @@ public class QueryGenerator {
 				if (judgedIsUselessField(name)|| !PropertyUtils.isReadable(searchObj, name)) {
 					continue;
 				}
-				
+
 				//数据权限查询
 				if(ruleMap.containsKey(name)) {
 					addRuleToQueryWrapper(ruleMap.get(name), name, origDescriptors[i].getPropertyType(), queryWrapper);
 				}
-				
+
 				// 添加 判断是否有区间值
 				String endValue = null,beginValue = null;
 				if (parameterMap != null && parameterMap.containsKey(name + BEGIN)) {
 					beginValue = parameterMap.get(name + BEGIN)[0].trim();
 					addQueryByRule(queryWrapper, name, type, beginValue, QueryRuleEnum.GE);
-					
-				}
+
+                }
 				if (parameterMap != null && parameterMap.containsKey(name + END)) {
 					endValue = parameterMap.get(name + END)[0].trim();
 					addQueryByRule(queryWrapper, name, type, endValue, QueryRuleEnum.LE);
 				}
-				
-				//判断单值  参数带不同标识字符串 走不同的查询
+
+                //判断单值  参数带不同标识字符串 走不同的查询
 				//TODO 这种前后带逗号的支持分割后模糊查询需要否 使多选字段的查询生效
 				Object value = PropertyUtils.getSimpleProperty(searchObj, name);
 				if (null != value && value.toString().startsWith(COMMA) && value.toString().endsWith(COMMA)) {
@@ -145,18 +145,18 @@ public class QueryGenerator {
 					value = replaceValue(rule,value);
 					addEasyQuery(queryWrapper, name, rule, value);
 				}
-				
-			} catch (Exception e) {
+
+            } catch (Exception e) {
 				log.error(e.getMessage(), e);
 			}
 		}
-		// 排序逻辑 处理 
+        // 排序逻辑 处理
 		doMultiFieldsOrder(queryWrapper, parameterMap);
-				
-		//高级查询
+
+        //高级查询
 		doSuperQuery(queryWrapper, parameterMap);
-		
-	}
+
+    }
 
     /**
      * 多字段排序
@@ -177,7 +177,7 @@ public class QueryGenerator {
 				column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX));
 			}
 			//SQL注入check
-			SqlInjectionUtil.filterContent(column); 
+            SqlInjectionUtil.filterContent(column);
 
 			if (order.toUpperCase().indexOf(ORDER_TYPE_ASC)>=0) {
 				queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column));
@@ -186,8 +186,8 @@ public class QueryGenerator {
 			}
 		}
 	}
-	
-	/**
+
+    /**
 	 * 高级查询
 	 * @param queryWrapper
 	 * @param parameterMap
@@ -203,8 +203,8 @@ public class QueryGenerator {
 			}
 			List<QueryCondition> conditions = JSON.parseArray(superQueryParams, QueryCondition.class);
 			log.info("---高级查询参数-->"+conditions.toString());
-			
-			for (QueryCondition rule : conditions) {
+
+            for (QueryCondition rule : conditions) {
 				if(oConvertUtils.isNotEmpty(rule.getField()) && oConvertUtils.isNotEmpty(rule.getRule()) && oConvertUtils.isNotEmpty(rule.getVal())){
 					addEasyQuery(queryWrapper, rule.getField(), QueryRuleEnum.getByValue(rule.getRule()), rule.getVal());
 				}
@@ -235,8 +235,8 @@ public class QueryGenerator {
 		if (rule == null && val.length() >= 1) {
 			rule = QueryRuleEnum.getByValue(val.substring(0, 1));
 		}
-		
-		// step 3 like
+
+        // step 3 like
 		if (rule == null && val.contains(STAR)) {
 			if (val.startsWith(STAR) && val.endsWith(STAR)) {
 				rule = QueryRuleEnum.LIKE;
@@ -251,16 +251,16 @@ public class QueryGenerator {
 			//TODO in 查询这里应该有个bug  如果一字段本身就是多选 此时用in查询 未必能查询出来
 			rule = QueryRuleEnum.IN;
 		}
-		// step 5 != 
+        // step 5 !=
 		if(rule == null && val.startsWith(NOT_EQUAL)){
 			rule = QueryRuleEnum.NE;
 		}
 		return rule != null ? rule : QueryRuleEnum.EQ;
 	}
-	
-	/**
+
+    /**
 	 * 替换掉关键字字符
-	 * 
+     *
 	 * @param rule
 	 * @param value
 	 * @return
@@ -280,14 +280,14 @@ public class QueryGenerator {
 		} else if (rule == QueryRuleEnum.RIGHT_LIKE) {
 			value = val.substring(0, val.length() - 1);
 		} else if (rule == QueryRuleEnum.IN) {
-			value = val.split(",");
+            value = val.split(COMMA);
 		} else {
 			value = val.replace(rule.getValue(),"");
 		}
 		return value;
 	}
-	
-	private static void addQueryByRule(QueryWrapper<?> queryWrapper,String name,String type,String value,QueryRuleEnum rule) throws ParseException {
+
+    private static void addQueryByRule(QueryWrapper<?> queryWrapper,String name,String type,String value,QueryRuleEnum rule) throws ParseException {
 		if(!"".equals(value)) {
 			Object temp;
 			switch (type) {
@@ -319,8 +319,8 @@ public class QueryGenerator {
 			addEasyQuery(queryWrapper, name, rule, temp);
 		}
 	}
-	
-	/**
+
+    /**
 	 * 获取日期类型的值
 	 * @param value
 	 * @param rule
@@ -344,8 +344,8 @@ public class QueryGenerator {
 		}
 		return date;
 	}
-	
-	/**
+
+    /**
 	  * 根据规则走不同的查询
 	 * @param queryWrapper QueryWrapper
 	 * @param name         字段名字
@@ -379,7 +379,7 @@ public class QueryGenerator {
 			break;
 		case IN:
 			if(value instanceof String) {
-				queryWrapper.in(name, (Object[])value.toString().split(","));
+                queryWrapper.in(name, (Object[]) value.toString().split(COMMA));
 			}else if(value instanceof String[]) {
 				queryWrapper.in(name, (Object[]) value);
 			}else {
@@ -401,7 +401,7 @@ public class QueryGenerator {
 		}
 	}
 	/**
-	 * 
+     *
 	 * @param name
 	 * @return
 	 */
@@ -411,10 +411,9 @@ public class QueryGenerator {
 				|| "sort".equals(name) || "order".equals(name);
 	}
 
-	
 
-	/**
-	 * 
+    /**
+     *
 	 * @return
 	 */
 	public static Map<String, SysPermissionDataRule> getRuleMap() {
@@ -434,11 +433,11 @@ public class QueryGenerator {
 		}
 		return ruleMap;
 	}
-	
-	private static void addRuleToQueryWrapper(SysPermissionDataRule dataRule,String name, Class propertyType, QueryWrapper<?> queryWrapper) {
+
+    private static void addRuleToQueryWrapper(SysPermissionDataRule dataRule,String name, Class propertyType, QueryWrapper<?> queryWrapper) {
 		QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions());
 		if(rule.equals(QueryRuleEnum.IN) && ! propertyType.equals(String.class)) {
-			String[] values = dataRule.getRuleValue().split(",");
+            String[] values = dataRule.getRuleValue().split(COMMA);
 			Object[] objs = new Object[values.length];
 			for (int i = 0; i < values.length; i++) {
 				objs[i] = NumberUtils.parseNumber(values[i], propertyType);
@@ -452,16 +451,16 @@ public class QueryGenerator {
 			}
 		}
 	}
-	
-	public static String converRuleValue(String ruleValue) {
+
+    public static String converRuleValue(String ruleValue) {
 		String value = JwtUtil.getSessionData(ruleValue);
 		if(oConvertUtils.isEmpty(value)) {
 			value = JwtUtil.getUserSystemData(ruleValue,null);
 		}
 		return value!= null ? value : ruleValue;
 	}
-	
-	public static String getSqlRuleValue(String sqlRule){
+
+    public static String getSqlRuleValue(String sqlRule){
 		try {
 			Set<String> varParams = getSqlRuleParams(sqlRule);
 			for(String var:varParams){
@@ -473,8 +472,8 @@ public class QueryGenerator {
 		}
 		return sqlRule;
 	}
-	
-	/**
+
+    /**
 	 * 获取sql中的#{key} 这个key组成的set
 	 */
 	public static Set<String> getSqlRuleParams(String sql) {
@@ -483,8 +482,8 @@ public class QueryGenerator {
 		}
 		Set<String> varParams = new HashSet<String>();
 		String regex = "\\#\\{\\w+\\}";
-		
-		Pattern p = Pattern.compile(regex);
+
+        Pattern p = Pattern.compile(regex);
 		Matcher m = p.matcher(sql);
 		while(m.find()){
 			String var = m.group();
@@ -492,9 +491,9 @@ public class QueryGenerator {
 		}
 		return varParams;
 	}
-	
-	/**
-	 * 获取查询条件 
+
+    /**
+     * 获取查询条件
 	 * @param field
 	 * @param alias
 	 * @param value
@@ -564,10 +563,10 @@ public class QueryGenerator {
 			return value.toString();
 		}
 	}
-	
-	private static String getInConditionValue(Object value,boolean isString) {
+
+    private static String getInConditionValue(Object value,boolean isString) {
 		if(isString) {
-			String[] temp = value.toString().split(",");
+            String[] temp = value.toString().split(COMMA);
 			String res="";
 			for (String string : temp) {
 				res+=",'"+string+"'";
@@ -577,8 +576,8 @@ public class QueryGenerator {
 			return "("+value.toString()+")";
 		}
 	}
-	
-	private static String getLikeConditionValue(Object value) {
+
+    private static String getLikeConditionValue(Object value) {
 		String str = value.toString().trim();
 		if(str.startsWith("*") && str.endsWith("*")) {
 			return "'%"+str.substring(1,str.length()-1)+"%'";
@@ -590,6 +589,6 @@ public class QueryGenerator {
 			return str;
 		}
 	}
-	
-	
+
+
 }

+ 15 - 21
jeecg-boot-base-common/src/main/java/org/jeecg/common/util/DateUtils.java

@@ -52,7 +52,6 @@ public class DateUtils extends PropertyEditorSupport {
      */
     public static Calendar getCalendar(long millis) {
         Calendar cal = Calendar.getInstance();
-        // --------------------cal.setTimeInMillis(millis);
         cal.setTime(new Date(millis));
         return cal;
     }
@@ -195,7 +194,6 @@ public class DateUtils extends PropertyEditorSupport {
      * @return 指定日历的时间戳
      */
     public static Timestamp getCalendarTimestamp(Calendar cal) {
-        // ---------------------return new Timestamp(cal.getTimeInMillis());
         return new Timestamp(cal.getTime().getTime());
     }
 
@@ -228,7 +226,6 @@ public class DateUtils extends PropertyEditorSupport {
      * @return 指定日历的毫秒数
      */
     public static long getMillis(Calendar cal) {
-        // --------------------return cal.getTimeInMillis();
         return cal.getTime().getTime();
     }
 
@@ -572,7 +569,7 @@ public class DateUtils extends PropertyEditorSupport {
 
 
     public static Date timeStampToDate(Long time) {
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//要转换的时间格式
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Date date;
         try {
             date = sdf.parse(sdf.format(time));
@@ -709,7 +706,7 @@ public class DateUtils extends PropertyEditorSupport {
     }
 
     public static String timeStamp2Date(Timestamp timeLong) {
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//要转换的时间格式
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Date date;
         try {
             date = sdf.parse(sdf.format(timeLong));
@@ -721,7 +718,7 @@ public class DateUtils extends PropertyEditorSupport {
     }
 
     public static String timeStamp2Date(long currentTimeMillis) {
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//要转换的时间格式
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Date date;
         try {
             date = sdf.parse(sdf.format(currentTimeMillis));
@@ -734,14 +731,14 @@ public class DateUtils extends PropertyEditorSupport {
 
 
     public static Map<String, Object> getBeforeDate() {
-        Date dNow = new Date(); //当前时间
+        Date dNow = new Date();
         Date dBefore = new Date();
-        Calendar calendar = Calendar.getInstance(); //得到日历
-        calendar.setTime(dNow);//把当前时间赋给日历
-        calendar.add(Calendar.DAY_OF_MONTH, -1); //设置为前一天
-        dBefore = calendar.getTime(); //得到前一天的时间
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //设置时间格式
-        String defaultStartDate = sdf.format(dBefore); //格式化前一天
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(dNow);
+        calendar.add(Calendar.DAY_OF_MONTH, -1);
+        dBefore = calendar.getTime();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        String defaultStartDate = sdf.format(dBefore);
         defaultStartDate = defaultStartDate + " 00:00:00";
         String defaultEndDate = defaultStartDate.substring(0, 10) + " 23:59:59";
         Map<String, Object> map = new HashMap<>();
@@ -761,21 +758,18 @@ public class DateUtils extends PropertyEditorSupport {
     public static String getAnotherDay(String format, String date, Integer num) throws ParseException {
 
         SimpleDateFormat sdf = new SimpleDateFormat(format);
-        Date date_ = sdf.parse(date);// 将字符串转化为时间格式
-        Calendar calendar = Calendar.getInstance(); // 得到日历
-        calendar.setTime(date_);// 把开始日期赋给日历
-        calendar.add(Calendar.DAY_OF_MONTH, num); // 设置为num天
-        Date resultDate = calendar.getTime(); // 得到时间
+        Date date_ = sdf.parse(date);
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date_);
+        calendar.add(Calendar.DAY_OF_MONTH, num);
+        Date resultDate = calendar.getTime();
         return sdf.format(resultDate);
     }
 
 
     public static String getNowDate(String format) {
-
         SimpleDateFormat sdf = new SimpleDateFormat(format);
-
         Date date = new Date();
-
         return sdf.format(date);
     }
 

+ 4 - 4
jeecg-boot-base-common/src/main/java/org/jeecg/common/util/oConvertUtils.java

@@ -179,7 +179,7 @@ public class oConvertUtils {
 		Integer[] result = new Integer[len];
 		try {
 			for (int i = 0; i < len; i++) {
-				result[i] = new Integer(object[i].trim());
+                result[i] = Integer.getInteger(object[i].trim());
 			}
 			return result;
 		} catch (NumberFormatException e) {
@@ -230,7 +230,7 @@ public class oConvertUtils {
 	}
 
 	public static long stringToLong(String str) {
-		Long test = new Long(0);
+        Long test = 0L;
 		try {
 			test = Long.valueOf(str);
 		} catch (Exception e) {
@@ -302,11 +302,11 @@ public class oConvertUtils {
 			Enumeration<InetAddress> address = ni.getInetAddresses();
 			while (address.hasMoreElements()) {
 				ip = address.nextElement();
-				if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 外网IP
+                if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {
 					netip = ip.getHostAddress();
 					finded = true;
 					break;
-				} else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 内网IP
+                } else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {
 					localip = ip.getHostAddress();
 				}
 			}

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

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

+ 19 - 16
jeecg-boot-module-system/src/main/java/org/jeecg/config/RedisConfig.java

@@ -1,12 +1,9 @@
 package org.jeecg.config;
 
-import java.lang.reflect.Method;
-import java.time.Duration;
-import java.util.Arrays;
-
-
-import javax.annotation.Resource;
-
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping;
 import org.springframework.cache.CacheManager;
 import org.springframework.cache.annotation.CachingConfigurerSupport;
 import org.springframework.cache.annotation.EnableCaching;
@@ -21,10 +18,11 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
 import org.springframework.data.redis.serializer.RedisSerializer;
 import org.springframework.data.redis.serializer.StringRedisSerializer;
-import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping;
+
+import javax.annotation.Resource;
+import java.lang.reflect.Method;
+import java.time.Duration;
+import java.util.Arrays;
 
 @Configuration
 @EnableCaching
@@ -69,10 +67,14 @@ public class RedisConfig extends CachingConfigurerSupport {
 		RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
 		redisTemplate.setConnectionFactory(lettuceConnectionFactory);
 		RedisSerializer<?> stringSerializer = new StringRedisSerializer();
-		redisTemplate.setKeySerializer(stringSerializer);// key序列化
-		redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);// value序列化
-		redisTemplate.setHashKeySerializer(stringSerializer);// Hash key序列化
-		redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);// Hash value序列化
+        // key序列化
+        redisTemplate.setKeySerializer(stringSerializer);
+        // value序列化
+        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
+        // Hash key序列化
+        redisTemplate.setHashKeySerializer(stringSerializer);
+        // Hash value序列化
+        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
 		redisTemplate.afterPropertiesSet();
 		return redisTemplate;
 	}
@@ -97,7 +99,8 @@ public class RedisConfig extends CachingConfigurerSupport {
 		// 创建默认缓存配置对象
 
 		// 创建默认缓存配置对象
-		RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(3)); //设置缓存默认有效期3小时;
+        //设置缓存默认有效期3小时;
+        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(3));
 
 		RedisCacheManager cacheManager = new RedisCacheManager(writer, config);
 		return cacheManager;

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

@@ -126,9 +126,10 @@ public class ShiroConfig {
 
 
 
+		filterChainDefinitionMap.put("/appium/appiumTask/run/login", "anon");
 		//爬虫接口
 		filterChainDefinitionMap.put("/graphql/video", "anon");
-
+		filterChainDefinitionMap.put("/ks/web/test", "anon");
 		// 添加自己的过滤器并且取名为jwt
 		Map<String, Filter> filterMap = new HashMap<String, Filter>(1);
 		filterMap.put("jwt", new JwtFilter());

+ 3 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/config/WebMvcConfiguration.java

@@ -1,5 +1,6 @@
 package org.jeecg.config;
 
+import cn.com.ctop.common.module.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -12,7 +13,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 /**
  * Spring Boot 2.0 解决跨域问题
- * 
+ *
  * @Author qinfeng
  *
  */
@@ -49,7 +50,7 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
 	public void addResourceHandlers(ResourceHandlerRegistry registry) {
 		registry.addResourceHandler("/**")
 		.addResourceLocations("file:" + upLoadPath + "//", "file:" + webAppPath + "//")
-		.addResourceLocations(staticLocations.split(","));
+				.addResourceLocations(staticLocations.split(StringUtils.COMMA));
 	}
 
 	/**

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

@@ -2,6 +2,7 @@ package org.jeecg.modules.ctop.controller;
 
 import cn.com.ctop.bytedance.mapper.MaterialReportMapper;
 import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.StringUtils;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -218,7 +219,7 @@ public class AdvertiserController {
         if (ids == null || "".equals(ids.trim())) {
             result.error500("参数不识别!");
         } else {
-            this.advertiserService.removeByIds(Arrays.asList(ids.split(",")));
+            this.advertiserService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
             result.success("删除成功!");
         }
         return result;
@@ -234,7 +235,7 @@ public class AdvertiserController {
     @ApiOperation(value = "广告主信息表-通过id查询", notes = "广告主信息表-通过id查询")
     @GetMapping(value = "/queryById")
     public Result<Advertiser> queryById(@RequestParam(name = "id", required = true) String id) {
-        Result<Advertiser> result = new Result<Advertiser>();
+        Result<Advertiser> result = new Result<>();
         Advertiser advertiser = advertiserService.getById(id);
         if (advertiser == null) {
             result.error500("未找到对应实体");

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

@@ -3,6 +3,7 @@ package org.jeecg.modules.ctop.controller;
 import cn.com.ctop.common.module.entity.BindAccountAuth;
 import cn.com.ctop.common.module.service.IBindAccountAuthService;
 import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.StringUtils;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -192,7 +193,7 @@ public class BindAccountAuthController {
         if (ids == null || "".equals(ids.trim())) {
             result.error500("参数不识别!");
         } else {
-            this.bindAccountAuthService.removeByIds(Arrays.asList(ids.split(",")));
+            this.bindAccountAuthService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
             result.success("删除成功!");
         }
         return result;

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

@@ -5,6 +5,7 @@ import cn.com.ctop.common.module.entity.UserAllocation;
 import cn.com.ctop.common.module.mapper.UserAllocationMapper;
 import cn.com.ctop.common.module.service.IBindAccountLoginService;
 import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.StringUtils;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -228,7 +229,7 @@ public class BindAccountLoginController {
         if (ids == null || "".equals(ids.trim())) {
             result.error500("参数不识别!");
         } else {
-            this.bindAccountLoginService.removeByIds(Arrays.asList(ids.split(",")));
+            this.bindAccountLoginService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
             result.success("删除成功!");
         }
         return result;
@@ -299,7 +300,7 @@ public class BindAccountLoginController {
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
         Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
         for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-            MultipartFile file = entity.getValue();// 获取上传文件对象
+            MultipartFile file = entity.getValue();
             ImportParams params = new ImportParams();
             params.setTitleRows(2);
             params.setHeadRows(1);

+ 7 - 4
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceAdvertiserPostController.java

@@ -10,6 +10,7 @@ import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
 import cn.com.ctop.toutiao.entity.ByteDanceCustomAudience;
 import cn.com.ctop.toutiao.entity.ByteDanceUserOrientationTemplate;
 import cn.com.ctop.toutiao.service.IByteDanceAdvertiserDataService;
+import cn.com.ctop.toutiao.service.IByteDanceCreativeService;
 import cn.com.ctop.toutiao.service.IByteDanceCustomAudienceService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -41,6 +42,8 @@ public class ByteDanceAdvertiserPostController {
     @Autowired
     private IByteDanceAdvertiserDataService advertiserDataService;
     @Autowired
+    private IByteDanceCreativeService creativeService;
+    @Autowired
     private IFileInfoService fileInfoService;
     @Autowired
     private IByteDanceCustomAudienceService audienceService;
@@ -62,7 +65,7 @@ public class ByteDanceAdvertiserPostController {
      */
     @RequestMapping("/advertiser/plan/get")
     public Map<String, Object> advertiserPlan(String accountId, String ids) {
-        return advertiserDataService.getAdvertiserPlan(accountId, ids);
+        return advertiserDataService.getAdvertiserPlan(accountId, ids, null);
     }
 
     /**
@@ -119,7 +122,7 @@ public class ByteDanceAdvertiserPostController {
      */
     @RequestMapping("/advertiser/campaign/get")
     public Map<String, Object> advertiserCampaign(String accountId, String ids) {
-        return advertiserDataService.getAdvertiserCampaign(accountId, ids);
+        return advertiserDataService.getAdvertiserCampaign(accountId, ids, null);
     }
 
     /**
@@ -138,7 +141,7 @@ public class ByteDanceAdvertiserPostController {
      */
     @RequestMapping("/advertiser/creative/get")
     public Map<String, Object> getAdvertiserCreative(String accountId, String ids) {
-        return advertiserDataService.getAdvertiserCreative(accountId, ids);
+        return creativeService.getAdvertiserCreative(accountId, ids, null);
     }
 
     /**
@@ -147,7 +150,7 @@ public class ByteDanceAdvertiserPostController {
      */
     @RequestMapping("/advertiser/update/status/")
     public Map<String, Object> advertiserCreativeUpdateStatus(String accountId, String creativeIds, String optStatus) {
-        return advertiserDataService.advertiserCreativeUpdateStatus(accountId, creativeIds, optStatus);
+        return creativeService.advertiserCreativeUpdateStatus(accountId, creativeIds, optStatus);
     }
 
     /**

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

@@ -2,6 +2,7 @@ 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;

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

@@ -1,5 +1,6 @@
 package org.jeecg.modules.ctop.controller;
 
+import cn.com.ctop.common.module.utils.StringUtils;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -148,11 +149,11 @@ public class CtopOauthTokenController {
     @ApiOperation(value = "oauth授权码-批量删除", notes = "oauth授权码-批量删除")
     @DeleteMapping(value = "/deleteBatch")
     public Result<CtopOauthToken> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
-        Result<CtopOauthToken> result = new Result<CtopOauthToken>();
+        Result<CtopOauthToken> result = new Result<>();
         if (ids == null || "".equals(ids.trim())) {
             result.error500("参数不识别!");
         } else {
-            this.ctopOauthTokenService.removeByIds(Arrays.asList(ids.split(",")));
+            this.ctopOauthTokenService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
             result.success("删除成功!");
         }
         return result;
@@ -223,7 +224,7 @@ public class CtopOauthTokenController {
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
         Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
         for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-            MultipartFile file = entity.getValue();// 获取上传文件对象
+            MultipartFile file = entity.getValue();
             ImportParams params = new ImportParams();
             params.setTitleRows(2);
             params.setHeadRows(1);

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

@@ -2,6 +2,7 @@ package org.jeecg.modules.ctop.controller;
 
 import cn.com.ctop.common.module.entity.FileInfo;
 import cn.com.ctop.common.module.service.IFileInfoService;
+import cn.com.ctop.common.module.utils.StringUtils;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -151,7 +152,7 @@ public class FileInfoController {
         if (ids == null || "".equals(ids.trim())) {
             result.error500("参数不识别!");
         } else {
-            this.fileInfoService.removeByIds(Arrays.asList(ids.split(",")));
+            this.fileInfoService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
             result.success("删除成功!");
         }
         return result;
@@ -222,7 +223,7 @@ public class FileInfoController {
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
         Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
         for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-            MultipartFile file = entity.getValue();// 获取上传文件对象
+            MultipartFile file = entity.getValue();
             ImportParams params = new ImportParams();
             params.setTitleRows(2);
             params.setHeadRows(1);

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

@@ -1,5 +1,6 @@
 package org.jeecg.modules.ctop.controller;
 
+import cn.com.ctop.common.module.utils.StringUtils;
 import cn.com.ctop.crawler.modules.account.entity.KuaishouAdAccount;
 import cn.com.ctop.crawler.modules.account.service.IKuaishouAdAccountService;
 import com.alibaba.fastjson.JSON;
@@ -197,11 +198,11 @@ public class KuaishouAdvertiserController {
     @ApiOperation(value="快手广告主信息表-批量删除", notes="快手广告主信息表-批量删除")
     @DeleteMapping(value = "/deleteBatch")
     public Result<KuaishouAdAccount> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-        Result<KuaishouAdAccount> result = new Result<KuaishouAdAccount>();
+        Result<KuaishouAdAccount> result = new Result<>();
         if(ids==null || "".equals(ids.trim())) {
             result.error500("参数不识别!");
         }else {
-            this.kuaishouAdAccountService.removeByIds(Arrays.asList(ids.split(",")));
+            this.kuaishouAdAccountService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
             result.success("删除成功!");
         }
         return result;
@@ -271,7 +272,7 @@ public class KuaishouAdvertiserController {
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
         Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
         for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-            MultipartFile file = entity.getValue();// 获取上传文件对象
+            MultipartFile file = entity.getValue();
             ImportParams params = new ImportParams();
             params.setTitleRows(2);
             params.setHeadRows(1);

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

@@ -1,5 +1,6 @@
 package org.jeecg.modules.ctop.controller;
 
+import cn.com.ctop.common.module.utils.StringUtils;
 import cn.com.ctop.crawler.modules.account.entity.KuaishouAppAccount;
 import cn.com.ctop.crawler.modules.account.service.IKuaishouAppAccountService;
 import com.alibaba.fastjson.JSON;
@@ -147,11 +148,11 @@ public class KuaishouAppAccountController {
 	@ApiOperation(value="快手APP账号表-批量删除", notes="快手APP账号表-批量删除")
 	@DeleteMapping(value = "/deleteBatch")
 	public Result<KuaishouAppAccount> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-		Result<KuaishouAppAccount> result = new Result<KuaishouAppAccount>();
+		Result<KuaishouAppAccount> result = new Result<>();
 		if(ids==null || "".equals(ids.trim())) {
 			result.error500("参数不识别!");
 		}else {
-			this.kuaishouAppAccountService.removeByIds(Arrays.asList(ids.split(",")));
+			this.kuaishouAppAccountService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
 			result.success("删除成功!");
 		}
 		return result;
@@ -221,7 +222,7 @@ public class KuaishouAppAccountController {
       MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
       Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
       for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-          MultipartFile file = entity.getValue();// 获取上传文件对象
+		  MultipartFile file = entity.getValue();
           ImportParams params = new ImportParams();
           params.setTitleRows(2);
           params.setHeadRows(1);

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

@@ -2,6 +2,7 @@ package org.jeecg.modules.ctop.controller;
 
 import cn.com.ctop.common.module.entity.SourceFile;
 import cn.com.ctop.common.module.service.ISourceFileService;
+import cn.com.ctop.common.module.utils.StringUtils;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -151,7 +152,7 @@ public class SourceFileController {
         if (ids == null || "".equals(ids.trim())) {
             result.error500("参数不识别!");
         } else {
-            this.sourceFileService.removeByIds(Arrays.asList(ids.split(",")));
+            this.sourceFileService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
             result.success("删除成功!");
         }
         return result;

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

@@ -2,6 +2,7 @@ package org.jeecg.modules.ctop.controller;
 
 import cn.com.ctop.common.module.entity.UserAllocation;
 import cn.com.ctop.common.module.service.IUserAllocationService;
+import cn.com.ctop.common.module.utils.StringUtils;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -154,7 +155,7 @@ public class UserAllocationController {
         if (ids == null || "".equals(ids.trim())) {
             result.error500("参数不识别!");
         } else {
-            this.userAllocationService.removeByIds(Arrays.asList(ids.split(",")));
+            this.userAllocationService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
             result.success("删除成功!");
         }
         return result;

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

@@ -16,6 +16,10 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 
+/**
+ * @author yumeng
+ * 2019年11月12日10:04:00
+ */
 @RestController
 @Slf4j
 @RequestMapping("/ctop/yard")

+ 12 - 4
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceHourlyReportLoadJob.java

@@ -5,11 +5,13 @@ import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 import cn.com.ctop.common.module.utils.CtopAdConstant;
 import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.util.DateUtils;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 
@@ -26,21 +28,27 @@ public class BytedanceHourlyReportLoadJob implements Job {
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         Date getDate = new Date();
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
+        String hour = simpleDateFormat.format(getDate);
+        if (null != hour && "00".equals(hour)) {
+            getDate = DateUtils.addDay(getDate, -1);
+        }
         //1:查询当日数据
         List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
         if (null == tokens || tokens.size() <= 0) {
             log.info("定时获取头条小时数据异常:未获取到可用的token");
             return;
         }
+        Date finalGetDate = getDate;
         tokens.forEach(token -> {
             //1: 获取广告主信息数据
-            reportService.getAdvertiserReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
+            reportService.getAdvertiserReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
             //2:获取广告组信息数据
-            reportService.getAdvertiserCampaignReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
+            reportService.getAdvertiserCampaignReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
             //3:获取广告计划信息数据
-            reportService.getAdvertiserPlanReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
+            reportService.getAdvertiserPlanReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
             //4: 获取广告创意信息数据
-            reportService.getAdvertiserCreativeReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
+            reportService.getAdvertiserCreativeReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
         });
     }
 }

+ 60 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceMaterialsLoadJob.java

@@ -0,0 +1,60 @@
+package org.jeecg.modules.ctop.job;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.CtopAdConstant;
+import cn.com.ctop.toutiao.service.IByteDanceAdvertiserDataService;
+import cn.com.ctop.toutiao.service.IByteDanceCreativeService;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@Slf4j
+public class BytedanceMaterialsLoadJob implements Job {
+    @Autowired
+    private ICtopOauthTokenService tokenService;
+    static ExecutorService executorService = null;
+    @Autowired
+    private IByteDanceAdvertiserDataService advertiserDataService;
+    @Autowired
+    private IByteDanceCreativeService creativeService;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        Date getDate = new Date();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        String dateString = dateFormat.format(getDate);
+        //1:查询当日数据
+        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
+        executorService = Executors.newFixedThreadPool(10);
+        tokens.forEach(token -> {
+            executorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        //1:获取当日广告组数据
+                        advertiserDataService.getAdvertiserCampaign(token.getAccountId() + "", "", dateString);
+                        //1:获取当日广告计划数据
+                        advertiserDataService.getAdvertiserPlan(token.getAccountId() + "", "", dateString);
+                        //1:获取全量创意数据
+                        creativeService.getAdvertiserCreative(token.getAccountId() + "", "", dateString);
+                        //2:获取全量素材数据
+                        advertiserDataService.getMaterialList(token);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                    }
+                }
+            });
+        });
+        log.info("物料数据同步完成");
+    }
+}

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouDailyReportLoadJob.java

@@ -25,8 +25,8 @@ public class KuaishouDailyReportLoadJob implements Job {
     private IKuaishouInterfaceService kuaishouInterfaceService;
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
-//        Date deleteDate = DateUtils.addDay(new Date(), -2);
-//        kuaishouInterfaceService.deleteHourlyReport(deleteDate);
+        Date deleteDate = DateUtils.addDay(new Date(), -2);
+        kuaishouInterfaceService.deleteHourlyReport(deleteDate);
         Date getDate = DateUtils.addDay(new Date(), -1);
         //1:查询当日数据
         List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouHourlyReportLoadJob.java

@@ -37,7 +37,7 @@ public class KuaishouHourlyReportLoadJob implements Job {
         Date getDate = new Date();
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
         String hour = simpleDateFormat.format(getDate);
-        if (null != hour && hour.equals("00")) {
+        if (null != hour && "00".equals(hour)) {
             getDate = DateUtils.addDay(getDate, -1);
         }
         //1:查询当日数据

+ 1 - 6
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouMaterialsLoadJob.java

@@ -34,16 +34,12 @@ public class KuaishouMaterialsLoadJob implements Job {
                 @Override
                 public void run() {
                     try {
-                        Long start = System.currentTimeMillis();
                         //1:获取全量广告计划数据
                         kuaishouInterfaceService.getCampaignList(token);
-                        Long end1 = System.currentTimeMillis();
                         //1:获取全量广告组数据
                         kuaishouInterfaceService.getGroupList(token);
-                        Long end2 = System.currentTimeMillis();
                         //1:获取全量创意数据
                         kuaishouInterfaceService.getCreativeList(token);
-                        Long end3 = System.currentTimeMillis();
                         //2:获取全量视频素材数据
                         kuaishouInterfaceService.getVideoList(token);
                     } catch (Exception e) {
@@ -53,7 +49,6 @@ public class KuaishouMaterialsLoadJob implements Job {
                 }
             });
         });
-        log.info("物料数据同步完成");
-
+        log.info("快手物料数据同步完成");
     }
 }

+ 24 - 6
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CreateInternalServiceImpl.java

@@ -120,7 +120,8 @@ public class CreateInternalServiceImpl implements ICreateInternalService {
         //清除所有的缓存
         webDriver.manage().deleteAllCookies();
         try {
-            webDriver.get(url);  //获取登录页面
+            //获取登录页面
+            webDriver.get(url);
             for (Cookie cookie : webDriver.manage().getCookies()) {
                 BasicClientCookie ck = new BasicClientCookie(cookie.getName(), cookie.getValue());
                 ck.setDomain("ad.oceanengine.com");
@@ -206,6 +207,23 @@ public class CreateInternalServiceImpl implements ICreateInternalService {
         return resultMap;
     }
 
+    public Map<String, Object> bindAdByKuaishou() {
+        Map<String, Object> result = new HashMap<>();
+        String url = "https://ad.oceanengine.com/pages/login/index.html";
+        System.getProperties().setProperty("webdriver.chrome.driver", chromeDriver);
+        ChromeOptions chromeOptions = new ChromeOptions();
+        chromeOptions.addArguments("--headless");
+        chromeOptions.addArguments("--incognito");
+        chromeOptions.addArguments("--disable-gpu");
+        chromeOptions.addArguments("--no-sandbox");
+        chromeOptions.addArguments("--window-size=1920,1080");
+        chromeOptions.addArguments("--user-agent=" + HttpUtils2.USER_AGENT);
+        chromeOptions.setAcceptInsecureCerts(true);
+        WebDriver webDriver = new ChromeDriver(chromeOptions);
+        WebElement element = webDriver.findElement(By.xpath(""));
+        return result;
+    }
+
     @Override
     public Map<String, Object> createInternal(JSONObject requestJson) {
         Map<String, Object> resultMap = new HashMap<>();
@@ -463,11 +481,11 @@ public class CreateInternalServiceImpl implements ICreateInternalService {
                             planParam.put("app_type", 201);
                         }
                         String convertType = requestJson.getString("convertType");
-                        if (null != convertType && convertType.equals("SIMPLE")) {
+                        if (null != convertType && "SIMPLE".equals(convertType)) {
                             //普通应用下载
                             planParam.put("external_action", requestJson.getLong("simpleDeliverytarget"));
                         }
-                        if (null != convertType && convertType.equals("API")) {
+                        if (null != convertType && "API".equals(convertType)) {
                             Long convertId = requestJson.getLong("convertId");
                             if (null != convertId && convertId != 0) {
                                 planParam.put("convert_id", convertId);
@@ -490,7 +508,7 @@ public class CreateInternalServiceImpl implements ICreateInternalService {
                         if (null != template) {
                             //获取modify_time
                             Thread.sleep(5000L);
-                            advertiserDataService.getAdvertiserPlan(bindAccountLogin.getAccountId(), adId + "");
+                            advertiserDataService.getAdvertiserPlan(bindAccountLogin.getAccountId(), adId + "", null);
                             advertiserDataService.updateAd(token, adId, template, requestJson);
                         }
                         Long creativeTemplateId = requestJson.getLong("creativeTemplateId");
@@ -523,7 +541,7 @@ public class CreateInternalServiceImpl implements ICreateInternalService {
                             //创意展现方式
                             data.put("creative_display_mode", launchTemplate.getCreativeDisplayMode());
                             //优选广告位
-                            if (null != advertiseLoaction && advertiseLoaction.equals("great") && null != launchTemplate.getSmartInventory() && !"".equals(launchTemplate.getSmartInventory())) {
+                            if (null != advertiseLoaction && "great".equals(advertiseLoaction) && null != launchTemplate.getSmartInventory() && !"".equals(launchTemplate.getSmartInventory())) {
                                 data.put("smart_inventory", launchTemplate.getSmartInventory());
                             }
 
@@ -541,7 +559,7 @@ public class CreateInternalServiceImpl implements ICreateInternalService {
 
                             //创意方式
                             String creativeType = requestJson.getString("creativeType");
-                            if (null != creativeType && creativeType.equals("customize")) {
+                            if (null != creativeType && "customize".equals(creativeType)) {
                                 //自定义创意
                                 //拼装creative参数
                                 JSONArray creatives = new JSONArray();

+ 3 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/test/controller/JeecgDemoController.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.demo.test.controller;
 
+import cn.com.ctop.common.module.utils.StringUtils;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -175,11 +176,11 @@ public class JeecgDemoController extends JeecgController<JeecgDemo, IJeecgDemoSe
     @DeleteMapping(value = "/deleteBatch")
     @ApiOperation(value = "批量删除DEMO", notes = "批量删除DEMO")
     public Result<JeecgDemo> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
-        Result<JeecgDemo> result = new Result<JeecgDemo>();
+        Result<JeecgDemo> result = new Result<>();
         if (ids == null || "".equals(ids.trim())) {
             result.error500("参数不识别!");
         } else {
-            this.jeecgDemoService.removeByIds(Arrays.asList(ids.split(",")));
+            this.jeecgDemoService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
             result.success("删除成功!");
         }
         return result;

+ 14 - 14
jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/test/controller/JeecgOrderMainController.java

@@ -34,9 +34,9 @@ import java.util.Map;
 
 /**
  * @Title: Controller
- * @Description: 订单 
- * @Author: jeecg-boot 
- * @Date:2019-02-15 
+ * @Description: 订单
+ * @Author: jeecg-boot
+ * @Date:2019-02-15
  * @Version: V1.0
  */
 @RestController
@@ -52,7 +52,7 @@ public class JeecgOrderMainController {
 
 	/**
 	 * 分页列表查询
-	 * 
+     *
 	 * @param jeecgOrderMain
 	 * @param pageNo
 	 * @param pageSize
@@ -76,7 +76,7 @@ public class JeecgOrderMainController {
 
 	/**
 	 * 添加
-	 * 
+     *
 	 * @param jeecgOrderMainPage
 	 * @return
 	 */
@@ -97,7 +97,7 @@ public class JeecgOrderMainController {
 
 	/**
 	 * 编辑
-	 * 
+     *
 	 * @param jeecgOrderMainPage
 	 * @return
 	 */
@@ -119,7 +119,7 @@ public class JeecgOrderMainController {
 
 	/**
 	 * 通过id删除
-	 * 
+     *
 	 * @param id
 	 * @return
 	 */
@@ -137,7 +137,7 @@ public class JeecgOrderMainController {
 
 	/**
 	 * 批量删除
-	 * 
+     *
 	 * @param ids
 	 * @return
 	 */
@@ -155,7 +155,7 @@ public class JeecgOrderMainController {
 
 	/**
 	 * 通过id查询
-	 * 
+     *
 	 * @param id
 	 * @return
 	 */
@@ -174,7 +174,7 @@ public class JeecgOrderMainController {
 
 	/**
 	 * 通过id查询
-	 * 
+     *
 	 * @param id
 	 * @return
 	 */
@@ -189,7 +189,7 @@ public class JeecgOrderMainController {
 
 	/**
 	 * 通过id查询
-	 * 
+     *
 	 * @param id
 	 * @return
 	 */
@@ -204,7 +204,7 @@ public class JeecgOrderMainController {
 
 	/**
 	 * 导出excel
-	 * 
+     *
 	 * @param request
 	 * @param jeecgOrderMain
 	 */
@@ -242,7 +242,7 @@ public class JeecgOrderMainController {
 
 	/**
 	 * 通过excel导入数据
-	 * 
+     *
 	 * @param request
 	 * @param
 	 * @return
@@ -252,7 +252,7 @@ public class JeecgOrderMainController {
 		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
 		Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
 		for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-			MultipartFile file = entity.getValue();// 获取上传文件对象
+            MultipartFile file = entity.getValue();
 			ImportParams params = new ImportParams();
 			params.setTitleRows(2);
 			params.setHeadRows(2);

+ 30 - 41
jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/test/controller/JoaDemoController.java

@@ -1,15 +1,10 @@
 package org.jeecg.modules.demo.test.controller;
 
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+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 lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.util.oConvertUtils;
@@ -21,25 +16,19 @@ 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.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
 
-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 lombok.extern.slf4j.Slf4j;
+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;
 
  /**
  * @Description: 流程测试
@@ -53,7 +42,7 @@ import lombok.extern.slf4j.Slf4j;
 public class JoaDemoController {
 	@Autowired
 	private IJoaDemoService joaDemoService;
-	
+
 	/**
 	  * 分页列表查询
 	 * @param joaDemo
@@ -75,8 +64,8 @@ public class JoaDemoController {
 		result.setResult(pageList);
 		return result;
 	}
-	
-	/**
+
+     /**
 	  *   添加
 	 * @param joaDemo
 	 * @return
@@ -93,8 +82,8 @@ public class JoaDemoController {
 		}
 		return result;
 	}
-	
-	/**
+
+     /**
 	  *  编辑
 	 * @param joaDemo
 	 * @return
@@ -112,11 +101,11 @@ public class JoaDemoController {
 				result.success("修改成功!");
 			}
 		}
-		
-		return result;
+
+        return result;
 	}
-	
-	/**
+
+     /**
 	  *   通过id删除
 	 * @param id
 	 * @return
@@ -133,11 +122,11 @@ public class JoaDemoController {
 				result.success("删除成功!");
 			}
 		}
-		
-		return result;
+
+        return result;
 	}
-	
-	/**
+
+     /**
 	  *  批量删除
 	 * @param ids
 	 * @return
@@ -153,8 +142,8 @@ public class JoaDemoController {
 		}
 		return result;
 	}
-	
-	/**
+
+     /**
 	  * 通过id查询
 	 * @param id
 	 * @return
@@ -216,7 +205,7 @@ public class JoaDemoController {
       MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
       Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
       for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-          MultipartFile file = entity.getValue();// 获取上传文件对象
+          MultipartFile file = entity.getValue();
           ImportParams params = new ImportParams();
           params.setTitleRows(2);
           params.setHeadRows(1);

+ 4 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/fileupload/service/IUploadService.java

@@ -5,6 +5,10 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletRequest;
 import java.util.Map;
 
+/**
+ * @author yumeng
+ * 2019年11月12日10:04:00
+ */
 public interface IUploadService {
     Map<String, Object> imageUpload(MultipartFile multipartFile, HttpServletRequest request, String type);
 

+ 2 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/media/controller/MediaController.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.media.controller;
 
+import cn.com.ctop.common.module.utils.StringUtils;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -151,7 +152,7 @@ public class MediaController {
 		if(ids==null || "".equals(ids.trim())) {
 			result.error500("参数不识别!");
 		}else {
-			this.mediaService.removeByIds(Arrays.asList(ids.split(",")));
+			this.mediaService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
 			result.success("删除成功!");
 		}
 		return result;

+ 16 - 25
jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/controller/SysMessageController.java

@@ -1,10 +1,10 @@
 package org.jeecg.modules.message.controller;
 
-import java.util.Arrays;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import cn.com.ctop.common.module.utils.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.formula.functions.T;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.base.controller.JeecgController;
@@ -12,21 +12,12 @@ import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.modules.message.entity.SysMessage;
 import org.jeecg.modules.message.service.ISysMessageService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-
-import lombok.extern.slf4j.Slf4j;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
 
 /**
  * @Description: 消息
@@ -43,7 +34,7 @@ public class SysMessageController extends JeecgController<SysMessage, ISysMessag
 
 	/**
 	 * 分页列表查询
-	 * 
+	 *
 	 * @param sysMessage
 	 * @param pageNo
 	 * @param pageSize
@@ -64,7 +55,7 @@ public class SysMessageController extends JeecgController<SysMessage, ISysMessag
 
 	/**
 	 * 添加
-	 * 
+	 *
 	 * @param sysMessage
 	 * @return
 	 */
@@ -83,7 +74,7 @@ public class SysMessageController extends JeecgController<SysMessage, ISysMessag
 
 	/**
 	 * 编辑
-	 * 
+	 *
 	 * @param sysMessage
 	 * @return
 	 */
@@ -106,7 +97,7 @@ public class SysMessageController extends JeecgController<SysMessage, ISysMessag
 
 	/**
 	 * 通过id删除
-	 * 
+	 *
 	 * @param id
 	 * @return
 	 */
@@ -127,7 +118,7 @@ public class SysMessageController extends JeecgController<SysMessage, ISysMessag
 
 	/**
 	 * 批量删除
-	 * 
+	 *
 	 * @param ids
 	 * @return
 	 */
@@ -137,7 +128,7 @@ public class SysMessageController extends JeecgController<SysMessage, ISysMessag
 		if (ids == null || "".equals(ids.trim())) {
 			result.error500("ids参数不允许为空!");
 		} else {
-			this.sysMessageService.removeByIds(Arrays.asList(ids.split(",")));
+			this.sysMessageService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
 			result.success("删除成功!");
 		}
 		return result;
@@ -145,7 +136,7 @@ public class SysMessageController extends JeecgController<SysMessage, ISysMessag
 
 	/**
 	 * 通过id查询
-	 * 
+	 *
 	 * @param id
 	 * @return
 	 */

+ 3 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/job/SendMsgJob.java

@@ -40,11 +40,11 @@ public class SendMsgJob implements Job {
 			ISendMsgHandle sendMsgHandle = null;
 			try {
 				if (sysMessage.getEsType().equals(SendMsgTypeEnum.EMAIL.getType())) {
-					sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.EMAIL.getImplClass()).newInstance();
+                    sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.EMAIL.getImplClass()).getDeclaredConstructor().newInstance();
 				} else if (sysMessage.getEsType().equals(SendMsgTypeEnum.SMS.getType())) {
-					sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.SMS.getImplClass()).newInstance();
+                    sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.SMS.getImplClass()).getDeclaredConstructor().newInstance();
 				} else if (sysMessage.getEsType().equals(SendMsgTypeEnum.WX.getType())) {
-					sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.WX.getImplClass()).newInstance();
+                    sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.WX.getImplClass()).getDeclaredConstructor().newInstance();
 				}
 			} catch (Exception e) {
 				log.error(e.getMessage(),e);

+ 133 - 129
jeecg-boot-module-system/src/main/java/org/jeecg/modules/monitor/domain/RedisInfo.java

@@ -3,135 +3,139 @@ package org.jeecg.modules.monitor.domain;
 import java.util.HashMap;
 import java.util.Map;
 
+/**
+ * @author jeecg-boot
+ * 2019年11月12日10:04:00
+ */
 public class RedisInfo {
 
-	private static Map<String, String> map = new HashMap<>();
-
-	static {
-		map.put("redis_version", "Redis 服务器版本");
-		map.put("redis_git_sha1", "Git SHA1");
-		map.put("redis_git_dirty", "Git dirty flag");
-		map.put("os", "Redis 服务器的宿主操作系统");
-		map.put("arch_bits", " 架构(32 或 64 位)");
-		map.put("multiplexing_api", "Redis 所使用的事件处理机制");
-		map.put("gcc_version", "编译 Redis 时所使用的 GCC 版本");
-		map.put("process_id", "服务器进程的 PID");
-		map.put("run_id", "Redis 服务器的随机标识符(用于 Sentinel 和集群)");
-		map.put("tcp_port", "TCP/IP 监听端口");
-		map.put("uptime_in_seconds", "自 Redis 服务器启动以来,经过的秒数");
-		map.put("uptime_in_days", "自 Redis 服务器启动以来,经过的天数");
-		map.put("lru_clock", " 以分钟为单位进行自增的时钟,用于 LRU 管理");
-		map.put("connected_clients", "已连接客户端的数量(不包括通过从属服务器连接的客户端)");
-		map.put("client_longest_output_list", "当前连接的客户端当中,最长的输出列表");
-		map.put("client_longest_input_buf", "当前连接的客户端当中,最大输入缓存");
-		map.put("blocked_clients", "正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量");
-		map.put("used_memory", "由 Redis 分配器分配的内存总量,以字节(byte)为单位");
-		map.put("used_memory_human", "以人类可读的格式返回 Redis 分配的内存总量");
-		map.put("used_memory_rss", "从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致");
-		map.put("used_memory_peak", " Redis 的内存消耗峰值(以字节为单位)");
-		map.put("used_memory_peak_human", "以人类可读的格式返回 Redis 的内存消耗峰值");
-		map.put("used_memory_lua", "Lua 引擎所使用的内存大小(以字节为单位)");
-		map.put("mem_fragmentation_ratio", "sed_memory_rss 和 used_memory 之间的比率");
-		map.put("mem_allocator", "在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc");
-
-		map.put("redis_build_id", "redis_build_id");
-		map.put("redis_mode", "运行模式,单机(standalone)或者集群(cluster)");
-		map.put("atomicvar_api", "atomicvar_api");
-		map.put("hz", "redis内部调度(进行关闭timeout的客户端,删除过期key等等)频率,程序规定serverCron每秒运行10次。");
-		map.put("executable", "server脚本目录");
-		map.put("config_file", "配置文件目录");
-		map.put("client_biggest_input_buf", "当前连接的客户端当中,最大输入缓存,用client list命令观察qbuf和qbuf-free两个字段最大值");
-		map.put("used_memory_rss_human", "以人类可读的方式返回 Redis 已分配的内存总量");
-		map.put("used_memory_peak_perc", "内存使用率峰值");
-		map.put("total_system_memory", "系统总内存");
-		map.put("total_system_memory_human", "以人类可读的方式返回系统总内存");
-		map.put("used_memory_lua_human", "以人类可读的方式返回Lua 引擎所使用的内存大小");
-		map.put("maxmemory", "最大内存限制,0表示无限制");
-		map.put("maxmemory_human", "以人类可读的方式返回最大限制内存");
-		map.put("maxmemory_policy", "超过内存限制后的处理策略");
-		map.put("loading", "服务器是否正在载入持久化文件");
-		map.put("rdb_changes_since_last_save", "离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化");
-		map.put("rdb_bgsave_in_progress", "服务器是否正在创建rdb文件");
-		map.put("rdb_last_save_time", "离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件");
-		map.put("rdb_last_bgsave_status", "最近一次rdb持久化是否成功");
-		map.put("rdb_last_bgsave_time_sec", "最近一次成功生成rdb文件耗时秒数");
-		map.put("rdb_current_bgsave_time_sec", "如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数");
-		map.put("aof_enabled", "是否开启了aof");
-		map.put("aof_rewrite_in_progress", "标识aof的rewrite操作是否在进行中");
-		map.put("aof_rewrite_scheduled", "rewrite任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待aof子进程结束后执行rewrite ");
-
-		map.put("aof_last_rewrite_time_sec", "最近一次aof rewrite耗费的时长");
-		map.put("aof_current_rewrite_time_sec", "如果rewrite操作正在进行,则记录所使用的时间,单位秒");
-		map.put("aof_last_bgrewrite_status", "上次bgrewrite aof操作的状态");
-		map.put("aof_last_write_status", "上次aof写入状态");
-
-		map.put("total_commands_processed", "redis处理的命令数");
-		map.put("total_connections_received", "新创建连接个数,如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题,需调研代码的连接设置");
-		map.put("instantaneous_ops_per_sec", "redis当前的qps,redis内部较实时的每秒执行的命令数");
-		map.put("total_net_input_bytes", "redis网络入口流量字节数");
-		map.put("total_net_output_bytes", "redis网络出口流量字节数");
-
-		map.put("instantaneous_input_kbps", "redis网络入口kps");
-		map.put("instantaneous_output_kbps", "redis网络出口kps");
-		map.put("rejected_connections", "拒绝的连接个数,redis连接个数达到maxclients限制,拒绝新连接的个数");
-		map.put("sync_full", "主从完全同步成功次数");
-
-		map.put("sync_partial_ok", "主从部分同步成功次数");
-		map.put("sync_partial_err", "主从部分同步失败次数");
-		map.put("expired_keys", "运行以来过期的key的数量");
-		map.put("evicted_keys", "运行以来剔除(超过了maxmemory后)的key的数量");
-		map.put("keyspace_hits", "命中次数");
-		map.put("keyspace_misses", "没命中次数");
-		map.put("pubsub_channels", "当前使用中的频道数量");
-		map.put("pubsub_patterns", "当前使用的模式的数量");
-		map.put("latest_fork_usec", "最近一次fork操作阻塞redis进程的耗时数,单位微秒");
-		map.put("role", "实例的角色,是master or slave");
-		map.put("connected_slaves", "连接的slave实例个数");
-		map.put("master_repl_offset", "主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟");
-		map.put("repl_backlog_active", "复制积压缓冲区是否开启");
-		map.put("repl_backlog_size", "复制积压缓冲大小");
-		map.put("repl_backlog_first_byte_offset", "复制缓冲区里偏移量的大小");
-		map.put("repl_backlog_histlen", "此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小");
-		map.put("used_cpu_sys", "将所有redis主进程在核心态所占用的CPU时求和累计起来");
-		map.put("used_cpu_user", "将所有redis主进程在用户态所占用的CPU时求和累计起来");
-		map.put("used_cpu_sys_children", "将后台进程在核心态所占用的CPU时求和累计起来");
-		map.put("used_cpu_user_children", "将后台进程在用户态所占用的CPU时求和累计起来");
-		map.put("cluster_enabled", "实例是否启用集群模式");
-		map.put("db0", "db0的key的数量,以及带有生存期的key的数,平均存活时间");
-
-	}
-
-	private String key;
-	private String value;
-	private String description;
-
-	public String getKey() {
-		return key;
-	}
-
-	public void setKey(String key) {
-		this.key = key;
-		this.description = map.get(this.key);
-	}
-
-	public String getValue() {
-		return value;
-	}
-
-	public void setValue(String value) {
-		this.value = value;
-	}
-
-	public String getDescription() {
-		return description;
-	}
-
-	public void setDescription(String description) {
-		this.description = description;
-	}
-
-	@Override
-	public String toString() {
-		return "RedisInfo{" + "key='" + key + '\'' + ", value='" + value + '\'' + ", desctiption='" + description + '\'' + '}';
-	}
+    private static Map<String, String> map = new HashMap<>();
+
+    static {
+        map.put("redis_version", "Redis 服务器版本");
+        map.put("redis_git_sha1", "Git SHA1");
+        map.put("redis_git_dirty", "Git dirty flag");
+        map.put("os", "Redis 服务器的宿主操作系统");
+        map.put("arch_bits", " 架构(32 或 64 位)");
+        map.put("multiplexing_api", "Redis 所使用的事件处理机制");
+        map.put("gcc_version", "编译 Redis 时所使用的 GCC 版本");
+        map.put("process_id", "服务器进程的 PID");
+        map.put("run_id", "Redis 服务器的随机标识符(用于 Sentinel 和集群)");
+        map.put("tcp_port", "TCP/IP 监听端口");
+        map.put("uptime_in_seconds", "自 Redis 服务器启动以来,经过的秒数");
+        map.put("uptime_in_days", "自 Redis 服务器启动以来,经过的天数");
+        map.put("lru_clock", " 以分钟为单位进行自增的时钟,用于 LRU 管理");
+        map.put("connected_clients", "已连接客户端的数量(不包括通过从属服务器连接的客户端)");
+        map.put("client_longest_output_list", "当前连接的客户端当中,最长的输出列表");
+        map.put("client_longest_input_buf", "当前连接的客户端当中,最大输入缓存");
+        map.put("blocked_clients", "正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量");
+        map.put("used_memory", "由 Redis 分配器分配的内存总量,以字节(byte)为单位");
+        map.put("used_memory_human", "以人类可读的格式返回 Redis 分配的内存总量");
+        map.put("used_memory_rss", "从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致");
+        map.put("used_memory_peak", " Redis 的内存消耗峰值(以字节为单位)");
+        map.put("used_memory_peak_human", "以人类可读的格式返回 Redis 的内存消耗峰值");
+        map.put("used_memory_lua", "Lua 引擎所使用的内存大小(以字节为单位)");
+        map.put("mem_fragmentation_ratio", "sed_memory_rss 和 used_memory 之间的比率");
+        map.put("mem_allocator", "在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc");
+
+        map.put("redis_build_id", "redis_build_id");
+        map.put("redis_mode", "运行模式,单机(standalone)或者集群(cluster)");
+        map.put("atomicvar_api", "atomicvar_api");
+        map.put("hz", "redis内部调度(进行关闭timeout的客户端,删除过期key等等)频率,程序规定serverCron每秒运行10次。");
+        map.put("executable", "server脚本目录");
+        map.put("config_file", "配置文件目录");
+        map.put("client_biggest_input_buf", "当前连接的客户端当中,最大输入缓存,用client list命令观察qbuf和qbuf-free两个字段最大值");
+        map.put("used_memory_rss_human", "以人类可读的方式返回 Redis 已分配的内存总量");
+        map.put("used_memory_peak_perc", "内存使用率峰值");
+        map.put("total_system_memory", "系统总内存");
+        map.put("total_system_memory_human", "以人类可读的方式返回系统总内存");
+        map.put("used_memory_lua_human", "以人类可读的方式返回Lua 引擎所使用的内存大小");
+        map.put("maxmemory", "最大内存限制,0表示无限制");
+        map.put("maxmemory_human", "以人类可读的方式返回最大限制内存");
+        map.put("maxmemory_policy", "超过内存限制后的处理策略");
+        map.put("loading", "服务器是否正在载入持久化文件");
+        map.put("rdb_changes_since_last_save", "离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化");
+        map.put("rdb_bgsave_in_progress", "服务器是否正在创建rdb文件");
+        map.put("rdb_last_save_time", "离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件");
+        map.put("rdb_last_bgsave_status", "最近一次rdb持久化是否成功");
+        map.put("rdb_last_bgsave_time_sec", "最近一次成功生成rdb文件耗时秒数");
+        map.put("rdb_current_bgsave_time_sec", "如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数");
+        map.put("aof_enabled", "是否开启了aof");
+        map.put("aof_rewrite_in_progress", "标识aof的rewrite操作是否在进行中");
+        map.put("aof_rewrite_scheduled", "rewrite任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待aof子进程结束后执行rewrite ");
+
+        map.put("aof_last_rewrite_time_sec", "最近一次aof rewrite耗费的时长");
+        map.put("aof_current_rewrite_time_sec", "如果rewrite操作正在进行,则记录所使用的时间,单位秒");
+        map.put("aof_last_bgrewrite_status", "上次bgrewrite aof操作的状态");
+        map.put("aof_last_write_status", "上次aof写入状态");
+
+        map.put("total_commands_processed", "redis处理的命令数");
+        map.put("total_connections_received", "新创建连接个数,如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题,需调研代码的连接设置");
+        map.put("instantaneous_ops_per_sec", "redis当前的qps,redis内部较实时的每秒执行的命令数");
+        map.put("total_net_input_bytes", "redis网络入口流量字节数");
+        map.put("total_net_output_bytes", "redis网络出口流量字节数");
+
+        map.put("instantaneous_input_kbps", "redis网络入口kps");
+        map.put("instantaneous_output_kbps", "redis网络出口kps");
+        map.put("rejected_connections", "拒绝的连接个数,redis连接个数达到maxclients限制,拒绝新连接的个数");
+        map.put("sync_full", "主从完全同步成功次数");
+
+        map.put("sync_partial_ok", "主从部分同步成功次数");
+        map.put("sync_partial_err", "主从部分同步失败次数");
+        map.put("expired_keys", "运行以来过期的key的数量");
+        map.put("evicted_keys", "运行以来剔除(超过了maxmemory后)的key的数量");
+        map.put("keyspace_hits", "命中次数");
+        map.put("keyspace_misses", "没命中次数");
+        map.put("pubsub_channels", "当前使用中的频道数量");
+        map.put("pubsub_patterns", "当前使用的模式的数量");
+        map.put("latest_fork_usec", "最近一次fork操作阻塞redis进程的耗时数,单位微秒");
+        map.put("role", "实例的角色,是master or slave");
+        map.put("connected_slaves", "连接的slave实例个数");
+        map.put("master_repl_offset", "主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟");
+        map.put("repl_backlog_active", "复制积压缓冲区是否开启");
+        map.put("repl_backlog_size", "复制积压缓冲大小");
+        map.put("repl_backlog_first_byte_offset", "复制缓冲区里偏移量的大小");
+        map.put("repl_backlog_histlen", "此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小");
+        map.put("used_cpu_sys", "将所有redis主进程在核心态所占用的CPU时求和累计起来");
+        map.put("used_cpu_user", "将所有redis主进程在用户态所占用的CPU时求和累计起来");
+        map.put("used_cpu_sys_children", "将后台进程在核心态所占用的CPU时求和累计起来");
+        map.put("used_cpu_user_children", "将后台进程在用户态所占用的CPU时求和累计起来");
+        map.put("cluster_enabled", "实例是否启用集群模式");
+        map.put("db0", "db0的key的数量,以及带有生存期的key的数,平均存活时间");
+
+    }
+
+    private String key;
+    private String value;
+    private String description;
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+        this.description = map.get(this.key);
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public String toString() {
+        return "RedisInfo{" + "key='" + key + '\'' + ", value='" + value + '\'' + ", desctiption='" + description + '\'' + '}';
+    }
 }

+ 5 - 4
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ngalain/aop/LogRecordAspect.java

@@ -10,9 +10,10 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.servlet.http.HttpServletRequest;
 
-;
-
-
+/**
+ * @author yumeng
+ * 2019年11月12日10:04:00
+ */
 /**
  * 暂时注释掉,提高系统性能
  * //@Aspect   //定义一个切面
@@ -43,4 +44,4 @@ public class LogRecordAspect {
         log.info("请求结束,controller的返回值是 " + result);
         return result;
     }
-}
+}

+ 30 - 42
jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java

@@ -1,20 +1,17 @@
 package org.jeecg.modules.quartz.controller;
 
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import cn.com.ctop.common.module.utils.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.constant.CommonConstant;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.quartz.entity.QuartzJob;
 import org.jeecg.modules.quartz.service.IQuartzJobService;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
@@ -26,25 +23,17 @@ import org.quartz.JobKey;
 import org.quartz.Scheduler;
 import org.quartz.SchedulerException;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
 
-import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-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 javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 定时任务在线管理
@@ -64,7 +53,7 @@ public class QuartzJobController {
 
 	/**
 	 * 分页列表查询
-	 * 
+	 *
 	 * @param quartzJob
 	 * @param pageNo
 	 * @param pageSize
@@ -85,7 +74,7 @@ public class QuartzJobController {
 
 	/**
 	 * 添加定时任务
-	 * 
+	 *
 	 * @param quartzJob
 	 * @return
 	 */
@@ -111,7 +100,7 @@ public class QuartzJobController {
 
 	/**
 	 * 更新定时任务
-	 * 
+	 *
 	 * @param quartzJob
 	 * @return
 	 */
@@ -138,7 +127,7 @@ public class QuartzJobController {
 
 	/**
 	 * 通过id删除
-	 * 
+	 *
 	 * @param id
 	 * @return
 	 */
@@ -160,17 +149,17 @@ public class QuartzJobController {
 
 	/**
 	 * 批量删除
-	 * 
+	 *
 	 * @param ids
 	 * @return
 	 */
 	@RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE)
 	public Result<QuartzJob> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
-		Result<QuartzJob> result = new Result<QuartzJob>();
+		Result<QuartzJob> result = new Result<>();
 		if (ids == null || "".equals(ids.trim())) {
 			result.error500("参数不识别!");
 		} else {
-			for (String id : Arrays.asList(ids.split(","))) {
+			for (String id : Arrays.asList(ids.split(StringUtils.COMMA))) {
 				QuartzJob job = quartzJobService.getById(id);
 				quartzJobService.deleteAndStopJob(job);
 			}
@@ -181,8 +170,7 @@ public class QuartzJobController {
 
 	/**
 	 * 暂停定时任务
-	 * 
-	 * @param job
+	 * @param jobClassName 任务类名
 	 * @return
 	 */
 	@GetMapping(value = "/pause")
@@ -205,8 +193,8 @@ public class QuartzJobController {
 
 	/**
 	 * 启动定时任务
-	 * 
-	 * @param job
+	 *
+	 * @param jobClassName
 	 * @return
 	 */
 	@GetMapping(value = "/resume")
@@ -223,7 +211,7 @@ public class QuartzJobController {
 
 	/**
 	 * 通过id查询
-	 * 
+	 *
 	 * @param id
 	 * @return
 	 */
@@ -242,9 +230,9 @@ public class QuartzJobController {
 
 	/**
 	 * 导出excel
-	 * 
+	 *
 	 * @param request
-	 * @param response
+	 * @param quartzJob
 	 */
 	@RequestMapping(value = "/exportXls")
 	public ModelAndView exportXls(HttpServletRequest request, QuartzJob quartzJob) {
@@ -263,7 +251,7 @@ public class QuartzJobController {
 
 	/**
 	 * 通过excel导入数据
-	 * 
+	 *
 	 * @param request
 	 * @param response
 	 * @return
@@ -273,7 +261,7 @@ public class QuartzJobController {
 		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
 		Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
 		for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-			MultipartFile file = entity.getValue();// 获取上传文件对象
+			MultipartFile file = entity.getValue();
 			ImportParams params = new ImportParams();
 			params.setTitleRows(2);
 			params.setHeadRows(1);

+ 8 - 19
jeecg-boot-module-system/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java

@@ -1,28 +1,17 @@
 package org.jeecg.modules.quartz.service.impl;
 
-import java.util.List;
-
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.modules.quartz.entity.QuartzJob;
 import org.jeecg.modules.quartz.mapper.QuartzJobMapper;
 import org.jeecg.modules.quartz.service.IQuartzJobService;
-import org.quartz.CronScheduleBuilder;
-import org.quartz.CronTrigger;
-import org.quartz.Job;
-import org.quartz.JobBuilder;
-import org.quartz.JobDetail;
-import org.quartz.JobKey;
-import org.quartz.Scheduler;
-import org.quartz.SchedulerException;
-import org.quartz.TriggerBuilder;
-import org.quartz.TriggerKey;
+import org.quartz.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-
-import lombok.extern.slf4j.Slf4j;
+import java.util.List;
 
 /**
  * @Description: 定时任务在线管理
@@ -71,7 +60,7 @@ public class QuartzJobServiceImpl extends ServiceImpl<QuartzJobMapper, QuartzJob
 
 	/**
 	 * 编辑&启停定时任务
-	 * @throws SchedulerException 
+     * @throws SchedulerException
 	 */
 	@Override
 	public boolean editAndScheduleJob(QuartzJob quartzJob) throws SchedulerException {
@@ -97,7 +86,7 @@ public class QuartzJobServiceImpl extends ServiceImpl<QuartzJobMapper, QuartzJob
 
 	/**
 	 * 添加定时任务
-	 * 
+     *
 	 * @param jobClassName
 	 * @param cronExpression
 	 * @param parameter
@@ -126,7 +115,7 @@ public class QuartzJobServiceImpl extends ServiceImpl<QuartzJobMapper, QuartzJob
 
 	/**
 	 * 删除定时任务
-	 * 
+     *
 	 * @param jobClassName
 	 */
 	private void schedulerDelete(String jobClassName) {
@@ -142,7 +131,7 @@ public class QuartzJobServiceImpl extends ServiceImpl<QuartzJobMapper, QuartzJob
 
 	private static Job getClass(String classname) throws Exception {
 		Class<?> class1 = Class.forName(classname);
-		return (Job) class1.newInstance();
+        return (Job) class1.getDeclaredConstructor().newInstance();
 	}
 
 }

+ 2 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/LoginController.java

@@ -60,7 +60,8 @@ public class LoginController {
         String username = sysLoginModel.getUsername();
         String password = sysLoginModel.getPassword();
         //步骤1:TODO 前端密码加密,后端进行密码解密,防止传输密码篡改等问题,不配就直接提示密码错误,并记录日志后期进行统计分析是否锁定
-        password = AesEncryptUtil.desEncrypt(sysLoginModel.getPassword()).trim();//密码解密
+        //密码解密
+        password = AesEncryptUtil.desEncrypt(sysLoginModel.getPassword()).trim();
         //1. 校验用户是否有效
         SysUser sysUser = sysUserService.getUserByName(username);
         String departId = sysDepartService.selectIdByOrdCode(sysUser.getOrgCode());

+ 19 - 54
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictController.java

@@ -1,33 +1,11 @@
 package org.jeecg.modules.system.controller;
 
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.util.ArrayList;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import com.alibaba.fastjson.JSON;
-import org.jeecg.common.api.vo.Result;
-import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.common.system.vo.DictModel;
-import org.jeecg.common.util.oConvertUtils;
-import org.jeecg.modules.demo.test.entity.JeecgOrderCustomer;
-import org.jeecg.modules.demo.test.entity.JeecgOrderMain;
-import org.jeecg.modules.demo.test.entity.JeecgOrderTicket;
-import org.jeecg.modules.demo.test.vo.JeecgOrderMainPage;
-import org.jeecg.modules.system.entity.SysDict;
-import org.jeecg.modules.system.entity.SysDictItem;
-import org.jeecg.modules.system.model.SysDictTree;
-
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CacheConstant;
@@ -52,27 +30,14 @@ import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-
-import lombok.extern.slf4j.Slf4j;
-
-import org.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.util.*;
 
 
 /**
@@ -155,7 +120,7 @@ public class SysDictController {
 			if(dictCode.indexOf(",")!=-1) {
 				//关联表字典(举例:sys_user,realname,id)
 				String[] params = dictCode.split(",");
-				
+
 				if(params.length<3) {
 					result.error500("字典Code格式不正确!");
 					return result;
@@ -163,7 +128,7 @@ public class SysDictController {
 				//SQL注入校验(只限制非法串改数据库)
 				final String[] sqlInjCheck = {params[0],params[1],params[2]};
 				SqlInjectionUtil.filterContent(sqlInjCheck);
-				
+
 				if(params.length==4) {
 					//SQL注入校验(查询条件SQL 特殊check,此方法仅供此处使用)
 					SqlInjectionUtil.specialFilterContent(params[3]);
@@ -339,7 +304,7 @@ public class SysDictController {
 		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
 		Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
 		for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-			MultipartFile file = entity.getValue();// 获取上传文件对象
+            MultipartFile file = entity.getValue();
 			ImportParams params = new ImportParams();
 			params.setTitleRows(2);
 			params.setHeadRows(2);
@@ -368,9 +333,9 @@ public class SysDictController {
 		}
 		return Result.error("文件导入失败!");
 	}
-	
-	/**
-	 * 大数据量的字典表 走异步加载  即前端输入内容过滤数据 
+
+    /**
+     * 大数据量的字典表 走异步加载  即前端输入内容过滤数据
 	 * @param dictCode
 	 * @return
 	 */
@@ -401,8 +366,8 @@ public class SysDictController {
 
 		return result;
 	}
-	
-	/**
+
+    /**
 	 * 根据字典code加载字典text 返回
 	 */
 	@RequestMapping(value = "/loadDictItem/{dictCode}", method = RequestMethod.GET)
@@ -430,8 +395,8 @@ public class SysDictController {
 
 		return result;
 	}
-	
-	/**
+
+    /**
 	 * 根据表名——显示字段-存储字段 pid 加载树形数据
 	 */
 	@RequestMapping(value = "/loadTreeData", method = RequestMethod.GET)

+ 9 - 5
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java

@@ -75,7 +75,7 @@ public class SysPermissionController {
 
 //	/**
 //	 * 查询用户拥有的菜单权限和按钮权限(根据用户账号)
-//	 * 
+//	 *
 //	 * @return
 //	 */
 //	@RequestMapping(value = "/queryByUser", method = RequestMethod.GET)
@@ -251,8 +251,10 @@ public class SysPermissionController {
             getTreeModelList(treeList, list, null);
 
             Map<String, Object> resMap = new HashMap<String, Object>();
-            resMap.put("treeList", treeList); // 全部树节点数据
-            resMap.put("ids", ids);// 全部树ids
+            // 全部树节点数据
+            resMap.put("treeList", treeList);
+            // 全部树ids
+            resMap.put("ids", ids);
             result.setResult(resMap);
             result.setSuccess(true);
         } catch (Exception e) {
@@ -467,9 +469,11 @@ public class SysPermissionController {
         } else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_0) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_1)) {
             json.put("id", permission.getId());
             if (permission.isRoute()) {
-                json.put("route", "1");// 表示生成路由
+                // 表示生成路由
+                json.put("route", "1");
             } else {
-                json.put("route", "0");// 表示不生成路由
+                // 表示不生成路由
+                json.put("route", "0");
             }
 
             if (isWwwHttpUrl(permission.getUrl())) {

+ 51 - 75
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java

@@ -1,35 +1,23 @@
 package org.jeecg.modules.system.controller;
 
 
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authz.annotation.RequiresRoles;
-import org.jeecg.common.api.vo.Result;
-import org.apache.shiro.authz.annotation.RequiresRoles;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CacheConstant;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.system.entity.SysPermission;
 import org.jeecg.modules.system.entity.SysPermissionDataRule;
 import org.jeecg.modules.system.entity.SysRole;
 import org.jeecg.modules.system.entity.SysRolePermission;
-
-import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.model.TreeModel;
 import org.jeecg.modules.system.service.ISysPermissionDataRuleService;
 import org.jeecg.modules.system.service.ISysPermissionService;
@@ -42,28 +30,15 @@ import org.jeecgframework.poi.excel.entity.ImportParams;
 import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-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.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
 
-import com.alibaba.fastjson.JSON;
-import org.jeecg.common.system.vo.LoginUser;
-import org.apache.shiro.SecurityUtils;
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-
-import lombok.extern.slf4j.Slf4j;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.*;
 
 /**
  * <p>
@@ -79,13 +54,13 @@ import lombok.extern.slf4j.Slf4j;
 public class SysRoleController {
 	@Autowired
 	private ISysRoleService sysRoleService;
-	
+
 	@Autowired
 	private ISysPermissionDataRuleService sysPermissionDataRuleService;
-	
+
 	@Autowired
 	private ISysRolePermissionService sysRolePermissionService;
-	
+
 	@Autowired
 	private ISysPermissionService sysPermissionService;
 
@@ -110,7 +85,7 @@ public class SysRoleController {
 		result.setResult(pageList);
 		return result;
 	}
-	
+
 	/**
 	  *   添加
 	 * @param role
@@ -129,8 +104,8 @@ public class SysRoleController {
 		}
 		return result;
 	}
-	
-	/**
+
+    /**
 	  *  编辑
 	 * @param role
 	 * @return
@@ -149,11 +124,11 @@ public class SysRoleController {
 				result.success("修改成功!");
 			}
 		}
-		
-		return result;
+
+        return result;
 	}
-	
-	/**
+
+    /**
 	  *   通过id删除
 	 * @param id
 	 * @return
@@ -171,11 +146,11 @@ public class SysRoleController {
 				result.success("删除成功!");
 			}
 		}
-		
-		return result;
+
+        return result;
 	}
-	
-	/**
+
+    /**
 	  *  批量删除
 	 * @param ids
 	 * @return
@@ -192,8 +167,8 @@ public class SysRoleController {
 		}
 		return result;
 	}
-	
-	/**
+
+    /**
 	  * 通过id查询
 	 * @param id
 	 * @return
@@ -210,8 +185,8 @@ public class SysRoleController {
 		}
 		return result;
 	}
-	
-	@RequestMapping(value = "/queryall", method = RequestMethod.GET)
+
+    @RequestMapping(value = "/queryall", method = RequestMethod.GET)
 	public Result<List<SysRole>> queryall() {
 		Result<List<SysRole>> result = new Result<>();
 		List<SysRole> list = sysRoleService.list();
@@ -223,14 +198,15 @@ public class SysRoleController {
 		}
 		return result;
 	}
-	
-	/**
+
+    /**
 	  * 校验角色编码唯一
 	 */
 	@RequestMapping(value = "/checkRoleCode", method = RequestMethod.GET)
 	public Result<Boolean> checkUsername(String id,String roleCode) {
 		Result<Boolean> result = new Result<>();
-		result.setResult(true);//如果此参数为false则程序发生异常
+        //如果此参数为false则程序发生异常
+        result.setResult(true);
 		log.info("--验证角色编码是否唯一---id:"+id+"--roleCode:"+roleCode);
 		try {
 			SysRole role = null;
@@ -294,7 +270,7 @@ public class SysRoleController {
 		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
 		Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
 		for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-			MultipartFile file = entity.getValue();// 获取上传文件对象
+            MultipartFile file = entity.getValue();
 			ImportParams params = new ImportParams();
 			params.setTitleRows(2);
 			params.setHeadRows(1);
@@ -318,8 +294,8 @@ public class SysRoleController {
 		}
 		return Result.error("文件导入失败!");
 	}
-	
-	/**
+
+    /**
 	 * 查询数据规则数据
 	 */
 	@GetMapping(value = "/datarule/{permissionId}/{roleId}")
@@ -346,8 +322,8 @@ public class SysRoleController {
 			//TODO 以后按钮权限的查询也走这个请求 无非在map中多加两个key
 		}
 	}
-	
-	/**
+
+    /**
 	 * 保存数据规则至角色菜单关联表
 	 */
 	@PostMapping(value = "/datarule")
@@ -373,9 +349,9 @@ public class SysRoleController {
 		}
 		return Result.ok("保存成功!");
 	}
-	
-	
-	/**
+
+
+    /**
 	 * 用户角色授权功能,查询菜单权限树
 	 * @param request
 	 * @return
@@ -395,9 +371,11 @@ public class SysRoleController {
 			}
 			List<TreeModel> treeList = new ArrayList<>();
 			getTreeModelList(treeList, list, null);
-			Map<String,Object> resMap = new HashMap<String,Object>();
-			resMap.put("treeList", treeList); //全部树节点数据
-			resMap.put("ids", ids);//全部树ids
+            Map<String, Object> resMap = new HashMap<>();
+            //全部树节点数据
+            resMap.put("treeList", treeList);
+            //全部树ids
+            resMap.put("ids", ids);
 			result.setResult(resMap);
 			result.setSuccess(true);
 		} catch (Exception e) {
@@ -405,8 +383,8 @@ public class SysRoleController {
 		}
 		return result;
 	}
-	
-	private void getTreeModelList(List<TreeModel> treeList,List<SysPermission> metaList,TreeModel temp) {
+
+    private void getTreeModelList(List<TreeModel> treeList,List<SysPermission> metaList,TreeModel temp) {
 		for (SysPermission permission : metaList) {
 			String tempPid = permission.getParentId();
 			TreeModel tree = new TreeModel(permission.getId(), tempPid, permission.getName(),permission.getRuleFlag(), permission.isLeaf());
@@ -421,9 +399,7 @@ public class SysRoleController {
 					getTreeModelList(treeList, metaList, tree);
 				}
 			}
-			
-		}
+
+        }
 	}
-	
-	
 }

+ 34 - 33
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/model/TreeModel.java

@@ -1,36 +1,37 @@
 package org.jeecg.modules.system.model;
 
+import org.jeecg.modules.system.entity.SysPermission;
+
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.jeecg.modules.system.entity.SysPermission;
-
 /**
-  * 树形列表用到
+ * @author jeecg-boot
+ * 2019年11月12日11:09:37
  */
 
 public class TreeModel implements Serializable {
-	
+
 	private static final long serialVersionUID = 4013193970046502756L;
 
 	private String key;
-	
+
 	private String title;
-	
-	private String slotTitle;
-	
-	private boolean isLeaf;
-	
-	private String icon;
-	
-	private Integer ruleFlag;
-	
-	private Map<String,String> scopedSlots;
-	
-	public Map<String, String> getScopedSlots() {
+
+    private String slotTitle;
+
+    private boolean isLeaf;
+
+    private String icon;
+
+    private Integer ruleFlag;
+
+    private Map<String,String> scopedSlots;
+
+    public Map<String, String> getScopedSlots() {
 		return scopedSlots;
 	}
 
@@ -69,8 +70,8 @@ public class TreeModel implements Serializable {
 	public void setIcon(String icon) {
 		this.icon = icon;
 	}
-	
-	private List<TreeModel> children;
+
+    private List<TreeModel> children;
 
 	public List<TreeModel> getChildren() {
 		return children;
@@ -81,9 +82,9 @@ public class TreeModel implements Serializable {
 	}
 
 	public TreeModel() {
-		
-	}
-	
+
+    }
+
 	public TreeModel(SysPermission permission) {
 		this.key = permission.getId();
 		this.icon = permission.getIcon();
@@ -97,8 +98,8 @@ public class TreeModel implements Serializable {
 			this.children = new ArrayList<TreeModel>();
 		}
 	}
-	 
-	 public TreeModel(String key,String parentId,String slotTitle,Integer ruleFlag,boolean isLeaf) {
+
+    public TreeModel(String key,String parentId,String slotTitle,Integer ruleFlag,boolean isLeaf) {
     	this.key = key;
     	this.parentId = parentId;
     	this.ruleFlag=ruleFlag;
@@ -112,15 +113,15 @@ public class TreeModel implements Serializable {
     		this.children = new ArrayList<TreeModel>();
     	}
     }
-	 
-	 private String parentId;
-		
-	private String label;
-	
-	private String value;
-	
-	
-	public String getParentId() {
+
+    private String parentId;
+
+    private String label;
+
+    private String value;
+
+
+    public String getParentId() {
 		return parentId;
 	}
 

+ 13 - 14
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java

@@ -1,12 +1,9 @@
 package org.jeecg.modules.system.service.impl;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-
-import javax.annotation.Resource;
-
+import cn.com.ctop.common.module.utils.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.modules.system.entity.SysAnnouncement;
 import org.jeecg.modules.system.entity.SysAnnouncementSend;
@@ -16,9 +13,11 @@ import org.jeecg.modules.system.service.ISysAnnouncementService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
 
 /**
  * @Description: 系统通告表
@@ -31,10 +30,10 @@ public class SysAnnouncementServiceImpl extends ServiceImpl<SysAnnouncementMappe
 
 	@Resource
 	private SysAnnouncementMapper sysAnnouncementMapper;
-	
+
 	@Resource
 	private SysAnnouncementSendMapper sysAnnouncementSendMapper;
-	
+
 	@Transactional
 	@Override
 	public void saveAnnouncement(SysAnnouncement sysAnnouncement) {
@@ -58,7 +57,7 @@ public class SysAnnouncementServiceImpl extends ServiceImpl<SysAnnouncementMappe
 			}
 		}
 	}
-	
+
 	/**
 	 * @功能:编辑消息信息
 	 */
@@ -70,7 +69,7 @@ public class SysAnnouncementServiceImpl extends ServiceImpl<SysAnnouncementMappe
 		if(sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_UESR)) {
 			// 2.补充新的通知用户数据
 			String userId = sysAnnouncement.getUserIds();
-			String[] userIds = userId.substring(0, (userId.length()-1)).split(",");
+			String[] userIds = userId.substring(0, (userId.length() - 1)).split(StringUtils.COMMA);
 			String anntId = sysAnnouncement.getId();
 			Date refDate = new Date();
 			for(int i=0;i<userIds.length;i++) {

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

@@ -142,3 +142,8 @@ jeecg:
     image-upload: D://upFiles//image//
     chrome-driver: D://chromedriver.exe
     csv-upload: D://upFiles//csv//
+kuaishou:
+  group-control:
+    path: http://39.106.184.70
+    port: 4723
+

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

@@ -61,10 +61,8 @@ spring:
   datasource:
     druid:
       stat-view-servlet:
-
         loginUsername: admin
         loginPassword: hcst2016
-
         enabled: true
       web-stat-filter:
         enabled: true
@@ -74,7 +72,6 @@ spring:
         # 连接池的配置信息
         # 初始化大小,最小,最大
         connection-init-sql: set names utf8mb4
-
         initial-size: 5
         min-idle: 5
         maxActive: 20
@@ -111,7 +108,6 @@ spring:
   redis:
     database: 0
     host: 127.0.0.1
-
     lettuce:
       pool:
         max-active: 8   #最大连接数据库连接数,设 0 为没有限制
@@ -124,8 +120,6 @@ spring:
 #mybatis plus 设置
 mybatis-plus:
   mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml,classpath*:cn/com/ctop/**/xml/*Mapper.xml
-
-
   global-config:
     # 关闭MP3.0自带的banner
     banner: false
@@ -145,7 +139,8 @@ jeecg:
     image-upload: /mnt/upload/image/
     chrome-driver: /usr/bin/chromedriver
     csv-upload: /mnt/upload/csv/
-org:
-  quartz:
-    threadPool:
-      threadCount: 20
+kuaishou:
+  group-control:
+    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

+ 4 - 4
jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei

@@ -38,7 +38,7 @@
           <a-icon type="delete"/>删除
           </a-menu-item>
         </a-menu>
-        <a-button style="margin-left: 8px"> 批量操作 
+        <a-button style="margin-left: 8px"> 批量操作
           <a-icon type="down" />
         </a-button>
       </a-dropdown>
@@ -81,7 +81,7 @@
       </a-table>
     </div>
     <!-- table区域-end -->
-    
+
     <a-tabs defaultActiveKey="1">
     <#list subTables as sub><#rt/>
       <a-tab-pane tab="${sub.ftlDescription}" :key="refKeys[${sub_index}]" :forceRender="true">
@@ -147,7 +147,7 @@
             scopedSlots: { customRender: 'action' },
           }
         ],
- 
+
         //操作url
         type: "radio",
         url: {
@@ -222,4 +222,4 @@
 </script>
 <style scoped>
   @import '~@assets/less/common.less'
-</style>
+</style>

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

@@ -1,202 +1,21 @@
 package org.jeecg;
 
-import cn.com.ctop.bytedance.service.IReportService;
-import cn.com.ctop.common.module.entity.CtopOauthToken;
-import cn.com.ctop.common.module.service.ICtopOauthTokenService;
-import cn.com.ctop.common.module.service.IFileInfoService;
-import cn.com.ctop.common.module.utils.CtopAdConstant;
-import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
-import com.alibaba.fastjson.JSONObject;
+import cn.com.ctop.crawler.modules.appium.service.IAppiumJobService;
 import lombok.extern.slf4j.Slf4j;
-import org.jeecg.common.util.DateUtils;
-import org.jeecg.modules.ctop.service.ICreateInternalService;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
 @RunWith(SpringRunner.class)
 @SpringBootTest
 @Slf4j
 public class SampleTest {
-
     @Autowired
-    private ICreateInternalService createInternalService;
-    @Autowired
-    private IKuaishouInterfaceService kuaishouInterfaceService;
-
-    @Autowired
-    private IReportService reportService;
-
+    private IAppiumJobService jobService;
     @Test
     public void testJob() {
-
-        Date getDate = DateUtils.addDay(new Date(), -1);
-        //1:查询当日数据
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(2 + "");
-        if (null == tokens || tokens.size() <= 0) {
-            log.info("定时获取头条数据异常:为获取到可用的token");
-            return;
-        }
-        tokens.forEach(token -> {
-//            //2:获取广告计划信息数据
-            kuaishouInterfaceService.getAdvertiserCampaignReportHourly(token, getDate, getDate);
-//            //3:获取广告组信息数据
-            kuaishouInterfaceService.getAdvertiserGroupReportHourly(token, getDate, getDate);
-//            //4: 获取广告创意信息数据
-            kuaishouInterfaceService.getAdvertiserCreativeReportHourly(token, getDate, getDate);
-        });
+        jobService.loginTask(2L);
     }
-
-    @Autowired
-    IFileInfoService fileInfoService;
-    @Test
-    public void testVideoList() throws IOException {
-        CtopOauthToken token = tokenService.getOauthTokenByAccountId("1232598");
-        kuaishouInterfaceService.getVideoList(token);
-    }
-
-
-    @Test
-    public void testNg() {
-        JSONObject json = new JSONObject();
-        createInternalService.createInternal(json);
-    }
-
-    static ExecutorService executorService = null;
-    static CountDownLatch countDownLatch = null; //线程计数器
-
-    @Test
-    public void loadData() throws InterruptedException {
-        Date getDate = new Date();
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
-        String hour = simpleDateFormat.format(getDate);
-        if (null != hour && hour.equals("00")) {
-            getDate = DateUtils.addDay(getDate, -1);
-        }
-        //1:查询当日数据
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
-        if (null == tokens || tokens.size() <= 0) {
-            log.info("定时获取头条数据异常:为获取到可用的token");
-            return;
-        }
-
-        executorService = Executors.newFixedThreadPool(10);
-        countDownLatch = new CountDownLatch(tokens.size());
-        Date finalGetDate = getDate;
-        tokens.forEach(token -> {
-            executorService.submit(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        kuaishouInterfaceService.getAdvertiserReportHourly(token, finalGetDate, finalGetDate);
-                        //2:获取广告计划信息数据
-                        kuaishouInterfaceService.getAdvertiserCampaignReportHourly(token, finalGetDate, finalGetDate);
-                        //3:获取广告组信息数据
-                        kuaishouInterfaceService.getAdvertiserGroupReportHourly(token, finalGetDate, finalGetDate);
-                        //4: 获取广告创意信息数据
-                        kuaishouInterfaceService.getAdvertiserCreativeReportHourly(token, finalGetDate, finalGetDate);
-
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    } finally {
-                        countDownLatch.countDown();
-                    }
-                }
-            });
-        });
-        try {
-            countDownLatch.await();
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-        for (CtopOauthToken token : tokens) {
-            kuaishouInterfaceService.updateCreativeReportHourlyStatistic(token, getDate);
-        }
-        executorService.shutdown();
-    }
-    @Test
-    public void loadAllMetiaralInfo() throws InterruptedException {
-        Long start = System.currentTimeMillis();
-        Date getDate = new Date();
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
-        String hour = simpleDateFormat.format(getDate);
-        if (null != hour && hour.equals("00")) {
-            getDate = DateUtils.addDay(getDate, -1);
-        }
-        //1:查询当日数据
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
-        if (null == tokens || tokens.size() <= 0) {
-            log.info("定时获取头条数据异常:为获取到可用的token");
-            return;
-        }
-        int times = tokens.size();
-        executorService = Executors.newFixedThreadPool(10);
-        countDownLatch = new CountDownLatch(times);
-        tokens.forEach(token -> {
-            executorService.submit(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        Long start = System.currentTimeMillis();
-                        //1:获取全量广告计划数据
-                        kuaishouInterfaceService.getCampaignList(token);
-                        Long end1 = System.currentTimeMillis();
-                        //1:获取全量广告组数据
-                        kuaishouInterfaceService.getGroupList(token);
-                        Long end2 = System.currentTimeMillis();
-                        //1:获取全量创意数据
-                        kuaishouInterfaceService.getCreativeList(token);
-                        Long end3 = System.currentTimeMillis();
-                        //2:获取全量视频素材数据
-                        kuaishouInterfaceService.getVideoList(token);
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    } finally {
-                        countDownLatch.countDown();
-                    }
-
-                }
-            });
-        });
-        countDownLatch.await();
-        System.out.println("数据获取完成");
-        //关掉线程池
-        executorService.shutdown();
-        Long end1 = System.currentTimeMillis();
-        System.out.println("#######################" + (end1 - start) + "#################");
-        log.info("物料数据同步完成");
-
-//        for (CtopOauthToken token : tokens) {
-//            kuaishouInterfaceService.getAdvertiserReportHourly(token, getDate, getDate);
-//        }
-//        for (CtopOauthToken token : tokens) {
-//            //2:获取广告计划信息数据
-//            kuaishouInterfaceService.getAdvertiserCampaignReportHourly(token, getDate, getDate);
-//        }
-//        for (CtopOauthToken token : tokens) {
-//            //3:获取广告组信息数据
-//            kuaishouInterfaceService.getAdvertiserGroupReportHourly(token, getDate, getDate);
-//        }
-//        for (CtopOauthToken token : tokens) {
-//            //4: 获取广告创意信息数据
-//            kuaishouInterfaceService.getAdvertiserCreativeReportHourly(token, getDate, getDate);
-//            kuaishouInterfaceService.updateCreativeReportHourlyStatistic(token, getDate);
-//        }
-//
-//        Long end2 = System.currentTimeMillis();
-//        System.out.println("#######################"+(end2-end1)+"#################");
-    }
-
-    @Autowired
-    private ICtopOauthTokenService tokenService;
 }

+ 2 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/MaterialInfo.java

@@ -43,6 +43,8 @@ public class MaterialInfo {
     @Excel(name = "url", width = 15)
     @ApiModelProperty(value = "url")
     private String url;
+
+    private String type;
     /**
      * status
      */

+ 15 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/CtopOauthTokenMapper.java

@@ -12,9 +12,24 @@ import java.util.List;
  * @Version: V1.0
  */
 public interface CtopOauthTokenMapper extends BaseMapper<CtopOauthToken> {
+    /**
+     * 全查
+     *
+     * @return
+     */
     List<CtopOauthToken> selectAll();
 
+    /**
+     * 更新
+     * @param oauthToken
+     * @return
+     */
     int updateByPrimaryKeySelective(CtopOauthToken oauthToken);
 
+    /**
+     * 根据accountId查询
+     * @param accountId
+     * @return
+     */
     CtopOauthToken selectByAccountId(Long accountId);
 }

+ 19 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/IBindAccountAuthService.java

@@ -13,9 +13,28 @@ import java.io.UnsupportedEncodingException;
  */
 public interface IBindAccountAuthService extends IService<BindAccountAuth> {
 
+    /**
+     * 获取快手url
+     *
+     * @param state
+     * @return
+     * @throws UnsupportedEncodingException
+     */
     String getKuaishouCodeUrl(String state) throws UnsupportedEncodingException;
 
+    /**
+     * 获取头条url
+     * @param state
+     * @return
+     * @throws UnsupportedEncodingException
+     */
     String getByteDanceCodeUrl(String state) throws UnsupportedEncodingException;
 
+    /**
+     * 绑定账号
+     * @param accountId
+     * @param type
+     * @param state
+     */
     void addBindAccount(Long accountId, String type, String state);
 }

+ 6 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/IBindAccountLoginService.java

@@ -10,5 +10,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @Version: V1.0
  */
 public interface IBindAccountLoginService extends IService<BindAccountLogin> {
+    /**
+     * 查询
+     *
+     * @param accountId
+     * @return
+     */
     BindAccountLogin selectByAccountId(String accountId);
 }

+ 2 - 1
module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialInfoService.java

@@ -3,6 +3,7 @@ package cn.com.ctop.common.module.service;
 import cn.com.ctop.common.module.entity.MaterialInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.io.IOException;
 import java.util.Map;
 
 /**
@@ -17,5 +18,5 @@ public interface IMaterialInfoService extends IService<MaterialInfo> {
 
     Map<String, Object> checkMaterialInfo(String code);
 
-    Map<String, Object> insert(String userId, String code, String url);
+    Map<String, Object> insert(String userId, String code, String url) throws IOException;
 }

+ 0 - 6
module-common/src/main/java/cn/com/ctop/common/module/service/impl/CtopOauthTokenServiceImpl.java

@@ -71,12 +71,6 @@ public class CtopOauthTokenServiceImpl extends ServiceImpl<CtopOauthTokenMapper,
         }
         JSONObject data = resultObject.getJSONObject("data");
         CtopOauthToken refreshToken = new CtopOauthToken(token, data);
-       /* cTopOauthTokenMapper.deleteById(token.getId());
-        cTopOauthTokenMapper.insert(refreshToken);
-        CtopOauthToken topOauthToken = new CtopOauthToken();
-        topOauthToken.setAccessToken(refreshToken.getAccessToken());
-        topOauthToken.setRefreshToken(refreshToken.getRefreshToken());*/
-
         QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("account_id", accountId);
         queryWrapper.eq("media_id", 1);

+ 8 - 4
module-common/src/main/java/cn/com/ctop/common/module/service/impl/FileInfoServiceImpl.java

@@ -226,7 +226,8 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
         }
         //3: 根据MD5值查询是否已经上传过服务器
         List<FileInfo> getFileInfo = getFileInfoByMd5(md5Hex);
-        if (null != getFileInfo && getFileInfo.size() > 0) {//表示已经上传过服务器
+        //表示已经上传过服务器
+        if (null != getFileInfo && getFileInfo.size() > 0) {
             result.put("code", 0);
             result.put("file", getFileInfo.get(0));
             result.put("message", "图片上传成功");
@@ -311,7 +312,8 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
         //这里服务器上要将此图保存的路径
         String savePath = this.imageUploadPath + fileName;
         try {
-            URL url = new URL("https:" + fileUrl);/*将网络资源地址传给,即赋值给url*/
+            /*将网络资源地址传给,即赋值给url*/
+            URL url = new URL("https:" + fileUrl);
             /*此为联系获得网络资源的固定格式用法,以便后面的in变量获得url截取网络资源的输入流*/
             HttpURLConnection connection = (HttpURLConnection) url.openConnection();
             DataInputStream in = new DataInputStream(connection.getInputStream());
@@ -328,7 +330,8 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
             in.close();
             connection.disconnect();
             //返回内容是保存后的完整的URL
-            return savePath;/*网络资源截取并存储本地成功返回true*/
+            /*网络资源截取并存储本地成功返回true*/
+            return savePath;
 
         } catch (Exception e) {
             return null;
@@ -348,7 +351,8 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
         }
         //3: 根据MD5值查询是否已经上传过服务器
         List<FileInfo> getFileInfo = getFileInfoByMd5(md5Hex);
-        if (null != getFileInfo && getFileInfo.size() > 0) {//表示已经上传过服务器
+        //表示已经上传过服务器
+        if (null != getFileInfo && getFileInfo.size() > 0) {
             result.put("code", 0);
             result.put("file", getFileInfo.get(0));
             result.put("message", "视频上传成功");

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

@@ -9,9 +9,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.regex.Pattern;
 
 /**
  * 素材信息
@@ -46,9 +48,21 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
         }
     }
 
+    public boolean imgLocation(String fileName) throws IOException {
+        String reg = "(mp4|flv|avi|rm|rmvb|wmv)";
+        Pattern p = Pattern.compile(reg);
+        return p.matcher(fileName).find();
+    }
+
+    public static void main(String[] args) {
+        String reg = "(mp4|flv|avi|rm|rmvb|wmv)";
+        Pattern p = Pattern.compile(reg);
+        System.out.println(p.matcher("https://ctop-media.oss-cn-beijing.aliyuncs.com/video/2019-10-30/ios%E6%8E%A8%E5%B9%BF%E8%A7%86%E9%A2%91-1572437289724.mp4").find());
+    }
     @Override
-    public Map<String, Object> insert(String userId, String code, String url) {
+    public Map<String, Object> insert(String userId, String code, String url) throws IOException {
         Map<String, Object> resultMap = new HashMap<>();
+        Boolean isVideo = imgLocation(url);
         MaterialInfo info = new MaterialInfo();
         info.setId(code);
         info.setCode(code);
@@ -57,6 +71,11 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
         info.setUserId(userId);
         info.setCreateTime(new Date());
         info.setUpdateTime(new Date());
+        if (isVideo) {
+            info.setType("VIDEO");
+        } else {
+            info.setType("IMAGE");
+        }
         this.save(info);
         ResultMapUtils.setResultMap(resultMap, StatusCode.COMMON_SUCCESS.getCode());
         return resultMap;

+ 2 - 2
module-common/src/main/java/cn/com/ctop/common/module/utils/Base64Utils.java

@@ -8,9 +8,9 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 public class Base64Utils {
+    private static Pattern REUNICODE_PATTERN = Pattern.compile("[0-9]+");
     public static String decode1(String s) {
-        Pattern reUnicode = Pattern.compile("\\\\u([0-9a-zA-Z]{4})");
-        Matcher m = reUnicode.matcher(s);
+        Matcher m = REUNICODE_PATTERN.matcher(s);
         StringBuffer sb = new StringBuffer(s.length());
         while (m.find()) {
             m.appendReplacement(sb,

+ 4 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/CsvUtils.java

@@ -9,6 +9,10 @@ import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 
+/**
+ * @author yumeng
+ * 2019年11月12日10:04:00
+ */
 public class CsvUtils {
     public static void checkandCreateFile(String outPath) {
         File file = new File(outPath);

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

@@ -60,10 +60,6 @@ public class FileUploadTool {
             bflag = false;
         }
         if (bflag) {
-            //  String logoPathDir = "/video/";
-            //    String logoRealPathDir = request.getSession().getServletContext().getRealPath(logoPathDir);
-            // 上传到本地磁盘
-            // String logoRealPathDir = "E:/upload";
             File logoSaveFile = new File(savaPath);
             if (!logoSaveFile.exists()) {
                 logoSaveFile.mkdirs();

+ 9 - 12
module-common/src/main/java/cn/com/ctop/common/module/utils/HttpClientUtils.java

@@ -2,9 +2,6 @@ package cn.com.ctop.common.module.utils;
 
 import cn.com.ctop.common.module.entity.HttpClientEntity;
 import cn.com.ctop.common.module.entity.IpPool;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.gson.Gson;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.*;
 import org.apache.http.client.CookieStore;
@@ -27,7 +24,6 @@ import org.apache.http.message.BasicNameValuePair;
 import org.apache.http.protocol.HTTP;
 import org.apache.http.ssl.SSLContextBuilder;
 import org.apache.http.util.EntityUtils;
-import org.springframework.stereotype.Component;
 
 import javax.net.ssl.SSLContext;
 import java.io.BufferedReader;
@@ -103,8 +99,9 @@ public class HttpClientUtils {
 
     public String get(String urlStr) throws Exception {
         URL url = new URL(urlStr);
-        URLConnection urlConnection = url.openConnection(); // 打开连接
-        BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8")); // 获取输入流
+        URLConnection urlConnection = url.openConnection();
+        // 获取输入流
+        BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8"));
         String line = null;
         StringBuilder sb = new StringBuilder();
         while ((line = br.readLine()) != null) {
@@ -144,14 +141,14 @@ public class HttpClientUtils {
                 }
 
                 basicClientCookie.setPath(cookieMap.get("Path"));
-                if (cookieMap.get("Domain") == null || cookieMap.get("Domain").equals("")) {
+                if (cookieMap.get("Domain") == null || "".equals(cookieMap.get("Domain"))) {
                     if (httpClientEntity.getHeaders() != null && httpClientEntity.getHeaders().get("Origin") != null) {
                         basicClientCookie.setDomain(httpClientEntity.getHeaders().get("Origin").split("//")[1]);
                     }
                 } else {
                     basicClientCookie.setDomain(cookieMap.get("Domain"));
                 }
-                basicClientCookie.setExpiryDate(new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 365));
+                basicClientCookie.setExpiryDate(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 365));
                 cookieStore.addCookie(basicClientCookie);
             }
         }
@@ -213,12 +210,12 @@ public class HttpClientUtils {
                     }
                 }
                 basicClientCookie.setPath(cookieMap.get("Path"));
-                if (cookieMap.get("Domain") == null || cookieMap.get("Domain").equals("")) {
+                if (cookieMap.get("Domain") == null || "".equals(cookieMap.get("Domain"))) {
                     basicClientCookie.setDomain(httpClientEntity.getHeaders().get("Origin").split("//")[1]);
                 } else {
                     basicClientCookie.setDomain(cookieMap.get("Domain"));
                 }
-                basicClientCookie.setExpiryDate(new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 365));
+                basicClientCookie.setExpiryDate(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 365));
                 cookieStore.addCookie(basicClientCookie);
             }
         }
@@ -274,12 +271,12 @@ public class HttpClientUtils {
                     }
                 }
                 basicClientCookie.setPath(cookieMap.get("Path"));
-                if (cookieMap.get("Domain") == null || cookieMap.get("Domain").equals("")) {
+                if (cookieMap.get("Domain") == null || "".equals(cookieMap.get("Domain"))) {
                     basicClientCookie.setDomain(httpClientEntity.getHeaders().get("Origin").split("//")[1]);
                 } else {
                     basicClientCookie.setDomain(cookieMap.get("Domain"));
                 }
-                basicClientCookie.setExpiryDate(new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 365));
+                basicClientCookie.setExpiryDate(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 365));
                 cookieStore.addCookie(basicClientCookie);
             }
         }

+ 1 - 3
module-common/src/main/java/cn/com/ctop/common/module/utils/HttpUtils2.java

@@ -362,10 +362,8 @@ public class HttpUtils2 {
 
     public static void kuaishouTtf(String ttfName) {
         try {
-            URL url = new URL("https://static.yximgs.com/udata/pkg/kuaishou-front-end-live/" + ttfName); // 创建URL
-
+            URL url = new URL("https://static.yximgs.com/udata/pkg/kuaishou-front-end-live/" + ttfName);
             URLConnection urlconn = url.openConnection();
-
             TTFParser ttfParser = new TTFParser();
             TrueTypeFont ttf = ttfParser.parse(urlconn.getInputStream());
             GlyphData[] datas = ttf.getGlyph().getGlyphs();

+ 2 - 1
module-common/src/main/java/cn/com/ctop/common/module/utils/JsonUtil.java

@@ -8,7 +8,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import java.util.List;
 
 /**
- *
+ * @author jeecg-boot
+ * 2019年11月12日10:04:00
  */
 public class JsonUtil {
 

+ 4 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/OSSUtils.java

@@ -18,6 +18,10 @@ import java.io.FileInputStream;
 import java.io.InputStream;
 import java.util.Date;
 
+/**
+ * @author yumeng
+ * 2019年11月12日10:04:00
+ */
 @Configuration
 @PropertySource("classpath:config.properties")
 public class OSSUtils {

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

@@ -9,6 +9,10 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Properties;
 
+/**
+ * @author jeecg-boot
+ * 2019年11月12日10:04:00
+ */
 public class PropertiesUtils {
     private static final Logger log = LoggerFactory.getLogger(PropertiesUtils.class);
     private static Map<String, String> cache = new HashMap<String, String>();

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

@@ -26,7 +26,14 @@ public enum StatusCode {
     USERNAME_OR_PASSWORD_ERROR("登录用户名或密码错误", -208, false),
     ACCOUNT_HAS_NO_AUTHORIZE("该用户尚未进行授权", -209, false),
     FILE_HAS_UPLOAD("文件已经上传过", 0, false),
-    COMMON_SERVER_ERROR("服务器内部错误", -102, false);
+    COMMON_SERVER_ERROR("服务器内部错误", -102, false),
+    KUAISHOU_CRAWLER_APP_EXIT("快手app异常退出", -1001, false),
+    KUAISHOU_CRAWLER_APP_ELEMENT_ERROR("快手元素异常", -1002, false),
+    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_SUCCESS("爬虫运行正常", 0, true),
+    KUAISHOU_CRAWLER_APP_TASK_END("爬虫任务运行结束", 1, true);
     private String desc;
     private int code;
     private boolean flag;

+ 1 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/StringUtils.java

@@ -5,6 +5,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 public class StringUtils {
+    public static final String COMMA = ",";
     public static ArrayList<String> stringCutFromBrace(String origin) {
         String pattern = "(?<=\\{)(.+?)(?=\\})";
         Pattern p = Pattern.compile(pattern);

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

@@ -6,7 +6,10 @@ import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.List;
 
-
+/**
+ * @author jeecg-boot
+ * 2019年11月12日10:04:00
+ */
 public class TransfMediaTool {
 
     public static void exceptInfoForRestTemplate() {

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

@@ -0,0 +1,265 @@
+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.*;
+
+/**
+ * 爬虫调度任务绑定信息
+ *
+ * @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;
+        }
+        AppiumJobBindTaskInfo taskInfo = new AppiumJobBindTaskInfo();
+        taskInfo.setJobId(jobId);
+        taskInfo.setTaskId(taskId);
+        taskInfo.setStatus(1);
+        Date now = new Date();
+        taskInfo.setCreateTime(now);
+        taskInfo.setUpdateTime(now);
+        appiumJobBindTaskInfoService.save(taskInfo);
+        return result;
+    }
+}

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

@@ -0,0 +1,266 @@
+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;
+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/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("文件导入失败!");
+    }
+
+    @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;
+    }
+}

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

@@ -221,6 +221,17 @@ public class AppiumTaskController {
         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() {
+            @Override
+            public void run() {
+                appiumTaskService.runKuaishouLoginTask();
+            }
+        };
+        thread.start();
+        return Result.ok("任务已启动");
+    }
     /**
      * 通过excel导入数据
      *

+ 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.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long 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;
+}

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

@@ -0,0 +1,63 @@
+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_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.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 任务号
+     */
+    @Excel(name = "任务号", width = 15)
+    @ApiModelProperty(value = "任务号")
+    private Long jobId;
+    /**
+     * 执行任务id
+     */
+    @Excel(name = "执行任务id", width = 15)
+    @ApiModelProperty(value = "执行任务id")
+    private Long taskId;
+    /**
+     * 任务绑定状态
+     */
+    @Excel(name = "任务绑定状态", width = 15)
+    @ApiModelProperty(value = "任务绑定状态")
+    private Integer status;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

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

@@ -1,22 +1,19 @@
 package cn.com.ctop.crawler.modules.appium.entity;
 
-import java.io.Serializable;
-import java.util.Date;
-import java.util.List;
-
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 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;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * 任务内容表
  * @author jeecg-boot
@@ -144,6 +141,12 @@ public class AppiumTaskItem {
 	/**updateTime*/
     @ApiModelProperty(value = "updateTime")
 	private Date updateTime;
+
+    @ApiModelProperty(value = "appPackage")
+    private String appPackage;
+    @ApiModelProperty(value = "appActivity")
+    private String appActivity;
+
     @TableField(exist = false)
     private List<AppiumTaskItem> subList;
 }

+ 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> {
+
+}

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

@@ -0,0 +1,21 @@
+package cn.com.ctop.crawler.modules.appium.mapper;
+
+import cn.com.ctop.crawler.modules.appium.entity.AppiumJob;
+import cn.com.ctop.crawler.modules.appium.entity.AppiumTask;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 爬虫调度任务
+ *
+ * @author: jeecg-boot
+ * @date: 2019-11-14
+ * @cersion: V1.0
+ */
+public interface AppiumJobMapper extends BaseMapper<AppiumJob> {
+
+    List<AppiumTask> getTaskByJobId(@Param(value = "jobId") Long jobId);
+
+}

+ 4 - 3
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/AppiumTaskItemMapper.java

@@ -1,10 +1,10 @@
 package cn.com.ctop.crawler.modules.appium.mapper;
 
-import java.util.List;
-
-import org.apache.ibatis.annotations.Param;
 import cn.com.ctop.crawler.modules.appium.entity.AppiumTaskItem;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 任务内容表
@@ -14,4 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface AppiumTaskItemMapper extends BaseMapper<AppiumTaskItem> {
 
+    List<AppiumTaskItem> selectByParams(@Param(value = "package") String packageName, @Param(value = "activity") String activityName, @Param(value = "taskId") Long taskId);
 }

+ 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>

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

@@ -0,0 +1,11 @@
+<?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">
+    <select id="getTaskByJobId" resultType="cn.com.ctop.crawler.modules.appium.entity.AppiumTask">
+        select
+            *
+        from
+         ctop_appium_task task
+        left join ctop_appium_job_bind_task_info bindinfo on task.job_id = bindinfo.job_id
+    </select>
+</mapper>

+ 19 - 2
module-crawler/src/main/java/cn/com/ctop/crawler/modules/appium/mapper/xml/AppiumTaskItemMapper.xml

@@ -1,5 +1,22 @@
 <?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.AppiumTaskItemMapper">
-
-</mapper>
+    <select id="selectByParams" resultType="cn.com.ctop.crawler.modules.appium.entity.AppiumTaskItem">
+        select
+        *
+        from
+        ctop_appium_task_item
+        where
+        1=1
+        <if test="null!=package">
+            and app_package = #{package}
+        </if>
+        <if test="null!=activity">
+            and app_activity = #{activity}
+        </if>
+        <if test="null!=taskId">
+            and task_id = #{taskId}
+        </if>
+        order by id desc
+    </select>
+</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> {
+
+}

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

@@ -0,0 +1,18 @@
+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> {
+
+    void runTask(Long jobId, Long num);
+
+    String loginTask(Long taskId);
+}

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

@@ -12,5 +12,12 @@ import java.util.List;
  * @version V1.0
  */
 public interface IAppiumTaskItemService extends IService<AppiumTaskItem> {
-    public List<AppiumTaskItem> initTaskItemList(Integer taskId, Integer parentId);
+    /**
+     * 查询任务列表
+     *
+     * @param taskId
+     * @param parentId
+     * @return
+     */
+    List<AppiumTaskItem> initTaskItemList(Integer taskId, Integer parentId);
 }

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

@@ -10,5 +10,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @version V1.0
  */
 public interface IAppiumTaskService extends IService<AppiumTask> {
+    /**
+     * 执行任务
+     *
+     * @param taskId
+     * @param deviceId
+     */
     public void runTask(Integer taskId, Integer deviceId);
+
+    public void runKuaishouLoginTask();
 }

+ 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 {
+
+}

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

@@ -0,0 +1,79 @@
+package cn.com.ctop.crawler.modules.appium.service.impl;
+
+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.entity.AppiumTask;
+import cn.com.ctop.crawler.modules.appium.entity.AppiumTaskItem;
+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.service.IAppiumJobService;
+import cn.com.ctop.crawler.modules.core.util.AppiumUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.appium.java_client.android.AndroidDriver;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 爬虫调度任务
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-11-14
+ */
+@Slf4j
+@Service
+public class AppiumJobServiceImpl extends ServiceImpl<AppiumJobMapper, AppiumJob> implements IAppiumJobService {
+    @Autowired
+    private AppiumJobMapper appiumJobMapper;
+    @Autowired
+    private AppiumTaskItemMapper taskItemMapper;
+
+    @Override
+    public void runTask(Long jobId, Long num) {
+        //TODO 需要考虑多个任务并列
+        //1:根据jobId查询所属执行task信息
+        List<AppiumTask> taskList = appiumJobMapper.getTaskByJobId(jobId);
+    }
+
+    @Override
+    public String loginTask(Long taskId) {
+        String kuaishouId = null;
+        try {
+            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);
+            Map<String, Object> result = new HashMap<>();
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            boolean loop = true;
+            while (loop) {
+                Integer code = (Integer) result.get("code");
+                if (null != code && code != StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode()) {
+                    kuaishouId = (String) result.get("kuaishouId");
+                    androidDriver.quit();
+                    break;
+                }
+                Thread.sleep(3000L);
+                String packageName = androidDriver.getCurrentPackage();
+                String activityName = androidDriver.currentActivity();
+                System.out.println(packageName + ":" + activityName);
+                List<AppiumTaskItem> taskItems = taskItemMapper.selectByParams(packageName, activityName, taskId);
+                if (null != taskItems || taskItems.size() > 0) {
+                    for (AppiumTaskItem item : taskItems) {
+                        result = appiumUtil.runLoginTask(androidDriver, item, result);
+                    }
+                }
+                result = appiumUtil.checkMethod(androidDriver, activityName, result);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        System.out.println(kuaishouId);
+        return kuaishouId;
+    }
+}

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

@@ -4,11 +4,9 @@ import cn.com.ctop.crawler.modules.appium.entity.AppiumTaskItem;
 import cn.com.ctop.crawler.modules.appium.mapper.AppiumTaskItemMapper;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumTaskItemService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import org.springframework.stereotype.Service;
-
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -19,8 +17,8 @@ import java.util.List;
  */
 @Service
 public class AppiumTaskItemServiceImpl extends ServiceImpl<AppiumTaskItemMapper, AppiumTaskItem> implements IAppiumTaskItemService {
+    @Override
     public List<AppiumTaskItem> initTaskItemList(Integer taskId, Integer parentId) {
-        List<AppiumTaskItem> list = new ArrayList<>();
         QueryWrapper<AppiumTaskItem> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("task_id", taskId);
         if (parentId == null) {
@@ -30,7 +28,7 @@ public class AppiumTaskItemServiceImpl extends ServiceImpl<AppiumTaskItemMapper,
         }
 
         queryWrapper.orderByAsc("seq");
-        list = this.list(queryWrapper);
+        List<AppiumTaskItem> list = this.list(queryWrapper);
         if (list != null && list.size() > 0) {
             for (int i = 0; i < list.size(); i++) {
                 AppiumTaskItem taskItem = list.get(i);

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

@@ -4,23 +4,18 @@ import cn.com.ctop.crawler.modules.appium.entity.AppiumDevice;
 import cn.com.ctop.crawler.modules.appium.entity.AppiumTask;
 import cn.com.ctop.crawler.modules.appium.entity.AppiumTaskItem;
 import cn.com.ctop.crawler.modules.appium.entity.AppiumTaskLog;
-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.IAppiumTaskItemService;
-import cn.com.ctop.crawler.modules.appium.service.IAppiumTaskLogService;
 import cn.com.ctop.crawler.modules.appium.service.IAppiumTaskService;
 import cn.com.ctop.crawler.modules.core.util.AppiumUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import io.appium.java_client.android.AndroidDriver;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-
-import java.util.ArrayList;
-import java.util.Calendar;
 import java.util.List;
 
 /**
@@ -31,6 +26,10 @@ import java.util.List;
  */
 @Service
 public class AppiumTaskServiceImpl extends ServiceImpl<AppiumTaskMapper, AppiumTask> implements IAppiumTaskService {
+    @Value("${kuaishou.group-control.path}")
+    private String groupControlPath;
+    @Value("${kuaishou.group-control.port}")
+    private String groupControlPort;
     @Autowired
     private IAppiumTaskItemService iAppiumTaskItemService;
     @Autowired
@@ -38,8 +37,22 @@ public class AppiumTaskServiceImpl extends ServiceImpl<AppiumTaskMapper, AppiumT
     @Autowired
     private AppiumTaskLogMapper appiumTaskLogMapper;
 
+    @Override
+    public void runKuaishouLoginTask() {
+        AppiumUtil appiumUtil = new AppiumUtil();
+        try {
+            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);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
     public void runTask(Integer taskId, Integer deviceId) {
+        //获取当前需要执行的任务信息
         AppiumTask task = this.getById(taskId);
+        //获取手机设备信息
         AppiumDevice appiumDevice = iAppiumDeviceService.getById(deviceId);
         appiumDevice.setStatus(2);
         iAppiumDeviceService.updateById(appiumDevice);
@@ -52,10 +65,11 @@ public class AppiumTaskServiceImpl extends ServiceImpl<AppiumTaskMapper, AppiumT
         log.setTaskName(task.getTaskName());
         appiumTaskLogMapper.insert(log);
         log.setId(log.getId());
+        //查询所需运行的任务列表
         List<AppiumTaskItem> taskItemList = iAppiumTaskItemService.initTaskItemList(taskId, null);
         AppiumUtil appiumUtil = new AppiumUtil();
         try {
-            AndroidDriver androidDriver = appiumUtil.initAndroidDriver("http://127.0.0.1:4723/wd/hub", appiumDevice.getIp() + ":" + appiumDevice.getPort(), task.getAppPackage(), task.getAppActivity());
+            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);
@@ -73,6 +87,4 @@ public class AppiumTaskServiceImpl extends ServiceImpl<AppiumTaskMapper, AppiumT
             iAppiumDeviceService.updateById(appiumDevice);
         }
     }
-
-
 }

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

@@ -1,11 +1,14 @@
 package cn.com.ctop.crawler.modules.core.util;
 
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
 import cn.com.ctop.crawler.modules.appium.entity.AppiumTaskItem;
 import com.google.gson.Gson;
 import io.appium.java_client.TouchAction;
 import io.appium.java_client.android.AndroidDriver;
 import io.appium.java_client.touch.WaitOptions;
 import io.appium.java_client.touch.offset.PointOption;
+import lombok.extern.slf4j.Slf4j;
 import org.openqa.selenium.Point;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.remote.DesiredCapabilities;
@@ -13,11 +16,21 @@ import org.openqa.selenium.remote.DesiredCapabilities;
 import java.net.URL;
 import java.time.Duration;
 import java.util.List;
+import java.util.Map;
 
+@Slf4j
 public class AppiumUtil {
     private Boolean isLoop = true;
     private Duration duration = Duration.ofSeconds(1);
 
+    public static final String FIND_ELEMENT_TYPE_ID = "id";
+    public static final String FIND_ELEMENT_TYPE_XPATH = "xpath";
+    public static final String FIND_ELEMENT_TYPE_CLASS = "class";
+    public static final String APP_SWIPE_TYPE_UP = "up";
+    public static final String APP_SWIPE_TYPE_DOWN = "down";
+    public static final String APP_SWIPE_TYPE_LEFT = "left";
+    public static final String APP_SWIPE_TYPE_RIGHT = "right";
+
     public void swipeToUp(AndroidDriver driver) {
         int width = driver.manage().window().getSize().width;
         int height = driver.manage().window().getSize().height;
@@ -71,150 +84,654 @@ public class AppiumUtil {
         return desiredCapabilities;
     }
 
-    public void loginKuaishou(AndroidDriver androidDriver) {
+    public static void main(String[] args) {
+        AppiumUtil appiumUtil = new AppiumUtil();
         try {
-            for (int i = 0; i < 5; i++) {
-                Thread.sleep(3000L);
-                permissionAllow(androidDriver);
-            }
-            for (int i = 0; i < 3; i++) {
-                Thread.sleep(3000L);
-                closeBtnClick(androidDriver);
-            }
-            WebElement loginBtn = getElementById(androidDriver, "com.smile.gifmaker:id/left_text");
-            if (loginBtn != null && loginBtn.equals("登陆")) {
-                loginBtn.click();
-                WebElement mobileInput = getElementById(androidDriver, "com.smile.gifmaker:id/login_name_et");
-                WebElement nextBtn = getElementById(androidDriver, "com.smile.gifmaker:id/next_view");
-                if (mobileInput != null) {
-                    String token = KuaimiUtil.kuaimiLogin();
-                    String mobile = KuaimiUtil.getMobile(token, "2307");
-                    mobileInput.sendKeys(mobile);
-                    Thread.sleep(2000L);
-                    nextBtn.click();
-                    Thread.sleep(2000L);
-                    WebElement loginTitle = getElementById(androidDriver, "com.smile.gifmaker:id/login_title_tv");
-                    WebElement forgetBtn = getElementById(androidDriver, "com.smile.gifmaker:id/forget_psd_btn");
-                    if (loginTitle != null && loginTitle.equals("输入密码")) {
-                        forgetBtn.click();
-                        Thread.sleep(2000L);
-                        WebElement sendMsgBtn = getElementById(androidDriver, "com.smile.gifmaker:id/verify_tv");
-                        sendMsgBtn.click();
-                        Thread.sleep(5000L);
+//            AndroidDriver androidDriver = appiumUtil.initAndroidDriver("http://39.106.184.70:4723/wd/hub", "183.131.157.66:10005", "com.smile.gifmaker", "com.yxcorp.login.userlogin.QuickLoginActivity");
+            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.loginKuaishou(androidDriver);
+            appiumUtil.loginTask(androidDriver, null, null);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public Boolean loginTask(AndroidDriver androidDriver, String settoken, String setmobile) throws Exception {
+        Thread.sleep(5000);
+        String token = settoken;
+        String mobile = setmobile;
+        String pkg = androidDriver.getCurrentPackage();
+        String activity = androidDriver.currentActivity();
+        System.out.println("当前包:" + pkg);
+        System.out.println("当前activity:" + activity);
+        Boolean isContinue = true;
+        if (pkg.equals("com.android.packageinstaller")) {
+            switch (activity) {
+                case ".permission.ui.GrantPermissionsActivity":
+                    WebElement permissionAllowBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.android.packageinstaller:id/permission_allow_button");
+                    if (permissionAllowBtn != null) {
+                        permissionAllowBtn.click();
+                    }
+                    break;
+                case ".PackageInstallerActivity":
+                    WebElement okBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.android.packageinstaller:id/ok_button");
+                    if (okBtn != null) {
+                        okBtn.click();
+                    }
+                    break;
+                case ".InstallAppProgress":
+                    WebElement centerText = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.android.packageinstaller:id/center_text");
+                    WebElement doneBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.android.packageinstaller:id/done_button");
+
+                    if (centerText != null) {
+                        System.out.println(centerText.getText());
+                    }
+                    if (doneBtn != null) {
+                        doneBtn.click();
+                    }
+                    break;
+                default:
+                    isContinue = false;
+                    androidDriver.quit();
+                    System.out.println("当前activity无法处理");
+                    break;
+            }
+        } else if (pkg.equals("com.smile.gifmaker")) {
+            //干扰项
+            WebElement positive = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/positive");
+            if (positive != null) {
+                positive.click();
+            }
+
+            switch (activity) {
+                //干扰项
+                case "com.yxcorp.gifshow.webview.KwaiWebViewActivity":
+                    WebElement leftBtn1 = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/left_btn");
+                    if (leftBtn1 != null) {
+                        leftBtn1.click();
+                    }
+                    break;
+                //TODO --- 首
+                // 1页
+                case "com.yxcorp.gifshow.HomeActivity":
+
+                    WebElement loginText = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_text");
+                    if (loginText != null) {
+                        loginText.click();
+                        break;
+                    }
+                    WebElement leftText = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/left_text");
+                    if (leftText != null) {
+                        leftText.click();
+                        break;
+                    }
+                    WebElement phoneLoginBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/phone_login_view");
+                    if (phoneLoginBtn != null) {
+                        phoneLoginBtn.click();
+                        break;
+                    }
+                    WebElement closeBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/close_btn");
+                    if (closeBtn != null) {
+                        closeBtn.click();
+                        break;
+                    }
+                    WebElement leftBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/left_btn");
+                    if (leftBtn != null) {
+                        leftBtn.click();
+                        Thread.sleep(5000);
+                        //查询左侧是否存在头像
+                        WebElement tabAvatar = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/tab_avatar");
+                        if (tabAvatar != null) {
+                            tabAvatar.click();
+                        } else {
+                            //不存在头像
+                            Thread.sleep(3000);
+                            tapPoint(androidDriver, 650, 1230);
+                            Thread.sleep(3000);
+                            // 点击我的
+                            tapPoint(androidDriver, 650, 1230);
+                            Thread.sleep(3000);
+                            tapPoint(androidDriver, 650, 400);
+                        }
+                    }
+                    break;
+                case "com.yxcorp.gifshow.profile.activity.MyProfileActivity":
+                    WebElement loadingTitle = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/loading_title");
+                    if (loadingTitle != null) {
+                        System.out.println(loadingTitle.getText());
+                    }
+                    tapPoint(androidDriver, 650, 400);
+                    break;
+                //TODO ---- 获取快手ID
+                case "com.yxcorp.plugin.qrcode.MyQRCodeActivity":
+                    WebElement kwaiId = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/kwai_id");
+                    if (kwaiId != null) {
+                        System.out.println(kwaiId.getText());
+                        isContinue = false;
+                        androidDriver.quit();
+                    }
+                    break;
+                //TODO ----
+                case "com.yxcorp.gifshow.activity.BrowseSettingsActivity":
+                    //com.smile.gifmaker:id/browse_setting_new_btn 开启大屏模式  关闭大屏模式
+                    //com.smile.gifmaker:id/left_btn 返回
+                    break;
+                //TODO ----登录
+                case "com.yxcorp.login.userlogin.LoginActivity":
+                    WebElement loginTitleTv = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_title_tv");
+                    WebElement loginNameEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_name_et");
+                    WebElement nextView = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/next_view");
+                    if (loginTitleTv != null) {
+                        System.out.println(loginTitleTv.getText());
+                        if (loginTitleTv.getText().equals("输入密码")) {
+                            WebElement forgetPsdBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/forget_psd_btn");
+                            if (forgetPsdBtn != null) {
+                                forgetPsdBtn.click();
+                            }
+                        }
+                    }
+                    if (loginNameEt != null) {
+                        token = KuaimiUtil.kuaimiLogin();
+                        mobile = KuaimiUtil.getMobile(token, "2307");
+                        loginNameEt.sendKeys(mobile);
+                        Thread.sleep(5000);
+                        nextView.click();
+                    }
+                    break;
+                //TODO ---- 重置密码
+                case "com.yxcorp.login.userlogin.RetrievePasswordActivity":
+
+                    break;
+                //TODO
+                case "com.yxcorp.login.userlogin.ResetSelectedAccountPasswordActivity":
+                    WebElement confirmBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/confirm_btn");
+                    WebElement loginPsdEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_psd_et");
+                    if (loginPsdEt != null) {
+                        loginPsdEt.sendKeys("a123456");
+                        Thread.sleep(5000);
+                        if (confirmBtn != null) {
+                            confirmBtn.click();
+                        }
+                    }
+                    break;
+                case "com.yxcorp.login.userlogin.MultiLoginAccountSelectActivity":
+                    WebElement iconOne = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/icon_one");
+                    if (iconOne != null) {
+                        iconOne.click();
+                    }
+                    break;
+                case "com.yxcorp.login.userlogin.RegisterUserInfoSettingActivity":
+                    //com.smile.gifmaker:id/right_btn
+                    WebElement rightBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/right_btn");
+                    if (rightBtn != null) {
+                        rightBtn.click();
+                    }
+                    break;
+                case "com.yxcorp.gifshow.activity.InterestTagActivity":
+                    WebElement closeIv = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/close_iv");
+                    if (closeIv != null) {
+                        closeIv.click();
+                    }
+                    break;
+                case "com.yxcorp.login.userlogin.QuickLoginActivity":
+                    WebElement phoneLoginView = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/phone_login_view");
+                    if (phoneLoginView != null) {
+                        phoneLoginView.click();
+                    }
+                    break;
+                case "com.yxcorp.login.userlogin.FullScreenLoginActivity":
+                    WebElement phoneOneKeyLoginBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/phone_one_key_login_btn");
+                    if (phoneOneKeyLoginBtn != null) {
+                        phoneOneKeyLoginBtn.click();
+                    }
+                    break;
+                //TODO ----
+                case "com.yxcorp.login.userlogin.CaptchaCodeLoginActivity":
+                    WebElement captchaEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/captcha_et");
+                    if (captchaEt != null) {
                         int i = 0;
-                        while (i < 20) {
-                            String msg = null;
-                            try {
-                                msg = KuaimiUtil.getMessage(token, "2307", mobile);
-                            } catch (Exception e) {
-                                System.out.println("等待" + mobile + "短信验证码");
+                        String msg = getMobileCaptcha(token, mobile);
+                        if (msg != null) {
+                            captchaEt.sendKeys(msg);
+                            Thread.sleep(5000);
+                            WebElement captchaFinish = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/captcha_finish");
+                            if (captchaFinish != null) {
+                                captchaFinish.click();
                             }
+                        }
+                    }
+                    break;
+                //TODO
+                case "com.yxcorp.login.userlogin.PhoneLoginV2Activity":
+                    WebElement phoneEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/phone_et");
+                    if (phoneEt != null) {
+                        token = KuaimiUtil.kuaimiLogin();
+                        mobile = KuaimiUtil.getMobile(token, "2307");
+                        phoneEt.sendKeys(mobile);
+                        Thread.sleep(5000);
+                        WebElement fetchCodeTv = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/fetch_code_tv");
+                        if (fetchCodeTv != null) {
+                            fetchCodeTv.click();
+                            String msg = getMobileCaptcha(token, mobile);
                             if (msg != null) {
-                                WebElement captchrInput = getElementById(androidDriver, "com.smile.gifmaker:id/verify_et");
-                                captchrInput.sendKeys(msg);
-                                Thread.sleep(2000);
-                                WebElement confirmBtn = getElementById(androidDriver, "com.smile.gifmaker:id/confirm_btn");
-                                confirmBtn.click();
-                                Thread.sleep(2000);
-                                WebElement newPwdInput = getElementById(androidDriver, "com.smile.gifmaker:id/login_psd_et");
-                                newPwdInput.sendKeys("a123456");
-                                Thread.sleep(2000);
-                                WebElement confirmBtn2 = getElementById(androidDriver, "com.smile.gifmaker:id/confirm_btn");
-                                confirmBtn2.click();
-                                Thread.sleep(3000);
-                                WebElement continueBtn = getElementById(androidDriver, "com.smile.gifmaker:id/positive");
-                                if (continueBtn != null) {
-                                    continueBtn.click();
+                                WebElement captchaCodeEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/captcha_code_et");
+                                if (captchaCodeEt != null) {
+                                    captchaCodeEt.sendKeys(msg);
+                                    Thread.sleep(5000);
+                                    WebElement cfmBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/confirm_btn");
+                                    if (cfmBtn != null) {
+                                        cfmBtn.click();
+                                    }
                                 }
-                                Thread.sleep(3000);
-
-                                break;
                             }
-                            i++;
-                            Thread.sleep(5000);
-                        }
-                        if (i == 20) {
-                            KuaimiUtil.addBlackList(token, "2307", mobile);
                         }
                     }
-                }
+                    break;
+                default:
+                    isContinue = false;
+                    System.out.println("当前activity无法处理");
+                    break;
             }
-        } catch (Exception e) {
-            e.printStackTrace();
+        } else if (pkg.equals("cn.com.longene.www.myapplication")) {
+            switch (activity) {
+                case ".MainActivity":
+                    isContinue = false;
+                    System.out.println("快手已崩溃");
+                    break;
+                default:
+                    isContinue = false;
+                    androidDriver.quit();
+                    System.out.println("当前activity无法处理");
+                    break;
+            }
+        } else {
+            System.out.println("当前包为非操作包:" + pkg);
         }
-
+        if (isContinue) {
+            isContinue = loginTask(androidDriver, token, mobile);
+        }
+        return isContinue;
     }
 
-    public void permissionAllow(AndroidDriver androidDriver) {
-        WebElement element = getElementById(androidDriver, "com.android.packageinstaller:id/permission_allow_button");
-        if (element != null) {
+    public Map<String, Object> checkMethod(AndroidDriver androidDriver, String activity, Map<String, Object> result) throws Exception {
+        Integer code = (Integer) result.get("code");
+        if (null != code && code != StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode()) {
+            return result;
+        }
+        if ("com.yxcorp.gifshow.detail.PhotoDetailActivity".equals(activity)) {
+            WebElement element = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/back_btn");
             element.click();
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        if ("com.yxcorp.login.userlogin.ResetSelectedAccountPasswordActivity".equals(activity)) {
+            WebElement confirmBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/confirm_btn");
+            WebElement loginPsdEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_psd_et");
+            if (loginPsdEt != null) {
+                loginPsdEt.sendKeys("a123456");
+                Thread.sleep(5000);
+                if (confirmBtn != null) {
+                    confirmBtn.click();
+                }
+            }
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        //首页
+        if ("com.yxcorp.gifshow.HomeActivity".equals(activity)) {
+            WebElement loginText = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_text");
+            if (loginText != null) {
+                loginText.click();
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+                return result;
+            }
+            WebElement leftText = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/left_text");
+            if (leftText != null) {
+                leftText.click();
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+                return result;
+            }
+            WebElement phoneLoginBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/phone_login_view");
+            if (phoneLoginBtn != null) {
+                phoneLoginBtn.click();
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+                return result;
+            }
+            WebElement closeBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/close_btn");
+            if (closeBtn != null) {
+                closeBtn.click();
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+                return result;
+            }
+            WebElement leftBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/left_btn");
+            if (leftBtn == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+                log.error("元素获取异常==>activity:{},id:{}", activity, "com.smile.gifmaker:id/left_btn");
+                return result;
+            }
+            Thread.sleep(2000);
+            leftBtn.click();
+            Thread.sleep(2000);
+            //查询左侧是否存在头像
+            WebElement tabAvatar = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/tab_avatar");
+            if (tabAvatar != null) {
+                tabAvatar.click();
+            } else {
+                //不存在头像
+                Thread.sleep(3000);
+                tapPoint(androidDriver, 650, 1230);
+                Thread.sleep(3000);
+                // 点击我的
+                tapPoint(androidDriver, 650, 1230);
+                Thread.sleep(3000);
+                tapPoint(androidDriver, 650, 400);
+            }
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        //大屏模式
+        if ("com.yxcorp.gifshow.activity.BrowseSettingsActivity".equals(activity)) {
+            //com.smile.gifmaker:id/browse_setting_new_btn 开启大屏模式  关闭大屏模式
+            //com.smile.gifmaker:id/left_btn 返回
+        }
+        //登录
+        if ("com.yxcorp.login.userlogin.LoginActivity".equals(activity)) {
+            WebElement loginTitleTv = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_title_tv");
+            WebElement loginNameEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/login_name_et");
+            WebElement nextView = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/next_view");
+            if (loginTitleTv != null) {
+                System.out.println(loginTitleTv.getText());
+                if (loginTitleTv.getText().equals("输入密码")) {
+                    WebElement forgetPsdBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/forget_psd_btn");
+                    if (forgetPsdBtn != null) {
+                        forgetPsdBtn.click();
+                    }
+                }
+            }
+            if (loginNameEt != null) {
+                String token = KuaimiUtil.kuaimiLogin();
+                String mobile = KuaimiUtil.getMobile(token, "2307");
+                result.put("token", token);
+                result.put("mobile", mobile);
+                loginNameEt.sendKeys(mobile);
+                Thread.sleep(5000);
+                nextView.click();
+            }
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
         }
+        //重置密码
+        if ("com.yxcorp.login.userlogin.RetrievePasswordActivity".equals(activity)) {
+            String token = (String) result.get("token");
+            String mobile = (String) result.get("mobile");
+            WebElement nameEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/name_et");
+            if (nameEt != null) {
+                Thread.sleep(5000);
+                WebElement verifyTv = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/verify_tv");
+                if (verifyTv != null) {
+                    verifyTv.click();
+                    String msg = getMobileCaptcha(token, mobile);
+                    if (msg != null) {
+                        WebElement verifyEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/verify_et");
+                        if (verifyEt != null) {
+                            verifyEt.sendKeys(msg);
+                            Thread.sleep(5000);
+                            WebElement confirmBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/confirm_btn");
+                            if (confirmBtn != null) {
+                                confirmBtn.click();
+                            }
+                        }
+                    }
+                }
+            }
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        //验证码登录
+        if ("com.yxcorp.login.userlogin.CaptchaCodeLoginActivity".equals(activity)) {
+            String token = (String) result.get("token");
+            String mobile = (String) result.get("mobile");
+            WebElement captchaEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/captcha_et");
+            if (captchaEt == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+                log.error("元素获取异常==>activity:{},id:{}", activity, "com.smile.gifmaker:id/captcha_et");
+                return result;
+            }
+            String captcha = getMobileCaptcha(token, mobile);
+            if (captcha == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_MOBILE_CODE_IS_NULL.getCode());
+                log.error("短信验证码获取异常==>activity:{}", activity);
+                return result;
+            }
+            captchaEt.sendKeys(captcha);
+            Thread.sleep(5000);
+            WebElement captchaFinish = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/captcha_finish");
+            if (captchaFinish == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+                log.error("元素获取异常==>activity:{},id:{}", activity, "com.smile.gifmaker:id/captcha_finish");
+                return result;
+            }
+            captchaFinish.click();
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        //登录v2
+        if ("com.yxcorp.login.userlogin.PhoneLoginV2Activity".equals(activity)) {
+            String token = (String) result.get("token");
+            String mobile = (String) result.get("mobile");
+            WebElement phoneEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/phone_et");
+            if (phoneEt == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+                log.error("元素获取异常==>activity:{},id:{}", activity, "com.smile.gifmaker:id/fetch_code_tv");
+                return result;
+            }
+            token = KuaimiUtil.kuaimiLogin();
+            mobile = KuaimiUtil.getMobile(token, "2307");
+            result.put("token", token);
+            result.put("mobile", mobile);
+            phoneEt.sendKeys(mobile);
+            Thread.sleep(5000);
+            WebElement fetchCodeTv = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/fetch_code_tv");
+            if (fetchCodeTv == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+                log.error("元素获取异常==>activity:{},id:{}", activity, "com.smile.gifmaker:id/fetch_code_tv");
+                return result;
+            }
+            fetchCodeTv.click();
+            String msg = getMobileCaptcha(token, mobile);
+            if (msg == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_MOBILE_CODE_IS_NULL.getCode());
+                log.error("短信验证码获取异常==>activity:{}", activity);
+                return result;
+            }
+            WebElement captchaCodeEt = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/captcha_code_et");
+            if (captchaCodeEt == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+                log.error("元素获取异常==>activity:{},id:{}", activity, "com.smile.gifmaker:id/captcha_code_et");
+                return result;
+            }
+            captchaCodeEt.sendKeys(msg);
+            Thread.sleep(5000);
+            WebElement cfmBtn = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/confirm_btn");
+            if (cfmBtn == null) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+                log.error("元素获取异常==>activity:{},id:{}", activity, "com.smile.gifmaker:id/confirm_btn");
+                return result;
+            }
+            cfmBtn.click();
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+        return result;
     }
 
-    public void closeBtnClick(AndroidDriver androidDriver) {
-        WebElement element = getElementById(androidDriver, "com.smile.gifmaker:id/close_btn");
-        if (element != null) {
-            element.click();
+    private String getMobileCaptcha(String token, String mobile) throws Exception {
+        String msg = null;
+        int i = 0;
+        while (i < 20) {
+            i++;
+            if (msg != null) {
+                continue;
+            }
+            try {
+                msg = KuaimiUtil.getMessage(token, "2307", mobile);
+            } catch (Exception e) {
+                log.info("等待{}短信验证码", mobile);
+                Thread.sleep(5000);
+            }
         }
+        return msg;
     }
 
 
-
-    public WebElement getElementById(AndroidDriver androidDriver, String id) {
+    public WebElement getElementByType(AndroidDriver androidDriver, String type, String typeInfo) {
         WebElement element = null;
-        List<WebElement> elements = androidDriver.findElementsById(id);
-        if (elements != null && elements.size() > 0) {
-            element = elements.get(0);
+        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;
     }
 
-    public WebElement getElementByClass(AndroidDriver androidDriver, String className) {
-        WebElement element = null;
-        List<WebElement> elements = androidDriver.findElementsByClassName(className);
-        if (elements != null && elements.size() > 0) {
-            element = elements.get(0);
+    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();
         }
-        return element;
     }
 
-    public WebElement getElementByXpath(AndroidDriver androidDriver, String xpath) {
-        WebElement element = null;
-        List<WebElement> elements = androidDriver.findElementsByXPath(xpath);
-        if (elements != null && elements.size() > 0) {
-            element = elements.get(0);
+    public Map<String, Object> runLoginTask(AndroidDriver androidDriver, AppiumTaskItem appiumTaskItem, Map<String, Object> result) throws Exception {
+        Integer code = (Integer) result.get("code");
+        if (null != code && code != StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode()) {
+            return result;
         }
-        return element;
+        Thread.sleep(1000L);
+        String findKey = appiumTaskItem.getFindKey();
+        if (findKey.equals("exit")) {
+            androidDriver.quit();
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_EXIT.getCode());
+            log.error(StatusCode.KUAISHOU_CRAWLER_APP_EXIT.getDesc());
+            return result;
+        }
+        //1:获取元素信息
+        WebElement element = getElementByType(androidDriver, appiumTaskItem.getFindType(), appiumTaskItem.getFindKey());
+        if (null == element) {
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+            log.error("元素获取异常==>activity:{},key:{}", appiumTaskItem.getAppActivity(), "com.smile.gifmaker:id/confirm_btn");
+            return result;
+        }
+        //(1):滑动效果
+        String swipeType = appiumTaskItem.getSwapType();
+        if (null != swipeType && !"".equals(swipeType.trim())) {
+            swipeByType(androidDriver, swipeType);
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            return result;
+        }
+        //点击效果
+        String clickType = appiumTaskItem.getClickType();
+        if (null != clickType && !"".equals(clickType)) {
+            String getText = oprateElementByType(element, clickType, androidDriver, appiumTaskItem);
+            if (null != getText && !"".equals(getText)) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_TASK_END.getCode());
+                result.put("kuaishouId", getText.replace("快手 ID:", ""));
+            } else {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+            }
+            return result;
+        }
+        ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_SUCCESS.getCode());
+        return result;
     }
 
-    public void runTask(AndroidDriver androidDriver, AppiumTaskItem appiumTaskItem, WebElement loopElement) throws Exception {
+    private String oprateElementByType(WebElement element, String clickType, AndroidDriver androidDriver, AppiumTaskItem taskItem) {
+        String getText = null;
+        if ("element".equals(clickType)) {
+            element.click();
+        } else if ("point".equals(clickType)) {
+            Point point = element.getLocation();
+            System.out.println(point.getX() + ":" + point.getY());
+            Integer x = point.getX();
+            Integer y = point.getY();
+            if (null != taskItem.getOffsiteX()) {
+                x = taskItem.getOffsiteX();
+            }
+            if (null != taskItem.getOffsiteY()) {
+                y = taskItem.getOffsiteY();
+            }
+            tapPoint(androidDriver, x, y);
+        } else if (clickType.equals("send")) {
+            String text = taskItem.getTextEqualKey();
+            element.sendKeys(text);
+        } else if (clickType.equals("text")) {
+            getText = element.getText();
+        }
+        return getText;
+    }
+
+    public String runTask(AndroidDriver androidDriver, AppiumTaskItem appiumTaskItem, WebElement loopElement) throws Exception {
+        String getText = null;
         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) {
                     WebElement element = null;
-                    if (appiumTaskItem.getFindType().equals("id")) {
-                        element = getElementById(androidDriver, appiumTaskItem.getFindKey());
-                    } else if (appiumTaskItem.getFindType().equals("class")) {
-                        element = getElementByClass(androidDriver, appiumTaskItem.getFindKey());
-                    } else if (appiumTaskItem.getFindType().equals("xpath")) {
-                        element = getElementByXpath(androidDriver, appiumTaskItem.getFindKey());
-                    } else if (appiumTaskItem.getFindType().equals("loop")) {
+                    if (appiumTaskItem.getFindType().equals("loop")) {
                         element = loopElement;
+                    } else {
+                        element = getElementByType(androidDriver, appiumTaskItem.getFindType(), appiumTaskItem.getFindKey());
                     }
                     if (element != null) {
                         if (appiumTaskItem.getTextEqualType() != null) {
                             if (appiumTaskItem.getTextEqualType().equals("eq")) {
                                 if (!element.getText().equals(appiumTaskItem.getTextEqualKey())) {
-                                    return;
+                                    return getText;
                                 }
                             } else if (appiumTaskItem.getTextEqualType().equals("neq")) {
                                 if (element.getText() == null || element.getText().equals(appiumTaskItem.getTextEqualKey())) {
-                                    return;
+                                    return getText;
+                                }
+                            } else if (appiumTaskItem.getTextEqualType().equals("start")) {
+                                boolean check = checkAdvertiser(androidDriver, appiumTaskItem.getTextEqualKey());
+                                if (!check) {
+                                    return getText;
                                 }
                             }
                         }
@@ -223,7 +740,13 @@ public class AppiumUtil {
                                 element.click();
                             } else if (appiumTaskItem.getClickType().equals("point")) {
                                 Point point = element.getLocation();
+                                System.out.println(point.getX() + ":" + point.getY());
                                 tapPoint(androidDriver, point.getX() + appiumTaskItem.getOffsiteX(), point.getY() + appiumTaskItem.getOffsiteY());
+                            } else if (appiumTaskItem.getClickType().equals("send")) {
+                                String text = appiumTaskItem.getTextEqualKey();
+                                element.sendKeys(text);
+                            } else if (appiumTaskItem.getClickType().equals("text")) {
+                                getText = element.getText();
                             }
                         }
                         List<AppiumTaskItem> subTask = appiumTaskItem.getSubList();
@@ -233,41 +756,27 @@ public class AppiumUtil {
                             }
                         }
                     } else {
+                        //必须执行
                         if (appiumTaskItem.getIsMust() != null && appiumTaskItem.getIsMust() == 1) {
                             if (appiumTaskItem.getLoopRate() != null && appiumTaskItem.getLoopRate() > 0) {
                                 Thread.sleep(appiumTaskItem.getLoopRate());
                             }
                             runTask(androidDriver, appiumTaskItem, element);
-                            return;
                         }
+                        //非必须执行情况下
                         if (appiumTaskItem.getClickType() != null && appiumTaskItem.getClickType().equals("point")) {
                             tapPoint(androidDriver, appiumTaskItem.getOffsiteX(), appiumTaskItem.getOffsiteY());
                         }
                     }
                 }
                 if (appiumTaskItem.getSwapType() != null) {
-                    if (appiumTaskItem.getSwapType().equals("up")) {
-                        this.swipeToUp(androidDriver);
-                    } else if (appiumTaskItem.getSwapType().equals("down")) {
-                        this.swipeToDown(androidDriver);
-                    } else if (appiumTaskItem.getSwapType().equals("left")) {
-                        this.swipeToLeft(androidDriver);
-                    } else if (appiumTaskItem.getSwapType().equals("right")) {
-                        this.swipeToRight(androidDriver);
-                    }
+                    swipeByType(androidDriver, appiumTaskItem.getSwapType());
                 }
             } else if (appiumTaskItem.getLoopType() != null && appiumTaskItem.getLoopType().equals("loop")) {
                 while (isLoop) {
                     System.out.println("loop:" + isLoop);
                     if (appiumTaskItem.getFindType() != null) {
-                        List<WebElement> list = null;
-                        if (appiumTaskItem.getFindType().equals("id")) {
-                            list = androidDriver.findElementsById(appiumTaskItem.getFindKey());
-                        } else if (appiumTaskItem.getFindType().equals("class")) {
-                            list = androidDriver.findElementsByClassName(appiumTaskItem.getFindKey());
-                        } else if (appiumTaskItem.getFindType().equals("xpath")) {
-                            list = androidDriver.findElementsByXPath(appiumTaskItem.getFindKey());
-                        }
+                        List<WebElement> list = getElementsByType(androidDriver, appiumTaskItem.getFindType(), appiumTaskItem.getFindKey());
                         if (list != null && list.size() > 0) {
                             for (WebElement element : list) {
                                 if (!isLoop) {
@@ -286,15 +795,7 @@ public class AppiumUtil {
                         }
                     }
                     if (appiumTaskItem.getSwapType() != null) {
-                        if (appiumTaskItem.getSwapType().equals("up")) {
-                            this.swipeToUp(androidDriver);
-                        } else if (appiumTaskItem.getSwapType().equals("down")) {
-                            this.swipeToDown(androidDriver);
-                        } else if (appiumTaskItem.getSwapType().equals("left")) {
-                            this.swipeToLeft(androidDriver);
-                        } else if (appiumTaskItem.getSwapType().equals("right")) {
-                            this.swipeToRight(androidDriver);
-                        }
+                        swipeByType(androidDriver, appiumTaskItem.getSwapType());
                     }
                 }
 
@@ -303,5 +804,50 @@ public class AppiumUtil {
                 this.isLoop = false;
             }
         }
+        return getText;
+    }
+
+    public void backToMain(AndroidDriver androidDriver) {
+        WebElement element = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/back_btn");
+        if (null != element) {
+            element.click();
+        }
+    }
+
+    public Boolean checkAdvertiser(AndroidDriver androidDriver, String advertiserName) {
+        WebElement label = getElementByType(androidDriver, FIND_ELEMENT_TYPE_ID, "com.smile.gifmaker:id/label");
+        String text = label.getText();
+        if (null != label && null != text && text.startsWith(advertiserName)) {
+            //表示广告筛选成功
+            return true;
+        } else {
+            backToMain(androidDriver);
+            return false;
+        }
+    }
+
+
+    private void swipeByType(AndroidDriver androidDriver, String type) {
+        if (type.equals(APP_SWIPE_TYPE_UP)) {
+            this.swipeToUp(androidDriver);
+        } else if (type.equals(APP_SWIPE_TYPE_DOWN)) {
+            this.swipeToDown(androidDriver);
+        } else if (type.equals(APP_SWIPE_TYPE_LEFT)) {
+            this.swipeToLeft(androidDriver);
+        } else if (type.equals(APP_SWIPE_TYPE_RIGHT)) {
+            this.swipeToRight(androidDriver);
+        }
+    }
+
+    private List<WebElement> getElementsByType(AndroidDriver androidDriver, String findType, String findKey) {
+        List<WebElement> elements = null;
+        if (findType.equals(FIND_ELEMENT_TYPE_ID)) {
+            elements = androidDriver.findElementsById(findKey);
+        } else if (findType.equals(FIND_ELEMENT_TYPE_CLASS)) {
+            elements = androidDriver.findElementsByClassName(findKey);
+        } else if (findKey.equals(FIND_ELEMENT_TYPE_XPATH)) {
+            elements = androidDriver.findElementsByXPath(findKey);
+        }
+        return elements;
     }
 }

+ 2 - 1
module-crawler/src/main/java/cn/com/ctop/crawler/modules/core/util/FateadmUtil.java

@@ -195,7 +195,8 @@ public class FateadmUtil {
             // 查询余额
             FateadmHttpUtil.HttpResp resp;
             // resp = api.QueryBalc();   // 查询余额返回详细信息
-            double balance = api.QueryBalcExtend();    // 直接返回余额结果
+            // 直接返回余额结果
+            double balance = api.QueryBalcExtend();
 
             // 具体类型可以查看官方网站的价格页选择具体的类型,不清楚类型的,可以咨询客服
 //            String pred_type = "30400";

+ 42 - 22
module-crawler/src/main/java/cn/com/ctop/crawler/modules/core/util/KuaimiUtil.java

@@ -2,6 +2,13 @@ package cn.com.ctop.crawler.modules.core.util;
 
 import cn.com.ctop.common.module.utils.HttpUtils;
 
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author xuzuoyun
+ * 2019年11月12日10:04:00
+ */
 public class KuaimiUtil {
     public static final String KUAIMI_API_URL = "http://api.kmiyz.com/api/do.php";
 
@@ -32,7 +39,7 @@ public class KuaimiUtil {
         String result = HttpUtils.httpPostNoParamRequest(url);
         if (result != null && result.startsWith("1")) {
             System.out.println(result);
-            return result.split("\\|")[1].substring(6, 12);
+            return getNumbers(result.split("\\|")[1]);
         } else {
             throw new Exception();
         }
@@ -60,27 +67,40 @@ public class KuaimiUtil {
         }
     }
 
-    public static void main(String[] args) {
-        KuaimiUtil k = new KuaimiUtil();
-        try {
-            String token = k.kuaimiLogin();
-            System.out.println(token);
-            String mobile = k.getMobile(token, "2307");
-            int times = 0;
-            while (times < 100) {
-                Thread.sleep(5000);
-                try {
-                    String msg = k.getMessage(token, "2307", mobile);
-                    System.out.println(msg);
-                    break;
-                } catch (Exception e) {
-                    System.out.println("等待短信");
-                }
-                times++;
-            }
-            System.out.println("完成");
-        } catch (Exception e) {
-            e.printStackTrace();
+    private static Pattern NUMBER_PATTERN = Pattern.compile("\\d+");
+    public static String getNumbers(String content) {
+        Matcher matcher = NUMBER_PATTERN.matcher(content);
+        while (matcher.find()) {
+            return matcher.group(0);
         }
+        return "";
+    }
+
+    public static void main(String[] args) {
+        String s = "【快手科技】重置密码的验证码469801,15分钟内有效,为保证信息安全,切勿将验证码告知他人。";
+//        String s = "【快手科技】503730快手验证码,15分钟内有效,仅用于登录,请勿告知他人。";
+        System.out.println(getNumbers(s));
+//
+//        KuaimiUtil k = new KuaimiUtil();
+//        try {
+//            String token = k.kuaimiLogin();
+//            System.out.println(token);
+//            String mobile = k.getMobile(token, "2307");
+//            int times = 0;
+//            while (times < 100) {
+//                Thread.sleep(5000);
+//                try {
+//                    String msg = k.getMessage(token, "2307", mobile);
+//                    System.out.println(msg);
+//                    break;
+//                } catch (Exception e) {
+//                    System.out.println("等待短信");
+//                }
+//                times++;
+//            }
+//            System.out.println("完成");
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
     }
 }

+ 3 - 229
module-crawler/src/main/java/cn/com/ctop/crawler/modules/log/controller/CrawlerLogController.java

@@ -1,33 +1,9 @@
 package cn.com.ctop.crawler.modules.log.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 java.util.Date;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.extern.slf4j.Slf4j;
-
-import org.jeecgframework.poi.excel.ExcelImportUtil;
-import org.jeecgframework.poi.excel.def.NormalExcelConstants;
-import org.jeecgframework.poi.excel.entity.ExportParams;
-import org.jeecgframework.poi.excel.entity.ImportParams;
-import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
-import org.springframework.web.servlet.ModelAndView;
-import com.alibaba.fastjson.JSON;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
  /**
  * @Description: 爬虫日志表
@@ -40,206 +16,4 @@ import io.swagger.annotations.ApiOperation;
 @RestController
 @RequestMapping("/crawlerlog")
 public class CrawlerLogController {
-//	@Autowired
-//	private ICrawlerLogService crawlerLogService;
-//
-//	/**
-//	  * 分页列表查询
-//	 * @param crawlerLog
-//	 * @param pageNo
-//	 * @param pageSize
-//	 * @param req
-//	 * @return
-//	 */
-//	@AutoLog(value = "爬虫日志表-分页列表查询")
-//	@ApiOperation(value="爬虫日志表-分页列表查询", notes="爬虫日志表-分页列表查询")
-//	@GetMapping(value = "/list")
-//	public Result<IPage<CrawlerLog>> queryPageList(CrawlerLog crawlerLog,
-//									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-//									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-//									  HttpServletRequest req) {
-//		Result<IPage<CrawlerLog>> result = new Result<IPage<CrawlerLog>>();
-//		QueryWrapper<CrawlerLog> queryWrapper = QueryGenerator.initQueryWrapper(crawlerLog, req.getParameterMap());
-//		Page<CrawlerLog> page = new Page<CrawlerLog>(pageNo, pageSize);
-//		IPage<CrawlerLog> pageList = crawlerLogService.page(page, queryWrapper);
-//		result.setSuccess(true);
-//		result.setResult(pageList);
-//		return result;
-//	}
-//
-//	/**
-//	  *   添加
-//	 * @param crawlerLog
-//	 * @return
-//	 */
-//	@AutoLog(value = "爬虫日志表-添加")
-//	@ApiOperation(value="爬虫日志表-添加", notes="爬虫日志表-添加")
-//	@PostMapping(value = "/add")
-//	public Result<CrawlerLog> add(@RequestBody CrawlerLog crawlerLog) {
-//		Result<CrawlerLog> result = new Result<CrawlerLog>();
-//		try {
-//			crawlerLogService.save(crawlerLog);
-//			result.success("添加成功!");
-//		} catch (Exception e) {
-//			log.error(e.getMessage(),e);
-//			result.error500("操作失败");
-//		}
-//		return result;
-//	}
-//
-//	/**
-//	  *  编辑
-//	 * @param crawlerLog
-//	 * @return
-//	 */
-//	@AutoLog(value = "爬虫日志表-编辑")
-//	@ApiOperation(value="爬虫日志表-编辑", notes="爬虫日志表-编辑")
-//	@PutMapping(value = "/edit")
-//	public Result<CrawlerLog> edit(@RequestBody CrawlerLog crawlerLog) {
-//		Result<CrawlerLog> result = new Result<CrawlerLog>();
-//		CrawlerLog crawlerLogEntity = crawlerLogService.getById(crawlerLog.getId());
-//		if(crawlerLogEntity==null) {
-//			result.error500("未找到对应实体");
-//		}else {
-//			boolean ok = crawlerLogService.updateById(crawlerLog);
-//			//TODO 返回false说明什么?
-//			if(ok) {
-//				result.success("修改成功!");
-//			}
-//		}
-//
-//		return result;
-//	}
-//
-//	/**
-//	  *   通过id删除
-//	 * @param id
-//	 * @return
-//	 */
-//	@AutoLog(value = "爬虫日志表-通过id删除")
-//	@ApiOperation(value="爬虫日志表-通过id删除", notes="爬虫日志表-通过id删除")
-//	@DeleteMapping(value = "/delete")
-//	public Result<CrawlerLog> delete(@RequestParam(name="id",required=true) String id) {
-//		Result<CrawlerLog> result = new Result<CrawlerLog>();
-//		CrawlerLog crawlerLog = crawlerLogService.getById(id);
-//		if(crawlerLog==null) {
-//			result.error500("未找到对应实体");
-//		}else {
-//			boolean ok = crawlerLogService.removeById(id);
-//			if(ok) {
-//				result.success("删除成功!");
-//			}
-//		}
-//
-//		return result;
-//	}
-//
-//	/**
-//	  *  批量删除
-//	 * @param ids
-//	 * @return
-//	 */
-//	@AutoLog(value = "爬虫日志表-批量删除")
-//	@ApiOperation(value="爬虫日志表-批量删除", notes="爬虫日志表-批量删除")
-//	@DeleteMapping(value = "/deleteBatch")
-//	public Result<CrawlerLog> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-//		Result<CrawlerLog> result = new Result<CrawlerLog>();
-//		if(ids==null || "".equals(ids.trim())) {
-//			result.error500("参数不识别!");
-//		}else {
-//			this.crawlerLogService.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<CrawlerLog> queryById(@RequestParam(name="id",required=true) String id) {
-//		Result<CrawlerLog> result = new Result<CrawlerLog>();
-//		CrawlerLog crawlerLog = crawlerLogService.getById(id);
-//		if(crawlerLog==null) {
-//			result.error500("未找到对应实体");
-//		}else {
-//			result.setResult(crawlerLog);
-//			result.setSuccess(true);
-//		}
-//		return result;
-//	}
-//
-//  /**
-//      * 导出excel
-//   *
-//   * @param request
-//   * @param response
-//   */
-//  @RequestMapping(value = "/exportXls")
-//  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
-//      // Step.1 组装查询条件
-//      QueryWrapper<CrawlerLog> queryWrapper = null;
-//      try {
-//          String paramsStr = request.getParameter("paramsStr");
-//          if (oConvertUtils.isNotEmpty(paramsStr)) {
-//              String deString = URLDecoder.decode(paramsStr, "UTF-8");
-//              CrawlerLog crawlerLog = JSON.parseObject(deString, CrawlerLog.class);
-//              queryWrapper = QueryGenerator.initQueryWrapper(crawlerLog, request.getParameterMap());
-//          }
-//      } catch (UnsupportedEncodingException e) {
-//          e.printStackTrace();
-//      }
-//
-//      //Step.2 AutoPoi 导出Excel
-//      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
-//      List<CrawlerLog> pageList = crawlerLogService.list(queryWrapper);
-//      //导出文件名称
-//      mv.addObject(NormalExcelConstants.FILE_NAME, "爬虫日志表列表");
-//      mv.addObject(NormalExcelConstants.CLASS, CrawlerLog.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<CrawlerLog> listCrawlerLogs = ExcelImportUtil.importExcel(file.getInputStream(), CrawlerLog.class, params);
-//              for (CrawlerLog crawlerLogExcel : listCrawlerLogs) {
-//                  crawlerLogService.save(crawlerLogExcel);
-//              }
-//              return Result.ok("文件导入成功!数据行数:" + listCrawlerLogs.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("文件导入失败!");
-//  }
-
 }

+ 461 - 524
module-crawler/src/main/java/cn/com/ctop/crawler/modules/test/AppiumTest.java

@@ -1,533 +1,470 @@
-package cn.com.ctop.crawler.modules.test;
-
-import com.google.gson.Gson;
-import io.appium.java_client.TouchAction;
-import io.appium.java_client.android.AndroidDriver;
-import io.appium.java_client.touch.WaitOptions;
-import io.appium.java_client.touch.offset.PointOption;
-import lombok.Data;
-import org.openqa.selenium.Point;
-import org.openqa.selenium.WebElement;
-import org.openqa.selenium.remote.DesiredCapabilities;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.time.Duration;
-import java.util.ArrayList;
-import java.util.List;
-
-@Data
-public class AppiumTest {
-    private Boolean isLoop = true;
-    private Duration duration = Duration.ofSeconds(1);
-
-    public void swipeToUp(AndroidDriver driver) {
-        int width = driver.manage().window().getSize().width;
-        int height = driver.manage().window().getSize().height;
-        TouchAction action1 = new TouchAction(driver).press(PointOption.point(width / 2, height * 3 / 4)).waitAction(WaitOptions.waitOptions(duration))
-                .moveTo(PointOption.point(width / 2, height / 4)).release();
-        action1.perform();
-    }
-
-
-    public void swipeToDown(AndroidDriver driver) {
-        int width = driver.manage().window().getSize().width;
-        int height = driver.manage().window().getSize().height;
-        TouchAction action2 = new TouchAction(driver).press(PointOption.point(width / 2, height / 4)).waitAction(WaitOptions.waitOptions(duration))
-                .moveTo(PointOption.point(width / 2, height * 3 / 4)).release();
-        action2.perform();
-    }
-
-    public void swipeToLeft(AndroidDriver driver) {
-        int width = driver.manage().window().getSize().width;
-        int height = driver.manage().window().getSize().height;
-        TouchAction action3 = new TouchAction(driver).press(PointOption.point(width * 3 / 4, height / 2)).waitAction(WaitOptions.waitOptions(duration))
-                .moveTo(PointOption.point(width / 4, height / 2)).release();
-        action3.perform();
-    }
-
-    public void tapPoint(AndroidDriver driver, Integer x, Integer y) {
-        TouchAction action = new TouchAction(driver).tap(PointOption.point(x, y)).release();
-        action.perform();
-    }
-
-
-    public void swipeToRight(AndroidDriver driver) {
-        int width = driver.manage().window().getSize().width;
-        int height = driver.manage().window().getSize().height;
-        TouchAction action4 = new TouchAction(driver).press(PointOption.point(width / 4, height / 2)).waitAction(WaitOptions.waitOptions(duration))
-                .moveTo(PointOption.point(width * 3 / 4, height / 2)).release();
-        action4.perform();
-    }
-
-    //    "http://39.106.184.70:4723/wd/hub"
-    public AndroidDriver initAndroidDriver(String serverUrl, String deviceName, String appPackage, String appActivity) throws Exception {
-        return new AndroidDriver(new URL(serverUrl), initCapabilities(deviceName, appPackage, appActivity));
-    }
-
-    public DesiredCapabilities initCapabilities(String deviceName, String appPackage, String appActivity) {
-        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
-        //指定测试设备的名称
-//        desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001");
-//        desiredCapabilities.setCapability("deviceName", "183.131.157.66:10005");
-        desiredCapabilities.setCapability("deviceName", deviceName);
-        //添加操作系统配置
-        desiredCapabilities.setCapability("platformName", "Android");
-        //添加操作系统版本设置
-//        desiredCapabilities.setCapability("platformVersion", "4.4.2");
-        //指定想要测试应用的包名
-//        desiredCapabilities.setCapability("appPackage", "com.smile.gifmaker");
-        desiredCapabilities.setCapability("appPackage", appPackage);
-        desiredCapabilities.setCapability("noReset", true);
-        desiredCapabilities.setCapability("unicodeKeyboard", true);
-        desiredCapabilities.setCapability("resetKeyboard", true);
-        //指定想要测试应用的入口activity
-//        desiredCapabilities.setCapability("appActivity", "com.yxcorp.gifshow.HomeActivity");
-        desiredCapabilities.setCapability("appActivity", appActivity);
-        return desiredCapabilities;
-    }
-
-    public List<AppiumTask> initTask() {
-        List<AppiumTask> list = new ArrayList<>();
-        AppiumTask appiumTask1 = new AppiumTask();
-        appiumTask1.setFindType("class");
-        appiumTask1.setFindKey("android.widget.CheckedTextView");
-        appiumTask1.setClickType("element");
-        appiumTask1.setLoopType("noloop");
-        appiumTask1.setIsMust(true);
-        appiumTask1.setWaitTime(3000L);
-
-        AppiumTask appiumTask2 = new AppiumTask();
-        appiumTask2.setFindType("xpath");
-        appiumTask2.setFindKey("//android.view.View[@content-desc=\"发现\"]");
-        appiumTask2.setClickType("element");
-        appiumTask2.setLoopType("noloop");
-        appiumTask2.setIsMust(true);
-        appiumTask2.setWaitTime(3000L);
-
-        AppiumTask appiumTask3 = new AppiumTask();
-        appiumTask3.setFindType("id");
-        appiumTask3.setFindKey("com.smile.gifmaker:id/subject");
-        appiumTask3.setClickType("no");
-        appiumTask3.setLoopType("loop");
-        appiumTask3.setIsMust(true);
-        appiumTask3.setSwapType("up");
-
-        AppiumTask appiumTask31 = new AppiumTask();
-        appiumTask31.setFindType("loop");
-        appiumTask31.setClickType("point");
-        appiumTask31.setLoopType("noloop");
-        appiumTask31.setIsMust(false);
-        appiumTask31.setTextEqualType("eq");
-        appiumTask31.setTextEqualKey("广告");
-        appiumTask31.setOffsiteX(-100);
-        appiumTask31.setOffsiteY(-100);
-        appiumTask31.setWaitTime(2000L);
-
-//        AppiumTask appiumTask32 = new AppiumTask();
-//        appiumTask32.setFindType("loop");
-//        appiumTask32.setClickType("no");
-//        appiumTask32.setLoopType("noloop");
-//        appiumTask32.setIsMust(false);
-//        appiumTask32.setTextEqualType("neq");
-//        appiumTask32.setTextEqualKey("广告");
-//
-//        AppiumTask appiumTask321 = new AppiumTask();
-//        appiumTask321.setFindType("id");
-//        appiumTask321.setFindKey("com.smile.gifmaker:id/back_btn");
-//        appiumTask321.setClickType("element");
-//        appiumTask321.setLoopType("noloop");
-//        appiumTask321.setIsMust(false);
-
-        AppiumTask appiumTask311 = new AppiumTask();
-        appiumTask311.setFindType("loop");
-        appiumTask311.setClickType("no");
-        appiumTask311.setLoopType("noloop");
-        appiumTask311.setIsMust(true);
-        appiumTask311.setSwapType("up");
-
-        AppiumTask appiumTask312 = new AppiumTask();
-        appiumTask312.setFindType("id");
-        appiumTask312.setWaitTime(5000L);
-        appiumTask312.setFindKey("com.smile.gifmaker:id/ad_simplified_style_enhanced_ad_install_text");
-        appiumTask312.setClickType("element");
-        appiumTask312.setLoopType("noloop");
-        appiumTask312.setIsMust(false);
-
-
-        AppiumTask appiumTask3121 = new AppiumTask();
-        appiumTask3121.setFindType("id");
-        appiumTask3121.setFindKey("com.android.packageinstaller:id/ok_button");
-        appiumTask3121.setClickType("element");
-        appiumTask3121.setLoopType("noloop");
-        appiumTask3121.setIsMust(true);
-        appiumTask3121.setLoopRate(3000L);
-
-        AppiumTask appiumTask3122 = new AppiumTask();
-        appiumTask3122.setFindType("id");
-        appiumTask3122.setFindKey("com.android.packageinstaller:id/launch_button");
-        appiumTask3122.setClickType("element");
-        appiumTask3122.setLoopType("noloop");
-        appiumTask3122.setIsMust(true);
-        appiumTask3121.setLoopRate(3000L);
-
-        AppiumTask appiumTask3124 = new AppiumTask();
-        appiumTask3124.setFindType("id");
-        appiumTask3124.setFindKey("com.android.packageinstaller:id/permission_allow_button");
-        appiumTask3124.setClickType("element");
-        appiumTask3124.setLoopType("noloop");
-        appiumTask3124.setIsMust(false);
-        appiumTask3124.setWaitTime(3000L);
-
-        AppiumTask appiumTask3125 = new AppiumTask();
-        appiumTask3125.setFindType("id");
-        appiumTask3125.setFindKey("com.android.packageinstaller:id/permission_allow_button");
-        appiumTask3125.setClickType("element");
-        appiumTask3125.setLoopType("noloop");
-        appiumTask3125.setIsMust(false);
-        appiumTask3125.setWaitTime(3000L);
-
-        AppiumTask appiumTask3126 = new AppiumTask();
-        appiumTask3126.setFindType("id");
-        appiumTask3126.setFindKey("com.android.packageinstaller:id/permission_allow_button");
-        appiumTask3126.setClickType("element");
-        appiumTask3126.setLoopType("noloop");
-        appiumTask3126.setIsMust(false);
-        appiumTask3126.setWaitTime(3000L);
-
-        AppiumTask appiumTask3127 = new AppiumTask();
-        appiumTask3127.setFindType("id");
-        appiumTask3127.setFindKey("com.android.packageinstaller:id/permission_allow_button");
-        appiumTask3127.setClickType("element");
-        appiumTask3127.setLoopType("noloop");
-        appiumTask3127.setIsMust(false);
-        appiumTask3127.setWaitTime(3000L);
-        appiumTask3127.setIsClose(true);
-
-        List<AppiumTask> subList4 = new ArrayList<>();
-        subList4.add(appiumTask3121);
-        subList4.add(appiumTask3122);
-//        subList4.add(appiumTask3123);
-        subList4.add(appiumTask3124);
-        subList4.add(appiumTask3125);
-        subList4.add(appiumTask3126);
-        subList4.add(appiumTask3127);
-        appiumTask312.setSubTask(subList4);
-
-        List<AppiumTask> subList3 = new ArrayList<>();
-        subList3.add(appiumTask311);
-        subList3.add(appiumTask312);
-        appiumTask31.setSubTask(subList3);
-
-//        List<AppiumTask> subList2 = new ArrayList<>();
-//        subList2.add(appiumTask321);
-//        appiumTask32.setSubTask(subList2);
-
-        List<AppiumTask> subList1 = new ArrayList<>();
-        subList1.add(appiumTask31);
-//        subList1.add(appiumTask32);
-        appiumTask3.setSubTask(subList1);
-
-        list.add(appiumTask1);
-        list.add(appiumTask2);
-        list.add(appiumTask3);
-        return list;
-    }
-
-    public void t() {
-        try {
-//            AndroidDriver androidDriver = initAndroidDriver("http://39.106.184.70:4723/wd/hub","183.131.157.66:10005","com.smile.gifmaker","com.yxcorp.gifshow.HomeActivity");
-            AndroidDriver androidDriver = initAndroidDriver("http://39.106.184.70:4723/wd/hub", "183.131.157.66:10005", "com.smile.gifmaker", "com.yxcorp.gifshow.HomeActivity");
-
-            List<AppiumTask> list = initTask();
-            for (AppiumTask task : list) {
-                runTask(androidDriver, task, null);
-            }
-            androidDriver.quit();
-            System.out.println("task success");
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-
-    }
-
-    public void runTask(AndroidDriver androidDriver, AppiumTask appiumTask, WebElement loopElement) throws Exception {
-        if (appiumTask != null) {
-            System.out.println(new Gson().toJson(appiumTask));
-            if (appiumTask.getWaitTime() != null && appiumTask.getWaitTime() > 0) {
-                Thread.sleep(appiumTask.getWaitTime());
-            }
-            if (appiumTask.getLoopType() != null && appiumTask.getLoopType().equals("noloop")) {
-                if (appiumTask.getFindType() != null) {
-                    WebElement element = null;
-                    if (appiumTask.getFindType().equals("id")) {
-                        element = getElementById(androidDriver, appiumTask.getFindKey());
-                    } else if (appiumTask.getFindType().equals("class")) {
-                        element = getElementByClass(androidDriver, appiumTask.getFindKey());
-                    } else if (appiumTask.getFindType().equals("xpath")) {
-                        element = getElementByXpath(androidDriver, appiumTask.getFindKey());
-                    } else if (appiumTask.getFindType().equals("loop")) {
-                        element = loopElement;
-                    }
-                    if (element != null) {
-                        if (appiumTask.getTextEqualType() != null) {
-                            if (appiumTask.getTextEqualType().equals("eq")) {
-                                if (!element.getText().equals(appiumTask.getTextEqualKey())) {
-                                    return;
-                                }
-                            } else if (appiumTask.getTextEqualType().equals("neq")) {
-                                if (element.getText() == null || element.getText().equals(appiumTask.getTextEqualKey())) {
-                                    return;
-                                }
-                            }
-                        }
-                        if (appiumTask.getClickType() != null) {
-                            if (appiumTask.getClickType().equals("element")) {
-                                element.click();
-                            } else if (appiumTask.getClickType().equals("point")) {
-                                Point point = element.getLocation();
-                                tapPoint(androidDriver, point.getX() + appiumTask.getOffsiteX(), point.getY() + appiumTask.getOffsiteY());
-                            }
-                        }
-                        List<AppiumTask> subTask = appiumTask.getSubTask();
-                        if (subTask != null && subTask.size() > 0) {
-                            for (AppiumTask task : subTask) {
-                                runTask(androidDriver, task, element);
-                            }
-                        }
-                    } else {
-                        if (appiumTask.getIsMust() != null && appiumTask.getIsMust() == true) {
-                            if (appiumTask.getLoopRate() != null && appiumTask.getLoopRate() > 0) {
-                                Thread.sleep(appiumTask.getLoopRate());
-                            }
-                            runTask(androidDriver, appiumTask, element);
-                            return;
-                        }
-                        if (appiumTask.getClickType() != null && appiumTask.getClickType().equals("point")) {
-                            tapPoint(androidDriver, appiumTask.getOffsiteX(), appiumTask.getOffsiteY());
-                        }
-                    }
-                }
-                if (appiumTask.getSwapType() != null) {
-                    if (appiumTask.getSwapType().equals("up")) {
-                        this.swipeToUp(androidDriver);
-                    } else if (appiumTask.getSwapType().equals("down")) {
-                        this.swipeToDown(androidDriver);
-                    } else if (appiumTask.getSwapType().equals("left")) {
-                        this.swipeToLeft(androidDriver);
-                    } else if (appiumTask.getSwapType().equals("right")) {
-                        this.swipeToRight(androidDriver);
-                    }
-                }
-            } else if (appiumTask.getLoopType() != null && appiumTask.getLoopType().equals("loop")) {
-                while (isLoop) {
-                    System.out.println("loop:" + isLoop);
-                    if (appiumTask.getFindType() != null) {
-                        List<WebElement> list = null;
-                        if (appiumTask.getFindType().equals("id")) {
-                            list = androidDriver.findElementsById(appiumTask.getFindKey());
-                        } else if (appiumTask.getFindType().equals("class")) {
-                            list = androidDriver.findElementsByClassName(appiumTask.getFindKey());
-                        } else if (appiumTask.getFindType().equals("xpath")) {
-                            list = androidDriver.findElementsByXPath(appiumTask.getFindKey());
-                        }
-                        if (list != null && list.size() > 0) {
-                            for (WebElement element : list) {
-                                if (!isLoop) {
-                                    break;
-                                }
-                                if (appiumTask.getLoopRate() != null && appiumTask.getLoopRate() > 0) {
-                                    Thread.sleep(appiumTask.getLoopRate());
-                                }
-                                List<AppiumTask> subTask = appiumTask.getSubTask();
-                                if (subTask != null && subTask.size() > 0) {
-                                    for (AppiumTask task : subTask) {
-                                        runTask(androidDriver, task, element);
-                                    }
-                                }
-                            }
-                        }
-                    }
-                    if (appiumTask.getSwapType() != null) {
-                        if (appiumTask.getSwapType().equals("up")) {
-                            this.swipeToUp(androidDriver);
-                        } else if (appiumTask.getSwapType().equals("down")) {
-                            this.swipeToDown(androidDriver);
-                        } else if (appiumTask.getSwapType().equals("left")) {
-                            this.swipeToLeft(androidDriver);
-                        } else if (appiumTask.getSwapType().equals("right")) {
-                            this.swipeToRight(androidDriver);
-                        }
-                    }
-                }
-
-            }
-            if (appiumTask.getIsClose() != null && appiumTask.getIsClose()) {
-                this.isLoop = false;
-            }
-        }
-    }
-
-    public static void main(String[] args) throws MalformedURLException, InterruptedException {
-        // TODO Auto-generated method stub
-        //1.添加配置,创建DesiredCapabilities对象
-        AppiumTest appiumTest = new AppiumTest();
-        appiumTest.t();
-        //2.创建驱动...URL是appium的固定地址;指定appium通讯的地址,将相对应的配置传入到驱动里边
-
-//        com.longene.lglocation/.activity.MainActivity
-//        com.longene.setcardproperty/.MainActivity
-        //打开地图后点击同意继续
-//        androidDriver.findElementById("com.smile.gifmaker:id/button").click();
-        //点击进入地图
-        //加线程等待
-//        Thread.sleep(5000);
-//        while (true){
-//            try {
-//                AndroidDriver androidDriver = appiumTest.initAndroidDriver("http://39.106.184.70:4723/wd/hub","","","");
-//
-//                List<WebElement> list = androidDriver.findElementsByClassName("android.widget.CheckedTextView");
-//                if(list != null && list.size() > 0){
-//                    list.get(0).click();
-//                }
+//package cn.com.ctop.crawler.modules.test;
+//
+//import cn.com.ctop.crawler.modules.core.util.AppiumUtil;
+//import com.google.gson.Gson;
+//import io.appium.java_client.TouchAction;
+//import io.appium.java_client.android.AndroidDriver;
+//import io.appium.java_client.touch.WaitOptions;
+//import io.appium.java_client.touch.offset.PointOption;
+//import lombok.Data;
+//import org.openqa.selenium.Point;
+//import org.openqa.selenium.WebElement;
+//import org.openqa.selenium.remote.DesiredCapabilities;
+//
+//import java.net.MalformedURLException;
+//import java.net.URL;
+//import java.time.Duration;
+//import java.util.ArrayList;
+//import java.util.List;
+//
+//@Data
+//public class AppiumTest {
+//    private Boolean isLoop = true;
+//    private Duration duration = Duration.ofSeconds(1);
+//
+//
+//
+//    //    "http://39.106.184.70:4723/wd/hub"
+//    public AndroidDriver initAndroidDriver(String serverUrl, String deviceName, String appPackage, String appActivity) throws Exception {
+//        return new AndroidDriver(new URL(serverUrl), initCapabilities(deviceName, appPackage, appActivity));
+//    }
+//
+//    public DesiredCapabilities initCapabilities(String deviceName, String appPackage, String appActivity) {
+//        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
+//        //指定测试设备的名称
+////        desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001");
+////        desiredCapabilities.setCapability("deviceName", "183.131.157.66:10005");
+//        desiredCapabilities.setCapability("deviceName", deviceName);
+//        //添加操作系统配置
+//        desiredCapabilities.setCapability("platformName", "Android");
+//        //添加操作系统版本设置
+////        desiredCapabilities.setCapability("platformVersion", "4.4.2");
+//        //指定想要测试应用的包名
+////        desiredCapabilities.setCapability("appPackage", "com.smile.gifmaker");
+//        desiredCapabilities.setCapability("appPackage", appPackage);
+//        desiredCapabilities.setCapability("noReset", true);
+//        desiredCapabilities.setCapability("unicodeKeyboard", true);
+//        desiredCapabilities.setCapability("resetKeyboard", true);
+//        //指定想要测试应用的入口activity
+////        desiredCapabilities.setCapability("appActivity", "com.yxcorp.gifshow.HomeActivity");
+//        desiredCapabilities.setCapability("appActivity", appActivity);
+//        return desiredCapabilities;
+//    }
+//
+//    public List<AppiumTask> initTask() {
+//        List<AppiumTask> list = new ArrayList<>();
+//        AppiumTask appiumTask1 = new AppiumTask();
+//        appiumTask1.setFindType("class");
+//        appiumTask1.setFindKey("android.widget.CheckedTextView");
+//        appiumTask1.setClickType("element");
+//        appiumTask1.setLoopType("noloop");
+//        appiumTask1.setIsMust(true);
+//        appiumTask1.setWaitTime(3000L);
+//
+//        AppiumTask appiumTask2 = new AppiumTask();
+//        appiumTask2.setFindType("xpath");
+//        appiumTask2.setFindKey("//android.view.View[@content-desc=\"发现\"]");
+//        appiumTask2.setClickType("element");
+//        appiumTask2.setLoopType("noloop");
+//        appiumTask2.setIsMust(true);
+//        appiumTask2.setWaitTime(3000L);
+//
+//        AppiumTask appiumTask3 = new AppiumTask();
+//        appiumTask3.setFindType("id");
+//        appiumTask3.setFindKey("com.smile.gifmaker:id/subject");
+//        appiumTask3.setClickType("no");
+//        appiumTask3.setLoopType("loop");
+//        appiumTask3.setIsMust(true);
+//        appiumTask3.setSwapType("up");
+//
+//        AppiumTask appiumTask31 = new AppiumTask();
+//        appiumTask31.setFindType("loop");
+//        appiumTask31.setClickType("point");
+//        appiumTask31.setLoopType("noloop");
+//        appiumTask31.setIsMust(false);
+//        appiumTask31.setTextEqualType("eq");
+//        appiumTask31.setTextEqualKey("广告");
+//        appiumTask31.setOffsiteX(-100);
+//        appiumTask31.setOffsiteY(-100);
+//        appiumTask31.setWaitTime(2000L);
+//
+////        AppiumTask appiumTask32 = new AppiumTask();
+////        appiumTask32.setFindType("loop");
+////        appiumTask32.setClickType("no");
+////        appiumTask32.setLoopType("noloop");
+////        appiumTask32.setIsMust(false);
+////        appiumTask32.setTextEqualType("neq");
+////        appiumTask32.setTextEqualKey("广告");
+////
+////        AppiumTask appiumTask321 = new AppiumTask();
+////        appiumTask321.setFindType("id");
+////        appiumTask321.setFindKey("com.smile.gifmaker:id/back_btn");
+////        appiumTask321.setClickType("element");
+////        appiumTask321.setLoopType("noloop");
+////        appiumTask321.setIsMust(false);
+//
+//        AppiumTask appiumTask311 = new AppiumTask();
+//        appiumTask311.setFindType("loop");
+//        appiumTask311.setClickType("no");
+//        appiumTask311.setLoopType("noloop");
+//        appiumTask311.setIsMust(true);
+//        appiumTask311.setSwapType("up");
+//
+//        AppiumTask appiumTask312 = new AppiumTask();
+//        appiumTask312.setFindType("id");
+//        appiumTask312.setWaitTime(5000L);
+//        appiumTask312.setFindKey("com.smile.gifmaker:id/ad_simplified_style_enhanced_ad_install_text");
+//        appiumTask312.setClickType("element");
+//        appiumTask312.setLoopType("noloop");
+//        appiumTask312.setIsMust(false);
+//
+//
+//        AppiumTask appiumTask3121 = new AppiumTask();
+//        appiumTask3121.setFindType("id");
+//        appiumTask3121.setFindKey("com.android.packageinstaller:id/ok_button");
+//        appiumTask3121.setClickType("element");
+//        appiumTask3121.setLoopType("noloop");
+//        appiumTask3121.setIsMust(true);
+//        appiumTask3121.setLoopRate(3000L);
+//
+//        AppiumTask appiumTask3122 = new AppiumTask();
+//        appiumTask3122.setFindType("id");
+//        appiumTask3122.setFindKey("com.android.packageinstaller:id/launch_button");
+//        appiumTask3122.setClickType("element");
+//        appiumTask3122.setLoopType("noloop");
+//        appiumTask3122.setIsMust(true);
+//        appiumTask3121.setLoopRate(3000L);
+//
+//        AppiumTask appiumTask3124 = new AppiumTask();
+//        appiumTask3124.setFindType("id");
+//        appiumTask3124.setFindKey("com.android.packageinstaller:id/permission_allow_button");
+//        appiumTask3124.setClickType("element");
+//        appiumTask3124.setLoopType("noloop");
+//        appiumTask3124.setIsMust(false);
+//        appiumTask3124.setWaitTime(3000L);
+//
+//        AppiumTask appiumTask3125 = new AppiumTask();
+//        appiumTask3125.setFindType("id");
+//        appiumTask3125.setFindKey("com.android.packageinstaller:id/permission_allow_button");
+//        appiumTask3125.setClickType("element");
+//        appiumTask3125.setLoopType("noloop");
+//        appiumTask3125.setIsMust(false);
+//        appiumTask3125.setWaitTime(3000L);
+//
+//        AppiumTask appiumTask3126 = new AppiumTask();
+//        appiumTask3126.setFindType("id");
+//        appiumTask3126.setFindKey("com.android.packageinstaller:id/permission_allow_button");
+//        appiumTask3126.setClickType("element");
+//        appiumTask3126.setLoopType("noloop");
+//        appiumTask3126.setIsMust(false);
+//        appiumTask3126.setWaitTime(3000L);
+//
+//        AppiumTask appiumTask3127 = new AppiumTask();
+//        appiumTask3127.setFindType("id");
+//        appiumTask3127.setFindKey("com.android.packageinstaller:id/permission_allow_button");
+//        appiumTask3127.setClickType("element");
+//        appiumTask3127.setLoopType("noloop");
+//        appiumTask3127.setIsMust(false);
+//        appiumTask3127.setWaitTime(3000L);
+//        appiumTask3127.setIsClose(true);
+//
+//        List<AppiumTask> subList4 = new ArrayList<>();
+//        subList4.add(appiumTask3121);
+//        subList4.add(appiumTask3122);
+////        subList4.add(appiumTask3123);
+//        subList4.add(appiumTask3124);
+//        subList4.add(appiumTask3125);
+//        subList4.add(appiumTask3126);
+//        subList4.add(appiumTask3127);
+//        appiumTask312.setSubTask(subList4);
+//
+//        List<AppiumTask> subList3 = new ArrayList<>();
+//        subList3.add(appiumTask311);
+//        subList3.add(appiumTask312);
+//        appiumTask31.setSubTask(subList3);
+//
+////        List<AppiumTask> subList2 = new ArrayList<>();
+////        subList2.add(appiumTask321);
+////        appiumTask32.setSubTask(subList2);
+//
+//        List<AppiumTask> subList1 = new ArrayList<>();
+//        subList1.add(appiumTask31);
+////        subList1.add(appiumTask32);
+//        appiumTask3.setSubTask(subList1);
+//
+//        list.add(appiumTask1);
+//        list.add(appiumTask2);
+//        list.add(appiumTask3);
+//        return list;
+//    }
+//
+//    public void t() {
+//        try {
+////            AndroidDriver androidDriver = initAndroidDriver("http://39.106.184.70:4723/wd/hub","183.131.157.66:10005","com.smile.gifmaker","com.yxcorp.gifshow.HomeActivity");
+//            AndroidDriver androidDriver = initAndroidDriver("http://39.106.184.70:4723/wd/hub", "183.131.157.66:10005", "com.smile.gifmaker", "com.yxcorp.gifshow.HomeActivity");
+//
+//            List<AppiumTask> list = initTask();
+//            for (AppiumTask task : list) {
+//                runTask(androidDriver, task, null);
+//            }
+//            androidDriver.quit();
+//            System.out.println("task success");
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//
 //
-//                List<WebElement> list1 = androidDriver.findElementsByXPath("//android.view.View[@content-desc=\"发现\"]");
-//                if(list1 != null && list1.size() > 0){
-//                    list1.get(0).click();
+//    }
+//
+//    public void runTask(AndroidDriver androidDriver, AppiumTask appiumTask, WebElement loopElement) throws Exception {
+//        if (appiumTask != null) {
+//            System.out.println(new Gson().toJson(appiumTask));
+//            if (appiumTask.getWaitTime() != null && appiumTask.getWaitTime() > 0) {
+//                Thread.sleep(appiumTask.getWaitTime());
+//            }
+//            if (appiumTask.getLoopType() != null && "noloop".equals(appiumTask.getLoopType())) {
+//                if (appiumTask.getFindType() != null) {
+//                    WebElement element = null;
+//                    if ("id".equals(appiumTask.getFindType())) {
+//                        element = AppiumUtil.getElementById(androidDriver, appiumTask.getFindKey());
+//                    } else if ("class".equals(appiumTask.getFindType())) {
+//                        element = getElementByClass(androidDriver, appiumTask.getFindKey());
+//                    } else if ("xpath".equals(appiumTask.getFindType())) {
+//                        element = getElementByXpath(androidDriver, appiumTask.getFindKey());
+//                    } else if ("loop".equals(appiumTask.getFindType())) {
+//                        element = loopElement;
+//                    }
+//                    if (element != null) {
+//                        if (appiumTask.getTextEqualType() != null) {
+//                            if ("eq".equals(appiumTask.getTextEqualType())) {
+//                                if (!element.getText().equals(appiumTask.getTextEqualKey())) {
+//                                    return;
+//                                }
+//                            } else if ("neq".equals(appiumTask.getTextEqualType())) {
+//                                if (element.getText() == null || element.getText().equals(appiumTask.getTextEqualKey())) {
+//                                    return;
+//                                }
+//                            }
+//                        }
+//                        if (appiumTask.getClickType() != null) {
+//                            if ("element".equals(appiumTask.getClickType())) {
+//                                element.click();
+//                            } else if ("point".equals(appiumTask.getClickType())) {
+//                                Point point = element.getLocation();
+//                                tapPoint(androidDriver, point.getX() + appiumTask.getOffsiteX(), point.getY() + appiumTask.getOffsiteY());
+//                            }
+//                        }
+//                        List<AppiumTask> subTask = appiumTask.getSubTask();
+//                        if (subTask != null && subTask.size() > 0) {
+//                            for (AppiumTask task : subTask) {
+//                                runTask(androidDriver, task, element);
+//                            }
+//                        }
+//                    } else {
+//                        if (appiumTask.getIsMust() != null && appiumTask.getIsMust() == true) {
+//                            if (appiumTask.getLoopRate() != null && appiumTask.getLoopRate() > 0) {
+//                                Thread.sleep(appiumTask.getLoopRate());
+//                            }
+//                            runTask(androidDriver, appiumTask, element);
+//                            return;
+//                        }
+//                        if (appiumTask.getClickType() != null && "point".equals(appiumTask.getClickType())) {
+//                            tapPoint(androidDriver, appiumTask.getOffsiteX(), appiumTask.getOffsiteY());
+//                        }
+//                    }
 //                }
-//                appiumTest.swipeToUp(androidDriver);
-//
-//                Thread.sleep(2000);
-//                List<WebElement> webElementList = androidDriver.findElementsById("com.smile.gifmaker:id/subject");
-//                if(webElementList != null && webElementList.size() > 0){
-//                    for(WebElement element : webElementList){
-//                        if(element.getText().equals("广告")){
-//                            Point point = element.getLocation();
-//                            appiumTest.tapPoint(androidDriver,point.getX()-100,point.getY()-100);
-////                            Thread.sleep(1000);
-////                            androidDriver.findElementById("com.smile.gifmaker:id/like_button").click();
-////                            Thread.sleep(1000);
-//                            appiumTest.swipeToUp(androidDriver);
-//                            Thread.sleep(5000);
-////                            String text = androidDriver.findElementById("com.smile.gifmaker:id/label").getText();
-////                            System.out.println(text);
-////                            String title = text.split(":")[1].trim();
-//
-////                            if(title.startsWith("超级有趣的小游戏")){
-////                                Thread.sleep(1000);
-////                                androidDriver.findElementById("com.smile.gifmaker:id/editor_holder_text").click();
-////                                Thread.sleep(1000);
-////                                androidDriver.findElementById("com.smile.gifmaker:id/editor").sendKeys("这个广告看着很吸引人!");
-////                                Thread.sleep(1000);
-////                                androidDriver.findElementById("com.smile.gifmaker:id/finish_button").click();
-//                                Thread.sleep(5000);
-//                                List<WebElement> webElement = androidDriver.findElementsById("com.smile.gifmaker:id/ad_simplified_style_enhanced_ad_install_text");
-//                                if (webElement != null && webElement.size() > 0){
-//                                    webElement.get(0).click();
-//                                    while (true){
-//                                    Thread.sleep(5000);
-//                                        List<WebElement> element1 = androidDriver.findElementsById("com.android.packageinstaller:id/ok_button");
-//                                        if(element1 != null && element1.size() > 0){
-//                                            System.out.println(element1.get(0).getText());
-//                                            element1.get(0).click();
-//                                            break;
-//                                        }
-//                                    }
-//                                    while (true){
-//                                        Thread.sleep(5000);
-//                                        List<WebElement> element1 = androidDriver.findElementsById("com.android.packageinstaller:id/launch_button");
-//                                        if(element1 != null && element1.size() > 0){
-//                                            System.out.println(element1.get(0).getText());
-//                                            element1.get(0).click();
-//                                            break;
-//                                        }
-//                                    }
-//                                    while (true){
-//                                        Thread.sleep(5000);
-//                                        List<WebElement> element1 = androidDriver.findElementsById("com.android.packageinstaller:id/permission_allow_button");
-//                                        if (element1 != null && element1.size() > 0){
-//                                            element1.get(0).click();
-//                                        }else {
-//                                            break;
-//                                        }
-//                                    }
-//                                    Thread.sleep(5000);
-//                                    List<WebElement> element1 = androidDriver.findElementsById("com.game.matrix_pixelpaint:id/nr");
-//                                    if(element1 != null && element1.size() > 0){
-//                                        element1.get(0).click();
-//                                    }
-//                                    for(int i = 0; i < 10;i++){
-//                                        Thread.sleep(2000);
-//                                        appiumTest.swipeToUp(androidDriver);
+//                if (appiumTask.getSwapType() != null) {
+//                    if ("up".equals(appiumTask.getSwapType())) {
+//                        this.swipeToUp(androidDriver);
+//                    } else if ("down".equals(appiumTask.getSwapType())) {
+//                        this.swipeToDown(androidDriver);
+//                    } else if ("left".equals(appiumTask.getSwapType())) {
+//                        this.swipeToLeft(androidDriver);
+//                    } else if ("right".equals(appiumTask.getSwapType())) {
+//                        this.swipeToRight(androidDriver);
+//                    }
+//                }
+//            } else if (appiumTask.getLoopType() != null && "loop".equals(appiumTask.getLoopType())) {
+//                while (isLoop) {
+//                    System.out.println("loop:" + isLoop);
+//                    if (appiumTask.getFindType() != null) {
+//                        List<WebElement> list = null;
+//                        if ("id".equals(appiumTask.getFindType())) {
+//                            list = androidDriver.findElementsById(appiumTask.getFindKey());
+//                        } else if ("class".equals(appiumTask.getFindType())) {
+//                            list = androidDriver.findElementsByClassName(appiumTask.getFindKey());
+//                        } else if ("xpath".equals(appiumTask.getFindType())) {
+//                            list = androidDriver.findElementsByXPath(appiumTask.getFindKey());
+//                        }
+//                        if (list != null && list.size() > 0) {
+//                            for (WebElement element : list) {
+//                                if (!isLoop) {
+//                                    break;
+//                                }
+//                                if (appiumTask.getLoopRate() != null && appiumTask.getLoopRate() > 0) {
+//                                    Thread.sleep(appiumTask.getLoopRate());
+//                                }
+//                                List<AppiumTask> subTask = appiumTask.getSubTask();
+//                                if (subTask != null && subTask.size() > 0) {
+//                                    for (AppiumTask task : subTask) {
+//                                        runTask(androidDriver, task, element);
 //                                    }
-//                                    System.out.println("操作完成");
-//                                }else {
-//                                    androidDriver.findElementById("com.smile.gifmaker:id/back_btn").click();
 //                                }
-//                                //按钮  com.smile.gifmaker:id/ad_simplified_style_enhanced_ad_install_text
-//                                //转化  com.smile.gifmaker:id/ad_simplified_style_enhanced_app_name_text
-//                                //喜欢  com.smile.gifmaker:id/like_button
-//                                //举报  com.smile.gifmaker:id/inform_button
-//                                //分享  com.smile.gifmaker:id/forward_button
-//                                //头像  com.smile.gifmaker:id/avatar
-//                                //返回  com.smile.gifmaker:id/back_btn
-//                                //昵称标题 com.smile.gifmaker:id/label
-//                                //评论数 com.smile.gifmaker:id/more_comments
-//                                //点赞数 com.smile.gifmaker:id/number_like
-//                                //播放数 com.smile.gifmaker:id/number_review
-//                                //新增评论 com.smile.gifmaker:id/text_top
-//                                //评论内容 com.smile.gifmaker:id/editor
-//                                //评论提交 com.smile.gifmaker:id/finish_button
-//
-////                            }else {
-////                                System.out.println(title);
-////                                androidDriver.findElementById("com.smile.gifmaker:id/back_btn").click();
-////                            }
-//
-//
-////                            Thread.sleep(5000);
-////                            androidDriver.findElementById("com.smile.gifmaker:id/back_btn").click();
-////                            System.out.println("广告坐标为:"+point.getX()+","+point.getY());
+//                            }
+//                        }
+//                    }
+//                    if (appiumTask.getSwapType() != null) {
+//                        if ("up".equals(appiumTask.getSwapType())) {
+//                            this.swipeToUp(androidDriver);
+//                        } else if ("down".equals(appiumTask.getSwapType())) {
+//                            this.swipeToDown(androidDriver);
+//                        } else if ("left".equals(appiumTask.getSwapType())) {
+//                            this.swipeToLeft(androidDriver);
+//                        } else if ("right".equals(appiumTask.getSwapType())) {
+//                            this.swipeToRight(androidDriver);
 //                        }
 //                    }
 //                }
-//            }catch (Exception e){
-//                e.printStackTrace();
-//            }
 //
+//            }
+//            if (appiumTask.getIsClose() != null && appiumTask.getIsClose()) {
+//                this.isLoop = false;
+//            }
 //        }
-
-//        androidDriver.findElementById("com.smile.gifmaker:id/player_cover").click();
-//        Thread.sleep(5000);
-//        //退出
-//        androidDriver.quit();
-    }
-
-    public WebElement getElementById(AndroidDriver androidDriver, String id) {
-        WebElement element = null;
-        List<WebElement> elements = androidDriver.findElementsById(id);
-        if (elements != null && elements.size() > 0) {
-            element = elements.get(0);
-        }
-        return element;
-    }
-
-    public WebElement getElementByClass(AndroidDriver androidDriver, String className) {
-        WebElement element = null;
-        List<WebElement> elements = androidDriver.findElementsByClassName(className);
-        if (elements != null && elements.size() > 0) {
-            element = elements.get(0);
-        }
-        return element;
-    }
-
-    public WebElement getElementByXpath(AndroidDriver androidDriver, String xpath) {
-        WebElement element = null;
-        List<WebElement> elements = androidDriver.findElementsByXPath(xpath);
-        if (elements != null && elements.size() > 0) {
-            element = elements.get(0);
-        }
-        return element;
-    }
-}
+//    }
+//
+//    public static void main(String[] args) throws MalformedURLException, InterruptedException {
+//        // TODO Auto-generated method stub
+//        //1.添加配置,创建DesiredCapabilities对象
+//        AppiumTest appiumTest = new AppiumTest();
+//        appiumTest.t();
+//        //2.创建驱动...URL是appium的固定地址;指定appium通讯的地址,将相对应的配置传入到驱动里边
+//
+////        com.longene.lglocation/.activity.MainActivity
+////        com.longene.setcardproperty/.MainActivity
+//        //打开地图后点击同意继续
+////        androidDriver.findElementById("com.smile.gifmaker:id/button").click();
+//        //点击进入地图
+//        //加线程等待
+////        Thread.sleep(5000);
+////        while (true){
+////            try {
+////                AndroidDriver androidDriver = appiumTest.initAndroidDriver("http://39.106.184.70:4723/wd/hub","","","");
+////
+////                List<WebElement> list = androidDriver.findElementsByClassName("android.widget.CheckedTextView");
+////                if(list != null && list.size() > 0){
+////                    list.get(0).click();
+////                }
+////
+////                List<WebElement> list1 = androidDriver.findElementsByXPath("//android.view.View[@content-desc=\"发现\"]");
+////                if(list1 != null && list1.size() > 0){
+////                    list1.get(0).click();
+////                }
+////                appiumTest.swipeToUp(androidDriver);
+////
+////                Thread.sleep(2000);
+////                List<WebElement> webElementList = androidDriver.findElementsById("com.smile.gifmaker:id/subject");
+////                if(webElementList != null && webElementList.size() > 0){
+////                    for(WebElement element : webElementList){
+////                        if(element.getText().equals("广告")){
+////                            Point point = element.getLocation();
+////                            appiumTest.tapPoint(androidDriver,point.getX()-100,point.getY()-100);
+//////                            Thread.sleep(1000);
+//////                            androidDriver.findElementById("com.smile.gifmaker:id/like_button").click();
+//////                            Thread.sleep(1000);
+////                            appiumTest.swipeToUp(androidDriver);
+////                            Thread.sleep(5000);
+//////                            String text = androidDriver.findElementById("com.smile.gifmaker:id/label").getText();
+//////                            System.out.println(text);
+//////                            String title = text.split(":")[1].trim();
+////
+//////                            if(title.startsWith("超级有趣的小游戏")){
+//////                                Thread.sleep(1000);
+//////                                androidDriver.findElementById("com.smile.gifmaker:id/editor_holder_text").click();
+//////                                Thread.sleep(1000);
+//////                                androidDriver.findElementById("com.smile.gifmaker:id/editor").sendKeys("这个广告看着很吸引人!");
+//////                                Thread.sleep(1000);
+//////                                androidDriver.findElementById("com.smile.gifmaker:id/finish_button").click();
+////                                Thread.sleep(5000);
+////                                List<WebElement> webElement = androidDriver.findElementsById("com.smile.gifmaker:id/ad_simplified_style_enhanced_ad_install_text");
+////                                if (webElement != null && webElement.size() > 0){
+////                                    webElement.get(0).click();
+////                                    while (true){
+////                                    Thread.sleep(5000);
+////                                        List<WebElement> element1 = androidDriver.findElementsById("com.android.packageinstaller:id/ok_button");
+////                                        if(element1 != null && element1.size() > 0){
+////                                            System.out.println(element1.get(0).getText());
+////                                            element1.get(0).click();
+////                                            break;
+////                                        }
+////                                    }
+////                                    while (true){
+////                                        Thread.sleep(5000);
+////                                        List<WebElement> element1 = androidDriver.findElementsById("com.android.packageinstaller:id/launch_button");
+////                                        if(element1 != null && element1.size() > 0){
+////                                            System.out.println(element1.get(0).getText());
+////                                            element1.get(0).click();
+////                                            break;
+////                                        }
+////                                    }
+////                                    while (true){
+////                                        Thread.sleep(5000);
+////                                        List<WebElement> element1 = androidDriver.findElementsById("com.android.packageinstaller:id/permission_allow_button");
+////                                        if (element1 != null && element1.size() > 0){
+////                                            element1.get(0).click();
+////                                        }else {
+////                                            break;
+////                                        }
+////                                    }
+////                                    Thread.sleep(5000);
+////                                    List<WebElement> element1 = androidDriver.findElementsById("com.game.matrix_pixelpaint:id/nr");
+////                                    if(element1 != null && element1.size() > 0){
+////                                        element1.get(0).click();
+////                                    }
+////                                    for(int i = 0; i < 10;i++){
+////                                        Thread.sleep(2000);
+////                                        appiumTest.swipeToUp(androidDriver);
+////                                    }
+////                                    System.out.println("操作完成");
+////                                }else {
+////                                    androidDriver.findElementById("com.smile.gifmaker:id/back_btn").click();
+////                                }
+////                                //按钮  com.smile.gifmaker:id/ad_simplified_style_enhanced_ad_install_text
+////                                //转化  com.smile.gifmaker:id/ad_simplified_style_enhanced_app_name_text
+////                                //喜欢  com.smile.gifmaker:id/like_button
+////                                //举报  com.smile.gifmaker:id/inform_button
+////                                //分享  com.smile.gifmaker:id/forward_button
+////                                //头像  com.smile.gifmaker:id/avatar
+////                                //返回  com.smile.gifmaker:id/back_btn
+////                                //昵称标题 com.smile.gifmaker:id/label
+////                                //评论数 com.smile.gifmaker:id/more_comments
+////                                //点赞数 com.smile.gifmaker:id/number_like
+////                                //播放数 com.smile.gifmaker:id/number_review
+////                                //新增评论 com.smile.gifmaker:id/text_top
+////                                //评论内容 com.smile.gifmaker:id/editor
+////                                //评论提交 com.smile.gifmaker:id/finish_button
+////
+//////                            }else {
+//////                                System.out.println(title);
+//////                                androidDriver.findElementById("com.smile.gifmaker:id/back_btn").click();
+//////                            }
+////
+////
+//////                            Thread.sleep(5000);
+//////                            androidDriver.findElementById("com.smile.gifmaker:id/back_btn").click();
+//////                            System.out.println("广告坐标为:"+point.getX()+","+point.getY());
+////                        }
+////                    }
+////                }
+////            }catch (Exception e){
+////                e.printStackTrace();
+////            }
+////
+////        }
+//
+////        androidDriver.findElementById("com.smile.gifmaker:id/player_cover").click();
+////        Thread.sleep(5000);
+////        //退出
+////        androidDriver.quit();
+//    }
+//}

+ 19 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/app/mapper/AppAdMapper.java

@@ -1,13 +1,31 @@
 package cn.com.ctop.kuaishou.modules.app.mapper;
 
-import cn.com.ctop.crawler.modules.account.entity.KuaishouAdAccount;
 import cn.com.ctop.kuaishou.modules.app.entity.AppAd;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
+/**
+ * @author yumeng
+ * 2019年11月12日10:04:00
+ */
 public interface AppAdMapper extends BaseMapper<AppAd> {
+    /**
+     * 查询信息
+     *
+     * @param userName
+     * @param industry
+     * @param company
+     * @param product
+     * @param start
+     * @param end
+     * @param orderByColumn
+     * @param orderByType
+     * @param pageStart
+     * @param pageSize
+     * @return
+     */
     public List<AppAd> queryAdFeeds(@Param("userName") String userName, @Param("industry") String industry, @Param("company") String company, @Param("product") String product, @Param("start") String start, @Param("end") String end, @Param("orderByColumn") String orderByColumn, @Param("orderByType") String orderByType, @Param("pageStart") Integer pageStart, @Param("pageSize") Integer pageSize);
 
 }

+ 15 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/app/service/IAppAdService.java

@@ -6,5 +6,20 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import java.util.List;
 
 public interface IAppAdService extends IService<AppAd> {
+    /**
+     * 条件查询
+     *
+     * @param userName
+     * @param industry
+     * @param company
+     * @param product
+     * @param start
+     * @param end
+     * @param orderByColumn
+     * @param orderByType
+     * @param pageStart
+     * @param pageSize
+     * @return
+     */
     public List<AppAd> queryAdFeeds(String userName, String industry, String company, String product, String start, String end, String orderByColumn, String orderByType, Integer pageStart, Integer pageSize);
 }

+ 4 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/app/service/impl/KuaishouAppServiceImpl.java

@@ -17,14 +17,16 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.jeecg.common.system.query.QueryGenerator;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.List;
 
+/**
+ * @author yumeng
+ * 2019年11月12日10:04:00
+ */
 @Service
 public class KuaishouAppServiceImpl implements IKuaishouAppService {
     @Autowired

+ 2 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaiShouActionBarTextController.java

@@ -1,6 +1,7 @@
 package cn.com.ctop.kuaishou.modules.batch.controller;
 
 import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.StringUtils;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouActionBarText;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouCampaignCreate;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouActionBarTextService;
@@ -163,7 +164,7 @@ public class KuaiShouActionBarTextController {
         if (ids == null || "".equals(ids.trim())) {
             result.error500("参数不识别!");
         } else {
-            this.kuaiShouActionBarTextService.removeByIds(Arrays.asList(ids.split(",")));
+            this.kuaiShouActionBarTextService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
             result.success("删除成功!");
         }
         return result;

+ 2 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaiShouAdvertiserBaseInfoController.java

@@ -1,5 +1,6 @@
 package cn.com.ctop.kuaishou.modules.batch.controller;
 
+import cn.com.ctop.common.module.utils.StringUtils;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouAdvertiserBaseInfo;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouAdvertiserBaseInfoService;
 import com.alibaba.fastjson.JSON;
@@ -151,7 +152,7 @@ public class KuaiShouAdvertiserBaseInfoController {
         if (ids == null || "".equals(ids.trim())) {
             result.error500("参数不识别!");
         } else {
-            this.kuaiShouAdvertiserBaseInfoService.removeByIds(Arrays.asList(ids.split(",")));
+            this.kuaiShouAdvertiserBaseInfoService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
             result.success("删除成功!");
         }
         return result;

+ 2 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaiShouAppCreateController.java

@@ -1,5 +1,6 @@
 package cn.com.ctop.kuaishou.modules.batch.controller;
 
+import cn.com.ctop.common.module.utils.StringUtils;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouAppCreate;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouAppCreateService;
 import com.alibaba.fastjson.JSON;
@@ -152,7 +153,7 @@ public class KuaiShouAppCreateController {
         if (ids == null || "".equals(ids.trim())) {
             result.error500("参数不识别!");
         } else {
-            this.kuaiShouAppCreateService.removeByIds(Arrays.asList(ids.split(",")));
+            this.kuaiShouAppCreateService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
             result.success("删除成功!");
         }
         return result;

+ 2 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaiShouAppInfoController.java

@@ -1,5 +1,6 @@
 package cn.com.ctop.kuaishou.modules.batch.controller;
 
+import cn.com.ctop.common.module.utils.StringUtils;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouAppInfo;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouAppInfoService;
 import com.alibaba.fastjson.JSON;
@@ -151,7 +152,7 @@ public class KuaiShouAppInfoController {
         if (ids == null || "".equals(ids.trim())) {
             result.error500("参数不识别!");
         } else {
-            this.kuaiShouAppInfoService.removeByIds(Arrays.asList(ids.split(",")));
+            this.kuaiShouAppInfoService.removeByIds(Arrays.asList(ids.split(StringUtils.COMMA)));
             result.success("删除成功!");
         }
         return result;

+ 0 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaiShouAppListController.java


Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików