Просмотр исходного кода

Merge branch 'master' of http://git.tjyourong.com.cn/ctop/adsp-boot

 Conflicts:
	module-crawler/src/main/java/cn/com/ctop/crawler/modules/taobao/service/impl/TaobaoJhsbybtServiceImpl.java
xuzuoyun 4 лет назад
Родитель
Сommit
207f44a695
100 измененных файлов с 4119 добавлено и 951 удалено
  1. 10 3
      jeecg-boot-base-common/src/main/java/org/jeecg/common/constant/AccountReportConstants.java
  2. 1 0
      jeecg-boot-base-common/src/main/java/org/jeecg/common/constant/CacheConstant.java
  3. 1 6
      jeecg-boot-base-common/src/main/java/org/jeecg/common/constant/ProvinceCityArea.java
  4. 6 11
      jeecg-boot-base-common/src/main/java/org/jeecg/common/system/util/JwtUtil.java
  5. 9 13
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/JsonResourceUtil.java
  6. 0 25
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/encryption/AesEncryptUtil.java
  7. 25 28
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/oConvertUtils.java
  8. 7 11
      jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/web/ActivitiProcessController.java
  9. 6 60
      jeecg-boot-module-system/pom.xml
  10. 3 1
      jeecg-boot-module-system/src/main/java/org/jeecg/JeecgApplication.java
  11. 0 60
      jeecg-boot-module-system/src/main/java/org/jeecg/config/RuleEngineConfig.java
  12. 35 31
      jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java
  13. 11 23
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/cas/util/CASServiceUtil.java
  14. 11 48
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/cas/util/XmlUtils.java
  15. 234 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ActCustomFormController.java
  16. 234 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ActFormDataController.java
  17. 234 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ActFormFieldController.java
  18. 234 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ActFormPorcessController.java
  19. 21 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CallbackController.java
  20. 11 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialAscriptionController.java
  21. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialInfoController.java
  22. 55 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialTopCtrl.java
  23. 115 8
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MediaReportCtrl.java
  24. 337 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProductController.java
  25. 3 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectController.java
  26. 3 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectMemberController.java
  27. 159 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TagInfoController.java
  28. 67 21
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java
  29. 3 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UReportFileController.java
  30. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/UReportFile.java
  31. 4 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/UReportFileBindUser.java
  32. 9 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouCommentAutoDelete.java
  33. 0 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/ToutiaoMaterialsLoadJob.java
  34. 4 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/MaterialTopMapper.java
  35. 8 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/MediaReportMapper.java
  36. 31 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/MaterialTopMapper.xml
  37. 234 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/MediaReportMapper.xml
  38. 3 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IMaterialTopService.java
  39. 9 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IMediaReportService.java
  40. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IProjectMemberService.java
  41. 7 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/MaterialTopServiceImpl.java
  42. 78 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/MediaReportServiceImpl.java
  43. 9 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ProjectMemberServiceImpl.java
  44. 0 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/RuleEngineServiceImpl.java
  45. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/vo/MaterialTopVO.java
  46. 0 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/message/job/SendMsgJob.java
  47. 2 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/opencv/utils/CornerCheck.java
  48. 1 15
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/opencv/utils/ExtractionVideoKeyFrames.java
  49. 0 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/opencv/utils/VideoProcessing.java
  50. 1 10
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/aspect/UrlMatchEnum.java
  51. 370 378
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java
  52. 248 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/controller/ThirdConfigAdvertiserController.java
  53. 132 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/controller/ThirdConfigController.java
  54. 57 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/entity/ThirdConfig.java
  55. 57 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/entity/ThirdConfigAdvertiser.java
  56. 22 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/mapper/ThirdConfigAdvertiserMapper.java
  57. 15 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/mapper/ThirdConfigMapper.java
  58. 24 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/mapper/xml/ThirdConfigAdvertiserMapper.xml
  59. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/mapper/xml/ThirdConfigMapper.xml
  60. 20 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/server/IThirdConfigAdvertiserService.java
  61. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/server/IThirdConfigService.java
  62. 35 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/server/impl/ThirdConfigAdvertiserServiceImpl.java
  63. 19 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/server/impl/ThirdConfigServiceImpl.java
  64. 2 9
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/wps/util/upload/oss/WpsOSSUtil.java
  65. 2 0
      jeecg-boot-module-system/src/main/resources/application-dev.yml
  66. 2 0
      jeecg-boot-module-system/src/main/resources/application-prod.yml
  67. 2 0
      jeecg-boot-module-system/src/main/resources/application-prod2.yml
  68. 2 5
      jeecg-boot-module-system/src/main/resources/application-test.yml
  69. 2 0
      jeecg-boot-module-system/src/main/resources/application-wps.yml
  70. 96 11
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  71. 0 49
      jeecg-boot-module-system/src/test/java/org/jeecg/SecurityToolsTest.java
  72. 43 13
      module-check/pom.xml
  73. 0 13
      module-check/src/main/java/cn/com/ctop/ModuleCheckApplication.java
  74. 4 6
      module-check/src/main/java/cn/com/ctop/check/TestGroovy.groovy
  75. 12 1
      module-check/src/main/java/cn/com/ctop/check/component/basic/AbstractScript.java
  76. 17 7
      module-check/src/main/java/cn/com/ctop/check/component/execute/GroovyScriptExecutor.java
  77. 60 0
      module-check/src/main/java/cn/com/ctop/check/component/execute/ScriptProcessLogExecutor.java
  78. 1 1
      module-check/src/main/java/cn/com/ctop/check/controller/CtopCheckTaskExecuteLogController.java
  79. 1 1
      module-check/src/main/java/cn/com/ctop/check/controller/CtopCheckTaskListController.java
  80. 0 18
      module-check/src/main/java/cn/com/ctop/check/script/CheckTokenExecuteStateScript.groovy
  81. 29 1
      module-check/src/main/java/cn/com/ctop/check/script/TestGroovyScript.java
  82. 0 30
      module-check/src/main/java/cn/com/ctop/notice/handle/SendWeChatHandle.java
  83. 58 0
      module-check/src/main/java/cn/com/ctop/notice/handler/SendWeChatHandle.java
  84. 0 4
      module-common/pom.xml
  85. 34 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/ActCustomForm.java
  86. 35 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormData.java
  87. 34 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormField.java
  88. 33 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormPorcess.java
  89. 126 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/Advertiser.java
  90. 95 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/OauthAgentToken.java
  91. 44 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/Product.java
  92. 40 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/TagInfo.java
  93. 0 9
      module-common/src/main/java/cn/com/ctop/common/module/file/FileTypeJudge.java
  94. 14 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/ActCustomFormMapper.java
  95. 14 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormDataMapper.java
  96. 14 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormFieldMapper.java
  97. 14 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormPorcessMapper.java
  98. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/CtopOauthTokenMapper.java
  99. 26 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/CustomDataByAccountMapper.java
  100. 0 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/OauthAgentTokenMapper.java

+ 10 - 3
jeecg-boot-base-common/src/main/java/org/jeecg/common/constant/AccountReportConstants.java

@@ -31,17 +31,24 @@ public class AccountReportConstants {
         return instance;
     }
 
-    /** 字典数据 */
+    /**
+     * 字典数据
+     */
+    //头条字段映射
     public static Map<String, Map<String,Object>> dicMap = new HashMap<>();
+    //快手字段映射
+    public static Map<String, Map<String,Object>> dicMapKs = new HashMap<>();
 
     /**
      * 初始化字典
      */
     public void init(){
         //加载json文件
-        Object json=JsonResourceUtil.getJsonObjFromResource("/json_template/bytedance_filed_mapping.json");
+        Object jsonBy=JsonResourceUtil.getJsonObjFromResource("/json_template/bytedance_filed_mapping.json");
+        Object jsonKs=JsonResourceUtil.getJsonObjFromResource("/json_template/kuaishou_filed_mapping.json");
         //json 转为map存为静态常量
-        dicMap=JsonResourceUtil.jsonToMap(json);
+        dicMap=JsonResourceUtil.jsonToMap(jsonBy);
+        dicMapKs=JsonResourceUtil.jsonToMap(jsonKs);
     }
 
 }

+ 1 - 0
jeecg-boot-base-common/src/main/java/org/jeecg/common/constant/CacheConstant.java

