Browse Source

添加eureca,以及fegin配置,拆分log系统

syh 5 năm trước cách đây
mục cha
commit
3fbf837f82
41 tập tin đã thay đổi với 935 bổ sung133 xóa
  1. 27 0
      jeecg-boot-module-system/pom.xml
  2. 6 4
      jeecg-boot-module-system/src/main/java/org/jeecg/JeecgApplication.java
  3. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java
  4. 9 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CrawlerController.java
  5. 3 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/test/controller/JeecgOrderDmainController.java
  6. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/test/controller/JeecgOrderMainController.java
  7. 11 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/fegin/LogService.java
  8. 2 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/performanceappraisal/controller/OptimizerRoleInfoController.java
  9. 25 25
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java
  10. 21 21
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementSendController.java
  11. 19 19
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserAgentController.java
  12. 7 1
      jeecg-boot-module-system/src/main/resources/application.yml
  13. 118 0
      log-server/.mvn/wrapper/MavenWrapperDownloader.java
  14. BIN
      log-server/.mvn/wrapper/maven-wrapper.jar
  15. 2 0
      log-server/.mvn/wrapper/maven-wrapper.properties
  16. 66 0
      log-server/pom.xml
  17. 13 0
      log-server/src/main/java/cn/com/ctop/logserver/LogServerApplication.java
  18. 17 0
      log-server/src/main/java/cn/com/ctop/logserver/controller/LogController.java
  19. 11 0
      log-server/src/main/resources/application.yml
  20. 13 0
      log-server/src/test/java/cn/com/ctop/logserver/LogServerApplicationTests.java
  21. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/CtopAdConstant.java
  22. 3 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/StatusCode.java
  23. 118 0
      moudule-eureca/.mvn/wrapper/MavenWrapperDownloader.java
  24. BIN
      moudule-eureca/.mvn/wrapper/maven-wrapper.jar
  25. 2 0
      moudule-eureca/.mvn/wrapper/maven-wrapper.properties
  26. 62 0
      moudule-eureca/pom.xml
  27. 15 0
      moudule-eureca/src/main/java/cn/com/ctop/eureca/server/ServerApplication.java
  28. 14 0
      moudule-eureca/src/main/resources/application.yml
  29. 13 0
      moudule-eureca/src/test/java/cn/com/ctop/eureca/server/ServerApplicationTests.java
  30. 6 4
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/controller/PerformanceOptimizerController.java
  31. 9 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/entity/OptimizerConfig.java
  32. 1 1
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IOptimizerConfigService.java
  33. 1 1
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IOptimizerRoleInfoService.java
  34. 1 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IPerformanceConfigService.java
  35. 2 2
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IPerformanceOptimizerService.java
  36. 6 2
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/OptimizerConfigServiceImpl.java
  37. 3 3
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/OptimizerRoleInfoServiceImpl.java
  38. 15 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/PerformanceConfigServiceImpl.java
  39. 193 39
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/PerformanceOptimizerServiceImpl.java
  40. 96 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/vo/UserPerformanceDetailVO.java
  41. 1 0
      pom.xml

+ 27 - 0
jeecg-boot-module-system/pom.xml

@@ -11,6 +11,11 @@
         <version>2.0.2</version>
     </parent>
 
+    <properties>
+        <java.version>1.8</java.version>
+        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
+    </properties>
+
     <repositories>
         <repository>
             <id>aliyun</id>