@@ -31,6 +31,7 @@ public interface CacheConstant {
 	 */
 	public static final String SYS_DEPARTS_CACHE = "sys:cache:depart:alldata";
 
+	public static final String SYS_TAGINFOS_CACHE = "sys:cache:taginfo:alldata";
 
 	/**
 	 * 全部部门ids缓存

+ 1 - 6
jeecg-boot-base-common/src/main/java/org/jeecg/common/constant/ProvinceCityArea.java

@@ -8,9 +8,8 @@ import org.springframework.stereotype.Component;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Scanner;
-import java.util.Set;
 import java.util.List;
+import java.util.Scanner;
 
 @Component("pca")
 public class ProvinceCityArea {
@@ -53,7 +52,6 @@ public class ProvinceCityArea {
     }
 
     private void initAreaList(){
-        //System.out.println("=====================");
         if(this.areaList==null || this.areaList.size()==0){
             this.areaList = new ArrayList<Area>();
             try {
@@ -63,20 +61,17 @@ public class ProvinceCityArea {
                 //第一层 省
                 JSONObject provinceJson = baseJson.getJSONObject("86");
                 for(String provinceKey: provinceJson.keySet()){
-                    //System.out.println("===="+provinceKey);
                     Area province = new Area(provinceKey,provinceJson.getString(provinceKey),"86");
                     this.areaList.add(province);
                     //第二层 市
                     JSONObject cityJson = baseJson.getJSONObject(provinceKey);
                     for(String cityKey:cityJson.keySet()){
-                        //System.out.println("-----"+cityKey);
                         Area city = new Area(cityKey,cityJson.getString(cityKey),provinceKey);
                         this.areaList.add(city);
                         //第三层 区
                         JSONObject areaJson =  baseJson.getJSONObject(cityKey);
                         if(areaJson!=null){
                             for(String areaKey:areaJson.keySet()){
-                                //System.out.println("········"+areaKey);
                                 Area area = new Area(areaKey,areaJson.getString(areaKey),cityKey);
                                 this.areaList.add(area);
                             }

+ 6 - 11
jeecg-boot-base-common/src/main/java/org/jeecg/common/system/util/JwtUtil.java

@@ -81,7 +81,7 @@ public class JwtUtil {
 
 	/**
 	 * 根据request中的token获取用户账号
-	 * 
+	 *
 	 * @param request
 	 * @return
 	 * @throws JeecgBootException
@@ -94,7 +94,7 @@ public class JwtUtil {
 		}
 		return username;
 	}
-	
+
 	/**
 	  *  从session中获取变量
 	 * @param key
@@ -119,7 +119,7 @@ public class JwtUtil {
 		if(returnValue!=null){returnValue = returnValue + moshi;}
 		return returnValue;
 	}
-	
+
 	/**
 	  * 从当前用户中获取变量
 	 * @param key
@@ -132,10 +132,10 @@ public class JwtUtil {
 			user = JeecgDataAutorUtils.loadUserInfo();
 		}
 		//#{sys_user_code}%
-		
+
 		// 获取登录用户信息
 		LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-		
+
 		String moshi = "";
 		if(key.indexOf("}")!=-1){
 			 moshi = key.substring(key.indexOf("}")+1);
@@ -163,7 +163,7 @@ public class JwtUtil {
 				returnValue = user.getSysUserName();
 			}
 		}
-		
+
 		//替换为系统用户登录所使用的机构编码
 		else if (key.equals(DataBaseConstant.SYS_ORG_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_ORG_CODE_TABLE)) {
 			if(user==null) {
@@ -195,9 +195,4 @@ public class JwtUtil {
 		if(returnValue!=null){returnValue = returnValue + moshi;}
 		return returnValue;
 	}
-	
-	public static void main(String[] args) {
-		 String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjUzMzY1MTMsInVzZXJuYW1lIjoiYWRtaW4ifQ.xjhud_tWCNYBOg_aRlMgOdlZoWFFKB_givNElHNw3X0";
-		 System.out.println(JwtUtil.getUsername(token));
-	}
 }

+ 9 - 13
jeecg-boot-base-common/src/main/java/org/jeecg/common/util/JsonResourceUtil.java

@@ -52,22 +52,20 @@ public class JsonResourceUtil {
     public static Map<String, Map<String, Object>> jsonToMap(Object jsonObj) {
         JSONObject jsonObject = JSONObject.parseObject(jsonObj.toString());
         Map<String, Map<String, Object>> mapMap = new HashMap<>();
-        jsonObject.forEach((key, value) -> {
-            mapMap.put(key, JSONObject.parseObject(value.toString()));
-        });
+        jsonObject.forEach((key, value) -> mapMap.put(key, JSONObject.parseObject(value.toString())));
         return mapMap;
     }
 
     /**
      * 拼接字段
      */
-    public static String joinFiled(JSONArray array) {
+    public static String joinFiled(Map<String, Map<String,Object>> mapMap,JSONArray array) {
         StringBuilder sb = new StringBuilder();
         array.forEach(it -> {
-            if (AccountReportConstants.dicMap.get(it.toString()).isEmpty()) {
+            if (mapMap.get(it.toString()).isEmpty()) {
                 sb.append(it).append(",");
             } else {
-                sb.append(AccountReportConstants.dicMap.get(it.toString()).get("filed")).append(",");
+                sb.append(mapMap.get(it.toString()).get("filed")).append(",");
             }
         });
         return sb.deleteCharAt(sb.length() - 1).toString();
@@ -76,13 +74,13 @@ public class JsonResourceUtil {
     /**
      * 拼接title
      */
-    public static List<String> joinTitle(JSONArray array) {
+    public static List<String> joinTitle(Map<String, Map<String,Object>> mapMap,JSONArray array) {
         List<String> titles = new ArrayList<>(20);
         array.forEach(it -> {
-            if (AccountReportConstants.dicMap.get(it.toString()).isEmpty()) {
+            if (mapMap.get(it.toString()).isEmpty()) {
                 titles.add(it.toString());
             } else {
-                titles.add(AccountReportConstants.dicMap.get(it.toString()).get("comment").toString());
+                titles.add(mapMap.get(it.toString()).get("comment").toString());
             }
         });
         return titles;
@@ -91,11 +89,9 @@ public class JsonResourceUtil {
     /**
      * 拼接字段
      */
-    public static String joinAllFiled() {
+    public static String joinAllFiled(Map<String, Map<String,Object>> mapMap) {
         StringBuilder sb = new StringBuilder();
-        AccountReportConstants.dicMap.forEach((k, v) -> {
-            sb.append(v.get("filed")).append(",");
-        });
+        mapMap.forEach((k, v) -> sb.append(v.get("filed")).append(","));
         return sb.deleteCharAt(sb.length() - 1).toString();
     }
 }

+ 0 - 25
jeecg-boot-base-common/src/main/java/org/jeecg/common/util/encryption/AesEncryptUtil.java

@@ -63,13 +63,10 @@ public class AesEncryptUtil {
     public static String desEncrypt(String data, String key, String iv) throws Exception {
         try {
 			byte[] encrypted1 = Base64.decode(data);
-
             Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
             SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
             IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
-
             cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);
-
             byte[] original = cipher.doFinal(encrypted1);
             String originalString = new String(original);
             return originalString;
@@ -98,26 +95,4 @@ public class AesEncryptUtil {
     public static String desEncrypt(String data) throws Exception {
         return desEncrypt(data, KEY, IV);
     }
-
-
-
-    /**
-     * 测试
-     */
-    public static void main(String args[]) throws Exception {
-
-        String test1 = "sa";
-        String test =new String(test1.getBytes(),"UTF-8");
-        String data = null;
-        String key =  KEY;
-        String iv = IV;
-        // /g2wzfqvMOeazgtsUVbq1kmJawROa6mcRAzwG1/GeJ4=
-        data = encrypt(test, key, iv);
-        System.out.println("数据:"+test);
-        System.out.println("加密:"+data);
-        String jiemi =desEncrypt(data, key, iv).trim();
-        System.out.println("解密:"+jiemi);
-
-
-    }
 }

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

@@ -18,7 +18,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
- * 
+ *
  * @Author  张代浩
  *
  */
@@ -36,7 +36,7 @@ public class oConvertUtils {
 		}
 		return (false);
 	}
-	
+
 	public static boolean isNotEmpty(Object object) {
 		if (object != null && !object.equals("") && !object.equals("null")) {
 			return (true);
@@ -68,9 +68,6 @@ public class oConvertUtils {
 		}
 		try {
 			byte[] b = strIn.getBytes(sourceCode);
-			for (int i = 0; i < b.length; i++) {
-				System.out.print(b[i] + "  ");
-			}
 			strOut = new String(b, targetCode);
 		} catch (Exception e) {
 			e.printStackTrace();
@@ -160,7 +157,7 @@ public class oConvertUtils {
 			return (defval);
 		}
 	}
-	
+
 	public static Integer getInt(Object object) {
 		if (isEmpty(object)) {
 			return null;
@@ -204,7 +201,7 @@ public class oConvertUtils {
 	/*public static String escapeJava(Object s) {
 		return StringEscapeUtils.escapeJava(getString(s));
 	}*/
-	
+
 	public static String getString(Object object) {
 		if (isEmpty(object)) {
 			return "";
@@ -260,7 +257,7 @@ public class oConvertUtils {
 
 	/**
 	 * 判断一个类是否为基本数据类型。
-	 * 
+	 *
 	 * @param clazz
 	 *            要判断的类。
 	 * @return true 表示为基本数据类型。
@@ -323,7 +320,7 @@ public class oConvertUtils {
 
 	/**
 	 * java去除字符串中的空格、回车、换行符、制表符
-	 * 
+	 *
 	 * @param str
 	 * @return
 	 */
@@ -340,7 +337,7 @@ public class oConvertUtils {
 
 	/**
 	 * 判断元素是否在数组内
-	 * 
+	 *
 	 * @param substring
 	 * @param source
 	 * @return
@@ -367,7 +364,7 @@ public class oConvertUtils {
 
 	/**
 	 * SET转换MAP
-	 * 
+	 *
 	 * @param str
 	 * @return
 	 */
@@ -411,12 +408,12 @@ public class oConvertUtils {
 	private static boolean isInner(long userIp, long begin, long end) {
 		return (userIp >= begin) && (userIp <= end);
 	}
-	
+
 	/**
 	 * 将下划线大写方式命名的字符串转换为驼峰式。
 	 * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。</br>
 	 * 例如:hello_world->helloWorld
-	 * 
+	 *
 	 * @param name
 	 *            转换前的下划线大写方式命名的字符串
 	 * @return 转换后的驼峰式命名的字符串
@@ -453,12 +450,12 @@ public class oConvertUtils {
 		}
 		return result.toString();
 	}
-	
+
 	/**
 	 * 将下划线大写方式命名的字符串转换为驼峰式。
 	 * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。</br>
 	 * 例如:hello_world,test_id->helloWorld,testId
-	 * 
+	 *
 	 * @param name
 	 *            转换前的下划线大写方式命名的字符串
 	 * @return 转换后的驼峰式命名的字符串
@@ -476,13 +473,13 @@ public class oConvertUtils {
 		String result = sf.toString();
 		return result.substring(0, result.length() - 1);
 	}
-	
+
 	//update-begin--Author:zhoujf  Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能
 	/**
 	 * 将下划线大写方式命名的字符串转换为驼峰式。(首字母写)
 	 * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。</br>
 	 * 例如:hello_world->HelloWorld
-	 * 
+	 *
 	 * @param name
 	 *            转换前的下划线大写方式命名的字符串
 	 * @return 转换后的驼峰式命名的字符串
@@ -511,7 +508,7 @@ public class oConvertUtils {
 		return result.toString();
 	}
 	//update-end--Author:zhoujf  Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能
-	
+
 	/**
 	 * 将驼峰命名转化成下划线
 	 * @param para
@@ -519,18 +516,18 @@ public class oConvertUtils {
 	 */
 	public static String camelToUnderline(String para){
         if(para.length()<3){
-        	return para.toLowerCase(); 
+        	return para.toLowerCase();
         }
         StringBuilder sb=new StringBuilder(para);
         int temp=0;//定位
-        //从第三个字符开始 避免命名不规范 
+        //从第三个字符开始 避免命名不规范
         for(int i=2;i<para.length();i++){
             if(Character.isUpperCase(para.charAt(i))){
                 sb.insert(i+temp, "_");
                 temp+=1;
             }
         }
-        return sb.toString().toLowerCase(); 
+        return sb.toString().toLowerCase();
 	}
 
 	/**
@@ -546,10 +543,10 @@ public class oConvertUtils {
 		}
 		return sb.toString();
 	}
-	
+
 	/**
 	 * 获取类的所有属性,包括父类
-	 * 
+	 *
 	 * @param object
 	 * @return
 	 */
@@ -564,7 +561,7 @@ public class oConvertUtils {
 		fieldList.toArray(fields);
 		return fields;
 	}
-	
+
 	/**
 	  * 将map的key全部转成小写
 	 * @param list
@@ -574,10 +571,10 @@ public class oConvertUtils {
 		List<Map<String, Object>> select = new ArrayList<>();
 		for (Map<String, Object> row : list) {
 			 Map<String, Object> resultMap = new HashMap<>();
-			 Set<String> keySet = row.keySet(); 
-			 for (String key : keySet) { 
-				 String newKey = key.toLowerCase(); 
-				 resultMap.put(newKey, row.get(key)); 
+			 Set<String> keySet = row.keySet();
+			 for (String key : keySet) {
+				 String newKey = key.toLowerCase();
+				 resultMap.put(newKey, row.get(key));
 			 }
 			 select.add(resultMap);
 		}

+ 7 - 11
jeecg-boot-module-activiti/src/main/java/org/jeecg/modules/activiti/web/ActivitiProcessController.java

@@ -27,16 +27,16 @@ import org.jeecg.modules.activiti.service.Impl.ActNodeServiceImpl;
 import org.jeecg.modules.activiti.service.Impl.ActZprocessServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamReader;
-import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.net.URLEncoder;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -130,7 +130,9 @@ public class ActivitiProcessController {
             }
             ActZprocess actProcess = actZprocessService.getById(id);
             // 当删除最后一个版本时 删除关联数据
-            if (actProcess==null) return Result.error("该数据已删除!");
+            if (actProcess==null){
+                return Result.error("该数据已删除!");
+            }
             if(actProcess.getVersion()==1){
                 deleteNodeUsers(id);
             }
@@ -143,7 +145,6 @@ public class ActivitiProcessController {
         return Result.ok("删除成功");
     }
     public void deleteNodeUsers(String processId){
-
         BpmnModel bpmnModel = repositoryService.getBpmnModel(processId);
         List<Process> processes = bpmnModel.getProcesses();
         for(Process process : processes){
@@ -160,11 +161,9 @@ public class ActivitiProcessController {
      */
     @RequestMapping(value = "/convertToModel")
     public Result convertToModel( String id){
-
         ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionId(id).singleResult();
         InputStream bpmnStream = repositoryService.getResourceAsStream(pd.getDeploymentId(), pd.getResourceName());
         ActZprocess actProcess = actZprocessService.getById(id);
-
         try {
             XMLInputFactory xif = XMLInputFactory.newInstance();
             InputStreamReader in = new InputStreamReader(bpmnStream, "UTF-8");
@@ -209,11 +208,8 @@ public class ActivitiProcessController {
     /*通过流程定义id获取流程节点*/
     @RequestMapping(value = "/getProcessNode")
     public Result getProcessNode(String id){
-
         BpmnModel bpmnModel = repositoryService.getBpmnModel(id);
-
         List<ProcessNodeVo> list = new ArrayList<>();
-
         List<Process> processes = bpmnModel.getProcesses();
         if(processes==null||processes.size()==0){
             return Result.ok();

+ 6 - 60
jeecg-boot-module-system/pom.xml

@@ -52,6 +52,12 @@
             <version>2.2.0</version>
         </dependency>
         <dependency>
+            <groupId>cn.com.ctop</groupId>
+            <artifactId>module-check</artifactId>
+            <version>2.0.2</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
             <groupId>me.zhyd.oauth</groupId>
             <artifactId>JustAuth</artifactId>
             <version>1.15.6</version>
@@ -176,66 +182,6 @@
             <artifactId>pagehelper</artifactId>
             <version>5.1.11</version>
         </dependency>
-
-        <!--drools规则引擎-->
-        <dependency>
-            <groupId>org.drools</groupId>
-            <artifactId>drools-core</artifactId>
-            <version>7.6.0.Final</version>
-        </dependency>
-        <dependency>
-            <groupId>org.drools</groupId>
-            <artifactId>drools-compiler</artifactId>
-            <version>7.6.0.Final</version>
-        </dependency>
-        <dependency>
-            <groupId>org.drools</groupId>
-            <artifactId>drools-templates</artifactId>
-            <version>7.6.0.Final</version>
-        </dependency>
-        <dependency>
-            <groupId>org.kie</groupId>
-            <artifactId>kie-api</artifactId>
-            <version>7.6.0.Final</version>
-        </dependency>
-        <dependency>
-            <groupId>org.kie</groupId>
-            <artifactId>kie-spring</artifactId>
-            <version>7.6.0.Final</version>
-        </dependency>
-
-        <!--drools规则引擎-->
-        <dependency>
-            <groupId>org.drools</groupId>
-            <artifactId>drools-core</artifactId>
-            <version>7.6.0.Final</version>
-        </dependency>
-        <dependency>
-            <groupId>org.drools</groupId>
-            <artifactId>drools-compiler</artifactId>
-            <version>7.6.0.Final</version>
-        </dependency>
-        <dependency>
-            <groupId>org.drools</groupId>
-            <artifactId>drools-templates</artifactId>
-            <version>7.6.0.Final</version>
-        </dependency>
-        <dependency>
-            <groupId>org.kie</groupId>
-            <artifactId>kie-api</artifactId>
-            <version>7.6.0.Final</version>
-        </dependency>
-        <dependency>
-            <groupId>org.kie</groupId>
-            <artifactId>kie-spring</artifactId>
-            <version>7.6.0.Final</version>
-        </dependency>
-        <dependency>
-            <groupId>com.ctop</groupId>
-            <artifactId>module-check</artifactId>
-            <version>0.0.1-SNAPSHOT</version>
-            <scope>compile</scope>
-        </dependency>
     </dependencies>
 
     <dependencyManagement>

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

@@ -44,7 +44,9 @@ public class JeecgApplication {
                 "----------------------------------------------------------");
     }
 
-    //加载数据字典
+    /**
+     * 加载数据字典
+     */
     @Bean
     public void instanceFiledDic(){
         AccountReportConstants.getInstance().init();

+ 0 - 60
jeecg-boot-module-system/src/main/java/org/jeecg/config/RuleEngineConfig.java

@@ -1,60 +0,0 @@
-package org.jeecg.config;
-
-import org.kie.api.KieBase;
-import org.kie.api.KieServices;
-import org.kie.api.builder.KieBuilder;
-import org.kie.api.builder.KieFileSystem;
-import org.kie.api.builder.KieRepository;
-import org.kie.api.runtime.KieContainer;
-import org.kie.api.runtime.KieSession;
-import org.kie.internal.io.ResourceFactory;
-import org.kie.spring.KModuleBeanFactoryPostProcessor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
-import org.springframework.core.io.support.ResourcePatternResolver;
-
-import java.io.IOException;
-
-@Configuration
-public class RuleEngineConfig {
-    private static final Logger LOGGER = LoggerFactory.getLogger(RuleEngineConfig.class) ;
-    private static final String RULES_PATH = "drools/";
-    private final KieServices kieServices = KieServices.Factory.get();
-    @Bean
-    public KieFileSystem kieFileSystem() throws IOException {
-        KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
-        ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
-        Resource[] files = resourcePatternResolver.getResources("classpath*:" + RULES_PATH + "*.*");
-        String path = null;
-        for (Resource file : files) {
-            path = RULES_PATH + file.getFilename();
-            LOGGER.info("path="+path);
-            kieFileSystem.write(ResourceFactory.newClassPathResource(path, "UTF-8"));
-        }
-        return kieFileSystem;
-    }
-    @Bean
-    public KieContainer kieContainer() throws IOException {
-        KieRepository kieRepository = kieServices.getRepository();
-        kieRepository.addKieModule(kieRepository::getDefaultReleaseId);
-        KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem());
-        kieBuilder.buildAll();
-        return kieServices.newKieContainer(kieRepository.getDefaultReleaseId());
-    }
-    @Bean
-    public KieBase kieBase() throws IOException {
-        return kieContainer().getKieBase();
-    }
-    @Bean
-    public KieSession kieSession() throws IOException {
-        return kieContainer().newKieSession();
-    }
-    @Bean
-    public KModuleBeanFactoryPostProcessor kiePostProcessor() {
-        return new KModuleBeanFactoryPostProcessor();
-    }
-}

+ 35 - 31
jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java

@@ -40,6 +40,7 @@ public class ShiroConfig {
 
     @Value("${spring.redis.password}")
     private String redisPassword;
+
     /**
      * Filter Chain定义说明
      * <p>
@@ -144,7 +145,7 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/toutiao/loadSingleData", "anon");
         filterChainDefinitionMap.put("/kuaishou/getReport/historyData", "anon");
         filterChainDefinitionMap.put("/toutiao/advertiser/**", "anon");
-        filterChainDefinitionMap.put("/template/convert/**", "anon");//文件上传接口
+        filterChainDefinitionMap.put("/template/convert/**", "anon");
         filterChainDefinitionMap.put("/upload/**", "anon");
         filterChainDefinitionMap.put("/appium/appiumTask/run", "anon");
 
@@ -166,6 +167,8 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/ks/web/test", "anon");
         filterChainDefinitionMap.put("/ureport/**", "anon");
         filterChainDefinitionMap.put("/job/test/*", "anon");
+        filterChainDefinitionMap.put("/third/*", "anon");
+        //filterChainDefinitionMap.put("/kuaishou/**", "anon");
         filterChainDefinitionMap.put("/rest/script/*", "anon");
         filterChainDefinitionMap.put("/ctop/checkTaskList/*", "anon");
 
@@ -202,35 +205,36 @@ public class ShiroConfig {
         return securityManager;
     }
 
-	/**
-	 * 下面的代码是添加注解支持
-	 * @return
-	 */
-	@Bean
-	@DependsOn("lifecycleBeanPostProcessor")
-	public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
-		DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
-		defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
-		/**
-		* 解决重复代理问题 github#994
-		* 添加前缀判断 不匹配 任何Advisor
-		*/
-		defaultAdvisorAutoProxyCreator.setUsePrefix(true);
-		defaultAdvisorAutoProxyCreator.setAdvisorBeanNamePrefix("_no_advisor");
-		return defaultAdvisorAutoProxyCreator;
-	}
+    /**
+     * 下面的代码是添加注解支持
+     *
+     * @return
+     */
+    @Bean
+    @DependsOn("lifecycleBeanPostProcessor")
+    public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
+        DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
+        defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
+        /**
+         * 解决重复代理问题 github#994
+         * 添加前缀判断 不匹配 任何Advisor
+         */
+        defaultAdvisorAutoProxyCreator.setUsePrefix(true);
+        defaultAdvisorAutoProxyCreator.setAdvisorBeanNamePrefix("_no_advisor");
+        return defaultAdvisorAutoProxyCreator;
+    }
 
-	@Bean
-	public static LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
-		return new LifecycleBeanPostProcessor();
-	}
+    @Bean
+    public static LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
+        return new LifecycleBeanPostProcessor();
+    }
 
-	@Bean
-	public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
-		AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
-		advisor.setSecurityManager(securityManager);
-		return advisor;
-	}
+    @Bean
+    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
+        AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
+        advisor.setSecurityManager(securityManager);
+        return advisor;
+    }
 
     /**
      * cacheManager 缓存 redis实现
@@ -257,9 +261,9 @@ public class ShiroConfig {
     @Bean
     public RedisManager redisManager() {
         RedisManager redisManager = new RedisManager();
-		redisManager.setHost(host);
-		redisManager.setPort(oConvertUtils.getInt(port));
-		redisManager.setTimeout(0);
+        redisManager.setHost(host);
+        redisManager.setPort(oConvertUtils.getInt(port));
+        redisManager.setTimeout(0);
         if (!StringUtils.isEmpty(redisPassword)) {
             redisManager.setPassword(redisPassword);
         }

+ 11 - 23
jeecg-boot-module-system/src/main/java/org/jeecg/modules/cas/util/CASServiceUtil.java

@@ -1,14 +1,5 @@
 package org.jeecg.modules.cas.util;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
@@ -16,18 +7,15 @@ import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.security.cert.X509Certificate;
+
 public class CASServiceUtil {
-	
-	public static void main(String[] args) {
-		String serviceUrl = "https://cas.8f8.com.cn:8443/cas/p3/serviceValidate";
-		String service = "http://localhost:3003/user/login";
-		String ticket = "ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3";
-		String res = getSTValidate(serviceUrl,ticket, service);
-		
-		System.out.println("---------res-----"+res);
-	}
-	
-	
 	/**
      * 验证ST
      */
@@ -45,7 +33,7 @@ public class CASServiceUtil {
 		return "";
 	}
 
-    
+
     /**
      * 读取 response body 内容为字符串
      *
@@ -62,8 +50,8 @@ public class CASServiceUtil {
         }
         return result;
     }
-    
-    
+
+
     /**
      * 创建模拟客户端(针对 https 客户端禁用 SSL 验证)
      *

+ 11 - 48
jeecg-boot-module-system/src/main/java/org/jeecg/modules/cas/util/XmlUtils.java

@@ -1,19 +1,7 @@
 package org.jeecg.modules.cas.util;
 
 
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.XMLConstants;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
+import lombok.extern.slf4j.Slf4j;
 import org.w3c.dom.Document;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
@@ -21,7 +9,13 @@ import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;
 import org.xml.sax.helpers.DefaultHandler;
 
-import lombok.extern.slf4j.Slf4j;
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import java.io.StringReader;
+import java.util.*;
 
 /**
  * 解析cas,ST验证后的xml
@@ -177,8 +171,8 @@ public final class XmlUtils {
 
         return builder.toString();
     }
-    
-    
+
+
     public static Map<String, Object> extractCustomAttributes(final String xml) {
         final SAXParserFactory spf = SAXParserFactory.newInstance();
         spf.setNamespaceAware(true);
@@ -195,7 +189,7 @@ public final class XmlUtils {
             return Collections.emptyMap();
         }
     }
-    
+
     private static class CustomAttributeHandler extends DefaultHandler {
 
         private Map<String, Object> attributes;
@@ -258,35 +252,4 @@ public final class XmlUtils {
             return this.attributes;
         }
     }
-    
-    
-    public static void main(String[] args) {
-		String result = "<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>\r\n" + 
-				"    <cas:authenticationSuccess>\r\n" + 
-				"        <cas:user>admin</cas:user>\r\n" + 
-				"        <cas:attributes>\r\n" + 
-				"            <cas:credentialType>UsernamePasswordCredential</cas:credentialType>\r\n" + 
-				"            <cas:isFromNewLogin>true</cas:isFromNewLogin>\r\n" + 
-				"            <cas:authenticationDate>2019-08-01T19:33:21.527+08:00[Asia/Shanghai]</cas:authenticationDate>\r\n" + 
-				"            <cas:authenticationMethod>RestAuthenticationHandler</cas:authenticationMethod>\r\n" + 
-				"            <cas:successfulAuthenticationHandlers>RestAuthenticationHandler</cas:successfulAuthenticationHandlers>\r\n" + 
-				"            <cas:longTermAuthenticationRequestTokenUsed>false</cas:longTermAuthenticationRequestTokenUsed>\r\n" + 
-				"        </cas:attributes>\r\n" + 
-				"    </cas:authenticationSuccess>\r\n" + 
-				"</cas:serviceResponse>";
-		
-		String errorRes = "<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>\r\n" + 
-				"    <cas:authenticationFailure code=\"INVALID_TICKET\">未能够识别出目标 &#39;ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3&#39;票根</cas:authenticationFailure>\r\n" + 
-				"</cas:serviceResponse>";
-		
-		String error = XmlUtils.getTextForElement(errorRes, "authenticationFailure");
-		System.out.println("------"+error);
-		
-		String error2 = XmlUtils.getTextForElement(result, "authenticationFailure");
-		System.out.println("------"+error2);
-		String principal = XmlUtils.getTextForElement(result, "user");
-		System.out.println("---principal---"+principal);
-		Map<String, Object> attributes = XmlUtils.extractCustomAttributes(result);
-		System.out.println("---attributes---"+attributes);
-	}
 }

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

@@ -0,0 +1,234 @@
+package org.jeecg.modules.ctop.controller;
+
+import cn.com.ctop.common.module.entity.ActCustomForm;
+import cn.com.ctop.common.module.service.IActCustomFormService;
+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.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+ /**
+ * 自定义表单信息
+ * @author jeecg-boot
+ * @date   2020-08-25
+ * @version V1.0
+ */
+@Slf4j
+@Api(tags="自定义表单信息")
+@RestController
+@RequestMapping("/ctop/actCustomForm")
+public class ActCustomFormController {
+	@Autowired
+	private IActCustomFormService actCustomFormService;
+
+	/**
+	  * 分页列表查询
+	 * @param actCustomForm
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单信息-分页列表查询", notes="自定义表单信息-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<ActCustomForm>> queryPageList(ActCustomForm actCustomForm,
+													  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+													  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+													  HttpServletRequest req) {
+		Result<IPage<ActCustomForm>> result = new Result<>();
+		QueryWrapper<ActCustomForm> queryWrapper = QueryGenerator.initQueryWrapper(actCustomForm, req.getParameterMap());
+		Page<ActCustomForm> page = new Page<ActCustomForm>(pageNo, pageSize);
+		IPage<ActCustomForm> pageList = actCustomFormService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	  *   添加
+	 * @param actCustomForm
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单信息-添加", notes="自定义表单信息-添加")
+	@PostMapping(value = "/add")
+	public Result<ActCustomForm> add(@RequestBody ActCustomForm actCustomForm) {
+		Result<ActCustomForm> result = new Result<>();
+		try {
+			actCustomFormService.save(actCustomForm);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	  *  编辑
+	 * @param actCustomForm
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单信息-编辑", notes="自定义表单信息-编辑")
+	@PutMapping(value = "/edit")
+	public Result<ActCustomForm> edit(@RequestBody ActCustomForm actCustomForm) {
+		Result<ActCustomForm> result = new Result<ActCustomForm>();
+		ActCustomForm actCustomFormEntity = actCustomFormService.getById(actCustomForm.getId());
+		if(actCustomFormEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = actCustomFormService.updateById(actCustomForm);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+
+		return result;
+	}
+
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单信息-通过id删除", notes="自定义表单信息-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			actCustomFormService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单信息-批量删除", notes="自定义表单信息-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<ActCustomForm> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<ActCustomForm> result = new Result<>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.actCustomFormService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单信息-通过id查询", notes="自定义表单信息-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<ActCustomForm> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<ActCustomForm> result = new Result<>();
+		ActCustomForm actCustomForm = actCustomFormService.getById(id);
+		if(actCustomForm==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(actCustomForm);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+  /**
+      * 导出excel
+   *
+   * @param request
+   * @param response
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+      // Step.1 组装查询条件
+      QueryWrapper<ActCustomForm> queryWrapper = null;
+      try {
+          String paramsStr = request.getParameter("paramsStr");
+          if (oConvertUtils.isNotEmpty(paramsStr)) {
+              String deString = URLDecoder.decode(paramsStr, "UTF-8");
+              ActCustomForm actCustomForm = JSON.parseObject(deString, ActCustomForm.class);
+              queryWrapper = QueryGenerator.initQueryWrapper(actCustomForm, request.getParameterMap());
+          }
+      } catch (UnsupportedEncodingException e) {
+          e.printStackTrace();
+      }
+
+      //Step.2 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      List<ActCustomForm> pageList = actCustomFormService.list(queryWrapper);
+      //导出文件名称
+      mv.addObject(NormalExcelConstants.FILE_NAME, "自定义表单信息列表");
+      mv.addObject(NormalExcelConstants.CLASS, ActCustomForm.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<ActCustomForm> listActCustomForms = ExcelImportUtil.importExcel(file.getInputStream(), ActCustomForm.class, params);
+              actCustomFormService.saveBatch(listActCustomForms);
+              return Result.ok("文件导入成功!数据行数:" + listActCustomForms.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("文件导入失败!");
+  }
+
+}

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

@@ -0,0 +1,234 @@
+package org.jeecg.modules.ctop.controller;
+
+import cn.com.ctop.common.module.entity.ActFormData;
+import cn.com.ctop.common.module.service.IActFormDataService;
+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.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+ /**
+ * 自定义表单存储数据
+ * @author jeecg-boot
+ * @date   2020-08-25
+ * @version V1.0
+ */
+@Slf4j
+@Api(tags="自定义表单存储数据")
+@RestController
+@RequestMapping("/ctop/actFormData")
+public class ActFormDataController {
+	@Autowired
+	private IActFormDataService actFormDataService;
+
+	/**
+	  * 分页列表查询
+	 * @param actFormData
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单存储数据-分页列表查询", notes="自定义表单存储数据-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<ActFormData>> queryPageList(ActFormData actFormData,
+													@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+													@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+													HttpServletRequest req) {
+		Result<IPage<ActFormData>> result = new Result<>();
+		QueryWrapper<ActFormData> queryWrapper = QueryGenerator.initQueryWrapper(actFormData, req.getParameterMap());
+		Page<ActFormData> page = new Page<ActFormData>(pageNo, pageSize);
+		IPage<ActFormData> pageList = actFormDataService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	  *   添加
+	 * @param actFormData
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单存储数据-添加", notes="自定义表单存储数据-添加")
+	@PostMapping(value = "/add")
+	public Result<ActFormData> add(@RequestBody ActFormData actFormData) {
+		Result<ActFormData> result = new Result<>();
+		try {
+			actFormDataService.save(actFormData);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	  *  编辑
+	 * @param actFormData
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单存储数据-编辑", notes="自定义表单存储数据-编辑")
+	@PutMapping(value = "/edit")
+	public Result<ActFormData> edit(@RequestBody ActFormData actFormData) {
+		Result<ActFormData> result = new Result<ActFormData>();
+		ActFormData actFormDataEntity = actFormDataService.getById(actFormData.getId());
+		if(actFormDataEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = actFormDataService.updateById(actFormData);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+
+		return result;
+	}
+
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单存储数据-通过id删除", notes="自定义表单存储数据-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			actFormDataService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单存储数据-批量删除", notes="自定义表单存储数据-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<ActFormData> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<ActFormData> result = new Result<>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.actFormDataService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单存储数据-通过id查询", notes="自定义表单存储数据-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<ActFormData> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<ActFormData> result = new Result<>();
+		ActFormData actFormData = actFormDataService.getById(id);
+		if(actFormData==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(actFormData);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+  /**
+      * 导出excel
+   *
+   * @param request
+   * @param response
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+      // Step.1 组装查询条件
+      QueryWrapper<ActFormData> queryWrapper = null;
+      try {
+          String paramsStr = request.getParameter("paramsStr");
+          if (oConvertUtils.isNotEmpty(paramsStr)) {
+              String deString = URLDecoder.decode(paramsStr, "UTF-8");
+              ActFormData actFormData = JSON.parseObject(deString, ActFormData.class);
+              queryWrapper = QueryGenerator.initQueryWrapper(actFormData, request.getParameterMap());
+          }
+      } catch (UnsupportedEncodingException e) {
+          e.printStackTrace();
+      }
+
+      //Step.2 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      List<ActFormData> pageList = actFormDataService.list(queryWrapper);
+      //导出文件名称
+      mv.addObject(NormalExcelConstants.FILE_NAME, "自定义表单存储数据列表");
+      mv.addObject(NormalExcelConstants.CLASS, ActFormData.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<ActFormData> listActFormDatas = ExcelImportUtil.importExcel(file.getInputStream(), ActFormData.class, params);
+              actFormDataService.saveBatch(listActFormDatas);
+              return Result.ok("文件导入成功!数据行数:" + listActFormDatas.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("文件导入失败!");
+  }
+
+}

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

@@ -0,0 +1,234 @@
+package org.jeecg.modules.ctop.controller;
+
+import cn.com.ctop.common.module.entity.ActFormField;
+import cn.com.ctop.common.module.service.IActFormFieldService;
+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.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+ /**
+ * 自定义表单字段信息
+ * @author jeecg-boot
+ * @date   2020-08-25
+ * @version V1.0
+ */
+@Slf4j
+@Api(tags="自定义表单字段信息")
+@RestController
+@RequestMapping("/ctop/actFormField")
+public class ActFormFieldController {
+	@Autowired
+	private IActFormFieldService actFormFieldService;
+
+	/**
+	  * 分页列表查询
+	 * @param actFormField
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单字段信息-分页列表查询", notes="自定义表单字段信息-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<ActFormField>> queryPageList(ActFormField actFormField,
+													 @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+													 @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+													 HttpServletRequest req) {
+		Result<IPage<ActFormField>> result = new Result<>();
+		QueryWrapper<ActFormField> queryWrapper = QueryGenerator.initQueryWrapper(actFormField, req.getParameterMap());
+		Page<ActFormField> page = new Page<>(pageNo, pageSize);
+		IPage<ActFormField> pageList = actFormFieldService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	  *   添加
+	 * @param actFormField
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单字段信息-添加", notes="自定义表单字段信息-添加")
+	@PostMapping(value = "/add")
+	public Result<ActFormField> add(@RequestBody ActFormField actFormField) {
+		Result<ActFormField> result = new Result<>();
+		try {
+			actFormFieldService.save(actFormField);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	  *  编辑
+	 * @param actFormField
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单字段信息-编辑", notes="自定义表单字段信息-编辑")
+	@PutMapping(value = "/edit")
+	public Result<ActFormField> edit(@RequestBody ActFormField actFormField) {
+		Result<ActFormField> result = new Result<ActFormField>();
+		ActFormField actFormFieldEntity = actFormFieldService.getById(actFormField.getId());
+		if(actFormFieldEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = actFormFieldService.updateById(actFormField);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+
+		return result;
+	}
+
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单字段信息-通过id删除", notes="自定义表单字段信息-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			actFormFieldService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单字段信息-批量删除", notes="自定义表单字段信息-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<ActFormField> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<ActFormField> result = new Result<>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.actFormFieldService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单字段信息-通过id查询", notes="自定义表单字段信息-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<ActFormField> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<ActFormField> result = new Result<>();
+		ActFormField actFormField = actFormFieldService.getById(id);
+		if(actFormField==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(actFormField);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+  /**
+      * 导出excel
+   *
+   * @param request
+   * @param response
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+      // Step.1 组装查询条件
+      QueryWrapper<ActFormField> queryWrapper = null;
+      try {
+          String paramsStr = request.getParameter("paramsStr");
+          if (oConvertUtils.isNotEmpty(paramsStr)) {
+              String deString = URLDecoder.decode(paramsStr, "UTF-8");
+              ActFormField actFormField = JSON.parseObject(deString, ActFormField.class);
+              queryWrapper = QueryGenerator.initQueryWrapper(actFormField, request.getParameterMap());
+          }
+      } catch (UnsupportedEncodingException e) {
+          e.printStackTrace();
+      }
+
+      //Step.2 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      List<ActFormField> pageList = actFormFieldService.list(queryWrapper);
+      //导出文件名称
+      mv.addObject(NormalExcelConstants.FILE_NAME, "自定义表单字段信息列表");
+      mv.addObject(NormalExcelConstants.CLASS, ActFormField.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<ActFormField> listActFormFields = ExcelImportUtil.importExcel(file.getInputStream(), ActFormField.class, params);
+              actFormFieldService.saveBatch(listActFormFields);
+              return Result.ok("文件导入成功!数据行数:" + listActFormFields.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("文件导入失败!");
+  }
+
+}

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

@@ -0,0 +1,234 @@
+package org.jeecg.modules.ctop.controller;
+
+import cn.com.ctop.common.module.entity.ActFormPorcess;
+import cn.com.ctop.common.module.service.IActFormPorcessService;
+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.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+ /**
+ * 自定义表单关联流程信息
+ * @author jeecg-boot
+ * @date   2020-08-25
+ * @version V1.0
+ */
+@Slf4j
+@Api(tags="自定义表单关联流程信息")
+@RestController
+@RequestMapping("/ctop/actFormPorcess")
+public class ActFormPorcessController {
+	@Autowired
+	private IActFormPorcessService actFormPorcessService;
+
+	/**
+	  * 分页列表查询
+	 * @param actFormPorcess
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单关联流程信息-分页列表查询", notes="自定义表单关联流程信息-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<ActFormPorcess>> queryPageList(ActFormPorcess actFormPorcess,
+													   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+													   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+													   HttpServletRequest req) {
+		Result<IPage<ActFormPorcess>> result = new Result<>();
+		QueryWrapper<ActFormPorcess> queryWrapper = QueryGenerator.initQueryWrapper(actFormPorcess, req.getParameterMap());
+		Page<ActFormPorcess> page = new Page<>(pageNo, pageSize);
+		IPage<ActFormPorcess> pageList = actFormPorcessService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	  *   添加
+	 * @param actFormPorcess
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单关联流程信息-添加", notes="自定义表单关联流程信息-添加")
+	@PostMapping(value = "/add")
+	public Result<ActFormPorcess> add(@RequestBody ActFormPorcess actFormPorcess) {
+		Result<ActFormPorcess> result = new Result<>();
+		try {
+			actFormPorcessService.save(actFormPorcess);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	  *  编辑
+	 * @param actFormPorcess
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单关联流程信息-编辑", notes="自定义表单关联流程信息-编辑")
+	@PutMapping(value = "/edit")
+	public Result<ActFormPorcess> edit(@RequestBody ActFormPorcess actFormPorcess) {
+		Result<ActFormPorcess> result = new Result<ActFormPorcess>();
+		ActFormPorcess actFormPorcessEntity = actFormPorcessService.getById(actFormPorcess.getId());
+		if(actFormPorcessEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = actFormPorcessService.updateById(actFormPorcess);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+
+		return result;
+	}
+
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单关联流程信息-通过id删除", notes="自定义表单关联流程信息-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			actFormPorcessService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单关联流程信息-批量删除", notes="自定义表单关联流程信息-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<ActFormPorcess> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<ActFormPorcess> result = new Result<>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.actFormPorcessService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="自定义表单关联流程信息-通过id查询", notes="自定义表单关联流程信息-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<ActFormPorcess> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<ActFormPorcess> result = new Result<>();
+		ActFormPorcess actFormPorcess = actFormPorcessService.getById(id);
+		if(actFormPorcess==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(actFormPorcess);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+  /**
+      * 导出excel
+   *
+   * @param request
+   * @param response
+   */
+  @RequestMapping(value = "/exportXls")
+  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+      // Step.1 组装查询条件
+      QueryWrapper<ActFormPorcess> queryWrapper = null;
+      try {
+          String paramsStr = request.getParameter("paramsStr");
+          if (oConvertUtils.isNotEmpty(paramsStr)) {
+              String deString = URLDecoder.decode(paramsStr, "UTF-8");
+              ActFormPorcess actFormPorcess = JSON.parseObject(deString, ActFormPorcess.class);
+              queryWrapper = QueryGenerator.initQueryWrapper(actFormPorcess, request.getParameterMap());
+          }
+      } catch (UnsupportedEncodingException e) {
+          e.printStackTrace();
+      }
+
+      //Step.2 AutoPoi 导出Excel
+      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+      List<ActFormPorcess> pageList = actFormPorcessService.list(queryWrapper);
+      //导出文件名称
+      mv.addObject(NormalExcelConstants.FILE_NAME, "自定义表单关联流程信息列表");
+      mv.addObject(NormalExcelConstants.CLASS, ActFormPorcess.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<ActFormPorcess> listActFormPorcesss = ExcelImportUtil.importExcel(file.getInputStream(), ActFormPorcess.class, params);
+              actFormPorcessService.saveBatch(listActFormPorcesss);
+              return Result.ok("文件导入成功!数据行数:" + listActFormPorcesss.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("文件导入失败!");
+  }
+
+}

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

@@ -35,10 +35,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.text.ParseException;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Slf4j
 @RestController
@@ -120,6 +117,7 @@ public class CallbackController {
                 throw new Exception("回调信息为空");
             }
             log.info("快手授权返回信息:{}", json);
+            log.info("快手授权返回oauthCode:{}", authCode);
             Integer agentType = json.getInteger("agentType");
             if (StringUtils.isNotBlank(authCode)) {
                 KuaishouResultToken accessToken = kuaishouInterfaceService.getAccessToken(authCode, agentType);
@@ -228,6 +226,11 @@ public class CallbackController {
         return "授权绑定失败!";
     }
 
+
+    public static void main(String[] args) {
+        System.err.println(UUID.randomUUID().toString().replace("-", ""));
+    }
+
     @RequestMapping("/bytedance")
     public String bytedance(HttpServletRequest request,
                             HttpServletResponse response,
@@ -431,5 +434,19 @@ public class CallbackController {
         return returnMap;
     }
 
+    @GetMapping("/kuaishou/agent")
+    public String kuaishouAgent(@RequestParam("auth_code") String authCode, @RequestParam("state") String state) {
+        if (StringUtils.isNotBlank(authCode)) {
+            Map<String, Object> map = this.getKuaishouAgentAccessToken(authCode, state);
+            log.info("返回信息:{}", map.toString());
+            return (String) map.get("desc");
+        }
+        return "代理商授权绑定失败";
+    }
+
+    private Map<String, Object> getKuaishouAgentAccessToken(String authCode, String state) {
+        return null;
+    }
+
 
 }

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

@@ -3,6 +3,7 @@ package org.jeecg.modules.ctop.controller;
 import cn.com.ctop.common.module.annotation.AutoLog;
 import cn.com.ctop.common.module.entity.MaterialAscription;
 import cn.com.ctop.common.module.service.IMaterialAscriptionService;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -57,6 +58,16 @@ public class MaterialAscriptionController {
         return result;
     }
 
+
+    @GetMapping(value = "/getDetail")
+    public Result<JSONObject> getDetail(String code) {
+        Result<JSONObject> result = new Result<>();
+        JSONObject json = materialAscriptionService.getDetailByCode(code);
+        result.setSuccess(true);
+        result.setResult(json);
+        return result;
+    }
+
     /**
      * 添加
      *

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

@@ -219,7 +219,7 @@ public class MaterialInfoController {
         materialInfo.setCreateTime(null);
         if (!Check.isNull(materialInfo.getUserId())) {
             String roleCode = materialInfoService.getRoleCodeByUserId(materialInfo.getUserId());
-            if (CtopRoleCodeConstant.COMMON_ROLE_CODE_ADMIN.equals(roleCode) || "operator".equals(roleCode) || "kuaishouOperationManager".equals(roleCode) || "operationAssistant".equals(roleCode) || "touTiaoOperationManager".equals(roleCode) || "sale".equals(roleCode) || "saleDirector".equals(roleCode)) {
+            if (CtopRoleCodeConstant.COMMON_ROLE_CODE_ADMIN.equals(roleCode) || "operator".equals(roleCode) || "kuaishouOperationManager".equals(roleCode) || "operationAssistant".equals(roleCode) || "touTiaoOperationManager".equals(roleCode) || roleCode.contains("sale")) {
                 materialInfo.setUserId(null);
                 queryWrapper = QueryGenerator.initQueryWrapper(materialInfo, req.getParameterMap());
             } else if ("designTeamLeader".equals(roleCode) || "planeLeader".equals(roleCode) || "plane".equals(roleCode) || "plan".equals(roleCode) || "shot".equals(roleCode)) {

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

@@ -1,14 +1,27 @@
 package org.jeecg.modules.ctop.controller;
 
+import cn.com.ctop.common.module.utils.ExportExcelUtils;
+import cn.com.ctop.common.module.utils.HttpUtils;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.constant.AccountReportConstants;
+import org.jeecg.common.util.JsonResourceUtil;
 import org.jeecg.modules.ctop.service.IMaterialTopService;
 import org.jeecg.modules.ctop.vo.MaterialTopVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  *  Created by JQ.bi on 2020.5.21
  */
@@ -47,4 +60,46 @@ public class MaterialTopCtrl {
         }
         return result;
     }
+
+    @PostMapping("/top/excel")
+    public void getExcelReport(@RequestBody JSONObject requestBody,
+                               @RequestParam(defaultValue = "cost") String target,
+                               @RequestParam(defaultValue = "desc") String order,
+                               HttpServletRequest request,
+                               HttpServletResponse response) {
+
+        String startDate= requestBody.getString("startDate");
+        String endDate= requestBody.getString("endDate");
+        List<MaterialTopVO> excelData= materialTopService.selectList(endDate,startDate, target, order);
+
+        List<List<Object>> excelList= new ArrayList<>();
+        excelData.forEach(data->{
+            List<Object> temp= new ArrayList<>();
+            temp.add(data.getUrl());
+            temp.add(data.getName());
+            temp.add(data.getCost());
+            temp.add(data.getClick());
+            temp.add(data.getShowNum());
+            temp.add(data.getPlay3s());
+            temp.add(data.getPlay10s());
+            temp.add(data.getActive());
+            temp.add(data.getPay());
+            temp.add(data.getResidue());
+            temp.add(data.getRegister());
+            excelList.add(temp);
+        });
+        try{
+            String[] headers = {"视频","素材名","消耗","点击数","展示数","3s播放数","10s播放数","行为数","支付数","次留数","注册数"};
+            OutputStream os = response.getOutputStream();
+            ExportExcelUtils eeu = new ExportExcelUtils();
+            XSSFWorkbook workbook = new XSSFWorkbook();
+            eeu.exportExcel(workbook, 0, "top素材", headers, excelList);
+            HttpUtils.setResponseHeader(response, "top素材.xlsx");
+            workbook.write(os);
+            os.flush();
+            os.close();
+        }catch (IOException e){
+            log.error(e.getMessage());
+        }
+    }
 }

+ 115 - 8
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MediaReportCtrl.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.ctop.controller;
 
+import cn.com.ctop.common.module.entity.Product;
 import cn.com.ctop.common.module.entity.SysCompany;
 import cn.com.ctop.common.module.service.ISysCompanyService;
 import cn.com.ctop.common.module.utils.ExportExcelUtils;
@@ -7,8 +8,10 @@ import cn.com.ctop.common.module.utils.HttpUtils;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.ctop.service.IMediaReportService;
  import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -18,6 +21,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -40,13 +44,13 @@ public class MediaReportCtrl {
         Result<List<SysCompany>> result=new Result<>();
         //TODO 没有维护渠道的信息暂时不能再库里加,会影响到绩效等其他接口查询公司的接口
         List<SysCompany> list=sysCompanyService.list();
-        SysCompany sysCompany = new SysCompany();
-        sysCompany.setId(4L);
-        sysCompany.setCompanyId("6weq589875c040119adst08751712368");
-        sysCompany.setCompanyCode("A04");
-        sysCompany.setCompanyName("渠道");
-        sysCompany.setArea("渠道");
-        list.add(sysCompany);
+        //SysCompany sysCompany = new SysCompany();
+        //sysCompany.setId(4L);
+        //sysCompany.setCompanyId("6weq589875c040119adst08751712368");
+        //sysCompany.setCompanyCode("A04");
+        //sysCompany.setCompanyName("渠道");
+        //sysCompany.setArea("渠道");
+        //list.add(sysCompany);
         result.setSuccess(true);
         result.setResult(list);
         return result;
@@ -69,10 +73,34 @@ public class MediaReportCtrl {
         return result;
     }
 
+    //获取所有产品
+    @ResponseBody
+    @RequestMapping(value = "/getAllProductList")
+    public Result<List<Product>> getAllProductList(@RequestBody JSONObject requestBody,
+                                                   HttpServletRequest request, HttpServletResponse response){
+        log.info("/ctop/product/getAllProductList 方法开始");
+        Result<List<Product>> result = new Result();
+
+        try {
+            List<Product> allProductList = mediaReportService.getAllProductList(requestBody.getInteger("mediaType"), requestBody.getString("advertiserId"));
+            result.setResult(allProductList);
+        }catch (Exception e){
+            log.error(e.getMessage());
+            result.setSuccess(false);
+            result.setMessage("error");
+        }finally{
+            log.info("/ctop/product/getAllProductList 方法结束");
+        }
+
+        return result;
+    }
+
+
     @PostMapping("/{pageNo}/{pageSize}")
     public Result<PageInfo<JSONObject>> getReport(@PathVariable int pageNo,
                                                   @PathVariable int pageSize,
-                                                  @RequestBody JSONObject requestBody){ Result<PageInfo<JSONObject>> result = new Result<>();
+                                                  @RequestBody JSONObject requestBody){
+        Result<PageInfo<JSONObject>> result = new Result<>();
         if(requestBody.isEmpty()){
             log.error("requestBody is null");
             result.setSuccess(false);
@@ -139,4 +167,83 @@ public class MediaReportCtrl {
             log.error(e.getMessage());
         }
     }
+
+    @PostMapping("/mediaReport/{pageNum}/{pageSize}")
+    public Result<PageInfo<JSONObject>> mediaReport(@PathVariable int pageNum,
+                                                  @PathVariable int pageSize,
+                                                  @RequestBody JSONObject requestBody){
+        Result<PageInfo<JSONObject>> result = new Result<>();
+        if(StringUtils.isBlank(requestBody.getString("todayDate")) || requestBody.getInteger("mediaType") ==null){
+            result.setSuccess(false);
+            result.setMessage("参数有误");
+        }
+
+        if(requestBody.isEmpty()){
+            log.error("requestBody is null");
+            result.setSuccess(false);
+            return result;
+        }
+        PageInfo<JSONObject> pageInfo = mediaReportService.mediaReport(pageNum,pageSize,requestBody);
+
+        result.setResult(pageInfo);
+        result.setSuccess(true);
+        return result;
+    }
+
+    /**
+     *  导出数据
+     * @param requestBody
+     * @param request
+     * @param response
+     */
+    @PostMapping("/exportMediaReportExcel")
+    public void exportMediaReportExcel(@RequestBody JSONObject requestBody,
+                               HttpServletRequest request,
+                               HttpServletResponse response) {
+        String today = requestBody.getString("todayDate");
+        Date todayDate = DateUtils.parseDate(today, "yyyy-MM-dd");
+        Date yesterdayDate = DateUtils.addDay(todayDate, -1);
+        String yesterday = DateUtils.formatDate(yesterdayDate);
+
+        List<JSONObject> excelData = mediaReportService.exportMediaReportExcel(requestBody);
+
+        List<List<Object>> excelList= new ArrayList<>();
+        excelData.forEach(data->{
+            List<Object> temp= new ArrayList<>();
+            temp.add(data.get("mediaType")==null?"-":(data.getInteger("mediaType")==1?"头条":"快手"));
+            temp.add(data.get("advertiserName")==null?"-":data.get("advertiserName"));
+            temp.add(data.get("productName")==null?"-":data.get("productName"));
+            temp.add(data.get("operator")==null?"-":data.get("operator"));
+            temp.add(data.get("sale")==null?"-":data.get("sale"));
+            temp.add(data.get("todayCost"));
+            temp.add(data.get("yesterdayCost"));
+            temp.add(data.get("diffCost"));
+            temp.add(data.get("companyName"));
+            excelList.add(temp);
+        });
+        try{
+            String[] headers = {"媒体类型","广告主","产品","运营","销售",requestBody.getString("todayDate"),yesterday,"消耗差","区域"};
+            OutputStream os = response.getOutputStream();
+            ExportExcelUtils eeu = new ExportExcelUtils();
+            XSSFWorkbook workbook = new XSSFWorkbook();
+            eeu.exportExcelForMediaReport(workbook, 0, "媒介报表", headers, excelList);
+            HttpUtils.setResponseHeader(response, "媒介报表.xlsx");
+            workbook.write(os);
+            os.flush();
+            os.close();
+        }catch (IOException e){
+            log.error(e.getMessage());
+        }
+
+    }
+
+
+
+
+
+
+
+
+
+
 }

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

@@ -0,0 +1,337 @@
+package org.jeecg.modules.ctop.controller;
+
+import cn.com.ctop.common.module.entity.Advertiser;
+import cn.com.ctop.common.module.entity.Project;
+import cn.com.ctop.common.module.service.IProductService;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.KuaishouInterfaceConstant;
+
+import cn.com.ctop.common.module.vo.ProductInfoDto;
+import cn.com.ctop.common.module.vo.ProductVO;
+import cn.com.ctop.common.module.vo.ProjectVO;
+import cn.com.ctop.manage.modules.actor.entity.Actor;
+import cn.com.ctop.manage.modules.actor.entity.ActorComment;
+import cn.com.ctop.manage.modules.actor.entity.ActorPhoto;
+import cn.com.ctop.manage.modules.actor.entity.ActorVideo;
+import cn.com.ctop.manage.modules.actor.service.IActorCommentService;
+import cn.com.ctop.manage.modules.actor.service.IActorPhotoService;
+import cn.com.ctop.manage.modules.actor.service.IActorService;
+import cn.com.ctop.manage.modules.actor.service.IActorVideoService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.pagehelper.PageInfo;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@Slf4j
+@RequestMapping("/ctop/product")
+public class ProductController {
+    @Autowired
+    private IProductService productService;
+
+    //获取广告主列表
+    @ResponseBody
+    @RequestMapping(value = "/advertiserList")
+    public Result<List<Advertiser>> advertiserList(HttpServletRequest request,HttpServletResponse response){
+        log.info("/ctop/product/advertiserList 方法开始");
+        Result<List<Advertiser>> result = new Result();
+
+        try {
+            List<Advertiser> advertiserList = productService.advertiserList();
+            result.setResult(advertiserList);
+        }catch (Exception e){
+            log.error(e.getMessage());
+            result.setSuccess(false);
+            result.setMessage("error");
+        }finally{
+            log.info("/ctop/product/advertiserList 方法结束");
+        }
+
+        return result;
+    }
+
+    //根据广告主id获取项目列表
+    @ResponseBody
+    @RequestMapping(value = "/getProjectListByAdvertiserId")
+    public Result<List<Project>> getProjectListByAdvertiserId(@RequestBody ProductInfoDto dto,
+            HttpServletRequest request, HttpServletResponse response){
+        log.info("/ctop/product/getProjectListByAdvertiserId 方法开始");
+        Result<List<Project>> result = new Result();
+        if(dto == null || dto.getAdvertiserId() ==null ){
+            result.setSuccess(false);
+            result.setMessage("advertiserId不能为空");
+            return result;
+        }
+
+        try {
+            List<Project> projectList = productService.getProjectListByAdvertiserId(dto.getAdvertiserId());
+            result.setResult(projectList);
+        }catch (Exception e){
+            log.error(e.getMessage());
+            result.setSuccess(false);
+            result.setMessage("error");
+        }finally{
+            log.info("/ctop/product/getProjectListByAdvertiserId 方法结束");
+        }
+
+        return result;
+    }
+
+    //根据项目列表获取运营和销售的信息
+    @ResponseBody
+    @RequestMapping(value = "/getSaleAndYunyingListByProjectIds")
+    public Result<Map<String, Object>> getSaleAndYunyingListByProjectIds(@RequestBody ProductInfoDto dto,
+                                                              HttpServletRequest request, HttpServletResponse response){
+        log.info("/ctop/product/getSaleAndYunyingListByProjectIds 方法开始");
+        Result<Map<String, Object>> result = new Result();
+        if(dto == null || dto.getProjectIds() ==null || dto.getProjectIds().size() ==0 ){
+            result.setSuccess(false);
+            result.setMessage("projectIds不能为空");
+            return result;
+        }
+
+        try {
+            Map<String, Object> map = productService.getSaleAndYunyingListByProjectIds(dto.getProjectIds());
+            result.setResult(map);
+        }catch (Exception e){
+            log.error(e.getMessage());
+            result.setSuccess(false);
+            result.setMessage("error");
+        }finally{
+            log.info("/ctop/product/getSaleAndYunyingListByProjectIds 方法结束");
+        }
+
+        return result;
+    }
+
+    //逻辑删除产品
+    @ResponseBody
+    @RequestMapping(value = "/deleteProduct")
+    public Result deleteProduct(@RequestBody ProductInfoDto dto,HttpServletRequest request, HttpServletResponse response){
+        log.info("/ctop/product/deleteProduct 方法开始");
+        Result result = new Result();
+        if(dto == null || dto.getProductId() ==null ){
+            result.setSuccess(false);
+            result.setMessage("productId不能为空");
+            return result;
+        }
+
+        try {
+            productService.deleteProduct(dto.getProductId());
+        }catch (Exception e){
+            log.error(e.getMessage());
+            result.setSuccess(false);
+            result.setMessage("error");
+        }finally{
+            log.info("/ctop/product/deleteProduct 方法结束");
+        }
+
+        return result;
+    }
+
+    //产品信息入库
+    @ResponseBody
+    @RequestMapping(value = "/insertOrUpdateProduct")
+    public Result insertOrUpdateProduct(@RequestBody ProductVO vo, HttpServletRequest request, HttpServletResponse response){
+        log.info("/ctop/product/insertOrUpdateProduct 方法开始");
+        Result result = new Result();
+
+        //if(vo==null || vo.getId() == null){
+        //    if(StringUtils.isBlank(vo.getProductName())){
+        //        result.setSuccess(false);
+        //        result.setMessage("产品不能为空");
+        //        return result;
+        //    }
+        //    Integer count = productService.getProductNameCount(vo.getProductName());
+        //    if(count != 0){
+        //        result.setSuccess(false);
+        //        result.setMessage("产品名字已存在");
+        //        return result;
+        //    }
+        //}
+
+        try {
+            productService.insertOrUpdateProduct(vo);
+        }catch (Exception e){
+            log.error(e.getMessage());
+            result.setSuccess(false);
+            result.setMessage("error");
+        }finally{
+            log.info("/ctop/product/insertOrUpdateProduct 方法结束");
+        }
+
+        return result;
+    }
+
+    //编辑产品反显
+    @ResponseBody
+    @RequestMapping(value = "/getProductInfo")
+    public Result<Map<String, Object>> getProductInfo(@RequestBody ProductInfoDto dto, HttpServletRequest request, HttpServletResponse response){
+        log.info("/ctop/product/getProductInfo 方法开始");
+        Result<Map<String, Object>> result = new Result();
+        if(dto==null || dto.getProductId() == null){
+            result.setSuccess(false);
+            result.setMessage("productId不能为空");
+            return result;
+        }
+
+        try {
+            Map<String, Object> productInfo = productService.getProductInfo(dto.getProductId());
+            result.setResult(productInfo);
+        }catch (Exception e){
+            log.error(e.getMessage());
+            result.setSuccess(false);
+            result.setMessage("error");
+        }finally{
+            log.info("/ctop/product/getProductInfo 方法结束");
+        }
+
+        return result;
+    }
+
+    //单独删除产品关联项目
+    @ResponseBody
+    @RequestMapping(value = "/deleteByProjectIdAndProductId")
+    public Result deleteByProjectIdAndProductId(@RequestBody ProductInfoDto dto, HttpServletRequest request, HttpServletResponse response){
+        log.info("/ctop/product/deleteByProjectIdAndProductId 方法开始");
+        Result result = new Result();
+        if(dto==null || dto.getProductId() == null || dto.getProjectId() ==null){
+            result.setSuccess(false);
+            result.setMessage("productId,projectId不能为空");
+            return result;
+        }
+
+        try {
+            productService.deleteByProjectIdAndProductId(dto.getProjectId(), dto.getProductId());
+        }catch (Exception e){
+            log.error(e.getMessage());
+            result.setSuccess(false);
+            result.setMessage("error");
+        }finally{
+            log.info("/ctop/product/deleteByProjectIdAndProductId 方法结束");
+        }
+
+        return result;
+    }
+
+    //编辑产品按钮反显
+    @ResponseBody
+    @RequestMapping(value = "/getProjectListByProductId")
+    public Result<List<ProjectVO>> getProjectListByProductId(@RequestBody ProductInfoDto dto, HttpServletRequest request, HttpServletResponse response){
+        log.info("/ctop/product/getProjectListByProductId 方法开始");
+        Result<List<ProjectVO>> result = new Result();
+        if(dto==null || dto.getProductId() == null){
+            result.setSuccess(false);
+            result.setMessage("productId,projectId不能为空");
+            return result;
+        }
+
+        try {
+            List<ProjectVO> projectListByProductId = productService.getProjectListByProductId(dto.getProductId());
+            result.setResult(projectListByProductId);
+        }catch (Exception e){
+            log.error(e.getMessage());
+            result.setSuccess(false);
+            result.setMessage("error");
+        }finally{
+            log.info("/ctop/product/getProjectListByProductId 方法结束");
+        }
+
+        return result;
+    }
+
+    //产品列表
+    @ResponseBody
+    @RequestMapping(value = "/getProductList")
+    public Result<PageInfo<ProductVO>> getProductList(@RequestBody ProductInfoDto dto, HttpServletRequest request, HttpServletResponse response){
+        log.info("/ctop/product/getProductList 方法开始");
+        Result<PageInfo<ProductVO>> result = new Result();
+        if(dto==null || dto.getPageNum() == 0 || dto.getPageSize() ==0){
+            dto.setPageNum(1);
+            dto.setPageSize(10);
+        }
+
+        try {
+            PageInfo<ProductVO> productList = productService.getProductList(dto.getAdvertiserName(), dto.getProductName(), dto.getPageNum(), dto.getPageSize());
+            result.setResult(productList);
+        }catch (Exception e){
+            log.error(e.getMessage());
+            result.setSuccess(false);
+            result.setMessage("error");
+        }finally{
+            log.info("/ctop/product/getProductList 方法结束");
+        }
+
+        return result;
+    }
+
+    //产品列表
+    @ResponseBody
+    @RequestMapping(value = "/insertProductProjectMap")
+    public Result insertProductProjectMap(@RequestBody ProductInfoDto dto, HttpServletRequest request, HttpServletResponse response){
+        log.info("/ctop/product/insertProductProjectMap 方法开始");
+        Result result = new Result();
+        if(dto==null || dto.getProductId() == null || dto.getProjectIds() == null){
+            result.setSuccess(false);
+            result.setMessage("productId,projectIds不能为空");
+            return result;
+        }
+
+        List<Long> dtoProjectIds = dto.getProjectIds();
+        List<Long> projectIdsHas = productService.getProjectIdsByProductId(dto.getProductId());
+        List<Long> addProjectIds = new ArrayList<>();
+
+        for(Long dtoProjectId:dtoProjectIds){
+            int filter = 0;
+            for(Long projectIdHas:projectIdsHas){
+                if(projectIdHas.equals(dtoProjectId)){
+                    filter = -1;
+                    break;
+                }
+            }
+            if(filter == 0){
+                addProjectIds.add(dtoProjectId);
+            }
+        }
+
+        if(addProjectIds==null || addProjectIds.size()==0){
+            return result;
+        }
+
+        try {
+            productService.insertProductProjectMap(dto.getProductId(), addProjectIds);
+        }catch (Exception e){
+            log.error(e.getMessage());
+            result.setSuccess(false);
+            result.setMessage("error");
+        }finally{
+            log.info("/ctop/product/insertProductProjectMap 方法结束");
+        }
+
+        return result;
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+}

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

@@ -195,6 +195,9 @@ public class ProjectController {
         } else if ("operator".equals(roleCode) || "operationAssistant".equals(roleCode)) {
             queryWrapper.eq("responsible_id", userId);
             pageList = projectService.page(page, queryWrapper);
+        }else{
+            queryWrapper.eq("responsible_id", userId);
+            pageList = projectService.page(page,queryWrapper);
         }
         List<Project> records = pageList.getRecords();
         if (!Check.isNull(records)) {

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

@@ -380,16 +380,16 @@ public class ProjectMemberController {
     }
 
     /**
-     * 查询当前账户下的
+     * 查询当前账户下的快手头条传不同的mediaType
      *
      * @return
      */
     @GetMapping("/getProjectAccountByUserId")
-    public Result<List<Map<String, Object>>> getProjectAccountBy() {
+    public Result<List<Map<String, Object>>> getProjectAccountBy(String mediaType) {
         Result<List<Map<String, Object>>> resultBody = new Result<>();
         try {
             String userId = ((LoginUser) SecurityUtils.getSubject().getPrincipal()).getId();
-            List<Map<String, Object>> result = projectMemberService.getProjectAccountByUserId(userId);
+            List<Map<String, Object>> result = projectMemberService.getProjectAccountByUserId(userId,mediaType);
             resultBody.setSuccess(true);
             resultBody.setResult(result);
         } catch (Exception e) {

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

@@ -0,0 +1,159 @@
+package org.jeecg.modules.ctop.controller;
+
+import cn.com.ctop.common.module.entity.TagInfo;
+import cn.com.ctop.common.module.model.TagInfoTreeModel;
+import cn.com.ctop.common.module.service.ITagInfoService;
+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.modules.system.service.ISysDepartService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import java.util.List;
+
+ /**
+ * 标签信息
+ * @author jeecg-boot
+ * @date   2020-08-26
+ * @version V1.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/ctop/tagInfo")
+public class TagInfoController {
+	@Autowired
+	private ITagInfoService tagInfoService;
+
+	/**
+	  * 分页列表查询
+	 * @param tagInfo
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<TagInfo>> queryPageList(TagInfo tagInfo,
+												@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+												@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+												HttpServletRequest req) {
+		Result<IPage<TagInfo>> result = new Result<>();
+		QueryWrapper<TagInfo> queryWrapper = QueryGenerator.initQueryWrapper(tagInfo, req.getParameterMap());
+		Page<TagInfo> page = new Page<>(pageNo, pageSize);
+		IPage<TagInfo> pageList = tagInfoService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	  *   添加
+	 * @param tagInfo
+	 * @return
+	 */
+	@PostMapping(value = "/add")
+	public Result<TagInfo> add(@RequestBody TagInfo tagInfo) {
+		Result<TagInfo> result = new Result<>();
+		try {
+			tagInfoService.save(tagInfo);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	  *  编辑
+	 * @param tagInfo
+	 * @return
+	 */
+	@PutMapping(value = "/edit")
+	public Result<TagInfo> edit(@RequestBody TagInfo tagInfo) {
+		Result<TagInfo> result = new Result<TagInfo>();
+		TagInfo tagInfoEntity = tagInfoService.getById(tagInfo.getId());
+		if(tagInfoEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = tagInfoService.updateById(tagInfo);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+
+		return result;
+	}
+
+	/**
+	  *   通过id删除
+	 * @param id
+	 * @return
+	 */
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			tagInfoService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	  *  批量删除
+	 * @param ids
+	 * @return
+	 */
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<TagInfo> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<TagInfo> result = new Result<>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.tagInfoService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+
+	/**
+	  * 通过id查询
+	 * @param id
+	 * @return
+	 */
+	@GetMapping(value = "/queryById")
+	public Result<TagInfo> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<TagInfo> result = new Result<>();
+		TagInfo tagInfo = tagInfoService.getById(id);
+		if(tagInfo==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(tagInfo);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+	@Autowired
+    private ISysDepartService sysDepartService;
+	@RequestMapping(value = "/queryTreeList", method = RequestMethod.GET)
+    public Result<List<TagInfoTreeModel>> queryTreeList() {
+	    Result<List<TagInfoTreeModel>> result = new Result<>();
+	    try {
+            List<TagInfoTreeModel> list = tagInfoService.queryTreeList();
+	        result.setResult(list);
+	        result.setSuccess(true);
+	    } catch (Exception e) {
+	        log.error(e.getMessage(),e);
+	    }
+	    return result;
+	}
+}

+ 67 - 21
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java

@@ -69,12 +69,68 @@ public class TestController {
     private IBytedanceReportService bytedanceReportService;
     @Autowired
     private IKuaishouInterfaceService2 kuaishouInterfaceService2;
+    @Autowired
+    private IUserAllocationService userAllocationService;
 
     static ExecutorService executorService = Executors.newFixedThreadPool(15);
     static ExecutorService videoService = Executors.newFixedThreadPool(5);
     static ExecutorService suzhaoService = Executors.newFixedThreadPool(5);
 
 
+    @GetMapping(value = "/getDailyDataByProjectId")
+    public String getDailyDataByProjectId(Long projectId, String startDate, String endDate) {
+        Result<String> result = new Result<>();
+        try {
+
+            QueryWrapper<UserAllocation> userAllocationQueryWrapper = new QueryWrapper<>();
+            userAllocationQueryWrapper.eq("project_id", projectId);
+            userAllocationQueryWrapper.eq("account_status", 0);
+            List<UserAllocation> list = userAllocationService.list(userAllocationQueryWrapper);
+            if (!Check.isNull(list)) {
+                for (UserAllocation allocation : list) {
+                    Long accountId = allocation.getAccountId();
+                    QueryWrapper<CtopOauthToken> tokenQueryWrapper = new QueryWrapper<>();
+                    tokenQueryWrapper.eq("media_id", 2);
+                    tokenQueryWrapper.eq("account_id", accountId);
+                    CtopOauthToken ctopOauthTokens = oauthTokenMapper.selectOne(tokenQueryWrapper);
+                    if (!Check.isNull(ctopOauthTokens)) {
+                        historyReportTaskService.createTask(ctopOauthTokens.getAccountId(), ctopOauthTokens.getAccessToken(), startDate, endDate, CtopAdConstant.KUAISHOU_LOAD_JOB_TYPE_DAILY);
+
+                    }
+                }
+
+            }
+
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+        }
+        return "success";
+    }
+
+
+    @GetMapping(value = "/getDailyDataByAccountId")
+    public String getDailyDataByAccountId(Long accountId) {
+        Result<String> result = new Result<>();
+        try {
+            String nowDate = DateUtils.getNowDate("yyyy-MM-dd");
+            String statDate = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, -1);
+            QueryWrapper<CtopOauthToken> tokenQueryWrapper = new QueryWrapper<>();
+            tokenQueryWrapper.eq("media_id", 2);
+            tokenQueryWrapper.eq("account_id", accountId);
+            CtopOauthToken ctopOauthTokens = oauthTokenMapper.selectOne(tokenQueryWrapper);
+            if (!Check.isNull(ctopOauthTokens)) {
+                historyReportTaskService.createTask(ctopOauthTokens.getAccountId(), ctopOauthTokens.getAccessToken(), statDate, statDate, CtopAdConstant.KUAISHOU_LOAD_JOB_TYPE_DAILY);
+
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+        }
+        return "success";
+    }
+
 
     @GetMapping(value = "/getCut")
     public void getCut() {
@@ -113,11 +169,6 @@ public class TestController {
     }
 
 
-
-
-
-
-
     @GetMapping(value = "/t")
     public String test() {
         Result<String> result = new Result<>();
@@ -601,9 +652,6 @@ public class TestController {
     }
 
 
-    @Autowired
-    private IUserAllocationService userAllocationService;
-
     @GetMapping(value = "/getPlanAndGroupByAccount")
     public void getPlanAndGroupByAccount(Long accountId) {
         QueryWrapper<CtopOauthToken> oauthTokenQueryWrapper = new QueryWrapper<>();
@@ -821,7 +869,6 @@ public class TestController {
     }
 
 
-
     @GetMapping(value = "/getAppList")
     public void getAppList() throws JobExecutionException {
         try {
@@ -837,7 +884,7 @@ public class TestController {
 
             tokens.forEach(token -> {
 
-                kuaishouInterfaceService.getAppList(token.getAccountId(),token.getAccessToken());
+                kuaishouInterfaceService.getAppList(token.getAccountId(), token.getAccessToken());
                 //suzhaoService.submit(new Runnable() {
                 //    @Override
                 //    public void run() {
@@ -856,22 +903,22 @@ public class TestController {
 
 
     @GetMapping(value = "/getOperationRecord")
-    public Result getOperationRecord(@Param("accountId")Long accountId, @Param("operationTarget")Integer operationTarget, @Param("startDate")String startDate, @Param("endDate")String endDate){
+    public Result getOperationRecord(@Param("accountId") Long accountId, @Param("operationTarget") Integer operationTarget, @Param("startDate") String startDate, @Param("endDate") String endDate) {
         Result result = new Result();
         try {
-            if(StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)){
+            if (StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)) {
                 result.setSuccess(false);
                 result.setMessage("时间参数不能为空");
                 return result;
             }
 
-            if(operationTarget == null){
+            if (operationTarget == null) {
                 result.setSuccess(false);
                 result.setMessage("类型不能为空");
                 return result;
             }
 
-            if(accountId == null){
+            if (accountId == null) {
                 //1:查询当日数据
                 QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
                 queryWrapper.eq("media_id", 2);
@@ -895,7 +942,7 @@ public class TestController {
                         }
                     });
                 });
-            }else{
+            } else {
                 QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
                 queryWrapper.eq("account_id", accountId);
                 CtopOauthToken token = tokenService.getOauthTokenByAccountId(String.valueOf(accountId));
@@ -922,10 +969,10 @@ public class TestController {
     public IBytedanceInterfaceService bytedanceInterfaceService;
 
     @GetMapping(value = "/searchLog")
-    public Result searchLog(@Param("accountId")Long accountId, @Param("startDate")String startDate, @Param("endDate")String endDate, @Param("operationTarget")Integer operationTarget) {
+    public Result searchLog(@Param("accountId") Long accountId, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("operationTarget") Integer operationTarget) {
         Result result = new Result();
 
-        if(accountId == null){
+        if (accountId == null) {
             //1:查询当日数据
             QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
             queryWrapper.eq("media_id", 1);
@@ -944,12 +991,12 @@ public class TestController {
                     @Override
                     public void run() {
                         log.info("获取操作记录开始:accountId:{},startDate:{},endDate:{}", token.getAccountId(), startDate, endDate);
-                        bytedanceInterfaceService.searchLog(token.getAccountId(), token, operationTarget,startDate, endDate);
+                        bytedanceInterfaceService.searchLog(token.getAccountId(), token, operationTarget, startDate, endDate);
                         log.info("获取快手操作记录结束:accountId:{},startDate:{},endDate:{}", token.getAccountId(), startDate, endDate);
                     }
                 });
             });
-        }else{
+        } else {
             QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
             queryWrapper.eq("account_id", accountId);
             CtopOauthToken token = tokenService.getOauthTokenByAccountId(String.valueOf(accountId));
@@ -960,12 +1007,11 @@ public class TestController {
                 return result;
             }
             log.info("获取快手操作记录开始:accountId:{},startDate:{},endDate:{}", token.getAccountId(), startDate, endDate);
-            bytedanceInterfaceService.searchLog(accountId, token, operationTarget,startDate, endDate);
+            bytedanceInterfaceService.searchLog(accountId, token, operationTarget, startDate, endDate);
             log.info("获取快手操作记录结束:accountId:{},startDate:{},endDate:{}", token.getAccountId(), startDate, endDate);
         }
 
         return result;
     }
 
-
 }

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

@@ -5,18 +5,21 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.bstek.ureport.export.ExportManager;
 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.system.query.QueryGenerator;
 import org.jeecg.modules.ctop.entity.UReportFile;
+import org.jeecg.modules.ctop.entity.UReportFileBindUser;
 import org.jeecg.modules.ctop.service.IUReportFileService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 
 /**

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/UReportFile.java

@@ -32,6 +32,7 @@ public class UReportFile {
     @TableId(type = IdType.UUID)
     @ApiModelProperty(value = "id")
     private String id;
+
     /**
      * 报表名称
      */
@@ -46,6 +47,10 @@ public class UReportFile {
     private String content;
 
     /**
+     *  报表类型 时报、日报
+     */
+    private Integer reportType;
+    /**
      * 创建时间
      */
     @ApiModelProperty(value = "创建时间")

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

@@ -57,6 +57,10 @@ public class UReportFileBindUser {
     @ApiModelProperty(value = "fileName")
     private String fileName;
     /**
+     * isSubscribe
+     */
+    private Boolean isSubscribe;
+    /**
      * createTime
      */
     @ApiModelProperty(value = "createTime")

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

@@ -39,6 +39,15 @@ public class KuaishouCommentAutoDelete implements Job {
             loginList.forEach(login -> executorService.submit(()->{
                 try {
                     kuaishouWebInterfaceService.deleteAllComment(new HashMap<>(),login);
+                    Runtime runtime = Runtime.getRuntime();
+                    Process pro = runtime.exec(cleanUrl);
+                    int status = pro.waitFor();
+                    if (status == 0) {
+                        log.info("success,删除评论调用shell脚本执行成功");
+                    } else {
+                        log.info("error,删除评论调用shell脚本执行失败");
+                    }
+                    Thread.sleep(3 * 1000L);
                 }catch (Exception e){
                     log.error(e.getMessage(),e);
                 }finally {

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

@@ -1,6 +1,5 @@
 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.toutiao.modules.report.service.IBytedanceReportService;
@@ -22,7 +21,6 @@ public class ToutiaoMaterialsLoadJob implements Job {
     private ICtopOauthTokenService tokenService;
     @Autowired
     private IBytedanceReportService bytedanceReportService;
-
     static ExecutorService executorService = Executors.newFixedThreadPool(8);
 
     @Override

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

@@ -7,10 +7,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.ctop.vo.MaterialTopVO;
 
+import java.util.List;
+
 public interface MaterialTopMapper {
 
     IPage<MaterialTopVO> selectMapsPage(Page<MaterialTopVO> page, @Param(Constants.WRAPPER)QueryWrapper<MaterialTopVO> wrapper);
 
+    List<MaterialTopVO> selectList(@Param("endDate") String endDate,@Param("startDate") String startDate,@Param("target") String target,@Param("order") String order);
+
     int insertByteDanceMaterialReportAccountByDate(@Param("statDate") String statDate);
 
     int insertKuaiShouMaterialReportAccountByDate(@Param("statDate") String statDate);

+ 8 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/MediaReportMapper.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.ctop.mapper;
 
+import cn.com.ctop.common.module.entity.Product;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.ibatis.annotations.Param;
 
@@ -17,4 +18,11 @@ public interface MediaReportMapper {
 
     List<JSONObject> queryAgentReportBy(@Param("todayDate") String todayDate ,@Param("yesterdayDate") String yesterdayDate);
 
+    //快手媒介报表
+    List<JSONObject> kuaishouMediaReport(@Param("today") String today ,@Param("yesterday") String yesterday,@Param("advertiserId") String advertiserId, @Param("companyId")String companyId, @Param("productId")Long productId);
+    //头条媒介报表
+    List<JSONObject> toutiaoMediaReport(@Param("today") String today ,@Param("yesterday") String yesterday, @Param("advertiserId") String advertiserId, @Param("companyId")String companyId, @Param("productId")Long productId);
+
+    List<Product> getAllProductList(@Param("mediaType")Integer mediaType, @Param("advertiserId")String advertiserId);
+
 }

+ 31 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/MaterialTopMapper.xml

@@ -3,6 +3,7 @@
 <mapper namespace="org.jeecg.modules.ctop.mapper.MaterialTopMapper">
     <select id="selectMapsPage" resultType="org.jeecg.modules.ctop.vo.MaterialTopVO">
         SELECT
+            code,
             url,
             cover_url,
             name,
@@ -25,6 +26,36 @@
             ${ew.sqlSegment}
     </select>
 
+    <select id="selectList" resultType="org.jeecg.modules.ctop.vo.MaterialTopVO">
+        SELECT
+            code,
+            url,
+            cover_url,
+            name,
+            stat_date ,
+            sum(cost) as cost,
+            sum(click) as click,
+            sum(show_num) as show_num,
+            sum(active) as active,
+            sum(register) as register,
+            sum(pay) as pay,
+            sum(phone_convert) as phone_convert,
+            sum(form_convert) as form_convert,
+            convert_rate,
+            sum(residue) as residue,
+            sum(play3s) as play3s,
+            sum(play10s) as play10s
+        FROM
+            ctop_material_report_total_result
+        where
+            stat_date&lt;=#{endDate}
+        and stat_date&gt;=#{startDate}
+        and url is not null
+        and url!=''
+        group by code
+        order by ${target} ${order}
+    </select>
+
     <insert id="insertByteDanceMaterialReportAccountByDate">
         INSERT INTO ctop_material_report_total_result (
             CODE,

+ 234 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/MediaReportMapper.xml

@@ -264,4 +264,238 @@
                           GROUP by advertiserName, projectName) as r) as e
         ORDER BY sumCost desc
     </select>
+
+    <!-- 快手 -->
+    <select id="kuaishouMediaReport" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        mediaType,
+        advertiserName,
+        productName,
+        sale,
+        operator,
+        format(todayCost,3) as todayCost,
+        format(yesterdayCost,3) as yesterdayCost,
+        format(( todayCost - yesterdayCost ),3) AS diffCost,
+        companyName
+        FROM
+                (
+                    SELECT
+                    a.media_id AS mediaType,
+                    a.advertiser_name AS advertiserName,
+                    a.product_name AS productName,
+                    (
+                        SELECT
+                            GROUP_CONCAT( DISTINCT o.realname )
+                        FROM
+                            ctop_product_project_map m
+                            LEFT JOIN ctop_project n ON m.project_id = n.id
+                            LEFT JOIN sys_user o ON n.sale_id = o.id
+                        WHERE
+                            m.product_id = a.id
+                    ) AS sale,
+                    (
+                        SELECT
+                            GROUP_CONCAT( DISTINCT al.user_name )
+                        FROM
+                            ( SELECT * FROM ctop_user_allocation GROUP BY account_id ) al
+                            LEFT JOIN user_company co ON al.user_id = co.user_id
+                        WHERE
+                            al.project_id IN ( SELECT project_id FROM ctop_product_project_map map WHERE map.product_id = a.id )
+                            AND co.company_id = d.company_id
+                    ) AS operator,
+                    IFNULL(
+                            (
+                                SELECT
+                                    sum( charge )
+                                FROM
+                                    ctop_kuaishou_report_daily_account report
+                                WHERE
+                                    report.account_id IN (
+                                SELECT
+                                    account_id
+                                FROM
+                                    ( SELECT * FROM ctop_user_allocation GROUP BY account_id ) al
+                                    LEFT JOIN user_company co ON al.user_id = co.user_id
+                                WHERE
+                                    al.project_id IN ( SELECT project_id FROM ctop_product_project_map map WHERE map.product_id = a.id )
+                                    AND co.company_id = d.company_id
+                                    )
+                                    AND report.stat_date = #{today}
+                            )
+                    ,0) AS todayCost,
+                    IFNULL(
+                            (
+                                SELECT
+                                    sum( charge )
+                                FROM
+                                    ctop_kuaishou_report_daily_account report
+                                WHERE
+                                    report.account_id IN (
+                                SELECT
+                                    account_id
+                                FROM
+                                    ctop_user_allocation al
+                                    LEFT JOIN user_company co ON al.user_id = co.user_id
+                                WHERE
+                                    al.project_id IN ( SELECT project_id FROM ctop_product_project_map map WHERE map.product_id = a.id )
+                                    AND co.company_id = d.company_id
+                                    )
+                                    AND report.stat_date = #{yesterday}
+                             )
+                        ,0) AS yesterdayCost,
+                        case
+                            when d.company_id = 'd57fecdcf7a94d009736d9c850731582' then '华北'
+                            when d.company_id = '6608ed13c0dd42de93c790dbdf124234' then '华南'
+                            when d.company_id = '4b10089775c040119e139087517aed88' then '华东'
+                            else '-' end AS companyName
+                    FROM
+                        ctop_product a
+                        LEFT JOIN ctop_product_project_map b ON a.id = b.product_id
+                        LEFT JOIN ( SELECT * FROM ctop_user_allocation GROUP BY account_id ) c ON b.project_id = c.project_id
+                        LEFT JOIN user_company d ON c.user_id = d.user_id
+                    WHERE
+                        d.company_id IS NOT NULL
+                        AND a.product_status = 1
+                        AND a.media_id = 2
+                        <if test="advertiserId != null and advertiserId != ''">
+                        AND a.advertiser_id = #{advertiserId}
+                        </if>
+                        <if test="companyId != null and companyId != ''">
+                            AND d.company_id = #{companyId}
+                        </if>
+                        <if test="productId != null and productId != ''">
+                            AND a.id = #{productId}
+                        </if>
+                    GROUP BY
+                        a.id,
+                        d.company_id
+                ) t
+        ORDER BY
+        t.companyName,t.todayCost DESC
+    </select>
+
+    <select id="toutiaoMediaReport" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        mediaType,
+        advertiserName,
+        productName,
+        sale,
+        operator,
+        format(todayCost,2) as todayCost,
+        format(yesterdayCost,2) as yesterdayCost,
+        format(( todayCost - yesterdayCost ),2) AS diffCost,
+        companyName
+        FROM
+            (
+                SELECT
+                    a.media_id AS mediaType,
+                    a.advertiser_name AS advertiserName,
+                    a.product_name AS productName,
+                    (
+                SELECT
+                    GROUP_CONCAT( DISTINCT o.realname )
+                FROM
+                    ctop_product_project_map m
+                    LEFT JOIN ctop_project n ON m.project_id = n.id
+                    LEFT JOIN sys_user o ON n.sale_id = o.id
+                WHERE
+                    m.product_id = a.id
+                    ) AS sale,
+                    (
+                SELECT
+                    GROUP_CONCAT( DISTINCT al.user_name )
+                FROM
+                    ctop_user_allocation al
+                    LEFT JOIN user_company co ON al.user_id = co.user_id
+                WHERE
+                    al.project_id IN ( SELECT project_id FROM ctop_product_project_map map WHERE map.product_id = a.id )
+                    AND co.company_id = d.company_id
+                    ) AS operator,
+                    IFNULL(
+                    (
+                SELECT
+                    sum( cost )
+                FROM
+                    ctop_bytedance_report_advertiser_daily report
+                WHERE
+                    report.advertiser_id IN (
+                SELECT
+                    account_id
+                FROM
+                    ctop_user_allocation al
+                    LEFT JOIN user_company co ON al.user_id = co.user_id
+                WHERE
+                    al.project_id IN ( SELECT project_id FROM ctop_product_project_map map WHERE map.product_id = a.id )
+                    AND co.company_id = d.company_id
+                    )
+                    AND date_format( report.stat_datetime, '%Y-%m-%d' ) = #{today}
+                    ),
+                    0
+                    ) AS todayCost,
+                    IFNULL(
+                            (
+                        SELECT
+                            sum( cost )
+                        FROM
+                            ctop_bytedance_report_advertiser_daily report
+                        WHERE
+                            report.advertiser_id IN (
+                                SELECT
+                                    account_id
+                                FROM
+                                    ctop_user_allocation al
+                                    LEFT JOIN user_company co ON al.user_id = co.user_id
+                                WHERE
+                                    al.project_id IN ( SELECT project_id FROM ctop_product_project_map map WHERE map.product_id = a.id )
+                                    AND co.company_id = d.company_id
+                            )
+                            AND date_format( report.stat_datetime, '%Y-%m-%d' ) = #{yesterday}
+                            ),0) AS yesterdayCost,
+                    case when d.company_id = 'd57fecdcf7a94d009736d9c850731582' then '华北'
+                         when d.company_id = '6608ed13c0dd42de93c790dbdf124234' then '华南'
+                         when d.company_id = '4b10089775c040119e139087517aed88' then '华东'
+                         else '-' end AS companyName
+                FROM
+                    ctop_product a
+                    LEFT JOIN ctop_product_project_map b ON a.id = b.product_id
+                    LEFT JOIN ( SELECT * FROM ctop_user_allocation GROUP BY account_id ) c ON b.project_id = c.project_id
+                    LEFT JOIN user_company d ON c.user_id = d.user_id
+                WHERE
+                    d.company_id IS NOT NULL
+                    AND a.media_id = 1
+                    AND a.product_status = 1
+                    <if test="advertiserId != null and advertiserId != ''">
+                        AND a.advertiser_id = #{advertiserId}
+                    </if>
+                    <if test="companyId != null and companyId != ''">
+                        AND d.company_id = #{companyId}
+                    </if>
+                    <if test="productId != null and productId != ''">
+                        AND a.id = #{productId}
+                    </if>
+                GROUP BY
+                    a.id,
+                    d.company_id
+            ) t
+        ORDER BY t.companyName, t.todayCost DESC
+
+    </select>
+
+    <select id="getAllProductList" resultType="cn.com.ctop.common.module.entity.Product">
+        select
+        id as id,
+        product_name as productName,
+        media_id as mediaId
+        from
+        ctop_product
+        where
+        product_status = 1
+        <if test="mediaType != null">
+            and media_id = #{mediaType}
+        </if>
+        <if test="advertiserId != null">
+            and advertiser_id = #{advertiserId}
+        </if>
+    </select>
+
 </mapper>

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

@@ -3,7 +3,10 @@ package org.jeecg.modules.ctop.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.jeecg.modules.ctop.vo.MaterialTopVO;
 
+import java.util.List;
+
 public interface IMaterialTopService {
     IPage<MaterialTopVO> selectByPage(String endDate, String startDate, String target, String order, int pageNo, int pageSize);
+    List<MaterialTopVO> selectList(String endDate, String startDate, String target, String order);
     boolean insertMaterialReportAccount(String statDate);
 }

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

@@ -1,5 +1,6 @@
 package org.jeecg.modules.ctop.service;
 
+import cn.com.ctop.common.module.entity.Product;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageInfo;
 
@@ -11,6 +12,8 @@ public interface IMediaReportService {
 
     List<JSONObject> queryProjectNameByAdvertiserId(String advertiserId);
 
+    List<Product> getAllProductList(Integer mediaType, String advertiserId);
+
     PageInfo<JSONObject> queryReportByCondition(int pageNo,int pageSize,JSONObject requestBody);
 
     PageInfo<JSONObject> queryAllReportByCondition(int pageNo,int pageSize,JSONObject requestBody);
@@ -19,5 +22,11 @@ public interface IMediaReportService {
 
     List<JSONObject> queryReportByCondition(JSONObject requestBody);
 
+    PageInfo<JSONObject> mediaReport(int pageNum, int pageSize, JSONObject requestBody);
+
+    //PageInfo<JSONObject> toutiaoMediaReport(int pageNum, int pageSize, JSONObject requestBody);
+
+    List<JSONObject> exportMediaReportExcel(JSONObject requestBody);
+
 
 }

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IProjectMemberService.java

@@ -22,7 +22,7 @@ public interface IProjectMemberService extends IService<ProjectMember> {
 
     List<ProjectMember> getProjects(List<Integer> mediaIds);
 
-    List<Map<String, Object>> getProjectAccountByUserId(String userId);
+    List<Map<String, Object>> getProjectAccountByUserId(String userId,String mediaType);
 
     ProjectMember getProjectByParams(Long targetProject, String userId);
 

+ 7 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/MaterialTopServiceImpl.java

@@ -12,6 +12,8 @@ import org.jeecg.modules.ctop.vo.MaterialTopVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  *  Created by JQ.bi on 2020.05.22
  */
@@ -38,6 +40,11 @@ public class MaterialTopServiceImpl  implements IMaterialTopService {
     }
 
     @Override
+    public List<MaterialTopVO> selectList(String endDate, String startDate, String target, String order) {
+        return materialTopMapper.selectList(endDate,startDate,target,order);
+    }
+
+    @Override
     public boolean insertMaterialReportAccount(String statDate) {
 
         int resultByteDance=materialTopMapper.insertByteDanceMaterialReportAccountByDate(statDate);
@@ -49,7 +56,6 @@ public class MaterialTopServiceImpl  implements IMaterialTopService {
             materialTopMapper.deletedMaterialReportAccountByDate(statDate);
             log.info("delete dirty data is success");
         }
-
         return resultByteDance != 0 && resultKuaishou != 0;
     }
 

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

@@ -1,13 +1,16 @@
 package org.jeecg.modules.ctop.service.impl;
 
+import cn.com.ctop.common.module.entity.Product;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.ctop.mapper.MediaReportMapper;
 import org.jeecg.modules.ctop.service.IMediaReportService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.List;
 
 @Service
@@ -27,6 +30,12 @@ public class MediaReportServiceImpl implements IMediaReportService {
     }
 
     @Override
+    public List<Product> getAllProductList(Integer mediaType, String advertiserId){
+        return mediaReportMapper.getAllProductList(mediaType, advertiserId);
+    }
+
+
+    @Override
     public PageInfo<JSONObject> queryReportByCondition(int pageNO, int pageSize, JSONObject requestBody) {
         PageInfo<JSONObject> pageInfo;
         if(requestBody.getString("companyId").equals("6weq589875c040119adst08751712368")){
@@ -114,4 +123,73 @@ public class MediaReportServiceImpl implements IMediaReportService {
         }
         return result;
     }
+
+
+    //@Override
+    //public PageInfo<JSONObject> toutiaoMediaReport(int pageNum, int pageSize, JSONObject requestBody) {
+    //    String today = requestBody.getString("todayDate");
+    //    Date todayDate = DateUtils.parseDate(today, "yyyy-MM-dd");
+    //    Date yesterdayDate = DateUtils.addDay(todayDate, -1);
+    //    String yesterday = DateUtils.formatDate(yesterdayDate);
+    //
+    //    String advertiserId = requestBody.getString("advertiserId");
+    //    String companyId = requestBody.getString("companyId");
+    //
+    //    PageHelper.startPage(pageNum, pageSize);
+    //    List<JSONObject> jsonObjectList = mediaReportMapper.toutiaoMediaReport(today, yesterday, advertiserId, companyId);
+    //
+    //    return new PageInfo<JSONObject>(jsonObjectList);
+    //}
+
+
+    @Override
+    public PageInfo<JSONObject> mediaReport(int pageNum, int pageSize, JSONObject requestBody) {
+        String today = requestBody.getString("todayDate");
+        Date todayDate = DateUtils.parseDate(today, "yyyy-MM-dd");
+        Date yesterdayDate = DateUtils.addDay(todayDate, -1);
+        String yesterday = DateUtils.formatDate(yesterdayDate);
+
+        String advertiserId = requestBody.getString("advertiserId");
+        String companyId = requestBody.getString("companyId");
+        Long productId = requestBody.getLong("productId");
+
+        Integer mediaType = requestBody.getInteger("mediaType");
+
+        List<JSONObject> jsonObjectList = null;
+        if(mediaType == 1){
+            PageHelper.startPage(pageNum, pageSize);
+            jsonObjectList = mediaReportMapper.toutiaoMediaReport(today, yesterday, advertiserId, companyId, productId);
+        }else if(mediaType == 2){
+            PageHelper.startPage(pageNum, pageSize);
+            jsonObjectList = mediaReportMapper.kuaishouMediaReport(today, yesterday, advertiserId, companyId, productId);
+        }
+
+        return new PageInfo<JSONObject>(jsonObjectList);
+    }
+
+    @Override
+    public List<JSONObject> exportMediaReportExcel(JSONObject requestBody) {
+        String today = requestBody.getString("todayDate");
+        Date todayDate = DateUtils.parseDate(today, "yyyy-MM-dd");
+        Date yesterdayDate = DateUtils.addDay(todayDate, -1);
+        String yesterday = DateUtils.formatDate(yesterdayDate);
+
+        String advertiserId = requestBody.getString("advertiserId");
+        String companyId = requestBody.getString("companyId");
+        Long productId = requestBody.getLong("productId");
+
+        Integer mediaType = requestBody.getInteger("mediaType");
+
+        if(mediaType == 2){
+            return mediaReportMapper.kuaishouMediaReport(today, yesterday, advertiserId, companyId, productId);
+        }else if(mediaType == 1){
+            return mediaReportMapper.toutiaoMediaReport(today, yesterday, advertiserId, companyId, productId);
+        }
+        return null;
+    }
+
+
+
+
+
 }

+ 9 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ProjectMemberServiceImpl.java

@@ -103,11 +103,17 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
     }
 
     @Override
-    public List<Map<String, Object>> getProjectAccountByUserId(String userId) {
+    public List<Map<String, Object>> getProjectAccountByUserId(String userId,String mediaType) {
         List<Map<String, Object>> result = new ArrayList<>();
         List<Integer> mediaList = new ArrayList<>();
-        mediaList.add(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE_INT);
-        mediaList.add(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE_INSIDE_INT);
+        if(mediaType.equals(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE)){
+            mediaList.add(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE_INT);
+            mediaList.add(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE_INSIDE_INT);
+        }else if(mediaType.equals(CtopAdConstant.PLATFORM_TYPE_KUAISHOU)){
+            mediaList.add(CtopAdConstant.PLATFORM_TYPE_KUAISHOU_INT);
+            mediaList.add(CtopAdConstant.PLATFORM_TYPE_KUAISHOU_INSIDE_INT);
+        }
+
         //查询登录账号下的项目
         List<ProjectMember> projectMemberList = this.queryProjectMemberBy(userId, mediaList);
         if (projectMemberList.isEmpty()) {

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

@@ -11,11 +11,9 @@ public class RuleEngineServiceImpl implements IRuleEngineService {
     @Override
     public void executeAddRule(QueryParam param) {
         log.info("参数数据:"+param.getParamId()+";"+param.getParamSign());
-        System.out.println("add success");
     }
     @Override
     public void executeRemoveRule(QueryParam param) {
         log.info("参数数据:"+param.getParamId()+";"+param.getParamSign());
-        System.out.println("remove success");
     }
 }

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

@@ -6,6 +6,7 @@ import java.math.BigDecimal;
 
 @Data
 public class MaterialTopVO {
+    private String code;
     private String url;
     private String coverUrl;
     private String name ;

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

@@ -37,7 +37,6 @@ public class SendMsgJob implements Job {
 		queryWrapper.eq("es_send_status", SendMsgStatusEnum.WAIT.getCode())
 				.or(i -> i.eq("es_send_status", SendMsgStatusEnum.FAIL.getCode()).lt("es_send_num", 6));
 		List<SysMessage> sysMessages = sysMessageService.list(queryWrapper);
-		System.out.println(sysMessages);
 		// 2.根据不同的类型走不通的发送实现类
 		for (SysMessage sysMessage : sysMessages) {
 			ISendMsgHandle sendMsgHandle = null;

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/opencv/utils/CornerCheck.java

@@ -220,8 +220,8 @@ public class CornerCheck {
             List<Point> checkPoints = new ArrayList<>();
             Point rightDown = cornerPoints.get(cornerPoints.size() - 1);
             for (Point point : cornerPoints) {
-                System.out.println("cornerPoint:" + point.toString());
-                System.out.println(imageGR.get((int) point.y, (int) point.x)[1]);
+//                System.out.println("cornerPoint:" + point.toString());
+//                System.out.println(imageGR.get((int) point.y, (int) point.x)[1]);
                 if (imageGR.get((int) point.y, (int) point.x)[1] >= 120) {
                     if (point.x <= rightDown.x) {
                         checkPoints.add(point);

+ 1 - 15
jeecg-boot-module-system/src/main/java/org/jeecg/modules/opencv/utils/ExtractionVideoKeyFrames.java

@@ -51,9 +51,7 @@ public class ExtractionVideoKeyFrames {
 
     int ExtractKeyframes(String videoPath, double rate, String outImgPath){
         VideoCapture cap = new VideoCapture();
-        System.out.println(cap.isOpened());
         if (!cap.open(videoPath)) {
-            System.out.println("Open video file error!");
             return -1;
         }
 
@@ -66,7 +64,6 @@ public class ExtractionVideoKeyFrames {
         int height = (int)cap.get(Videoio.CAP_PROP_FRAME_HEIGHT);
         float fps = (float)cap.get(Videoio.CAP_PROP_FPS);
         int nframes = (int)cap.get(Videoio.CAP_PROP_FRAME_COUNT);
-        System.out.println("W:"+width+";H:"+height+";FPS:"+fps+";N:"+nframes);
 
         int nscale = 1;
         if (width%4==0 && height%4==0){
@@ -104,11 +101,8 @@ public class ExtractionVideoKeyFrames {
 
             double aseV = rate;
             if (histB.empty()){
-                System.out.println(aseV);
-            }
-            else{
+            } else{
                 aseV = computeASE(histA, histB);
-                System.out.println(aseV);
             }
 
             if (aseV >= rate) {
@@ -129,16 +123,8 @@ public class ExtractionVideoKeyFrames {
                 return -2;
             }
         }
-        System.out.println("NFRAMES(in reality)="+nCount);
 
         double toc = (double)Core.getTickCount();
-        System.out.println("ELAPSED TIME="+(toc-tic)/Core.getTickFrequency());
         return 0;
     }
-
-    public static void main(String[] args) {
-        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
-        ExtractionVideoKeyFrames evf = new ExtractionVideoKeyFrames();
-        evf.ExtractKeyframes("D:\\data\\fill.mp4",0.5,"D:\\data\\");
-    }
 }

+ 0 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/opencv/utils/VideoProcessing.java

@@ -36,7 +36,6 @@ public class VideoProcessing {
 
             //获取视频总帧数
             int ftp = fFmpegFrameGrabber.getLengthInFrames();
-            System.out.println("时长 " + ftp / fFmpegFrameGrabber.getFrameRate() / 60);
             LoadFileUtil.checkFile(filePackageName);
             while (flag <= ftp) {
                 frame = fFmpegFrameGrabber.grabImage();

+ 1 - 10
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/aspect/UrlMatchEnum.java

@@ -46,13 +46,4 @@ public enum UrlMatchEnum {
         }
         return null;
     }
-
-
-    public static void main(String[] args) {
-        /**
-         * 比如request真实请求URL: /online/cgform/api/getData/81fcf7d8922d45069b0d5ba983612d3a
-         * 转换匹配路由URL后(对应配置的菜单路径):/online/cgformList/81fcf7d8922d45069b0d5ba983612d3a
-         */
-        System.out.println(UrlMatchEnum.getMatchResultByUrl("/online/cgform/api/getData/81fcf7d8922d45069b0d5ba983612d3a"));
-    }
-}
+}

+ 370 - 378
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java

@@ -1,15 +1,12 @@
 package org.jeecg.modules.system.service.impl;
 
 import cn.com.ctop.common.module.utils.Check;
-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.extension.service.impl.ServiceImpl;
 import io.netty.util.internal.StringUtil;
 import org.jeecg.common.constant.CacheConstant;
 import org.jeecg.common.constant.CommonConstant;
-import org.jeecg.common.constant.FillRuleConstant;
-import org.jeecg.common.util.FillRuleUtil;
 import org.jeecg.common.util.YouBianCodeUtil;
 import org.jeecg.modules.system.entity.*;
 import org.jeecg.modules.system.mapper.*;
@@ -35,402 +32,397 @@ import java.util.*;
 @Service
 public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart> implements ISysDepartService {
 
-	@Autowired
-	private SysUserDepartMapper userDepartMapper;
-	@Autowired
-	private SysDepartRoleMapper sysDepartRoleMapper;
-	@Autowired
-	private SysDepartPermissionMapper departPermissionMapper;
-	@Autowired
-	private SysDepartRolePermissionMapper departRolePermissionMapper;
-	@Autowired
-	private SysDepartRoleUserMapper departRoleUserMapper;
-	@Autowired
-	private SysDepartMapper sysDepartMapper;
+    @Autowired
+    private SysUserDepartMapper userDepartMapper;
+    @Autowired
+    private SysDepartRoleMapper sysDepartRoleMapper;
+    @Autowired
+    private SysDepartPermissionMapper departPermissionMapper;
+    @Autowired
+    private SysDepartRolePermissionMapper departRolePermissionMapper;
+    @Autowired
+    private SysDepartRoleUserMapper departRoleUserMapper;
+    @Autowired
+    private SysDepartMapper sysDepartMapper;
 
-	@Override
-	public List<SysDepartTreeModel> queryMyDeptTreeList(String departIds) {
-		//根据部门id获取所负责部门
-		LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
-		String[] codeArr = this.getMyDeptParentOrgCode(departIds);
-		for(int i=0;i<codeArr.length;i++){
-			query.or().likeRight(SysDepart::getOrgCode,codeArr[i]);
-		}
-		query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
-		query.orderByAsc(SysDepart::getDepartOrder);
-		//将父节点ParentId设为null
-		List<SysDepart> listDepts = this.list(query);
-		for(int i=0;i<codeArr.length;i++){
-			for(SysDepart dept : listDepts){
-				if(dept.getOrgCode().equals(codeArr[i])){
-					dept.setParentId(null);
-				}
-			}
-		}
-		// 调用wrapTreeDataToTreeList方法生成树状数据
-		List<SysDepartTreeModel> listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(listDepts);
-		return listResult;
-	}
+    @Override
+    public List<SysDepartTreeModel> queryMyDeptTreeList(String departIds) {
+        //根据部门id获取所负责部门
+        LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
+        String[] codeArr = this.getMyDeptParentOrgCode(departIds);
+        for (int i = 0; i < codeArr.length; i++) {
+            query.or().likeRight(SysDepart::getOrgCode, codeArr[i]);
+        }
+        query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+        query.orderByAsc(SysDepart::getDepartOrder);
+        //将父节点ParentId设为null
+        List<SysDepart> listDepts = this.list(query);
+        for (int i = 0; i < codeArr.length; i++) {
+            for (SysDepart dept : listDepts) {
+                if (dept.getOrgCode().equals(codeArr[i])) {
+                    dept.setParentId(null);
+                }
+            }
+        }
+        // 调用wrapTreeDataToTreeList方法生成树状数据
+        List<SysDepartTreeModel> listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(listDepts);
+        return listResult;
+    }
 
-	/**
-	 * queryTreeList 对应 queryTreeList 查询所有的部门数据,以树结构形式响应给前端
-	 */
-	@Cacheable(value = CacheConstant.SYS_DEPARTS_CACHE)
-	@Override
-	public List<SysDepartTreeModel> queryTreeList() {
-		LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
-		query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
-		query.orderByAsc(SysDepart::getDepartOrder);
-		List<SysDepart> list = this.list(query);
-		// 调用wrapTreeDataToTreeList方法生成树状数据
-		List<SysDepartTreeModel> listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(list);
-		return listResult;
-	}
+    /**
+     * queryTreeList 对应 queryTreeList 查询所有的部门数据,以树结构形式响应给前端
+     */
+    @Cacheable(value = CacheConstant.SYS_DEPARTS_CACHE)
+    @Override
+    public List<SysDepartTreeModel> queryTreeList() {
+        LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
+        query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+        query.orderByAsc(SysDepart::getDepartOrder);
+        List<SysDepart> list = this.list(query);
+        // 调用wrapTreeDataToTreeList方法生成树状数据
+        List<SysDepartTreeModel> listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(list);
+        return listResult;
+    }
 
-	@Cacheable(value = CacheConstant.SYS_DEPART_IDS_CACHE)
-	@Override
-	public List<DepartIdModel> queryDepartIdTreeList() {
-		LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
-		query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
-		query.orderByAsc(SysDepart::getDepartOrder);
-		List<SysDepart> list = this.list(query);
-		// 调用wrapTreeDataToTreeList方法生成树状数据
-		List<DepartIdModel> listResult = FindsDepartsChildrenUtil.wrapTreeDataToDepartIdTreeList(list);
-		return listResult;
-	}
+    @Cacheable(value = CacheConstant.SYS_DEPART_IDS_CACHE)
+    @Override
+    public List<DepartIdModel> queryDepartIdTreeList() {
+        LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
+        query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+        query.orderByAsc(SysDepart::getDepartOrder);
+        List<SysDepart> list = this.list(query);
+        // 调用wrapTreeDataToTreeList方法生成树状数据
+        List<DepartIdModel> listResult = FindsDepartsChildrenUtil.wrapTreeDataToDepartIdTreeList(list);
+        return listResult;
+    }
 
-	/**
-	 * saveDepartData 对应 add 保存用户在页面添加的新的部门对象数据
-	 */
-	@Override
-	@Transactional
-	public void saveDepartData(SysDepart sysDepart, String username) {
-		if (sysDepart != null && username != null) {
-			if (sysDepart.getParentId() == null) {
-				sysDepart.setParentId("");
-			}
-			String s = UUID.randomUUID().toString().replace("-", "");
-			sysDepart.setId(s);
-			// 先判断该对象有无父级ID,有则意味着不是最高级,否则意味着是最高级
-			// 获取父级ID
-			String parentId = sysDepart.getParentId();
-			//update-begin--Author:baihailong  Date:20191209 for:部门编码规则生成器做成公用配置
-			JSONObject formData = new JSONObject();
-			formData.put("parentId",parentId);
-			String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART,formData);
-			//update-end--Author:baihailong  Date:20191209 for:部门编码规则生成器做成公用配置
-			sysDepart.setOrgCode(codeArray[0]);
-			String orgType = codeArray[1];
-			sysDepart.setOrgType(String.valueOf(orgType));
-			sysDepart.setCreateTime(new Date());
-			sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
-			this.save(sysDepart);
-		}
+    /**
+     * saveDepartData 对应 add 保存用户在页面添加的新的部门对象数据
+     */
+    @Override
+    @Transactional
+    public void saveDepartData(SysDepart sysDepart, String username) {
+        if (sysDepart != null && username != null) {
+            if (sysDepart.getParentId() == null) {
+                sysDepart.setParentId("");
+            }
+            String s = UUID.randomUUID().toString().replace("-", "");
+            sysDepart.setId(s);
+            // 先判断该对象有无父级ID,有则意味着不是最高级,否则意味着是最高级
+            // 获取父级ID
+            String parentId = sysDepart.getParentId();
+            //update-begin--Author:baihailong  Date:20191209 for:部门编码规则生成器做成公用配置
 
-	}
 
-	/**
-	 * saveDepartData 的调用方法,生成部门编码和部门类型(作废逻辑)
-	 * @deprecated
-	 * @param parentId
-	 * @return
-	 */
-	private String[] generateOrgCode(String parentId) {
-		//update-begin--Author:Steve  Date:20190201 for:组织机构添加数据代码调整
-				LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
-				LambdaQueryWrapper<SysDepart> query1 = new LambdaQueryWrapper<SysDepart>();
-				String[] strArray = new String[2];
-		        // 创建一个List集合,存储查询返回的所有SysDepart对象
-		        List<SysDepart> departList = new ArrayList<>();
-				// 定义新编码字符串
-				String newOrgCode = "";
-				// 定义旧编码字符串
-				String oldOrgCode = "";
-				// 定义部门类型
-				String orgType = "";
-				// 如果是最高级,则查询出同级的org_code, 调用工具类生成编码并返回
-				if (StringUtil.isNullOrEmpty(parentId)) {
-					// 线判断数据库中的表是否为空,空则直接返回初始编码
-					query1.eq(SysDepart::getParentId, "").or().isNull(SysDepart::getParentId);
-					query1.orderByDesc(SysDepart::getOrgCode);
-					departList = this.list(query1);
-					if(departList == null || departList.size() == 0) {
-						strArray[0] = YouBianCodeUtil.getNextYouBianCode(null);
-						strArray[1] = "1";
-						return strArray;
-					}else {
-					SysDepart depart = departList.get(0);
-					oldOrgCode = depart.getOrgCode();
-					orgType = depart.getOrgType();
-					newOrgCode = YouBianCodeUtil.getNextYouBianCode(oldOrgCode);
-					}
-				} else { // 反之则查询出所有同级的部门,获取结果后有两种情况,有同级和没有同级
-					// 封装查询同级的条件
-					query.eq(SysDepart::getParentId, parentId);
-					// 降序排序
-					query.orderByDesc(SysDepart::getOrgCode);
-					// 查询出同级部门的集合
-					List<SysDepart> parentList = this.list(query);
-					// 查询出父级部门
-					SysDepart depart = this.getById(parentId);
-					// 获取父级部门的Code
-					String parentCode = depart.getOrgCode();
-					// 根据父级部门类型算出当前部门的类型
-					orgType = String.valueOf(Integer.valueOf(depart.getOrgType()) + 1);
-					// 处理同级部门为null的情况
-					if (parentList == null || parentList.size() == 0) {
-						// 直接生成当前的部门编码并返回
-						newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, null);
-					} else { //处理有同级部门的情况
-						// 获取同级部门的编码,利用工具类
-						String subCode = parentList.get(0).getOrgCode();
-						// 返回生成的当前部门编码
-						newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, subCode);
-					}
-				}
-				// 返回最终封装了部门编码和部门类型的数组
-				strArray[0] = newOrgCode;
-				strArray[1] = orgType;
-				return strArray;
-		//update-end--Author:Steve  Date:20190201 for:组织机构添加数据代码调整
-	}
+            String[] codeArray = generateOrgCode(parentId);
+           /* JSONObject formData = new JSONObject();
+            formData.put("parentId", parentId);
+            String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART, formData);*/
+            sysDepart.setOrgCode(codeArray[0]);
+            String orgType = codeArray[1];
+            sysDepart.setOrgType(String.valueOf(orgType));
+            //update-end--Author:baihailong  Date:20191209 for:部门编码规则生成器做成公用配置
+            sysDepart.setCreateTime(new Date());
+            sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
+            this.save(sysDepart);
+        }
 
+    }
 
-	/**
-	 * removeDepartDataById 对应 delete方法 根据ID删除相关部门数据
-	 *
-	 */
-	/*
-	 * @Override
-	 *
-	 * @Transactional public boolean removeDepartDataById(String id) {
-	 * System.out.println("要删除的ID 为=============================>>>>>"+id); boolean
-	 * flag = this.removeById(id); return flag; }
-	 */
+    /**
+     * saveDepartData 的调用方法,生成部门编码和部门类型(作废逻辑)
+     *
+     * @param parentId
+     * @return
+     * @deprecated
+     */
+    private String[] generateOrgCode(String parentId) {
+        //update-begin--Author:Steve  Date:20190201 for:组织机构添加数据代码调整
+        LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
+        LambdaQueryWrapper<SysDepart> query1 = new LambdaQueryWrapper<SysDepart>();
+        String[] strArray = new String[2];
+        // 创建一个List集合,存储查询返回的所有SysDepart对象
+        List<SysDepart> departList = new ArrayList<>();
+        // 定义新编码字符串
+        String newOrgCode = "";
+        // 定义旧编码字符串
+        String oldOrgCode = "";
+        // 定义部门类型
+        String orgType = "";
+        // 如果是最高级,则查询出同级的org_code, 调用工具类生成编码并返回
+        if (StringUtil.isNullOrEmpty(parentId)) {
+            // 线判断数据库中的表是否为空,空则直接返回初始编码
+            query1.eq(SysDepart::getParentId, "").or().isNull(SysDepart::getParentId);
+            query1.orderByDesc(SysDepart::getOrgCode);
+            departList = this.list(query1);
+            if (departList == null || departList.size() == 0) {
+                strArray[0] = YouBianCodeUtil.getNextYouBianCode(null);
+                strArray[1] = "1";
+                return strArray;
+            } else {
+                SysDepart depart = departList.get(0);
+                oldOrgCode = depart.getOrgCode();
+                orgType = depart.getOrgType();
+                newOrgCode = YouBianCodeUtil.getNextYouBianCode(oldOrgCode);
+            }
+        } else { // 反之则查询出所有同级的部门,获取结果后有两种情况,有同级和没有同级
+            // 封装查询同级的条件
+            query.eq(SysDepart::getParentId, parentId);
+            // 降序排序
+            query.orderByDesc(SysDepart::getOrgCode);
+            // 查询出同级部门的集合
+            List<SysDepart> parentList = this.list(query);
+            // 查询出父级部门
+            SysDepart depart = this.getById(parentId);
+            // 获取父级部门的Code
+            String parentCode = depart.getOrgCode();
+            // 根据父级部门类型算出当前部门的类型
+            orgType = String.valueOf(Integer.valueOf(depart.getOrgType()) + 1);
+            // 处理同级部门为null的情况
+            if (parentList == null || parentList.size() == 0) {
+                // 直接生成当前的部门编码并返回
+                newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, null);
+            } else { //处理有同级部门的情况
+                // 获取同级部门的编码,利用工具类
+                String subCode = parentList.get(0).getOrgCode();
+                // 返回生成的当前部门编码
+                newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, subCode);
+            }
+        }
+        // 返回最终封装了部门编码和部门类型的数组
+        strArray[0] = newOrgCode;
+        strArray[1] = orgType;
+        return strArray;
+        //update-end--Author:Steve  Date:20190201 for:组织机构添加数据代码调整
+    }
 
-	/**
-	 * updateDepartDataById 对应 edit 根据部门主键来更新对应的部门数据
-	 */
-	@Override
-	@Transactional
-	public Boolean updateDepartDataById(SysDepart sysDepart, String username) {
-		if (sysDepart != null && username != null) {
-			sysDepart.setUpdateTime(new Date());
-			sysDepart.setUpdateBy(username);
-			this.updateById(sysDepart);
-			return true;
-		} else {
-			return false;
-		}
+    /**
+     * updateDepartDataById 对应 edit 根据部门主键来更新对应的部门数据
+     */
+    @Override
+    @Transactional
+    public Boolean updateDepartDataById(SysDepart sysDepart, String username) {
+        if (sysDepart != null && username != null) {
+            sysDepart.setUpdateTime(new Date());
+            sysDepart.setUpdateBy(username);
+            this.updateById(sysDepart);
+            return true;
+        } else {
+            return false;
+        }
 
-	}
+    }
 
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void deleteBatchWithChildren(List<String> ids) {
-		List<String> idList = new ArrayList<String>();
-		for(String id: ids) {
-			idList.add(id);
-			this.checkChildrenExists(id, idList);
-		}
-		this.removeByIds(idList);
-		//根据部门id获取部门角色id
-		List<String> roleIdList = new ArrayList<>();
-		LambdaQueryWrapper<SysDepartRole> query = new LambdaQueryWrapper<>();
-		query.select(SysDepartRole::getId).in(SysDepartRole::getDepartId, idList);
-		List<SysDepartRole> depRoleList = sysDepartRoleMapper.selectList(query);
-		for(SysDepartRole deptRole : depRoleList){
-			roleIdList.add(deptRole.getId());
-		}
-		//根据部门id删除用户与部门关系
-		userDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getDepId,idList));
-		//根据部门id删除部门授权
-		departPermissionMapper.delete(new LambdaQueryWrapper<SysDepartPermission>().in(SysDepartPermission::getDepartId,idList));
-		//根据部门id删除部门角色
-		sysDepartRoleMapper.delete(new LambdaQueryWrapper<SysDepartRole>().in(SysDepartRole::getDepartId,idList));
-		if(roleIdList != null && roleIdList.size()>0){
-			//根据角色id删除部门角色授权
-			departRolePermissionMapper.delete(new LambdaQueryWrapper<SysDepartRolePermission>().in(SysDepartRolePermission::getRoleId,roleIdList));
-			//根据角色id删除部门角色用户信息
-			departRoleUserMapper.delete(new LambdaQueryWrapper<SysDepartRoleUser>().in(SysDepartRoleUser::getDroleId,roleIdList));
-		}
-	}
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteBatchWithChildren(List<String> ids) {
+        List<String> idList = new ArrayList<String>();
+        for (String id : ids) {
+            idList.add(id);
+            this.checkChildrenExists(id, idList);
+        }
+        this.removeByIds(idList);
+        //根据部门id获取部门角色id
+        List<String> roleIdList = new ArrayList<>();
+        LambdaQueryWrapper<SysDepartRole> query = new LambdaQueryWrapper<>();
+        query.select(SysDepartRole::getId).in(SysDepartRole::getDepartId, idList);
+        List<SysDepartRole> depRoleList = sysDepartRoleMapper.selectList(query);
+        for (SysDepartRole deptRole : depRoleList) {
+            roleIdList.add(deptRole.getId());
+        }
+        //根据部门id删除用户与部门关系
+        userDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getDepId, idList));
+        //根据部门id删除部门授权
+        departPermissionMapper.delete(new LambdaQueryWrapper<SysDepartPermission>().in(SysDepartPermission::getDepartId, idList));
+        //根据部门id删除部门角色
+        sysDepartRoleMapper.delete(new LambdaQueryWrapper<SysDepartRole>().in(SysDepartRole::getDepartId, idList));
+        if (roleIdList != null && roleIdList.size() > 0) {
+            //根据角色id删除部门角色授权
+            departRolePermissionMapper.delete(new LambdaQueryWrapper<SysDepartRolePermission>().in(SysDepartRolePermission::getRoleId, roleIdList));
+            //根据角色id删除部门角色用户信息
+            departRoleUserMapper.delete(new LambdaQueryWrapper<SysDepartRoleUser>().in(SysDepartRoleUser::getDroleId, roleIdList));
+        }
+    }
 
-	@Override
-	public List<String> getSubDepIdsByDepId(String departId) {
-		return this.baseMapper.getSubDepIdsByDepId(departId);
-	}
+    @Override
+    public List<String> getSubDepIdsByDepId(String departId) {
+        return this.baseMapper.getSubDepIdsByDepId(departId);
+    }
 
-	@Override
-	public List<String> getMySubDepIdsByDepId(String departIds) {
-		//根据部门id获取所负责部门
-		String[] codeArr = this.getMyDeptParentOrgCode(departIds);
-		return this.baseMapper.getSubDepIdsByOrgCodes(codeArr);
-	}
+    @Override
+    public List<String> getMySubDepIdsByDepId(String departIds) {
+        //根据部门id获取所负责部门
+        String[] codeArr = this.getMyDeptParentOrgCode(departIds);
+        return this.baseMapper.getSubDepIdsByOrgCodes(codeArr);
+    }
 
-	/**
-	 * <p>
-	 * 根据关键字搜索相关的部门数据
-	 * </p>
-	 */
-	@Override
-	public List<SysDepartTreeModel> searhBy(String keyWord,String myDeptSearch,String departIds) {
-		LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
-		List<SysDepartTreeModel> newList = new ArrayList<>();
-		//myDeptSearch不为空时为我的部门搜索,只搜索所负责部门
-		if(!StringUtil.isNullOrEmpty(myDeptSearch)){
-			//departIds 为空普通用户或没有管理部门
-			if(StringUtil.isNullOrEmpty(departIds)){
-				return newList;
-			}
-			//根据部门id获取所负责部门
-			String[] codeArr = this.getMyDeptParentOrgCode(departIds);
-			for(int i=0;i<codeArr.length;i++){
-				query.or().likeRight(SysDepart::getOrgCode,codeArr[i]);
-			}
-			query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
-		}
-		query.like(SysDepart::getDepartName, keyWord);
-		//update-begin--Author:huangzhilin  Date:20140417 for:[bugfree号]组织机构搜索回显优化--------------------
-		SysDepartTreeModel model = new SysDepartTreeModel();
-		List<SysDepart> departList = this.list(query);
-		if(departList.size() > 0) {
-			for(SysDepart depart : departList) {
-				model = new SysDepartTreeModel(depart);
-				model.setChildren(null);
-	    //update-end--Author:huangzhilin  Date:20140417 for:[bugfree号]组织机构搜索功回显优化----------------------
-				newList.add(model);
-			}
-			return newList;
-		}
-		return null;
-	}
+    /**
+     * <p>
+     * 根据关键字搜索相关的部门数据
+     * </p>
+     */
+    @Override
+    public List<SysDepartTreeModel> searhBy(String keyWord, String myDeptSearch, String departIds) {
+        LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
+        List<SysDepartTreeModel> newList = new ArrayList<>();
+        //myDeptSearch不为空时为我的部门搜索,只搜索所负责部门
+        if (!StringUtil.isNullOrEmpty(myDeptSearch)) {
+            //departIds 为空普通用户或没有管理部门
+            if (StringUtil.isNullOrEmpty(departIds)) {
+                return newList;
+            }
+            //根据部门id获取所负责部门
+            String[] codeArr = this.getMyDeptParentOrgCode(departIds);
+            for (int i = 0; i < codeArr.length; i++) {
+                query.or().likeRight(SysDepart::getOrgCode, codeArr[i]);
+            }
+            query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+        }
+        query.like(SysDepart::getDepartName, keyWord);
+        //update-begin--Author:huangzhilin  Date:20140417 for:[bugfree号]组织机构搜索回显优化--------------------
+        SysDepartTreeModel model = new SysDepartTreeModel();
+        List<SysDepart> departList = this.list(query);
+        if (departList.size() > 0) {
+            for (SysDepart depart : departList) {
+                model = new SysDepartTreeModel(depart);
+                model.setChildren(null);
+                //update-end--Author:huangzhilin  Date:20140417 for:[bugfree号]组织机构搜索功回显优化----------------------
+                newList.add(model);
+            }
+            return newList;
+        }
+        return null;
+    }
 
-	/**
-	 * 根据部门id删除并且删除其可能存在的子级任何部门
-	 */
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean delete(String id) {
-		List<String> idList = new ArrayList<>();
-		idList.add(id);
-		this.checkChildrenExists(id, idList);
-		//清空部门树内存
-		//FindsDepartsChildrenUtil.clearDepartIdModel();
-		boolean ok = this.removeByIds(idList);
-		//根据部门id获取部门角色id
-		List<String> roleIdList = new ArrayList<>();
-		LambdaQueryWrapper<SysDepartRole> query = new LambdaQueryWrapper<>();
-		query.select(SysDepartRole::getId).in(SysDepartRole::getDepartId, idList);
-		List<SysDepartRole> depRoleList = sysDepartRoleMapper.selectList(query);
-		for(SysDepartRole deptRole : depRoleList){
-			roleIdList.add(deptRole.getId());
-		}
-		//根据部门id删除用户与部门关系
-		userDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getDepId,idList));
-		//根据部门id删除部门授权
-		departPermissionMapper.delete(new LambdaQueryWrapper<SysDepartPermission>().in(SysDepartPermission::getDepartId,idList));
-		//根据部门id删除部门角色
-		sysDepartRoleMapper.delete(new LambdaQueryWrapper<SysDepartRole>().in(SysDepartRole::getDepartId,idList));
-		if(roleIdList != null && roleIdList.size()>0){
-			//根据角色id删除部门角色授权
-			departRolePermissionMapper.delete(new LambdaQueryWrapper<SysDepartRolePermission>().in(SysDepartRolePermission::getRoleId,roleIdList));
-			//根据角色id删除部门角色用户信息
-			departRoleUserMapper.delete(new LambdaQueryWrapper<SysDepartRoleUser>().in(SysDepartRoleUser::getDroleId,roleIdList));
-		}
-		return ok;
-	}
+    /**
+     * 根据部门id删除并且删除其可能存在的子级任何部门
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean delete(String id) {
+        List<String> idList = new ArrayList<>();
+        idList.add(id);
+        this.checkChildrenExists(id, idList);
+        //清空部门树内存
+        //FindsDepartsChildrenUtil.clearDepartIdModel();
+        boolean ok = this.removeByIds(idList);
+        //根据部门id获取部门角色id
+        List<String> roleIdList = new ArrayList<>();
+        LambdaQueryWrapper<SysDepartRole> query = new LambdaQueryWrapper<>();
+        query.select(SysDepartRole::getId).in(SysDepartRole::getDepartId, idList);
+        List<SysDepartRole> depRoleList = sysDepartRoleMapper.selectList(query);
+        for (SysDepartRole deptRole : depRoleList) {
+            roleIdList.add(deptRole.getId());
+        }
+        //根据部门id删除用户与部门关系
+        userDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getDepId, idList));
+        //根据部门id删除部门授权
+        departPermissionMapper.delete(new LambdaQueryWrapper<SysDepartPermission>().in(SysDepartPermission::getDepartId, idList));
+        //根据部门id删除部门角色
+        sysDepartRoleMapper.delete(new LambdaQueryWrapper<SysDepartRole>().in(SysDepartRole::getDepartId, idList));
+        if (roleIdList != null && roleIdList.size() > 0) {
+            //根据角色id删除部门角色授权
+            departRolePermissionMapper.delete(new LambdaQueryWrapper<SysDepartRolePermission>().in(SysDepartRolePermission::getRoleId, roleIdList));
+            //根据角色id删除部门角色用户信息
+            departRoleUserMapper.delete(new LambdaQueryWrapper<SysDepartRoleUser>().in(SysDepartRoleUser::getDroleId, roleIdList));
+        }
+        return ok;
+    }
 
-	/**
-	 * delete 方法调用
-	 * @param id
-	 * @param idList
-	 */
-	private void checkChildrenExists(String id, List<String> idList) {
-		LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
-		query.eq(SysDepart::getParentId,id);
-		List<SysDepart> departList = this.list(query);
-		if(departList != null && departList.size() > 0) {
-			for(SysDepart depart : departList) {
-				idList.add(depart.getId());
-				this.checkChildrenExists(depart.getId(), idList);
-			}
-		}
-	}
+    /**
+     * delete 方法调用
+     *
+     * @param id
+     * @param idList
+     */
+    private void checkChildrenExists(String id, List<String> idList) {
+        LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
+        query.eq(SysDepart::getParentId, id);
+        List<SysDepart> departList = this.list(query);
+        if (departList != null && departList.size() > 0) {
+            for (SysDepart depart : departList) {
+                idList.add(depart.getId());
+                this.checkChildrenExists(depart.getId(), idList);
+            }
+        }
+    }
 
-	@Override
-	public List<SysDepart> queryUserDeparts(String userId) {
-		return baseMapper.queryUserDeparts(userId);
-	}
+    @Override
+    public List<SysDepart> queryUserDeparts(String userId) {
+        return baseMapper.queryUserDeparts(userId);
+    }
 
-	@Override
-	public List<SysDepart> queryDepartsByUsername(String username) {
-		return baseMapper.queryDepartsByUsername(username);
-	}
+    @Override
+    public List<SysDepart> queryDepartsByUsername(String username) {
+        return baseMapper.queryDepartsByUsername(username);
+    }
 
-	/**
-	 * 根据用户所负责部门ids获取父级部门编码
-	 * @param departIds
-	 * @return
-	 */
-	private String[] getMyDeptParentOrgCode(String departIds){
-		//根据部门id查询所负责部门
-		LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
-		query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
-		query.in(SysDepart::getId, Arrays.asList(departIds.split(",")));
-		query.orderByAsc(SysDepart::getOrgCode);
-		List<SysDepart> list = this.list(query);
-		//查找根部门
-		if(list == null || list.size()==0){
-			return null;
-		}
-		String orgCode = this.getMyDeptParentNode(list);
-		String[] codeArr = orgCode.split(",");
-		return codeArr;
-	}
+    /**
+     * 根据用户所负责部门ids获取父级部门编码
+     *
+     * @param departIds
+     * @return
+     */
+    private String[] getMyDeptParentOrgCode(String departIds) {
+        //根据部门id查询所负责部门
+        LambdaQueryWrapper<SysDepart> query = new LambdaQueryWrapper<SysDepart>();
+        query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+        query.in(SysDepart::getId, Arrays.asList(departIds.split(",")));
+        query.orderByAsc(SysDepart::getOrgCode);
+        List<SysDepart> list = this.list(query);
+        //查找根部门
+        if (list == null || list.size() == 0) {
+            return null;
+        }
+        String orgCode = this.getMyDeptParentNode(list);
+        String[] codeArr = orgCode.split(",");
+        return codeArr;
+    }
 
-	/**
-	 * 获取负责部门父节点
-	 * @param list
-	 * @return
-	 */
-	private String getMyDeptParentNode(List<SysDepart> list){
-		Map<String,String> map = new HashMap<>();
-		//1.先将同一公司归类
-		for(SysDepart dept : list){
-			String code = dept.getOrgCode().substring(0,3);
-			if(map.containsKey(code)){
-				String mapCode = map.get(code)+","+dept.getOrgCode();
-				map.put(code,mapCode);
-			}else{
-				map.put(code,dept.getOrgCode());
-			}
-		}
-		StringBuffer parentOrgCode = new StringBuffer();
-		//2.获取同一公司的根节点
-		for(String str : map.values()){
-			String[] arrStr = str.split(",");
-			parentOrgCode.append(",").append(this.getMinLengthNode(arrStr));
-		}
-		return parentOrgCode.substring(1);
-	}
+    /**
+     * 获取负责部门父节点
+     *
+     * @param list
+     * @return
+     */
+    private String getMyDeptParentNode(List<SysDepart> list) {
+        Map<String, String> map = new HashMap<>();
+        //1.先将同一公司归类
+        for (SysDepart dept : list) {
+            String code = dept.getOrgCode().substring(0, 3);
+            if (map.containsKey(code)) {
+                String mapCode = map.get(code) + "," + dept.getOrgCode();
+                map.put(code, mapCode);
+            } else {
+                map.put(code, dept.getOrgCode());
+            }
+        }
+        StringBuffer parentOrgCode = new StringBuffer();
+        //2.获取同一公司的根节点
+        for (String str : map.values()) {
+            String[] arrStr = str.split(",");
+            parentOrgCode.append(",").append(this.getMinLengthNode(arrStr));
+        }
+        return parentOrgCode.substring(1);
+    }
 
-	/**
-	 * 获取同一公司中部门编码长度最小的部门
-	 * @param str
-	 * @return
-	 */
-	private String getMinLengthNode(String[] str){
-		int min =str[0].length();
-		String orgCode = str[0];
-		for(int i =1;i<str.length;i++){
-			if(str[i].length()<=min){
-				min = str[i].length();
-				orgCode = orgCode+","+str[i];
-			}
-		}
-		return orgCode;
-	}
+    /**
+     * 获取同一公司中部门编码长度最小的部门
+     *
+     * @param str
+     * @return
+     */
+    private String getMinLengthNode(String[] str) {
+        int min = str[0].length();
+        String orgCode = str[0];
+        for (int i = 1; i < str.length; i++) {
+            if (str[i].length() <= min) {
+                min = str[i].length();
+                orgCode = orgCode + "," + str[i];
+            }
+        }
+        return orgCode;
+    }
 
     @Override
     public String selectIdByOrdCode(String orgCode) {

+ 248 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/controller/ThirdConfigAdvertiserController.java

@@ -0,0 +1,248 @@
+package org.jeecg.modules.third.controller;
+
+import cn.com.ctop.common.module.annotation.AutoLog;
+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.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.third.entity.ThirdConfigAdvertiser;
+import org.jeecg.modules.third.server.IThirdConfigAdvertiserService;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 对外配置关联广告主
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-08-14
+ */
+@Slf4j
+@Api(tags = "对外配置关联广告主")
+@RestController
+@RequestMapping("/n/thirtConfigAdvertiser")
+public class ThirdConfigAdvertiserController {
+    @Autowired
+    private IThirdConfigAdvertiserService thirtConfigAdvertiserService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param thirtConfigAdvertiser
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "对外配置关联广告主-分页列表查询")
+    @ApiOperation(value = "对外配置关联广告主-分页列表查询", notes = "对外配置关联广告主-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<ThirdConfigAdvertiser>> queryPageList(ThirdConfigAdvertiser thirtConfigAdvertiser,
+                                                              @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                              @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                              HttpServletRequest req) {
+        Result<IPage<ThirdConfigAdvertiser>> result = new Result<>();
+        QueryWrapper<ThirdConfigAdvertiser> queryWrapper = QueryGenerator.initQueryWrapper(thirtConfigAdvertiser, req.getParameterMap());
+        Page<ThirdConfigAdvertiser> page = new Page<ThirdConfigAdvertiser>(pageNo, pageSize);
+        IPage<ThirdConfigAdvertiser> pageList = thirtConfigAdvertiserService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param thirtConfigAdvertiser
+     * @return
+     */
+    @AutoLog(value = "对外配置关联广告主-添加")
+    @ApiOperation(value = "对外配置关联广告主-添加", notes = "对外配置关联广告主-添加")
+    @PostMapping(value = "/add")
+    public Result<ThirdConfigAdvertiser> add(@RequestBody ThirdConfigAdvertiser thirtConfigAdvertiser) {
+        Result<ThirdConfigAdvertiser> result = new Result<>();
+        try {
+            thirtConfigAdvertiserService.save(thirtConfigAdvertiser);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param thirtConfigAdvertiser
+     * @return
+     */
+    @AutoLog(value = "对外配置关联广告主-编辑")
+    @ApiOperation(value = "对外配置关联广告主-编辑", notes = "对外配置关联广告主-编辑")
+    @PutMapping(value = "/edit")
+    public Result<ThirdConfigAdvertiser> edit(@RequestBody ThirdConfigAdvertiser thirtConfigAdvertiser) {
+        Result<ThirdConfigAdvertiser> result = new Result<ThirdConfigAdvertiser>();
+        ThirdConfigAdvertiser thirtConfigAdvertiserEntity = thirtConfigAdvertiserService.getById(thirtConfigAdvertiser.getId());
+        if (thirtConfigAdvertiserEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = thirtConfigAdvertiserService.updateById(thirtConfigAdvertiser);
+            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 {
+            thirtConfigAdvertiserService.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<ThirdConfigAdvertiser> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<ThirdConfigAdvertiser> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.thirtConfigAdvertiserService.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<ThirdConfigAdvertiser> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<ThirdConfigAdvertiser> result = new Result<>();
+        ThirdConfigAdvertiser thirtConfigAdvertiser = thirtConfigAdvertiserService.getById(id);
+        if (thirtConfigAdvertiser == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(thirtConfigAdvertiser);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<ThirdConfigAdvertiser> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                ThirdConfigAdvertiser thirtConfigAdvertiser = JSON.parseObject(deString, ThirdConfigAdvertiser.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(thirtConfigAdvertiser, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<ThirdConfigAdvertiser> pageList = thirtConfigAdvertiserService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "对外配置关联广告主列表");
+        mv.addObject(NormalExcelConstants.CLASS, ThirdConfigAdvertiser.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<ThirdConfigAdvertiser> listThirtConfigAdvertisers = ExcelImportUtil.importExcel(file.getInputStream(), ThirdConfigAdvertiser.class, params);
+                thirtConfigAdvertiserService.saveBatch(listThirtConfigAdvertisers);
+                return Result.ok("文件导入成功!数据行数:" + listThirtConfigAdvertisers.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("文件导入失败!");
+    }
+
+}

+ 132 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/controller/ThirdConfigController.java

@@ -0,0 +1,132 @@
+package org.jeecg.modules.third.controller;
+
+import cn.com.ctop.common.module.utils.Check;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.third.entity.ThirdConfig;
+import org.jeecg.modules.third.entity.ThirdConfigAdvertiser;
+import org.jeecg.modules.third.server.IThirdConfigAdvertiserService;
+import org.jeecg.modules.third.server.IThirdConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 对外配置
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-08-14
+ */
+@Slf4j
+@Api(tags = "对外配置")
+@RestController
+@RequestMapping("/third")
+public class ThirdConfigController {
+    @Autowired
+    private IThirdConfigService thirdConfigService;
+    @Autowired
+    private IThirdConfigAdvertiserService thirdConfigAdvertiserService;
+
+    @PostMapping(value = "/getAdvertiserList")
+    public Result<List<String>> getAdvertiserList(@RequestBody JSONObject requestJson) {
+
+        Result<List<String>> result = new Result<>();
+        try {
+            Long appId = requestJson.getLong("appId");
+            if (Check.isNull(appId)) {
+                throw new Exception("必传参数appId不能为空");
+            }
+            QueryWrapper<ThirdConfig> thirdConfigQueryWrapper = new QueryWrapper<>();
+            thirdConfigQueryWrapper.eq("app_id", appId);
+            ThirdConfig config = thirdConfigService.getOne(thirdConfigQueryWrapper);
+            if (Check.isNull(config)) {
+                throw new Exception("appId不正确");
+            }
+            String secret = requestJson.getString("secret");
+            if (Check.isNull(secret)) {
+                throw new Exception("secret不能为空");
+            }
+            if (!secret.equals(config.getSecret())) {
+                throw new Exception("secret不正确");
+            }
+
+            List<String> advertiserList = thirdConfigAdvertiserService.getAdvertiserListByAppId(appId);
+            result.setResult(advertiserList);
+
+        } catch (Exception e) {
+            result.setSuccess(false);
+            result.setMessage(e.getMessage());
+            result.setCode(-1);
+
+        }
+        return result;
+    }
+
+
+    @PostMapping(value = "/getAdvertiserCost")
+    public Result<List<JSONObject>> getAdvertiserCost(@RequestBody JSONObject requestJson) {
+        Result<List<JSONObject>> result = new Result<>();
+        try {
+
+            Long appId = requestJson.getLong("appId");
+            if (Check.isNull(appId)) {
+                throw new Exception("必传参数appId不能为空");
+            }
+            QueryWrapper<ThirdConfig> thirdConfigQueryWrapper = new QueryWrapper<>();
+            thirdConfigQueryWrapper.eq("app_id", appId);
+            ThirdConfig config = thirdConfigService.getOne(thirdConfigQueryWrapper);
+            if (Check.isNull(config)) {
+                throw new Exception("appId不正确");
+            }
+            String secret = requestJson.getString("secret");
+            if (Check.isNull(secret)) {
+                throw new Exception("secret不能为空");
+            }
+            if (!secret.equals(config.getSecret())) {
+                throw new Exception("secret不正确");
+            }
+
+            String advertiserName = requestJson.getString("advertiserName");
+            if (Check.isNull(advertiserName)) {
+                throw new Exception("请输入需要查询广告主名称");
+            }
+
+            QueryWrapper<ThirdConfigAdvertiser> thirtConfigAdvertiserQueryWrapper = new QueryWrapper<>();
+            thirtConfigAdvertiserQueryWrapper.eq("app_id", appId);
+            thirtConfigAdvertiserQueryWrapper.eq("advertiser_name", advertiserName);
+            thirtConfigAdvertiserQueryWrapper.last("limit 1");
+            ThirdConfigAdvertiser configAdvertiser = thirdConfigAdvertiserService.getOne(thirtConfigAdvertiserQueryWrapper);
+            if (Check.isNull(configAdvertiser)) {
+                throw new Exception("此appId下暂无此广告主信息");
+
+            }
+            String startDate = requestJson.getString("startDate");
+            if (Check.isNull(startDate)) {
+                throw new Exception("请输入查询开始时间");
+            }
+
+            String endDate = requestJson.getString("endDate");
+            if (Check.isNull(endDate)) {
+                throw new Exception("请输入查询结束时间");
+            }
+
+
+            List<JSONObject> costList = thirdConfigAdvertiserService.getAdvertiserCost(appId, advertiserName, startDate, endDate);
+            result.setResult(costList);
+        } catch (Exception e) {
+            result.setCode(-1);
+            result.setSuccess(false);
+            result.setMessage(e.getMessage());
+        }
+        return result;
+    }
+
+}

+ 57 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/entity/ThirdConfig.java

@@ -0,0 +1,57 @@
+package org.jeecg.modules.third.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 2020-08-14
+ */
+@Data
+@TableName("ctop_thirt_config")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_thirt_config对象", description = "对外配置")
+public class ThirdConfig {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * appId
+     */
+    @Excel(name = "appId", width = 15)
+    @ApiModelProperty(value = "appId")
+    private Long appId;
+    /**
+     * secret
+     */
+    @Excel(name = "secret", width = 15)
+    @ApiModelProperty(value = "secret")
+    private String secret;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * update
+     */
+    @ApiModelProperty(value = "update")
+    private Date updateTime;
+}

+ 57 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/entity/ThirdConfigAdvertiser.java

@@ -0,0 +1,57 @@
+package org.jeecg.modules.third.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 2020-08-14
+ */
+@Data
+@TableName("ctop_thirt_config_advertiser")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_thirt_config_advertiser对象", description = "对外配置关联广告主")
+public class ThirdConfigAdvertiser {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * appId
+     */
+    @Excel(name = "appId", width = 15)
+    @ApiModelProperty(value = "appId")
+    private Integer appId;
+    /**
+     * advertsierName
+     */
+    @Excel(name = "advertsierName", width = 15)
+    @ApiModelProperty(value = "advertiserName")
+    private String advertiserName;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * update
+     */
+    @ApiModelProperty(value = "update")
+    private Date updateTime;
+}

+ 22 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/mapper/ThirdConfigAdvertiserMapper.java

@@ -0,0 +1,22 @@
+package org.jeecg.modules.third.mapper;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.third.entity.ThirdConfigAdvertiser;
+
+import java.util.List;
+
+/**
+ * 对外配置关联广告主
+ *
+ * @author: jeecg-boot
+ * @date: 2020-08-14
+ * @cersion: V1.0
+ */
+public interface ThirdConfigAdvertiserMapper extends BaseMapper<ThirdConfigAdvertiser> {
+
+    List<JSONObject> getAdvertiserCost(@Param("appId") Long appId, @Param("advertiserName") String advertiserName, @Param("startDate") String startDate, @Param("endDate") String endDate);
+
+    List<String> getAdvertiserListByAppId(@Param("appId") Long appId);
+}

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

@@ -0,0 +1,15 @@
+package org.jeecg.modules.third.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.third.entity.ThirdConfig;
+
+/**
+ * 对外配置
+ *
+ * @author: jeecg-boot
+ * @date: 2020-08-14
+ * @cersion: V1.0
+ */
+public interface ThirdConfigMapper extends BaseMapper<ThirdConfig> {
+
+}

+ 24 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/mapper/xml/ThirdConfigAdvertiserMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.third.mapper.ThirdConfigAdvertiserMapper">
+
+    <select id="getAdvertiserListByAppId" resultType="java.lang.String">
+     select advertiser_name
+      from ctop_thirt_config_advertiser
+     where  app_id = #{appId}
+     group by advertiser_name
+    </select>
+
+    <select id="getAdvertiserCost" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT sum(t2.charge) as 'charge',
+        stat_date as 'statDate'
+        from ctop_kuaishou_advertiser_base_info t1
+        LEFT JOIN ctop_kuaishou_report_daily_account t2
+        ON t1.account_id = t2.account_id
+        WHERE t1.corporation_name = #{advertiserName}
+        and t2.stat_date &gt;= #{startDate}
+        AND t2.stat_date &lt;= #{endDate}
+        GROUP BY t2.stat_date
+    </select>
+
+</mapper>

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

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

+ 20 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/server/IThirdConfigAdvertiserService.java

@@ -0,0 +1,20 @@
+package org.jeecg.modules.third.server;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.third.entity.ThirdConfigAdvertiser;
+
+import java.util.List;
+
+/**
+ * @Description: 对外配置关联广告主
+ * @Author: jeecg-boot
+ * @Date: 2020-08-14
+ * @Version: V1.0
+ */
+public interface IThirdConfigAdvertiserService extends IService<ThirdConfigAdvertiser> {
+
+    List<String> getAdvertiserListByAppId(Long appId);
+
+    List<JSONObject> getAdvertiserCost(Long appId, String advertiserName, String startDate, String endDate);
+}

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/server/IThirdConfigService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.third.server;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.third.entity.ThirdConfig;
+
+/**
+ * @Description: 对外配置
+ * @Author: jeecg-boot
+ * @Date: 2020-08-14
+ * @Version: V1.0
+ */
+public interface IThirdConfigService extends IService<ThirdConfig> {
+
+}

+ 35 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/server/impl/ThirdConfigAdvertiserServiceImpl.java

@@ -0,0 +1,35 @@
+package org.jeecg.modules.third.server.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.third.entity.ThirdConfigAdvertiser;
+import org.jeecg.modules.third.mapper.ThirdConfigAdvertiserMapper;
+import org.jeecg.modules.third.server.IThirdConfigAdvertiserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 对外配置关联广告主
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-08-14
+ */
+@Service
+public class ThirdConfigAdvertiserServiceImpl extends ServiceImpl<ThirdConfigAdvertiserMapper, ThirdConfigAdvertiser> implements IThirdConfigAdvertiserService {
+    @Autowired
+    private ThirdConfigAdvertiserMapper thirdConfigAdvertiserMapper;
+
+
+    @Override
+    public List<String> getAdvertiserListByAppId(Long appId) {
+        return thirdConfigAdvertiserMapper.getAdvertiserListByAppId(appId);
+    }
+
+    @Override
+    public List<JSONObject> getAdvertiserCost(Long appId, String advertiserName, String startDate, String endDate) {
+        return thirdConfigAdvertiserMapper.getAdvertiserCost(appId, advertiserName, startDate, endDate);
+    }
+}

+ 19 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/third/server/impl/ThirdConfigServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.third.server.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.third.entity.ThirdConfig;
+import org.jeecg.modules.third.mapper.ThirdConfigMapper;
+import org.jeecg.modules.third.server.IThirdConfigService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 对外配置
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-08-14
+ */
+@Service
+public class ThirdConfigServiceImpl extends ServiceImpl<ThirdConfigMapper, ThirdConfig> implements IThirdConfigService {
+
+}

+ 2 - 9
jeecg-boot-module-system/src/main/java/org/jeecg/modules/wps/util/upload/oss/WpsOSSUtil.java

@@ -8,6 +8,7 @@ import com.aliyun.oss.HttpMethod;
 import com.aliyun.oss.OSS;
 import com.aliyun.oss.OSSClient;
 import com.aliyun.oss.model.*;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
@@ -20,6 +21,7 @@ import java.net.URL;
 import java.util.*;
 
 @Component
+@Slf4j
 public class WpsOSSUtil {
     public static final String fileUrlPrefix = "https://ctop-media.oss-cn-beijing.aliyuncs.com/";
     /**
@@ -136,7 +138,6 @@ public class WpsOSSUtil {
             client.shutdown();
         } catch (Exception e) {
             e.printStackTrace();
-            System.out.println("上传阿里云OSS服务器异常:"+e.getMessage());
         }
         return resultStr;
     }
@@ -157,7 +158,6 @@ public class WpsOSSUtil {
             // 指定上传的内容类型。内容类型决定浏览器将以什么形式、什么编码读取文件。如果没有指定则根据文件的扩展名生成,如果没有扩展名则为默认值application/octet-stream。
             meta.setContentType(getContentType(fileName));
             // 设置内容被下载时的名称。
-            System.out.println("downNmme"+downName);
             meta.setContentDisposition("filename="+downName);
             // 设置内容被下载时网页的缓存行为。
             meta.setCacheControl("no-cache");
@@ -199,7 +199,6 @@ public class WpsOSSUtil {
         map.put("response-content-disposition","attachment");
         request.setQueryParameter(map);
         URL url=ossClient.generatePresignedUrl(request);
-        System.out.println(url);
         return url;
     }
 
@@ -219,8 +218,6 @@ public class WpsOSSUtil {
      * */
     public static void deleteBucket(OSSClient client, String bucketName){
         client.deleteBucket(bucketName);
-        System.out.println("删除Bucket成功:"+bucketName);
-        //  logger.info("删除" + bucketName + "Bucket成功");
     }
 
     /**
@@ -250,8 +247,6 @@ public class WpsOSSUtil {
             resultStr = putResult.getETag();
         } catch (Exception e) {
             e.printStackTrace();
-            System.out.println("上传阿里云OSS服务器异常:"+e.getMessage());
-            //LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);
         }
         return resultStr;
     }
@@ -351,7 +346,6 @@ public class WpsOSSUtil {
             client.shutdown();
         } catch (Exception e) {
             e.printStackTrace();
-            System.out.println("上传阿里云OSS服务器异常:"+e.getMessage());
         }
         return resultStr;
     }
@@ -377,7 +371,6 @@ public class WpsOSSUtil {
         OSSClient client =  getOSSClient();
         client.deleteObject(bucketName, diskName + key);
         client.shutdown();
-        System.out.println("删除" + bucketName + "下的文件" + diskName + key + "成功");
     }
 
     /**

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

@@ -197,6 +197,8 @@ jeecg:
     webapp: D://webapp
     video-upload: D://upFiles//video//
     image-upload: D://upFiles//image//
+    kuaishou-agent-image: D://temp.png
+    kuaishou-account-captcha-image: D://captcha.png
     chrome-driver: D://chromedriver.exe
     csv-upload: D://upFiles//csv//
     report-history: D://report//history//

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

@@ -170,6 +170,8 @@ jeecg:
     webapp: /data/webapp
     video-upload: /data/upload/video/
     image-upload: /data/upload/image/
+    kuaishou-agent-image: /data/upload/image/temp.png
+    kuaishou-account-captcha-image: /data/upload/image/captcha.png
     chrome-driver: /usr/bin/chromedriver
     csv-upload: /data/upload/csv/
     bak-database-file: /data/data/bak/

+ 2 - 0
jeecg-boot-module-system/src/main/resources/application-prod2.yml

@@ -162,6 +162,8 @@ jeecg:
     webapp: /data/webapp
     video-upload: /data/upload/video/
     image-upload: /data/upload/image/
+    kuaishou-agent-image: /data/upload/image/temp.png
+    kuaishou-account-captcha-image: /data/upload/image/captcha.png
     chrome-driver: /usr/bin/chromedriver
     csv-upload: /data/upload/csv/
     bak-database-file: /data/data/bak/

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

@@ -91,11 +91,6 @@ spring:
         filters: stat,slf4j
         # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
         connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
-#      datasource:
-#        master:
-#          url: jdbc:mysql://139.186.27.96:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
-#          username: hcst
-#          password: test@20190531
       datasource:
         master:
           url: jdbc:mysql://39.106.184.70/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
@@ -163,6 +158,8 @@ jeecg:
     webapp: /data/webapp
     video-upload: /data/upload/video/
     image-upload: /data/upload/image/
+    kuaishou-agent-image: D://temp.png
+    kuaishou-account-captcha-image: D://captcha.png
     chrome-driver: D://chromedriver.exe
     csv-upload: /data/upload/csv/
     report-history: /data/report/history/

+ 2 - 0
jeecg-boot-module-system/src/main/resources/application-wps.yml

@@ -157,6 +157,8 @@ jeecg:
     webapp: /mnt/webapp
     video-upload: /mnt/upload/video/
     image-upload: /mnt/upload/image/
+    kuaishou-agent-image: D://temp.png
+    kuaishou-account-captcha-image: D://captcha.png
     chrome-driver: D://chromedriver.exe
     csv-upload: /mnt/upload/csv/
     bak-database-file: /mnt/data/bak/

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

@@ -1,10 +1,18 @@
 package org.jeecg;
 
+import cn.com.ctop.common.module.entity.BindAccountLogin;
 import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.entity.UserAllocation;
+import cn.com.ctop.common.module.service.IBindAccountLoginService;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
-import cn.com.ctop.toutiao.modules.material.service.IByteDanceCampaignService;
-import cn.com.ctop.toutiao.modules.material.service.IByteDanceCreativeService;
+import cn.com.ctop.common.module.service.IUserAllocationService;
+import cn.com.ctop.common.module.utils.CtopAdConstant;
+import cn.com.ctop.kuaishou.modules.graphql.service.IKuaishouWebInterfaceService;
+import cn.com.ctop.kuaishou.modules.report.service.IKuaiShouDailyAgentService;
+import cn.com.ctop.kuaishou.modules.report.service.IKuaishouReportDailyAgentService;
 import cn.com.ctop.toutiao.modules.report.service.IReportService;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.util.DateUtils;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -12,28 +20,105 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
 @RunWith(SpringRunner.class)
 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
 @ActiveProfiles("wps")
+@Slf4j
 public class SampleTest {
     @Autowired
     private ICtopOauthTokenService oauthTokenService;
     @Autowired
+    private IKuaishouReportDailyAgentService kuaishouReportDailyAgentService;
+    @Autowired
+    private IKuaiShouDailyAgentService kuaiShouDailyAgentService;
+    @Autowired
     private IReportService reportService;
-	@Autowired
-    private IByteDanceCreativeService creativeService;
-	@Autowired
-    private IByteDanceCampaignService campaignService;
 
     @Test
     public void loadBytedanceCreativeData() {
-        CtopOauthToken token = oauthTokenService.getTokenByAccountId(1649600126891015L);
-        creativeService.getAdvertiserCreative(token,null,null);
+     //   refreshTokenService.getKuaiShouAgentRefresh();
+        String nowDate = DateUtils.getNowDate("yyyy-MM-dd");
+        String yesterday = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, -1);
+        kuaiShouDailyAgentService.getAgentReportByPage(nowDate, nowDate);
+    }
+
+    @Autowired
+    private IBindAccountLoginService bindAccountLoginService;
+    @Autowired
+    private IKuaishouWebInterfaceService kuaishouWebInterfaceService;
+    @Test
+    public void loadKuaishouCookie(){
+        List<BindAccountLogin> list = bindAccountLoginService.getListByParams(CtopAdConstant.PLATFORM_TYPE_KUAISHOU_PY,1);
+        if(list!=null&&!list.isEmpty()){
+            for (BindAccountLogin login:list) {
+                if(null==login.getCookie()||"".equals(login.getCookie().trim())){
+                    kuaishouWebInterfaceService.getkuaishouWebLoginCookie(login);
+                }
+            }
+        }
+    }
+    static ExecutorService executorService = null;
+    //线程计数器
+    static CountDownLatch countDownLatch = null;
+
+    @Test
+    public void deleteKuaishouComment(){
+        Long start = System.currentTimeMillis();
+        List<BindAccountLogin>loginList = bindAccountLoginService.getListByParams(CtopAdConstant.PLATFORM_TYPE_KUAISHOU_PY,1);
+        if (loginList != null && !loginList.isEmpty()) {
+            executorService = Executors.newFixedThreadPool(5);
+            countDownLatch = new CountDownLatch(loginList.size());
+            loginList.forEach(login -> executorService.submit(()->{
+                try {
+                    kuaishouWebInterfaceService.deleteAllComment(new HashMap<>(),login);
+                }catch (Exception e){
+                    log.error(e.getMessage(),e);
+                }finally {
+                    countDownLatch.countDown();
+                }
+            }));
+            try {
+                countDownLatch.await();
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            Long end = System.currentTimeMillis();
+            log.info("快手删评论所用时长:{}毫秒",end-start);
+        }
+    }
+    @Autowired
+    private IUserAllocationService allocationService;
+    @Test
+    public void testLoadBytedanceData() {
+        List<UserAllocation>allocations = allocationService.getByParams(435L,null,0);
+        for (UserAllocation allocation:allocations) {
+            for(int i=2;i<10;i++){
+                CtopOauthToken token = oauthTokenService.getTokenByAccountId(allocation.getAccountId());
+                Date getDate = DateUtils.addDay(new Date(),-i);
+                reportService.getAdvertiserReport(token,getDate,getDate,CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
+            }
+        }
     }
 
     @Test
-    public void testLoadBytedanceData(){
-        CtopOauthToken token = oauthTokenService.getTokenByAccountId(1673731621920840L);
-       campaignService.getAdvertiserCampaign(token,null,null);
+    public void loadKuaishouAgentData() {
+//        for(int i=0;i<20;i++){
+//            String currentDate = DateUtils.formatDate(DateUtils.addDay(new Date(),-i));
+//            kuaishouReportDailyAgentService.getReport(currentDate,DateUtils.getNowDate("yyyy-MM-dd"));
+//        }
+//
+//        int currentPage = 1;
+//        while (kuaishouReportDailyAgentService.getAccount(currentPage)){
+//            currentPage++;
+//        }
+        String currentDate = DateUtils.formatDate(DateUtils.addDay(new Date(),-1));
+        kuaishouReportDailyAgentService.getReport(currentDate,DateUtils.getNowDate("yyyy-MM-dd"));
     }
 }

+ 0 - 49
jeecg-boot-module-system/src/test/java/org/jeecg/SecurityToolsTest.java

@@ -1,49 +0,0 @@
-package org.jeecg;
-
-import cn.hutool.json.JSONObject;
-import org.jeecg.common.util.security.SecurityTools;
-import org.jeecg.common.util.security.entity.*;
-import org.junit.Test;
-
-public class SecurityToolsTest {
-    @Test
-    public void Test(){
-        MyKeyPair mkeyPair = SecurityTools.generateKeyPair();
-
-        JSONObject msg = new JSONObject();
-        msg.put("name", "党政辉");
-        msg.put("age", 50);
-        JSONObject identity = new JSONObject();
-        identity.put("type", "01");
-        identity.put("no", "210882165896524512");
-        msg.put("identity", identity);
-
-        // 签名加密部分
-        SecuritySignReq signReq = new SecuritySignReq();
-        // data为要加密的报文字符串
-        signReq.setData(msg.toString());
-        // 为rsa私钥
-        signReq.setPrikey(mkeyPair.getPriKey());
-        // 调用签名方法
-        SecuritySignResp sign = SecurityTools.sign(signReq);
-        // 打印出来加密数据
-        // signData为签名数据
-        // data为aes加密数据
-        // asekey为ras加密过的aeskey
-        System.out.println(new JSONObject(sign).toStringPretty());
-
-        // 验签解密部分
-        SecurityReq req = new SecurityReq();
-        //对方传过来的数据一一对应
-        req.setAesKey(sign.getAesKey());
-        req.setData(sign.getData());
-        req.setSignData(sign.getSignData());
-        //我们的公钥
-        req.setPubKey(mkeyPair.getPubKey());
-        //验签方法调用
-        SecurityResp securityResp = SecurityTools.valid(req);
-        //解密报文data为解密报文
-        //sucess 为验签成功失败标志 true代码验签成功,false代表失败
-        System.out.println(new JSONObject(securityResp).toStringPretty());
-    }
-}

+ 43 - 13
module-check/pom.xml

@@ -1,20 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
     <parent>
         <artifactId>jeecg-boot-parent</artifactId>
         <groupId>org.jeecgframework.boot</groupId>
         <version>2.0.2</version>
     </parent>
-    <groupId>com.ctop</groupId>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>cn.com.ctop</groupId>
     <artifactId>module-check</artifactId>
-    <version>0.0.1-SNAPSHOT</version>
+    <version>2.0.2</version>
+    <packaging>jar</packaging>
     <name>module-check</name>
-    <description>Data Check Jar</description>
-
     <properties>
-        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>1.7</maven.compiler.source>
+        <maven.compiler.target>1.7</maven.compiler.target>
     </properties>
 
     <dependencies>
@@ -29,15 +30,44 @@
             <artifactId>module-common</artifactId>
             <version>2.0.2</version>
         </dependency>
+        <dependency>
+            <groupId>cn.com.ctop</groupId>
+            <artifactId>module-kuaishou</artifactId>
+            <version>2.0.2</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.com.ctop</groupId>
+            <artifactId>module-toutiao</artifactId>
+            <version>2.0.2</version>
+        </dependency>
     </dependencies>
 
     <build>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-            </plugin>
-        </plugins>
+        <resources>
+            <resource>
+                <directory>lib</directory>
+                <targetPath>BOOT-INF/lib/</targetPath>
+                <includes>
+                    <include>**/*.jar</include>
+                </includes>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+                <targetPath>BOOT-INF/classes/</targetPath>
+            </resource>
+            <!-- 解决MyBatis配置文件引入问题 -->
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*.properties</include>
+                    <include>**/*.xml</include>
+                </includes>
+                <!-- 是否替换资源中的属性-->
+                <filtering>false</filtering>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+        </resources>
     </build>
-
 </project>

+ 0 - 13
module-check/src/main/java/cn/com/ctop/ModuleCheckApplication.java

@@ -1,13 +0,0 @@
-package cn.com.ctop;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class ModuleCheckApplication {
-
-    public static void main(String[] args) {
-        SpringApplication.run(ModuleCheckApplication.class, args);
-    }
-
-}

+ 4 - 6
module-check/src/main/java/cn/com/ctop/check/TestGroovy.groovy

@@ -2,19 +2,17 @@ package cn.com.ctop.check
 
 import cn.com.ctop.check.component.basic.AbstractScript
 import cn.com.ctop.common.module.service.IRefreshTokenService
-import cn.com.ctop.common.module.service.impl.RefreshTokenServiceImpl
 import org.jeecg.common.api.vo.Result
 
 class TestGroovy extends AbstractScript {
 
-   private IRefreshTokenService refreshTokenService;
+   private IRefreshTokenService refreshTokenService
 
     @Override
     Result<Object> exec() {
-        refreshTokenService=applicationContext.getBean(RefreshTokenServiceImpl.class)
-        println("开始执行Groovy脚本")
-        refreshTokenService.byteDanceRefresh();
+        println("开始执行脚本")
+        sendWeChatHandle.sendWeChatByMails("bijiequan@c-top.com.cn","执行成功")
         println("执行完成")
         return Result.ok("666")
     }
-}
+}

+ 12 - 1
module-check/src/main/java/cn/com/ctop/check/component/basic/AbstractScript.java

@@ -1,9 +1,12 @@
 package cn.com.ctop.check.component.basic;
 
 import cn.com.ctop.check.entity.CtopCheckTaskList;
-import cn.com.ctop.notice.handle.SendWeChatHandle;
+import cn.com.ctop.notice.handler.SendWeChatHandle;
 import org.springframework.context.ApplicationContext;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
 public abstract class AbstractScript implements BaseScript{
 
     protected ApplicationContext applicationContext;
@@ -12,6 +15,7 @@ public abstract class AbstractScript implements BaseScript{
 
     protected SendWeChatHandle sendWeChatHandle;
 
+    protected String todayDate;
 
     public ApplicationContext getApplicationContext() {
         return applicationContext;
@@ -34,4 +38,11 @@ public abstract class AbstractScript implements BaseScript{
     public void setSendWeChatHandle(SendWeChatHandle sendWeChatHandle) {
         this.sendWeChatHandle = sendWeChatHandle;
     }
+
+
+    public String getTodayDate() {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        return format.format(new Date());
+    }
+
 }

+ 17 - 7
module-check/src/main/java/cn/com/ctop/check/component/execute/GroovyScriptExecutor.java

@@ -2,8 +2,9 @@ package cn.com.ctop.check.component.execute;
 
 import cn.com.ctop.check.component.basic.AbstractScript;
 import cn.com.ctop.check.entity.CtopCheckTaskList;
+import cn.com.ctop.check.service.ICtopCheckTaskExecuteLogService;
 import cn.com.ctop.check.service.ICtopCheckTaskListService;
-import cn.com.ctop.notice.handle.SendWeChatHandle;
+import cn.com.ctop.notice.handler.SendWeChatHandle;
 import groovy.lang.GroovyClassLoader;
 import groovy.lang.GroovyCodeSource;
 import lombok.extern.slf4j.Slf4j;
@@ -29,6 +30,8 @@ public class GroovyScriptExecutor {
 
     private final ApplicationContext applicationContext;
 
+    private final ScriptProcessLogExecutor scriptProcessLogExecutor;
+
     private final ICtopCheckTaskListService checkTaskListService;
 
     private final SendWeChatHandle  sendWeChatHandle;
@@ -36,8 +39,10 @@ public class GroovyScriptExecutor {
     private final GroovyClassLoader classLoader;
 
     @Autowired
-    public GroovyScriptExecutor(ApplicationContext applicationContext,ICtopCheckTaskListService checkTaskListService,SendWeChatHandle  sendWeChatHandle) {
+    public GroovyScriptExecutor(ApplicationContext applicationContext,ScriptProcessLogExecutor scriptProcessLogExecutor,
+                                ICtopCheckTaskListService checkTaskListService,SendWeChatHandle  sendWeChatHandle) {
         this.applicationContext=applicationContext;
+        this.scriptProcessLogExecutor=scriptProcessLogExecutor;
         this.checkTaskListService = checkTaskListService;
         this.sendWeChatHandle=sendWeChatHandle;
         this.classLoader = new GroovyClassLoader();
@@ -48,7 +53,7 @@ public class GroovyScriptExecutor {
         if(script.getIsDelete()||!script.getExeState()){
             return Result.error(String.format("groovy script is invalid. api_name=%s", script.getApiName()));
         }else {
-            return executescriptScript(script);
+            return executeScript(script);
         }
     }
 
@@ -57,15 +62,16 @@ public class GroovyScriptExecutor {
         if (script == null) {
             return Result.error(String.format("groovy script not found. api_name=%s", apiName));
         }else {
-            return executescriptScript(script);
+            return executeScript(script);
         }
     }
 
-    private Result<Object> executescriptScript(CtopCheckTaskList taskList){
+    private Result<Object> executeScript(CtopCheckTaskList taskList){
         ClearCache();
         GroovyCodeSource groovyCodeSource = getGroovyCodeSource(taskList);
         Result<Object> response = null;
         try {
+            long start=System.currentTimeMillis();
             Class scriptClass = this.classLoader.parseClass(groovyCodeSource);
             Object instance = scriptClass.newInstance();
             if (instance instanceof AbstractScript) {
@@ -75,10 +81,14 @@ public class GroovyScriptExecutor {
                 scriptInstance.setCtopCheckTaskList(taskList);
                 response = scriptInstance.exec();
             } else {
-                log.error("script script should extends Abstractscript.");
-                response=Result.error("script script should extends Abstractscript.");
+                scriptProcessLogExecutor.insertLogExecute(taskList,start,0L,false,false);
+                log.error("script script should extends AbstractScript.");
+                response=Result.error("script script should extends AbstractScript.");
             }
+            long end=System.currentTimeMillis();
+            scriptProcessLogExecutor.insertLogExecute(taskList,start,end);
         } catch (InstantiationException | IllegalAccessException | CompilationFailedException e) {
+            scriptProcessLogExecutor.insertLogExecute(taskList,0L,0L,false,false);
             log.error("Error execute check task script. ", e);
             response=Result.error("Error execute check task script. "+e.getMessage());
         }

+ 60 - 0
module-check/src/main/java/cn/com/ctop/check/component/execute/ScriptProcessLogExecutor.java

@@ -0,0 +1,60 @@
+package cn.com.ctop.check.component.execute;
+
+import cn.com.ctop.check.entity.CtopCheckTaskExecuteLog;
+import cn.com.ctop.check.entity.CtopCheckTaskList;
+import cn.com.ctop.check.service.ICtopCheckTaskExecuteLogService;
+import cn.com.ctop.notice.handler.SendWeChatHandle;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by JQ.bi on 2020.8.18
+ */
+@Component
+public class ScriptProcessLogExecutor {
+
+    private final ICtopCheckTaskExecuteLogService checkTaskExecuteLogService;
+
+    private final SendWeChatHandle sendWeChatHandle;
+
+    @Autowired
+    public ScriptProcessLogExecutor(ICtopCheckTaskExecuteLogService checkTaskExecuteLogService, SendWeChatHandle sendWeChatHandle) {
+        this.checkTaskExecuteLogService = checkTaskExecuteLogService;
+        this.sendWeChatHandle = sendWeChatHandle;
+    }
+
+     void insertLogExecute(CtopCheckTaskList checkTaskList, Long startDate, Long endDate) {
+        boolean save = this.insertLog(checkTaskList.getId(), startDate, endDate, true, true);
+        if (!save) {
+            sendWeChat(checkTaskList.getMail());
+        }
+    }
+
+     void insertLogExecute(CtopCheckTaskList checkTaskList, Long startDate, Long endDate, boolean exeState) {
+        boolean save = this.insertLog(checkTaskList.getId(), startDate, endDate, exeState, true);
+        if (!save) {
+            sendWeChat(checkTaskList.getMail());
+        }
+    }
+
+     void insertLogExecute(CtopCheckTaskList checkTaskList, Long startDate, Long endDate, boolean exeState, boolean notify) {
+        boolean save = this.insertLog(checkTaskList.getId(), startDate, endDate, exeState, notify);
+        if (!save) {
+            sendWeChat(checkTaskList.getMail());
+        }
+    }
+
+    private boolean insertLog(int taskId, Long startDate, Long endDate, boolean exeState, boolean notify) {
+        CtopCheckTaskExecuteLog ctopCheckTaskExecuteLog = new CtopCheckTaskExecuteLog();
+        ctopCheckTaskExecuteLog.setCheckTaskId(taskId);
+        ctopCheckTaskExecuteLog.setStartDate(startDate);
+        ctopCheckTaskExecuteLog.setEndDate(endDate);
+        ctopCheckTaskExecuteLog.setExeResult(exeState);
+        ctopCheckTaskExecuteLog.setNotifyState(notify);
+        return checkTaskExecuteLogService.save(ctopCheckTaskExecuteLog);
+    }
+
+    private void sendWeChat(String mail) {
+        sendWeChatHandle.sendWeChatByMail(mail, "检查数据服务日志处理失败");
+    }
+}

+ 1 - 1
module-check/src/main/java/cn/com/ctop/check/controller/CtopCheckTaskExecuteLogController.java

@@ -19,7 +19,7 @@ import javax.servlet.http.HttpServletRequest;
 @Slf4j
 @RestController
 @RequestMapping("/ctop/checkTaskExecuteLog")
-public class CtopCheckTaskExecuteLogController {
+public class CtopCheckTaskExecuteLogCtrl {
 
    @Autowired
    private ICtopCheckTaskExecuteLogService ctopCheckTaskExecuteLogService;

+ 1 - 1
module-check/src/main/java/cn/com/ctop/check/controller/CtopCheckTaskListController.java

@@ -20,7 +20,7 @@ import javax.servlet.http.HttpServletRequest;
 @Slf4j
 @RestController
 @RequestMapping("/ctop/checkTaskList")
-public class CtopCheckTaskListController {
+public class CtopCheckTaskListCtrl {
 
     @Autowired
     private ICtopCheckTaskListService ctopCheckTaskListService;

+ 0 - 18
module-check/src/main/java/cn/com/ctop/check/script/CheckTokenExecuteStateScript.groovy

@@ -1,18 +0,0 @@
-package cn.com.ctop.check.script
-
-import cn.com.ctop.check.component.basic.AbstractScript
-import cn.com.ctop.common.module.service.ICtopOauthTokenService
-import cn.com.ctop.common.module.service.impl.CtopOauthTokenServiceImpl
-import org.jeecg.common.api.vo.Result
-
-class CheckTokenExecuteStateScript extends AbstractScript{
-
-    private ICtopOauthTokenService ctopOauthTokenService
-
-    @Override
-    Result<Object> exec() {
-        ctopOauthTokenService=applicationContext.getBean(CtopOauthTokenServiceImpl.class)
-
-        return null
-    }
-}

+ 29 - 1
module-check/src/main/java/cn/com/ctop/check/script/TestGroovyScript.java

@@ -2,12 +2,26 @@ package cn.com.ctop.check.script;
 
 import cn.com.ctop.check.component.execute.GroovyScriptExecutor;
 import cn.com.ctop.check.service.ICtopCheckTaskListService;
+import cn.com.ctop.common.module.entity.UserAllocation;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.service.ICustomDataByAccountService;
+import cn.com.ctop.common.module.service.IUserAllocationService;
+import cn.com.ctop.common.module.service.impl.CustomDataByAccountImpl;
+import cn.com.ctop.common.module.service.impl.UserAllocationServiceImpl;
+import cn.com.ctop.notice.handler.SendWeChatHandle;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.checkerframework.checker.units.qual.A;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.constant.SystemDateConstant;
+import org.jeecg.common.util.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 @RestController
 @RequestMapping("/rest/script")
 public class TestGroovyScript {
@@ -16,11 +30,25 @@ public class TestGroovyScript {
     ICtopCheckTaskListService checkTaskListService;
 
     @Autowired
+    ICtopOauthTokenService ctopOauthTokenService;
+
+    @Autowired
     GroovyScriptExecutor groovyScriptExecutor;
 
+    @Autowired
+    SendWeChatHandle sendWeChatHandle;
+
+    @Autowired
+    IUserAllocationService userAllocationService;
+
+    @Autowired
+    ICustomDataByAccountService customDataByAccountService;
+
     @GetMapping("/test")
     public Result testGroovy(){
-        groovyScriptExecutor.execute(1,"TestGroovy");
+        //groovyScriptExecutor.execute(2,"CheckAccountStatusScript");
+        //groovyScriptExecutor.execute(13,"CheckKsDataDiffScript");
+        groovyScriptExecutor.execute(14,"CheckByDataDiffScript");
         return Result.ok();
     }
 }

+ 0 - 30
module-check/src/main/java/cn/com/ctop/notice/handle/SendWeChatHandle.java

@@ -1,30 +0,0 @@
-package cn.com.ctop.notice.handle;
-
-import cn.com.ctop.common.module.mapper.MailLogMapper;
-import cn.com.ctop.common.module.service.ISendMessageService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Slf4j
-@Service
-public class SendWeChatHandle {
-
-    @Autowired
-    MailLogMapper mailLogMapper;
-    @Autowired
-    ISendMessageService sendMessageService;
-
-    public boolean SendWeChatByMail(String mail,String message){
-        boolean result=true;
-        String weChatId=mailLogMapper.getWeChatByMail(mail);
-        if(weChatId.isEmpty()){
-            log.error("mail's wechat not found. mail =%s", mail);
-            //TODO 通知管理员添加邮箱
-            result=false;
-        }else{
-            sendMessageService.sendMessage(weChatId,message);
-        }
-        return result;
-    }
-}

+ 58 - 0
module-check/src/main/java/cn/com/ctop/notice/handler/SendWeChatHandle.java

@@ -0,0 +1,58 @@
+package cn.com.ctop.notice.handler;
+
+import cn.com.ctop.common.module.mapper.MailLogMapper;
+import cn.com.ctop.common.module.utils.CorpWexinUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Slf4j
+@Service
+public class SendWeChatHandle {
+
+    @Autowired
+    MailLogMapper mailLogMapper;
+
+    public void sendWeChatByMail(String mail,String message){
+        String weChatId=mailLogMapper.getWeChatByMail(mail);
+        if(weChatId.isEmpty()){
+            log.error(String.format("mail's WeChat not found. mail =%s", mail));
+            //TODO 通知管理员添加邮箱
+        }else{
+            List<String> messageList= splitMessage(message);
+            messageList.forEach(it->CorpWexinUtils.sendMessageByWeChatId(weChatId,it));
+        }
+    }
+
+    /**
+     * 发送多人,邮箱逗号隔开
+     * @param mails
+     * @param message
+     */
+    public void sendWeChatByMails(String mails,String message){
+        List<String> mail= Arrays.asList(mails.split(","));
+        mail.forEach(m-> this.sendWeChatByMail(m,message));
+    }
+
+    /**
+     *  消息切割
+     */
+    private List<String> splitMessage(String message){
+        List<String> messageList=new ArrayList<>();
+        if(message.length()>1006){
+            int number=message.length()/1006;
+            for(int i=0;i<number;i++){
+                if(i!=number-1){
+                    messageList.add(message.substring(i*1006,(i+1)*1006-1));
+                }else {
+                    messageList.add(message.substring((i+1)*1006));
+                }
+            }
+        }
+        return messageList;
+    }
+}

+ 0 - 4
module-common/pom.xml

@@ -1,5 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
@@ -12,10 +11,7 @@
     <groupId>cn.com.ctop</groupId>
     <artifactId>module-common</artifactId>
     <version>2.0.2</version>
-
     <name>module-common</name>
-    <!-- FIXME change it to the project's website -->
-    <url>http://www.example.com</url>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

+ 34 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/ActCustomForm.java

@@ -0,0 +1,34 @@
+package cn.com.ctop.common.module.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 lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * 自定义表单信息
+ * @author jeecg-boot
+ * @date   2020-08-25
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_act_custom_form")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="ctop_act_custom_form对象", description="自定义表单信息")
+public class ActCustomForm {
+
+	@TableId(type = IdType.AUTO)
+	private Long id;
+	private String name;
+	private String text;
+	private String userId;
+	private Integer status;
+	private Date createTime;
+	private Date updateTime;
+}

+ 35 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormData.java

@@ -0,0 +1,35 @@
+package cn.com.ctop.common.module.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 lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * 自定义表单存储数据
+ * @author jeecg-boot
+ * @date   2020-08-25
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_act_form_data")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="ctop_act_form_data对象", description="自定义表单存储数据")
+public class ActFormData {
+
+	@TableId(type = IdType.AUTO)
+	private Long id;
+	private Long formId;
+	private String processId;
+	private String key;
+	private String value;
+	private Integer status;
+	private Date createTime;
+	private Date updateTime;
+}

+ 34 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormField.java

@@ -0,0 +1,34 @@
+package cn.com.ctop.common.module.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 lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * 自定义表单字段信息
+ * @author jeecg-boot
+ * @date   2020-08-25
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_act_form_field")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="ctop_act_form_field对象", description="自定义表单字段信息")
+public class ActFormField {
+
+	@TableId(type = IdType.AUTO)
+	private Long id;
+	private Long formId;
+	private String key;
+	private String type;
+	private Integer status;
+	private Date createTime;
+	private Date updateTime;
+}

+ 33 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/ActFormPorcess.java

@@ -0,0 +1,33 @@
+package cn.com.ctop.common.module.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 lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * 自定义表单关联流程信息
+ * @author jeecg-boot
+ * @date   2020-08-25
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_act_form_porcess")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="ctop_act_form_porcess对象", description="自定义表单关联流程信息")
+public class ActFormPorcess {
+
+	@TableId(type = IdType.AUTO)
+	private Long id;
+	private Long formId;
+	private String processId;
+	private Integer status;
+	private Date createTime;
+	private Date updateTime;
+}

+ 126 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/Advertiser.java

@@ -0,0 +1,126 @@
+package cn.com.ctop.common.module.entity;
+
+import cn.com.ctop.common.module.annotation.Dict;
+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.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 广告主信息表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-06-11
+ */
+@Data
+@TableName("ctop_advertiser")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_advertiser对象", description = "广告主信息表")
+public class Advertiser {
+
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "主键ID")
+    private String id;
+    /**
+     * 广告主名称
+     */
+    @Excel(name = "广告主名称", width = 15)
+    @ApiModelProperty(value = "广告主名称")
+    private String name;
+    /**
+     * 行业ID
+     */
+    @Excel(name = "行业ID", width = 15)
+    @ApiModelProperty(value = "行业ID")
+    @Dict(dicCode = "id",dictTable="sys_category",dicText="name")
+    private String industryId;
+    private String industryCode;
+    /**
+     * 销售ID
+     */
+    @Excel(name = "销售ID", width = 15)
+    @ApiModelProperty(value = "销售ID")
+    @Dict(dicCode = "id",dictTable="sys_user",dicText="realname")
+    private String saleId;
+    /**
+     * 销售ID
+     */
+    @Excel(name = "广告主类别", width = 15)
+    @ApiModelProperty(value = "广告主类别")
+    private Integer advertiserType;
+
+    /**
+     * 代理商Id
+     */
+    private Long agentId;
+
+    /**
+     * 联系人姓名
+     */
+    @Excel(name = "联系人姓名", width = 15)
+    @ApiModelProperty(value = "联系人姓名")
+    private String contact;
+    /**
+     * 联系人手机
+     */
+    @Excel(name = "联系人手机", width = 15)
+    @ApiModelProperty(value = "联系人手机")
+    private String mobile;
+    /**
+     * 联系人邮箱
+     */
+    @Excel(name = "联系人邮箱", width = 15)
+    @ApiModelProperty(value = "联系人邮箱")
+    private String email;
+    /**
+     * 创建人
+     */
+    @Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 修改人
+     */
+    @Excel(name = "修改人", width = 15)
+    @ApiModelProperty(value = "修改人")
+    private String updateBy;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+    private String userId;
+
+    private String companyId;
+
+    @TableField(exist = false)
+    private String saleName;
+
+
+}

+ 95 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/OauthAgentToken.java

@@ -0,0 +1,95 @@
+package cn.com.ctop.common.module.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 代理商token
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-08-18
+ */
+@Data
+@TableName("ctop_oauth_agent_token")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_oauth_agent_token对象", description = "代理商token")
+public class OauthAgentToken {
+
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "主键ID")
+    private String id;
+    /**
+     * 媒体ID(外部广告平台类型,快手/头条/抖音等)
+     */
+    @Excel(name = "媒体ID(外部广告平台类型,快手/头条/抖音等)", width = 15)
+    @ApiModelProperty(value = "媒体ID(外部广告平台类型,快手/头条/抖音等)")
+    private String mediaId;
+
+    private Long agentId;
+    /**
+     * 访问令牌
+     */
+    @Excel(name = "访问令牌", width = 15)
+    @ApiModelProperty(value = "访问令牌")
+    private String accessToken;
+    /**
+     * 访问令牌有效期
+     */
+    @Excel(name = "访问令牌有效期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "访问令牌有效期")
+    private Date accessTokenExpiresIn;
+    /**
+     * 刷新令牌
+     */
+    @Excel(name = "刷新令牌", width = 15)
+    @ApiModelProperty(value = "刷新令牌")
+    private String refreshToken;
+    /**
+     * 刷新令牌有效期
+     */
+    @Excel(name = "刷新令牌有效期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "刷新令牌有效期")
+    private Date refreshTokenExpiresIn;
+    /**
+     * 代理商类型 0:三方代理商 1:本代理商
+     */
+    @Excel(name = "代理商类型 0:三方代理商 1:本代理商", width = 15)
+    @ApiModelProperty(value = "代理商类型 0:三方代理商 1:本代理商")
+    private Integer agentType;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}

+ 44 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/Product.java

@@ -0,0 +1,44 @@
+package cn.com.ctop.common.module.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 产品
+ */
+@Data
+public class Product {
+    /**
+     * id
+     */
+    private Long id;
+    /**
+     * 产品名称
+     */
+    private String productName;
+    /**
+     * 广告主id
+     */
+    private String advertiserId;
+
+    private String advertiserName;
+
+    /**
+     * 创建人
+     */
+    private String createUserId;
+
+    /**
+     * 媒体类型
+     */
+    private String mediaId;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    private Date updateTime;
+
+}

+ 40 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/TagInfo.java

@@ -0,0 +1,40 @@
+package cn.com.ctop.common.module.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 java.util.Date;
+
+/**
+ * 标签信息
+ * @author jeecg-boot
+ * @date   2020-08-26
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_tag_info")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="ctop_tag_info对象", description="标签信息")
+public class TagInfo {
+
+	/**id*/
+	@TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+	private Long id;
+	private Long parentId;
+	private String tagName;
+	private Integer tagOrder;
+	private String description;
+	private String tagCode;
+	private Integer status;
+	private Integer delFlag;
+	private Date createTime;
+	private Date updateTime;
+}

+ 0 - 9
module-common/src/main/java/cn/com/ctop/common/module/file/FileTypeJudge.java

@@ -79,7 +79,6 @@ public class FileTypeJudge {
 
 
        for (FileType type : fileTypes) {
-    	   System.out.println(type.getValue());
            if (fileHead.startsWith(type.getValue())) {
                return type;
            }
@@ -137,12 +136,4 @@ public class FileTypeJudge {
        }
        return type;
    }
-
-/*   public static void main(String args[]) throws Exception {
-       // System.out.println(FileTypeJudge.getType(new FileInputStream("")));
-       for (FileType type : FileType.values()) {
-           System.out.print(type + "\t");
-       }
-   }
-   */
 }

+ 14 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/ActCustomFormMapper.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.common.module.mapper;
+
+import cn.com.ctop.common.module.entity.ActCustomForm;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 自定义表单信息
+ * @author: jeecg-boot
+ * @date:   2020-08-25
+ * @cersion: V1.0
+ */
+public interface ActCustomFormMapper extends BaseMapper<ActCustomForm> {
+
+}

+ 14 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormDataMapper.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.common.module.mapper;
+
+import cn.com.ctop.common.module.entity.ActFormData;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 自定义表单存储数据
+ * @author: jeecg-boot
+ * @date:   2020-08-25
+ * @cersion: V1.0
+ */
+public interface ActFormDataMapper extends BaseMapper<ActFormData> {
+
+}

+ 14 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormFieldMapper.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.common.module.mapper;
+
+import cn.com.ctop.common.module.entity.ActFormField;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 自定义表单字段信息
+ * @author: jeecg-boot
+ * @date:   2020-08-25
+ * @cersion: V1.0
+ */
+public interface ActFormFieldMapper extends BaseMapper<ActFormField> {
+
+}

+ 14 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/ActFormPorcessMapper.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.common.module.mapper;
+
+import cn.com.ctop.common.module.entity.ActFormPorcess;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 自定义表单关联流程信息
+ * @author: jeecg-boot
+ * @date:   2020-08-25
+ * @cersion: V1.0
+ */
+public interface ActFormPorcessMapper extends BaseMapper<ActFormPorcess> {
+
+}

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

@@ -31,6 +31,8 @@ public interface CtopOauthTokenMapper extends BaseMapper<CtopOauthToken> {
 
     List<CtopOauthToken> selectKuaiShouToken();
 
+    List<CtopOauthToken> selectKuaiShouTokenBefore();
+
     List<CtopOauthToken> selectToutiaoToken();
 
     CtopOauthToken getAccessTokenByAccountIdAndMediaId(@Param("mediaId") Integer mediaId, @Param("accountId") Long accountId);

+ 26 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/CustomDataByAccountMapper.java

@@ -0,0 +1,26 @@
+package cn.com.ctop.common.module.mapper;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.ibatis.annotations.Param;
+
+public interface CustomDataByAccountMapper {
+
+    //快手查询广告组日报数据
+    JSONObject queryKsGroupData(@Param("accountId") Long accountId,@Param("date") String date);
+
+    //快手查询广告计划日报数据
+    JSONObject queryKsCampaignData(@Param("accountId") Long accountId,@Param("date") String date);
+
+    //快手查询账户日报数据
+    JSONObject queryKsAccountData(@Param("accountId") Long accountId,@Param("date") String date);
+
+    //头条查询广告组日报数据
+    JSONObject queryByCampaignData(@Param("accountId") Long accountId,@Param("date") String date);
+
+    //头条查询广告计划日报数据
+    JSONObject queryByPlanData(@Param("accountId") Long accountId,@Param("date") String date);
+
+    //头条查询账户日报数据
+    JSONObject queryByAccountData(@Param("accountId") Long accountId,@Param("date") String date);
+
+}

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


Некоторые файлы не были показаны из-за большого количества измененных файлов