@@ -36,6 +41,16 @@
     </repositories>
 
     <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+
         <!-- rabbitmq 依赖jar包-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -121,6 +136,18 @@
         </dependency>
     </dependencies>
 
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-dependencies</artifactId>
+                <version>${spring-cloud.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
     <build>
         <plugins>
             <plugin>

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

@@ -4,7 +4,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.web.servlet.MultipartConfigFactory;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
@@ -13,7 +15,6 @@ import org.springframework.core.env.Environment;
 import org.springframework.web.client.RestTemplate;
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
-import javax.servlet.MultipartConfigElement;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 
@@ -23,8 +24,9 @@ import java.net.UnknownHostException;
 @ComponentScan(basePackages = {"cn.com.ctop", "org.jeecg"})
 @EnableAutoConfiguration
 @Configuration
-
-
+@EnableEurekaClient
+@EnableDiscoveryClient
+@EnableFeignClients
 public class JeecgApplication {
     public static void main(String[] args) throws UnknownHostException {
         ConfigurableApplicationContext application = SpringApplication.run(JeecgApplication.class, args);

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

@@ -73,7 +73,7 @@ public class ShiroConfig {
 		filterChainDefinitionMap.put("/ctop/bytedanceAreaInfo/**", "anon");
 		filterChainDefinitionMap.put("/ctop/bytedanceInterestCategory/**", "anon");
 		filterChainDefinitionMap.put("/template/creative/words/get", "anon");
-        filterChainDefinitionMap.put("/appium/crawler/startJob", "anon");
+		filterChainDefinitionMap.put("/appium/crawler/*", "anon");
 
 		//优化师相关
 		//filterChainDefinitionMap.put("/ctop/performanceOptimizer/detail", "anon");

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

@@ -2,11 +2,9 @@ package org.jeecg.modules.ctop.controller;
 
 import org.jeecg.modules.ctop.service.ICrawlerService;
 import org.jeecg.modules.ctop.vo.KuaishouAppiumJobVO;
+import org.jeecg.modules.fegin.LogService;
 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 org.springframework.web.bind.annotation.*;
 
 import java.util.Map;
 
@@ -15,9 +13,16 @@ import java.util.Map;
 public class CrawlerController {
     @Autowired
     private ICrawlerService crawlerService;
+    @Autowired
+    private LogService logService;
 
     @PostMapping("startJob")
     public Map<String, Object> runTask(@RequestBody KuaishouAppiumJobVO jobVO) {
         return crawlerService.startJob(jobVO);
     }
+
+    @GetMapping("log")
+    public String home(String name) {
+        return logService.home(name);
+    }
 }

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

@@ -32,7 +32,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 
 /**
- * @Title: Controller
+ * @Title: controller
  * @Description: 订单模拟
  * @Author: ZhiLin
  * @Date: 2019-02-20
@@ -322,7 +322,7 @@ public class JeecgOrderDmainController {
         }
         return result;
     }
-//===========================以下是机票的相关API====================================	
+//===========================以下是机票的相关API====================================
 
     /**
      * 添加
@@ -422,4 +422,4 @@ public class JeecgOrderDmainController {
         return result;
     }
 
-}
+}

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

@@ -33,7 +33,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * @Title: Controller
+ * @Title: controller
  * @Description: 订单
  * @Author: jeecg-boot
  * @Date:2019-02-15

+ 11 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/fegin/LogService.java

@@ -0,0 +1,11 @@
+package org.jeecg.modules.fegin;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@FeignClient(name = "log-service")
+public interface LogService {
+    @GetMapping("hi")
+    String home(@RequestParam(value = "name") String name);
+}

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/performanceappraisal/controller/OptimizerRoleInfoController.java

@@ -175,7 +175,7 @@ public class OptimizerRoleInfoController {
      * 获取优化师经理的统计数据
      */
     @GetMapping("manager/detail")
-    public Map<String, Object> managerDetail(Integer appType) {
-        return optimizerRoleInfoService.getmanagerDetail(appType);
+    public Map<String, Object> managerDetail(@RequestParam(name = "orgCode", defaultValue = "A01") String orgCode, @RequestParam(name = "appType", defaultValue = "2") String appType) {
+        return optimizerRoleInfoService.getManagerDetail(appType, orgCode);
     }
 }

+ 25 - 25
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java

@@ -48,7 +48,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 
 /**
- * @Title: Controller
+ * @Title: controller
  * @Description: 系统通告表
  * @Author: jeecg-boot
  * @Date: 2019-01-02
@@ -99,8 +99,8 @@ public class SysAnnouncementController {
 		result.setResult(pageList);
 		return result;
 	}
-	
-	/**
+
+    /**
 	  *   添加
 	 * @param sysAnnouncement
 	 * @return
@@ -120,8 +120,8 @@ public class SysAnnouncementController {
 		}
 		return result;
 	}
-	
-	/**
+
+    /**
 	  *  编辑
 	 * @param sysAnnouncement
 	 * @return
@@ -139,11 +139,11 @@ public class SysAnnouncementController {
 				result.success("修改成功!");
 			}
 		}
-		
-		return result;
+
+        return result;
 	}
-	
-	/**
+
+    /**
 	  *   通过id删除
 	 * @param id
 	 * @return
@@ -161,11 +161,11 @@ public class SysAnnouncementController {
 				result.success("删除成功!");
 			}
 		}
-		
-		return result;
+
+        return result;
 	}
-	
-	/**
+
+    /**
 	  *  批量删除
 	 * @param ids
 	 * @return
@@ -186,8 +186,8 @@ public class SysAnnouncementController {
 		}
 		return result;
 	}
-	
-	/**
+
+    /**
 	  * 通过id查询
 	 * @param id
 	 * @return
@@ -204,8 +204,8 @@ public class SysAnnouncementController {
 		}
 		return result;
 	}
-	
-	/**
+
+    /**
 	 *	 更新发布操作
 	 * @param id
 	 * @return
@@ -227,11 +227,11 @@ public class SysAnnouncementController {
 				result.success("该系统通知发布成功");
 			}
 		}
-		
-		return result;
+
+        return result;
 	}
-	
-	/**
+
+    /**
 	 *	 更新撤销操作
 	 * @param id
 	 * @return
@@ -251,11 +251,11 @@ public class SysAnnouncementController {
 				result.success("该系统通知撤销成功");
 			}
 		}
-		
-		return result;
+
+        return result;
 	}
-	
-	/**
+
+    /**
 	 * @功能:补充用户数据,并返回系统消息
 	 * @return
 	 */

+ 21 - 21
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementSendController.java

@@ -33,7 +33,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 
  /**
- * @Title: Controller
+  * @Title: controller
  * @Description: 用户通告阅读标记表
  * @Author: jeecg-boot
  * @Date:  2019-02-21
@@ -45,8 +45,8 @@ import lombok.extern.slf4j.Slf4j;
 public class SysAnnouncementSendController {
 	@Autowired
 	private ISysAnnouncementSendService sysAnnouncementSendService;
-	
-	/**
+
+     /**
 	  * 分页列表查询
 	 * @param sysAnnouncementSend
 	 * @param pageNo
@@ -81,8 +81,8 @@ public class SysAnnouncementSendController {
 		result.setResult(pageList);
 		return result;
 	}
-	
-	/**
+
+     /**
 	  *   添加
 	 * @param sysAnnouncementSend
 	 * @return
@@ -99,8 +99,8 @@ public class SysAnnouncementSendController {
 		}
 		return result;
 	}
-	
-	/**
+
+     /**
 	  *  编辑
 	 * @param sysAnnouncementSend
 	 * @return
@@ -118,11 +118,11 @@ public class SysAnnouncementSendController {
 				result.success("修改成功!");
 			}
 		}
-		
-		return result;
+
+        return result;
 	}
-	
-	/**
+
+     /**
 	  *   通过id删除
 	 * @param id
 	 * @return
@@ -139,11 +139,11 @@ public class SysAnnouncementSendController {
 				result.success("删除成功!");
 			}
 		}
-		
-		return result;
+
+        return result;
 	}
-	
-	/**
+
+     /**
 	  *  批量删除
 	 * @param ids
 	 * @return
@@ -159,8 +159,8 @@ public class SysAnnouncementSendController {
 		}
 		return result;
 	}
-	
-	/**
+
+     /**
 	  * 通过id查询
 	 * @param id
 	 * @return
@@ -177,8 +177,8 @@ public class SysAnnouncementSendController {
 		}
 		return result;
 	}
-	
-	/**
+
+     /**
 	 * @功能:更新用户系统消息阅读状态
 	 * @param json
 	 * @return
@@ -198,8 +198,8 @@ public class SysAnnouncementSendController {
 		result.setSuccess(true);
 		return result;
 	}
-	
-	/**
+
+     /**
 	 * @功能:获取我的消息
 	 * @return
 	 */

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

@@ -49,7 +49,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 
  /**
- * @Title: Controller
+  * @Title: controller
  * @Description: 用户代理人设置
  * @Author: jeecg-boot
  * @Date:  2019-04-17
@@ -61,8 +61,8 @@ import lombok.extern.slf4j.Slf4j;
 public class SysUserAgentController {
 	@Autowired
 	private ISysUserAgentService sysUserAgentService;
-	
-	/**
+
+     /**
 	  * 分页列表查询
 	 * @param sysUserAgent
 	 * @param pageNo
@@ -83,8 +83,8 @@ public class SysUserAgentController {
 		result.setResult(pageList);
 		return result;
 	}
-	
-	/**
+
+     /**
 	  *   添加
 	 * @param sysUserAgent
 	 * @return
@@ -101,8 +101,8 @@ public class SysUserAgentController {
 		}
 		return result;
 	}
-	
-	/**
+
+     /**
 	  *  编辑
 	 * @param sysUserAgent
 	 * @return
@@ -120,11 +120,11 @@ public class SysUserAgentController {
 				result.success("代理人设置成功!");
 			}
 		}
-		
-		return result;
+
+        return result;
 	}
-	
-	/**
+
+     /**
 	  *   通过id删除
 	 * @param id
 	 * @return
@@ -141,11 +141,11 @@ public class SysUserAgentController {
 				result.success("删除成功!");
 			}
 		}
-		
-		return result;
+
+        return result;
 	}
-	
-	/**
+
+     /**
 	  *  批量删除
 	 * @param ids
 	 * @return
@@ -161,8 +161,8 @@ public class SysUserAgentController {
 		}
 		return result;
 	}
-	
-	/**
+
+     /**
 	  * 通过id查询
 	 * @param id
 	 * @return
@@ -179,8 +179,8 @@ public class SysUserAgentController {
 		}
 		return result;
 	}
-	
-	/**
+
+     /**
 	  * 通过userName查询
 	 * @param userName
 	 * @return

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

@@ -1,9 +1,15 @@
 spring:
   profiles:
     active: @activatedProperties@
+  application:
+    name: system-web
+eureka:
+  client:
+    serviceUrl:
+      defaultZone: http://localhost:8761/eureka/
 swagger:
   production: false
   basic:
     enable: true
     username: jeecg
-    password: jeecg1314
+    password: jeecg1314

+ 118 - 0
log-server/.mvn/wrapper/MavenWrapperDownloader.java

@@ -0,0 +1,118 @@
+/*
+ * Copyright 2007-present the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.net.*;
+import java.io.*;
+import java.nio.channels.*;
+import java.util.Properties;
+
+public class MavenWrapperDownloader {
+
+    private static final String WRAPPER_VERSION = "0.5.6";
+    /**
+     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
+     */
+    private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+            + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
+
+    /**
+     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
+     * use instead of the default one.
+     */
+    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
+            ".mvn/wrapper/maven-wrapper.properties";
+
+    /**
+     * Path where the maven-wrapper.jar will be saved to.
+     */
+    private static final String MAVEN_WRAPPER_JAR_PATH =
+            ".mvn/wrapper/maven-wrapper.jar";
+
+    /**
+     * Name of the property which should be used to override the default download url for the wrapper.
+     */
+    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
+
+    public static void main(String args[]) {
+        System.out.println("- Downloader started");
+        File baseDirectory = new File(args[0]);
+        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
+
+        // If the maven-wrapper.properties exists, read it and check if it contains a custom
+        // wrapperUrl parameter.
+        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
+        String url = DEFAULT_DOWNLOAD_URL;
+        if (mavenWrapperPropertyFile.exists()) {
+            FileInputStream mavenWrapperPropertyFileInputStream = null;
+            try {
+                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
+                Properties mavenWrapperProperties = new Properties();
+                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
+                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
+            } catch (IOException e) {
+                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
+            } finally {
+                try {
+                    if (mavenWrapperPropertyFileInputStream != null) {
+                        mavenWrapperPropertyFileInputStream.close();
+                    }
+                } catch (IOException e) {
+                    // Ignore ...
+                }
+            }
+        }
+        System.out.println("- Downloading from: " + url);
+
+        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
+        if (!outputFile.getParentFile().exists()) {
+            if (!outputFile.getParentFile().mkdirs()) {
+                System.out.println(
+                        "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
+            }
+        }
+        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
+        try {
+            downloadFileFromURL(url, outputFile);
+            System.out.println("Done");
+            System.exit(0);
+        } catch (Throwable e) {
+            System.out.println("- Error downloading");
+            e.printStackTrace();
+            System.exit(1);
+        }
+    }
+
+    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
+        if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
+            String username = System.getenv("MVNW_USERNAME");
+            char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
+            Authenticator.setDefault(new Authenticator() {
+                @Override
+                protected PasswordAuthentication getPasswordAuthentication() {
+                    return new PasswordAuthentication(username, password);
+                }
+            });
+        }
+        URL website = new URL(urlString);
+        ReadableByteChannel rbc;
+        rbc = Channels.newChannel(website.openStream());
+        FileOutputStream fos = new FileOutputStream(destination);
+        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+        fos.close();
+        rbc.close();
+    }
+
+}

BIN
log-server/.mvn/wrapper/maven-wrapper.jar


+ 2 - 0
log-server/.mvn/wrapper/maven-wrapper.properties

@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar

+ 66 - 0
log-server/pom.xml

@@ -0,0 +1,66 @@
+<?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>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.2.2.RELEASE</version>
+        <relativePath/>
+    </parent>
+    <groupId>cn.com.ctop</groupId>
+    <artifactId>log-server</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>log-server</name>
+    <description>Demo project for Spring Boot</description>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.junit.vintage</groupId>
+                    <artifactId>junit-vintage-engine</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-dependencies</artifactId>
+                <version>${spring-cloud.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 13 - 0
log-server/src/main/java/cn/com/ctop/logserver/LogServerApplication.java

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

+ 17 - 0
log-server/src/main/java/cn/com/ctop/logserver/controller/LogController.java

@@ -0,0 +1,17 @@
+package cn.com.ctop.logserver.controller;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class LogController {
+    @Value("${server.port}")
+    String port;
+
+    @GetMapping("hi")
+    public String home(@RequestParam(value = "name", defaultValue = "forezp") String name) {
+        return "hi " + name + " ,i am from port:" + port;
+    }
+}

+ 11 - 0
log-server/src/main/resources/application.yml

@@ -0,0 +1,11 @@
+server:
+  port: 8762
+
+spring:
+  application:
+    name: log-service
+
+eureka:
+  client:
+    serviceUrl:
+      defaultZone: http://localhost:8761/eureka/

+ 13 - 0
log-server/src/test/java/cn/com/ctop/logserver/LogServerApplicationTests.java

@@ -0,0 +1,13 @@
+package cn.com.ctop.logserver;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class LogServerApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}

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

@@ -14,4 +14,6 @@ public class CtopAdConstant {
     public static final String BYTEDANCE_REPORT_TYPE_HOURLY = "STAT_TIME_GRANULARITY_HOURLY";
 
 
+    public static final String CTOP_ORGCODE_NORTH_CHINA_PREFIX = "A01";
+    public static final String CTOP_ORGCODE_EAST_CHINA_PREFIX = "A02";
 }

+ 3 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/StatusCode.java

@@ -32,6 +32,7 @@ public enum StatusCode {
     ACCOUNT_HAS_NO_AUTHORIZE("该用户尚未进行授权", -209, false),
     FILE_HAS_UPLOAD("文件已经上传过", 0, false),
     COMMON_SERVER_ERROR("服务器内部错误", -102, false),
+    CTOP_HAS_NO_PERFORMANCE_STATISTIC_LOGIC("绩效统计逻辑尚未确定", -103, false),
     KUAISHOU_CRAWLER_APP_EXIT("快手app异常退出", -1001, false),
     KUAISHOU_CRAWLER_APP_ELEMENT_ERROR("快手元素异常", -1002, false),
     KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL("此快手元素获取不到", -1003, false),
@@ -40,6 +41,8 @@ public enum StatusCode {
     KUAISHOU_CRAWLER_APP_NO_ENABLED_DEVICE("暂无可用设备", -2001, false),
     KUAISHOU_OPTINIZER_CONFIG_IS_NULL("快手媒体优化师配置信息不全", -3001, false),
     KUAISHOU_OPTINIZER_PERSONNAL_DATA_IS_NULL("快手媒体优化师个人消耗数据不存在", -3002, false),
+    BYTEDANCE_OPTINIZER_PERSONNAL_DATA_IS_NULL("头条媒体优化师个人消耗数据不存在", -3003, false),
+    OPTINIZER_PERSONNAL_DATA_IS_NULL("优化师个人消耗数据不存在", -3004, false),
     KUAISHOU_CRAWLER_APP_SUCCESS("爬虫运行正常", 0, true),
     KUAISHOU_CRAWLER_APP_TASK_END("爬虫任务运行结束", 1, true),
     KUAISHOU_CRAWLER_APP_JOB_StART("任务开始执行开始", 0, true),

+ 118 - 0
moudule-eureca/.mvn/wrapper/MavenWrapperDownloader.java

@@ -0,0 +1,118 @@
+/*
+ * Copyright 2007-present the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.net.*;
+import java.io.*;
+import java.nio.channels.*;
+import java.util.Properties;
+
+public class MavenWrapperDownloader {
+
+    private static final String WRAPPER_VERSION = "0.5.6";
+    /**
+     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
+     */
+    private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+            + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
+
+    /**
+     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
+     * use instead of the default one.
+     */
+    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
+            ".mvn/wrapper/maven-wrapper.properties";
+
+    /**
+     * Path where the maven-wrapper.jar will be saved to.
+     */
+    private static final String MAVEN_WRAPPER_JAR_PATH =
+            ".mvn/wrapper/maven-wrapper.jar";
+
+    /**
+     * Name of the property which should be used to override the default download url for the wrapper.
+     */
+    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
+
+    public static void main(String args[]) {
+        System.out.println("- Downloader started");
+        File baseDirectory = new File(args[0]);
+        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
+
+        // If the maven-wrapper.properties exists, read it and check if it contains a custom
+        // wrapperUrl parameter.
+        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
+        String url = DEFAULT_DOWNLOAD_URL;
+        if (mavenWrapperPropertyFile.exists()) {
+            FileInputStream mavenWrapperPropertyFileInputStream = null;
+            try {
+                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
+                Properties mavenWrapperProperties = new Properties();
+                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
+                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
+            } catch (IOException e) {
+                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
+            } finally {
+                try {
+                    if (mavenWrapperPropertyFileInputStream != null) {
+                        mavenWrapperPropertyFileInputStream.close();
+                    }
+                } catch (IOException e) {
+                    // Ignore ...
+                }
+            }
+        }
+        System.out.println("- Downloading from: " + url);
+
+        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
+        if (!outputFile.getParentFile().exists()) {
+            if (!outputFile.getParentFile().mkdirs()) {
+                System.out.println(
+                        "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
+            }
+        }
+        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
+        try {
+            downloadFileFromURL(url, outputFile);
+            System.out.println("Done");
+            System.exit(0);
+        } catch (Throwable e) {
+            System.out.println("- Error downloading");
+            e.printStackTrace();
+            System.exit(1);
+        }
+    }
+
+    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
+        if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
+            String username = System.getenv("MVNW_USERNAME");
+            char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
+            Authenticator.setDefault(new Authenticator() {
+                @Override
+                protected PasswordAuthentication getPasswordAuthentication() {
+                    return new PasswordAuthentication(username, password);
+                }
+            });
+        }
+        URL website = new URL(urlString);
+        ReadableByteChannel rbc;
+        rbc = Channels.newChannel(website.openStream());
+        FileOutputStream fos = new FileOutputStream(destination);
+        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+        fos.close();
+        rbc.close();
+    }
+
+}

BIN
moudule-eureca/.mvn/wrapper/maven-wrapper.jar


+ 2 - 0
moudule-eureca/.mvn/wrapper/maven-wrapper.properties

@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar

+ 62 - 0
moudule-eureca/pom.xml

@@ -0,0 +1,62 @@
+<?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>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.2.2.RELEASE</version>
+        <relativePath/>
+    </parent>
+    <groupId>cn.com.ctop.eureca</groupId>
+    <artifactId>server</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>server</name>
+    <description>Demo project for Spring Boot</description>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.junit.vintage</groupId>
+                    <artifactId>junit-vintage-engine</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-dependencies</artifactId>
+                <version>${spring-cloud.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 15 - 0
moudule-eureca/src/main/java/cn/com/ctop/eureca/server/ServerApplication.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.eureca.server;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
+
+@SpringBootApplication
+@EnableEurekaServer
+public class ServerApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(ServerApplication.class, args);
+    }
+
+}

+ 14 - 0
moudule-eureca/src/main/resources/application.yml

@@ -0,0 +1,14 @@
+server:
+  port: 8761
+
+eureka:
+  instance:
+    hostname: localhost
+  client:
+    registerWithEureka: false
+    fetchRegistry: false
+    serviceUrl:
+      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
+spring:
+  application:
+    name: eurka-server

+ 13 - 0
moudule-eureca/src/test/java/cn/com/ctop/eureca/server/ServerApplicationTests.java

@@ -0,0 +1,13 @@
+package cn.com.ctop.eureca.server;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class ServerApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}

+ 6 - 4
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/controller/PerformanceOptimizerController.java

@@ -273,8 +273,9 @@ public class PerformanceOptimizerController {
     @ResponseBody
     public Map<String, Object> getRankingList(@RequestParam(name = "mediaType", defaultValue = "2") String mediaType,
                                               @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
-                                              @RequestParam(name = "pageSize", defaultValue = "3") Integer pageSize) {
-        return performanceOptimizerService.getRankingList(mediaType, pageNo, pageSize);
+                                              @RequestParam(name = "pageSize", defaultValue = "3") Integer pageSize,
+                                              @RequestParam(name = "orgCode", defaultValue = "A01") String orgCode) {
+        return performanceOptimizerService.getRankingList(mediaType, pageNo, pageSize, orgCode);
     }
 
     /**
@@ -286,8 +287,9 @@ public class PerformanceOptimizerController {
      */
     @GetMapping(value = "/manager/detail")
     @ResponseBody
-    public Map<String, Object> getManagerPerformanceDetail(HttpServletRequest req, @RequestParam(name = "mediaType", defaultValue = "2") String mediaType) {
-        return performanceOptimizerService.getManagerPerformanceDetail(mediaType);
+    public Map<String, Object> getManagerPerformanceDetail(@RequestParam(name = "orgCode", defaultValue = "A01") String orgCode,
+                                                           @RequestParam(name = "mediaType", defaultValue = "2") String mediaType) {
+        return performanceOptimizerService.getManagerPerformanceDetail(mediaType, orgCode);
     }
 
 }

+ 9 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/entity/OptimizerConfig.java

@@ -10,6 +10,7 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import org.jeecgframework.poi.excel.annotation.Excel;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -68,6 +69,14 @@ public class OptimizerConfig {
     @Excel(name = "是否有效", width = 15)
     @ApiModelProperty(value = "是否有效")
     private Integer enabled;
+
+    @Excel(name = "个人总任务", width = 15)
+    @ApiModelProperty(value = "个人总任务")
+    private BigDecimal totalPersonalTask;
+
+    @Excel(name = "机构代码", width = 15)
+    @ApiModelProperty(value = "机构代码")
+    private String orgCode;
     /**
      * createTime
      */

+ 1 - 1
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IOptimizerConfigService.java

@@ -11,5 +11,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @date 2019-12-13
  */
 public interface IOptimizerConfigService extends IService<OptimizerConfig> {
-    OptimizerConfig getEnabledConfigByMediaType(String mediaType);
+    OptimizerConfig getEnabledConfigByMediaType(String mediaType, String orgCode);
 }

+ 1 - 1
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IOptimizerRoleInfoService.java

@@ -14,5 +14,5 @@ import java.util.Map;
  */
 public interface IOptimizerRoleInfoService extends IService<OptimizerRoleInfo> {
 
-    Map<String, Object> getmanagerDetail(Integer appType);
+    Map<String, Object> getManagerDetail(String appType, String orgCode);
 }

+ 1 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IPerformanceConfigService.java

@@ -12,4 +12,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IPerformanceConfigService extends IService<PerformanceConfig> {
 
+    PerformanceConfig getNowConfig();
 }

+ 2 - 2
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IPerformanceOptimizerService.java

@@ -16,7 +16,7 @@ public interface IPerformanceOptimizerService extends IService<PerformanceOptimi
 
     Map<String, Object> getPerformanceDetail(String mediaType, Integer pageNo, Integer pageSize);
 
-    Map<String, Object> getRankingList(String mediaType, Integer pageNo, Integer pageSize);
+    Map<String, Object> getRankingList(String mediaType, Integer pageNo, Integer pageSize, String orgCode);
 
-    Map<String, Object> getManagerPerformanceDetail(String mediaType);
+    Map<String, Object> getManagerPerformanceDetail(String mediaType, String orgCode);
 }

+ 6 - 2
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/OptimizerConfigServiceImpl.java

@@ -18,9 +18,13 @@ import org.springframework.stereotype.Service;
 public class OptimizerConfigServiceImpl extends ServiceImpl<OptimizerConfigMapper, OptimizerConfig> implements IOptimizerConfigService {
 
     @Override
-    public OptimizerConfig getEnabledConfigByMediaType(String mediaType) {
+    public OptimizerConfig getEnabledConfigByMediaType(String mediaType, String orgCode) {
         QueryWrapper<OptimizerConfig> queryWrapper = new QueryWrapper();
-        queryWrapper.eq("enabled", "1").eq("app_type", mediaType).orderByDesc("id").last(" limit 1");
+        queryWrapper.eq("enabled", "1")
+                .eq("app_type", mediaType)
+                .eq("org_code", orgCode)
+                .orderByDesc("id")
+                .last(" limit 1");
         return this.getOne(queryWrapper);
     }
 }

+ 3 - 3
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/OptimizerRoleInfoServiceImpl.java

@@ -31,12 +31,12 @@ public class OptimizerRoleInfoServiceImpl extends ServiceImpl<OptimizerRoleInfoM
     private IOptimizerConfigService optimizerConfigService;
 
     @Override
-    public Map<String, Object> getmanagerDetail(Integer appType) {
+    public Map<String, Object> getManagerDetail(String appType, String orgCode) {
         Map<String, Object> result = new HashMap<>();
         try {
             //1:查询媒体任务
-            OptimizerCostDetailVO totalCostVo = performanceService.getOptimizerTotalCost(appType + "");
-            OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType(appType + "");
+            OptimizerCostDetailVO totalCostVo = performanceService.getOptimizerTotalCost(appType);
+            OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType(appType, orgCode);
             //查询经理所属人员任务完成信息列表
             result = performanceService.getMemberPerformanceByUserId(config, totalCostVo);
             ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());

+ 15 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/PerformanceConfigServiceImpl.java

@@ -3,9 +3,13 @@ package cn.com.ctop.performanceappraisal.service.impl;
 import cn.com.ctop.performanceappraisal.entity.PerformanceConfig;
 import cn.com.ctop.performanceappraisal.mapper.PerformanceConfigMapper;
 import cn.com.ctop.performanceappraisal.service.IPerformanceConfigService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.common.util.DateUtils;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+
 /**
  * 绩效配置文件表
  *
@@ -16,4 +20,15 @@ import org.springframework.stereotype.Service;
 @Service
 public class PerformanceConfigServiceImpl extends ServiceImpl<PerformanceConfigMapper, PerformanceConfig> implements IPerformanceConfigService {
 
+    @Override
+    public PerformanceConfig getNowConfig() {
+        Integer year = DateUtils.getYear(new Date());
+        Integer quarter = DateUtils.getQuarter(new Date());
+        QueryWrapper<PerformanceConfig> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("year", year)
+                .eq("quarter", quarter)
+                .orderByDesc("id")
+                .last("limit 1");
+        return this.getOne(queryWrapper);
+    }
 }

+ 193 - 39
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/PerformanceOptimizerServiceImpl.java

@@ -1,15 +1,18 @@
 package cn.com.ctop.performanceappraisal.service.impl;
 
+import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.common.module.utils.ResultMapUtils;
 import cn.com.ctop.common.module.utils.StatusCode;
 import cn.com.ctop.performanceappraisal.entity.OptimizerConfig;
+import cn.com.ctop.performanceappraisal.entity.PerformanceConfig;
 import cn.com.ctop.performanceappraisal.entity.PerformanceOptimizer;
 import cn.com.ctop.performanceappraisal.mapper.PerformanceOptimizerMapper;
 import cn.com.ctop.performanceappraisal.service.IOptimizerConfigService;
+import cn.com.ctop.performanceappraisal.service.IPerformanceConfigService;
 import cn.com.ctop.performanceappraisal.service.IPerformanceOptimizerService;
 import cn.com.ctop.performanceappraisal.service.IPerformanceService;
 import cn.com.ctop.performanceappraisal.vo.OptimizerCostDetailVO;
-import com.alibaba.fastjson.JSONObject;
+import cn.com.ctop.performanceappraisal.vo.UserPerformanceDetailVO;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.system.vo.LoginUser;
@@ -44,42 +47,180 @@ public class PerformanceOptimizerServiceImpl extends ServiceImpl<PerformanceOpti
         //查询当前登录人信息
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String orgCode = sysUser.getOrgCode();
-        if () {
+        if (orgCode.startsWith(CtopAdConstant.CTOP_ORGCODE_NORTH_CHINA_PREFIX)) {
+            //华北
+            //查询当前媒体配置信息
+            OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType(mediaType, CtopAdConstant.CTOP_ORGCODE_NORTH_CHINA_PREFIX);
+            if (null == config) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_OPTINIZER_CONFIG_IS_NULL.getCode());
+                return result;
+            }
+            //:查询当前用户截止到目前当前季度的消耗统计数据
+            List<OptimizerCostDetailVO> vos = performanceService.getOptimizerTotalCostDetailGroupByUserId(mediaType, sysUser.getId(), startIndex, pageSize);
+            if (null == vos || vos.size() <= 0) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_OPTINIZER_PERSONNAL_DATA_IS_NULL.getCode());
+                return result;
+            }
+            //2: 查询媒体季度任务完成情况
+            UserPerformanceDetailVO performanceDetailVO = getPerformanceDetailVO(mediaType, vos.get(0), config);
+            result.put("userDetail", performanceDetailVO);
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
+            return result;
+        } else if (orgCode.startsWith(CtopAdConstant.CTOP_ORGCODE_EAST_CHINA_PREFIX)) {
+            //华东
+            //查询当前媒体配置信息
+            OptimizerConfig kuaishouConfig = optimizerConfigService.getEnabledConfigByMediaType(CtopAdConstant.PLATFORM_TYPE_KUAISHOU, CtopAdConstant.CTOP_ORGCODE_EAST_CHINA_PREFIX);
+            OptimizerConfig bytedanceConfig = optimizerConfigService.getEnabledConfigByMediaType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE, CtopAdConstant.CTOP_ORGCODE_EAST_CHINA_PREFIX);
+            if (null == kuaishouConfig || null == bytedanceConfig) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_OPTINIZER_CONFIG_IS_NULL.getCode());
+                return result;
+            }
+            //:查询当前用户截止到目前当前季度的消耗统计数据
+            List<OptimizerCostDetailVO> kuaishouVos = performanceService.getOptimizerTotalCostDetailGroupByUserId(CtopAdConstant.PLATFORM_TYPE_KUAISHOU, sysUser.getId(), startIndex, pageSize);
+            List<OptimizerCostDetailVO> bytedanceVos = performanceService.getOptimizerTotalCostDetailGroupByUserId(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE, sysUser.getId(), startIndex, pageSize);
+            boolean hasNoCost = (null == kuaishouVos || kuaishouVos.size() <= 0) && (null == bytedanceVos || bytedanceVos.size() <= 0);
+            if (hasNoCost) {
+                ResultMapUtils.setResultMap(result, StatusCode.OPTINIZER_PERSONNAL_DATA_IS_NULL.getCode());
+                return result;
+            }
+            if (null == kuaishouVos || kuaishouVos.size() <= 0) {
+                //快手消耗为0
+                //2: 查询头条媒体季度任务完成情况
+                UserPerformanceDetailVO performanceDetailVO = getPerformanceDetailVO(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE, bytedanceVos.get(0), bytedanceConfig);
+                result.put("userDetail", performanceDetailVO);
+                ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
+                return result;
+            }
+            if (null == bytedanceVos || bytedanceVos.size() <= 0) {
+                //头条消耗为0
+                //2: 查询快手媒体季度任务完成情况
+                UserPerformanceDetailVO performanceDetailVO = getPerformanceDetailVO(CtopAdConstant.PLATFORM_TYPE_KUAISHOU, kuaishouVos.get(0), kuaishouConfig);
+                result.put("userDetail", performanceDetailVO);
+                ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
+                return result;
+            }
+            //快手+头条
+            UserPerformanceDetailVO performanceDetailVO = getMultiPerformanceDetailVO(kuaishouVos.get(0), kuaishouConfig, bytedanceVos.get(0), bytedanceConfig);
+            result.put("userDetail", performanceDetailVO);
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
+            return result;
+        } else {
+            ResultMapUtils.setResultMap(result, StatusCode.CTOP_HAS_NO_PERFORMANCE_STATISTIC_LOGIC);
+            return result;
+        }
+    }
+
+    private UserPerformanceDetailVO getMultiPerformanceDetailVO(OptimizerCostDetailVO kuaishouQuarterCostVO, OptimizerConfig kuaishouConfig, OptimizerCostDetailVO bytedanceQuarterCostVO, OptimizerConfig bytedanceConfig) {
+        //1:获取个人各渠道消耗
+        OptimizerCostDetailVO kuaishouTotalCostVo = performanceService.getOptimizerTotalCost(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
+        OptimizerCostDetailVO bytedanceTotalCostVo = performanceService.getOptimizerTotalCost(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
 
+        UserPerformanceDetailVO performanceDetailVO = new UserPerformanceDetailVO();
+        performanceDetailVO.setRealName(kuaishouTotalCostVo.getRealName());
+        //个人消耗
+        performanceDetailVO.setKuaishouPersonalCost(kuaishouTotalCostVo.getTotalCost());
+        performanceDetailVO.setBytedancePersonalCost(bytedanceTotalCostVo.getTotalCost());
+        performanceDetailVO.setTotalPersonalCost(kuaishouTotalCostVo.getTotalCost().add(bytedanceTotalCostVo.getTotalCost()).setScale(2, RoundingMode.HALF_UP));
+        //媒体消耗
+        performanceDetailVO.setKuaishouMediaCost(kuaishouQuarterCostVO.getTotalCost());
+        performanceDetailVO.setBytedanceMediaCost(bytedanceQuarterCostVO.getTotalCost());
+        performanceDetailVO.setTotalMediaCost(bytedanceQuarterCostVO.getTotalCost().add(kuaishouQuarterCostVO.getTotalCost()).setScale(2, RoundingMode.HALF_UP));
+
+        //媒体任务
+        performanceDetailVO.setKuaishouMediaTask(kuaishouConfig.getMediaTask());
+        performanceDetailVO.setBytedanceMediaTask(bytedanceConfig.getMediaTask());
+        performanceDetailVO.setTotalMediaCost(kuaishouConfig.getMediaTask().add(bytedanceConfig.getMediaTask()).setScale(2, RoundingMode.HALF_UP));
+
+        //个人任务
+        performanceDetailVO.setTotalPersonalTask(kuaishouConfig.getTotalPersonalTask());
+        performanceDetailVO.setKuaishouPersonalTask(kuaishouConfig.getPersonalTask());
+        performanceDetailVO.setBytedancePersonalTask(bytedanceConfig.getPersonalTask());
+
+        performanceDetailVO.setYear(kuaishouQuarterCostVO.getYear());
+        performanceDetailVO.setQuarter(kuaishouQuarterCostVO.getQuarter());
+
+        //快手提成
+        performanceDetailVO.setKuaishouRoyalty(getRoyalty(kuaishouConfig,
+                performanceDetailVO.getTotalPersonalCost(), performanceDetailVO.getTotalPersonalTask(),
+                performanceDetailVO.getKuaishouMediaCost(), performanceDetailVO.getKuaishouMediaTask(),
+                performanceDetailVO.getKuaishouPersonalCost()));
+        //头条提成
+        performanceDetailVO.setBytedanceRoyalty(getRoyalty(bytedanceConfig,
+                performanceDetailVO.getTotalPersonalCost(), performanceDetailVO.getTotalPersonalTask(),
+                performanceDetailVO.getBytedanceMediaCost(), performanceDetailVO.getBytedanceMediaTask(),
+                performanceDetailVO.getBytedancePersonalCost()));
+
+        //快手提成点
+        performanceDetailVO.setKuaishouRoyaltyRatio(getRoyaltyRatio(kuaishouConfig, performanceDetailVO.getTotalPersonalCost(), performanceDetailVO.getTotalPersonalTask(), performanceDetailVO.getKuaishouMediaCost(), performanceDetailVO.getKuaishouMediaTask()));
+        //头条提成点
+        performanceDetailVO.setBytedanceRoyaltyRatio(getRoyaltyRatio(bytedanceConfig, performanceDetailVO.getTotalPersonalCost(), performanceDetailVO.getTotalPersonalTask(), performanceDetailVO.getBytedanceMediaCost(), performanceDetailVO.getBytedanceMediaTask()));
+        //总提成
+        performanceDetailVO.setTotalRoyalty(performanceDetailVO.getBytedanceRoyalty().add(performanceDetailVO.getKuaishouRoyalty()).setScale(2, RoundingMode.HALF_UP));
+
+        return performanceDetailVO;
+    }
+
+    private BigDecimal getRoyalty(OptimizerConfig bytedanceConfig, BigDecimal totalPersonalCost, BigDecimal totalPersonalTask, BigDecimal bytedanceMediaCost, BigDecimal bytedanceMediaTask, BigDecimal bytedancePersonalCost) {
+        BigDecimal royalty = BigDecimal.ZERO;
+
+        //个人任务未完成
+        if (totalPersonalCost.compareTo(totalPersonalTask) < 0) {
+            return royalty;
         }
-        //查询当前媒体配置信息
-        OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType(mediaType);
-        if (null == config) {
-            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_OPTINIZER_CONFIG_IS_NULL);
-            return result;
+        //快手媒体任务未完成
+        if (bytedanceMediaCost.compareTo(bytedanceMediaTask) < 0) {
+            return bytedancePersonalCost.multiply(bytedanceConfig.getMediaTaskNoFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
         }
-        //:查询当前用户截止到目前当前季度的消耗统计数据
-        List<OptimizerCostDetailVO> vos = performanceService.getOptimizerTotalCostDetailGroupByUserId(mediaType, sysUser.getId(), startIndex, pageSize);
-        if (null == vos || vos.size() <= 0) {
-            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_OPTINIZER_PERSONNAL_DATA_IS_NULL.getCode());
-            return result;
+
+        PerformanceConfig performanceConfig = performanceConfigService.getNowConfig();
+        if (null != performanceConfig && performanceConfig.getMediaTaskRaise() == 1) {
+            //同意提高提成点
+            return bytedancePersonalCost.multiply(bytedanceConfig.getMediaTaskFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
+        } else {
+            return bytedancePersonalCost.multiply(bytedanceConfig.getMediaTaskFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
         }
-        //2: 查询媒体季度任务完成情况
-        OptimizerCostDetailVO totalCostVo = performanceService.getOptimizerTotalCost(mediaType);
-        OptimizerCostDetailVO detailVO = vos.get(0);
-        detailVO.setTotalRoyalty(getTotalRoyalty(config, detailVO, totalCostVo));
-        JSONObject detail = new JSONObject();
-        detail.put("realName", detailVO.getRealName());
-        detail.put("totalCost", detailVO.getTotalCost());
-        detail.put("totalRoyalty", detailVO.getTotalRoyalty());
-        detail.put("mediaTask", config.getMediaTask());
-        detail.put("personalTask", config.getPersonalTask());
-
-        detail.put("year", detailVO.getYear());
-        detail.put("quarter", detailVO.getQuarter());
-        detail.put("royaltyRatio", getRate(config, detailVO, totalCostVo).toString() + "‰");
-        result.put("userDetail", detail);
-        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
-        return result;
+    }
+
+    private BigDecimal getRoyaltyRatio(OptimizerConfig bytedanceConfig, BigDecimal totalPersonalCost, BigDecimal totalPersonalTask, BigDecimal mediaCost, BigDecimal mediaTask) {
+        BigDecimal royalty = BigDecimal.ZERO;
+
+        //个人任务未完成
+        if (totalPersonalCost.compareTo(totalPersonalTask) < 0) {
+            return royalty;
+        }
+        //快手媒体任务未完成
+        if (mediaCost.compareTo(mediaTask) < 0) {
+            return bytedanceConfig.getMediaTaskNoFinishRate().setScale(2, RoundingMode.HALF_UP);
+        }
+
+        PerformanceConfig performanceConfig = performanceConfigService.getNowConfig();
+        if (null != performanceConfig && performanceConfig.getMediaTaskRaise() == 1) {
+            //同意提高提成点
+            return bytedanceConfig.getMediaTaskFinishRate().setScale(2, RoundingMode.HALF_UP);
+        } else {
+            return bytedanceConfig.getMediaTaskNoFinishRate().setScale(2, RoundingMode.HALF_UP);
+        }
+    }
+
+    private UserPerformanceDetailVO getPerformanceDetailVO(String appType, OptimizerCostDetailVO kuaishouCostVo, OptimizerConfig kuaishouConfig) {
+        OptimizerCostDetailVO totalCostVo = performanceService.getOptimizerTotalCost(appType);
+        UserPerformanceDetailVO performanceDetailVO = new UserPerformanceDetailVO();
+        kuaishouCostVo.setTotalRoyalty(getTotalRoyalty(kuaishouConfig, kuaishouCostVo, totalCostVo));
+        performanceDetailVO.setRealName(kuaishouCostVo.getRealName());
+        performanceDetailVO.setTotalPersonalCost(kuaishouCostVo.getTotalCost());
+        performanceDetailVO.setTotalRoyalty(kuaishouCostVo.getTotalRoyalty());
+        performanceDetailVO.setTotalMediaTask(kuaishouConfig.getMediaTask());
+        performanceDetailVO.setTotalPersonalTask(kuaishouConfig.getPersonalTask());
+
+        performanceDetailVO.setYear(kuaishouCostVo.getYear());
+        performanceDetailVO.setQuarter(kuaishouCostVo.getQuarter());
+        performanceDetailVO.setRoyaltyRatio(getRate(kuaishouConfig, kuaishouCostVo, totalCostVo).toString() + "‰");
+        return performanceDetailVO;
     }
 
     @Override
-    public Map<String, Object> getRankingList(String mediaType, Integer pageNo, Integer pageSize) {
+    //TODO --先优先华北的逻辑
+    public Map<String, Object> getRankingList(String mediaType, Integer pageNo, Integer pageSize, String orgCode) {
         Map<String, Object> result = new HashMap<>();
         Integer startIndex = (pageNo - 1) * pageSize;
         List<OptimizerCostDetailVO> vos = performanceService.getOptimizerTotalCostDetailGroupByUserId(mediaType, null, startIndex, pageSize);
@@ -88,7 +229,7 @@ public class PerformanceOptimizerServiceImpl extends ServiceImpl<PerformanceOpti
             return result;
         }
         //查询优化师系统设置数据
-        OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType(mediaType);
+        OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType(mediaType, orgCode);
         //2: 查询媒体季度任务完成情况
         OptimizerCostDetailVO totalCostVo = performanceService.getOptimizerTotalCost(mediaType);
         //3:计算单个优化师提成总额
@@ -105,11 +246,12 @@ public class PerformanceOptimizerServiceImpl extends ServiceImpl<PerformanceOpti
     }
 
     @Override
-    public Map<String, Object> getManagerPerformanceDetail(String mediaType) {
+    //TODO --优先华北
+    public Map<String, Object> getManagerPerformanceDetail(String mediaType, String orgCode) {
         Map<String, Object> result = new HashMap<>();
         //获取经理相关信息
         //查询优化师系统设置数据
-        OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType(mediaType);
+        OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType(mediaType, orgCode);
         //2: 查询媒体季度任务完成情况
         OptimizerCostDetailVO totalCostVo = performanceService.getOptimizerTotalCost(mediaType);
         result.put("totalCost", totalCostVo.getTotalCost().toString());
@@ -124,6 +266,8 @@ public class PerformanceOptimizerServiceImpl extends ServiceImpl<PerformanceOpti
         return result;
     }
 
+    @Autowired
+    private IPerformanceConfigService performanceConfigService;
     private BigDecimal getTotalRoyalty(OptimizerConfig config, OptimizerCostDetailVO vo, OptimizerCostDetailVO quarterCost) {
         BigDecimal royalty = BigDecimal.ZERO;
         //个人总消耗
@@ -137,11 +281,15 @@ public class PerformanceOptimizerServiceImpl extends ServiceImpl<PerformanceOpti
             return royalty;
         }
         //季度任务未完成
-        if (totalCost.compareTo(mediaTask) < 0) {
+        if (quarterCost.getTotalCost().compareTo(mediaTask) < 0) {
+            return totalCost.multiply(config.getMediaTaskNoFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
+        }
+        PerformanceConfig performanceConfig = performanceConfigService.getNowConfig();
+        if (null != performanceConfig && performanceConfig.getMediaTaskRaise() == 1) {
+            return totalCost.multiply(config.getMediaTaskFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
+        } else {
             return totalCost.multiply(config.getMediaTaskNoFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
         }
-
-        return totalCost.multiply(config.getMediaTaskFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
     }
 
     private BigDecimal getRate(OptimizerConfig config, OptimizerCostDetailVO vo, OptimizerCostDetailVO quarterCost) {
@@ -154,13 +302,19 @@ public class PerformanceOptimizerServiceImpl extends ServiceImpl<PerformanceOpti
         BigDecimal mediaTask = config.getMediaTask();
         //个人任务未完成
         if (totalCost.compareTo(personalTask) < 0) {
-            return BigDecimal.ZERO;
+            return royalty;
         }
         //季度任务未完成
-        if (totalCost.compareTo(mediaTask) < 0) {
+        if (quarterCost.getTotalCost().compareTo(mediaTask) < 0) {
+            return config.getMediaTaskNoFinishRate().setScale(2, RoundingMode.HALF_UP);
+        }
+
+        PerformanceConfig performanceConfig = performanceConfigService.getNowConfig();
+        if (null != performanceConfig && performanceConfig.getMediaTaskRaise() == 1) {
+            return config.getMediaTaskFinishRate().setScale(2, RoundingMode.HALF_UP);
+        } else {
             return config.getMediaTaskNoFinishRate().setScale(2, RoundingMode.HALF_UP);
         }
 
-        return config.getMediaTaskFinishRate().setScale(2, RoundingMode.HALF_UP);
     }
 }

+ 96 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/vo/UserPerformanceDetailVO.java

@@ -0,0 +1,96 @@
+package cn.com.ctop.performanceappraisal.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+public class UserPerformanceDetailVO implements Serializable {
+    /**
+     * 姓名
+     */
+    private String realName;
+    /**
+     * 个人总消耗
+     */
+    private BigDecimal totalPersonalCost;
+    /**
+     * 快手总消耗
+     */
+    private BigDecimal kuaishouPersonalCost;
+    /**
+     * 头条总消耗
+     */
+    private BigDecimal bytedancePersonalCost;
+    /**
+     * 媒体总消耗
+     */
+    private BigDecimal totalMediaCost;
+    /**
+     * 快手媒体总消耗
+     */
+    private BigDecimal kuaishouMediaCost;
+    /**
+     * 头条总消耗
+     */
+    private BigDecimal bytedanceMediaCost;
+    /**
+     * 媒体任务
+     */
+    private BigDecimal totalMediaTask;
+    /**
+     * 快手媒体任务
+     */
+    private BigDecimal kuaishouMediaTask;
+    /**
+     * 头条媒体任务
+     */
+    private BigDecimal bytedanceMediaTask;
+    /**
+     * 个人季度任务
+     */
+    private BigDecimal totalPersonalTask;
+    /**
+     * 个人快手季度任务
+     */
+    private BigDecimal kuaishouPersonalTask;
+    /**
+     * 个人头条季度任务
+     */
+    private BigDecimal bytedancePersonalTask;
+    /**
+     * 年度
+     */
+    private String year;
+    /**
+     * 季度
+     */
+    private String quarter;
+
+
+    /**
+     * 个人提成比例
+     */
+    private String royaltyRatio;
+    /**
+     * 快手提成比例
+     */
+    private BigDecimal kuaishouRoyaltyRatio;
+    /**
+     * 头条提成比例
+     */
+    private BigDecimal bytedanceRoyaltyRatio;
+    /**
+     * 个人总绩效
+     */
+    private BigDecimal totalRoyalty;
+    /**
+     * 快手总绩效
+     */
+    private BigDecimal kuaishouRoyalty;
+    /**
+     * 头条总绩效
+     */
+    private BigDecimal bytedanceRoyalty;
+}

+ 1 - 0
pom.xml

@@ -25,6 +25,7 @@
         <module>module-ctop</module>
         <module>performance-appraisal</module>
         <module>jeecg-boot-module-system</module>
+        <module>moudule-eureca</module>
 
     </modules>