Commit 0cb77423 authored by 李良停's avatar 李良停

llt

parents
.class
.classpath
.project
.settings
/.idea/
*.jar
*.war
*.ear
*.iml
.idea_modules/
out/
build/
logs/
classes/
target/
.DS_Store
MANIFEST.MF
overlays/
.gitignore
.idea/vcs.xml
target/generated-sources/
target/readingdata-1.0-SNAPSHOT/META-INF/
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.chineseall.readingdata</groupId>
<artifactId>readingdata</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.16.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.SR4</spring-cloud.version>
<spring-version>4.3.19.RELEASE</spring-version>
<spring.version>4.3.19.RELEASE</spring.version>
<alpha-framework-version>2.0.6.0014</alpha-framework-version>
<spring-boot.version>1.5.16.RELEASE</spring-boot.version>
<mongodb.version>3.10.2</mongodb.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>cn.sh.chineseall</groupId>
<artifactId>alpha-framework-api</artifactId>
</dependency>
<dependency>
<groupId>cn.sh.chineseall</groupId>
<artifactId>alpha-framework-springboot-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>cn.sh.chineseall</groupId>
<artifactId>alpha-framework-springboot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>cn.sh.chineseall</groupId>
<artifactId>alpha-framework-dao-core</artifactId>
<version>${alpha-framework-version}</version>
</dependency>
<dependency>
<groupId>cn.sh.chineseall</groupId>
<artifactId>alpha-framework-dao-mongo</artifactId>
<version>${alpha-framework-version}</version>
</dependency>
<dependency>
<groupId>cn.sh.chineseall</groupId>
<artifactId>alpha-framework-dao-mysql</artifactId>
<version>${alpha-framework-version}</version>
</dependency>
<!--因配置外部TOMCAT 而配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>cn.sh.chineseall</groupId>
<artifactId>alpha-framework-api</artifactId>
<version>${alpha-framework-version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>cn.sh.chineseall</groupId>
<artifactId>alpha-framework-springboot-bootstrap</artifactId>
<version>${alpha-framework-version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>cn.sh.chineseall</groupId>
<artifactId>alpha-framework-core</artifactId>
<version>${alpha-framework-version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>cn.sh.chineseall</groupId>
<artifactId>alpha-framework-dao-mongo</artifactId>
<version>${alpha-framework-version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>cn.sh.chineseall</groupId>
<artifactId>alpha-framework-springboot-starter</artifactId>
<version>${alpha-framework-version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.6</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<repositories>
<repository>
<id>public</id>
<url>http://180.167.91.206:5716/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<checksumPolicy>warn</checksumPolicy>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</project>
\ No newline at end of file
package com.chineseall.readingdata;
import cn.sh.chineseall.framework.starter.annotation.AlphaFrameworkApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
@AlphaFrameworkApplication
@ComponentScan(basePackages = {"com.chineseall.readingdata"})
public class EdenAuthcenterAgentApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(EdenAuthcenterAgentApplication.class);
}
public static void main(String[] args) {
cn.sh.chineseall.framework.springboot.bootstrap.application.AlphaFrameworkSpringApplication.run(EdenAuthcenterAgentApplication.class, args);
}
}
package com.chineseall.readingdata.common.enums;
public enum BookType {
PAPER("PAPER", "纸质"),
DIGITAL("DIGITAL","数字");
private String code;
private String desc;
private BookType(String code, String desc) {
this.code = code;
this.desc = desc;
}
public String getCode() {
return this.code;
}
public String getDesc() {
return this.desc;
}
public static BookType findResultEnum(String code) {
for (BookType resultEnum : values()) {
if (resultEnum.getCode().equals(code)) {
return resultEnum;
}
}
return null;
}
}
package com.chineseall.readingdata.common.enums;
/**
* 结果枚举,作为消息信息
*/
public enum ResultEnum {
/**
* 所有失败的操作均指定为999,未知错误
*/
Error(999, "失败"),
/**
* 令牌不合法
*/
TokenUnValidate(998, "令牌不合法"),
/**
* 签名不合法
*/
SignUnValidate(997, "签名不合法"),
/**
* 签名丢失
*/
SignHeaderMiss(996, "必须传递签名、过期时间和appId"),
/**
* 签名过期
*/
SignTimeOver(995, "签名过期"),
/**
* 用户名或者密码不正确
*/
ErrorUserNameOrPassword(994, "用户名或者密码不正确"),
UserNameInvalid(9941, "用户名无效"),
PasswordIncorrect(9942, "密码不正确"),
AccountDisabled(9943, "账户已冻结"),
/**
* APPID缺失
*/
MissAppId(993, "APP_ID缺失或者不正确"),
UnSupportUserType(992,"不支持的用户类型"),
/**
* 签名时间错误
*/
DeviceLocalTimeError(991,"设备传递的CHINESEALL_SIGN_EXP错误"),
/**
* 成功
*/
Success(1, "成功"),
/**
* 数据库操作失败
*/
DBError(1015, "数据库操作错误"),
/**
* 参数不全
*/
ParamsNull(1002, "参数不全"),
/**
* 不支持的HTTP方法
*/
MethodNotSupport(1001, "不支持的HTTP方法"),
NoHandlerFoundException(1003, "请求的方法不存在"),
SaveAnnotationError(2001, "保存云笔记失败"),
SaveAttachError(2002, "保存附件信息失败"),
SaveAnnotationTagError(2003, "创建云笔记与标签关系失败"),
AnnotationNotExist(2004, "云笔记不存在"),
ShareAnnotationError(2005, "分享笔记失败"),
SaveTagError(2006, "保存标签失败"),
UpdateTagError(2007, "更新标签失败"),
DeleteTagError(2008, "删除标签失败"),
SaveFolderError(2009, "创建文件夹失败"),
FolderNotExist(2010, "文件夹不存在"),
FolderOverdue(2011, "文件夹过期"),
AnnotationIdNull(2012, "笔记id为空"),
AnnotationDeleteError(2013, "删除云笔记失败"),
ShareIdNull(2014, "分享笔记id为空"),
ShareAnnotationNotExist(2015, "分享笔记不存在"),
TagTooMuch(2016, "标签创建过多"),
RegionError(2017, "区域代码错误"),
OrgIdError(2018, "机构代码错误"),
ForbiddenRequest(4000, "不在网关放行许可内"),
ConfigAuthCodeNull(3100, "获取配置信息授权码为空"),
GetConfigError(3001, "获取配置信息失败"),
/**
* 请求数据错误
*/
DataInvalid(1500,"请求数据无效"),
ReadingDataInvalid(1501,"阅读数据无效");
private Integer code;
private String message;
private ResultEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
public Integer getCode() {
return this.code;
}
public String getMessage() {
return this.message;
}
public static ResultEnum findResultEnum(Integer code) {
for (ResultEnum resultEnum : values()) {
if (resultEnum.getCode().equals(code)) {
return resultEnum;
}
}
return null;
}
}
package com.chineseall.readingdata.common.filter;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
public class CorsFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "*");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
\ No newline at end of file
package com.chineseall.readingdata.common.utils;
import java.util.Calendar;
import java.util.Date;
public class DateUtil {
public static Date getBeginTime(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
public static Date getEndTime(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
}
package com.chineseall.readingdata.common.utils;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
public class EncodeUtil {
private static final String charset = "utf-8";
private static final String KEY_ALGORITHM = "AES";
private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
private static final String key = "ChineseAllShanghai!@#$%^&*()";
public static String encodePassword(String originPassword) {
return EncodeUtil.base64Encode(
EncodeUtil.md5(originPassword + key), "UTF-8").trim();
}
/**
* 根据指定的字符串生成密钥
* @param len 密钥长度;支持128、192、256三种长度,本项目采用128位。
*
* @return String 密钥
*/
public static String getKey(String key, int len) throws Exception {
if (len != 128 && len != 192 && len != 256)
return null;
key = EncodeUtil.md5(key);
key = key.substring(0, len / 8);
byte[] kb = key.getBytes(charset);
key = EncodeUtil.encodeBase64(kb);
return key;
}
private static Key toKey(byte[] key)
{
return new SecretKeySpec(key, KEY_ALGORITHM);
}
public static String encrypt(String data, String key) throws Exception
{
//Key k = toKey(Base64.decode(key));
Key k = toKey(EncodeUtil.decodeBase64(key).getBytes(charset));
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, k);
String content = parseByte2HexStr(Base64.encodeBase64((cipher.doFinal(data.getBytes(charset)))));
return content;
}
public static String decrypt(String data, String key) throws Exception
{
Key k = toKey(EncodeUtil.decodeBase64(key).getBytes(charset));
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, k);
String content = new String(cipher.doFinal(Base64.decodeBase64(parseHexStr2Byte(data))), charset);
return content;
}
/**将16进制转换为二进制
* @param hexStr
* @return
*/
public static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < 1)
return null;
byte[] result = new byte[hexStr.length()/2];
for (int i = 0;i< hexStr.length()/2; i++) {
int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
result[i] = (byte) (high * 16 + low);
}
return result;
}
/**将二进制转换成16进制
* @param buf
* @return
*/
public static String parseByte2HexStr(byte buf[]) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
/**
* 传入字符串,返回一个加密串
*
* @param s
* @return
*/
public static String encode(String s , String key) {
try {
byte[] encryptedData = encrypt(s , HEXStringToByte(key));
s = byteToHEXString(encryptedData);
} catch (Exception e) {
e.printStackTrace();
}
return s;
}
/**
* 传入加密串,返回解密串
*
* @param s
* @return
*/
public static String decode(String s , String key) {
try {
return decrypt(HEXStringToByte(s) , HEXStringToByte(key));
} catch (Exception e) {
}
return s;
}
/**
* 传入字符串,返回一个加密串
*
* @param s
* @return
*/
public static String encodeBase64(String s) {
byte[] binaryData = null;
try {
binaryData = s.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
return s;
}
// byte[] newbt = Base64.encodeBase64(binaryData);
return encodeBase64(binaryData);// new String(newbt);
}
public static String encodeBase64(byte[] binaryData) {
byte[] newbt = Base64.encodeBase64(binaryData);
return new String(newbt);
}
public static byte[] enBase64(byte[] binaryData) {
return Base64.encodeBase64(binaryData);
}
public static byte[] deBase64(byte[] bytes) throws IOException {
return Base64.decodeBase64(bytes);
}
public static String stringEncode(String str) {
try {
return java.net.URLEncoder.encode(str, "utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
/**
* 传入加密串,返回解密串
*
* @param s
* @return
*/
public static String decodeBase64(String s) {
try {
return decodeBase64(s.getBytes("utf-8"));
} catch (UnsupportedEncodingException e) {
return s;
}
}
public static String decodeBase64(byte[] bytes) {
byte[] oldbt = null;
String t = null;
try {
oldbt = Base64.decodeBase64(bytes);
t = new String(oldbt, "utf-8");
} catch (UnsupportedEncodingException e) {
}
return t;
}
public static String byteToHEXString(byte[] bArray) {
StringBuilder sb = new StringBuilder(100);
for (int i = 0; i < bArray.length; i++) {
String hex = Integer.toHexString(bArray[i] & 0xff);
if (hex.length() == 1) {
sb.append("0").append(hex);
} else {
sb.append(hex);
}
}
return sb.toString().toUpperCase();
}
public static byte[] HEXStringToByte(String strString) {
byte[] ret = new byte[strString.length() / 2];
for (int i = 0; i < ret.length; i++) {
ret[i] = Integer
.decode("#" + strString.substring(2 * i, 2 * i + 2))
.byteValue();
}
return ret;
}
/**
* 加密方法
*
* @param rawKeyData
* @param str
* @return
* @throws InvalidKeyException
* @throws NoSuchAlgorithmException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
* @throws NoSuchPaddingException
* @throws InvalidKeySpecException
* @throws UnsupportedEncodingException
*/
public static byte[] encrypt(String str , byte [] rawKeyData) throws InvalidKeyException,
NoSuchAlgorithmException, IllegalBlockSizeException,
BadPaddingException, NoSuchPaddingException,
InvalidKeySpecException, UnsupportedEncodingException {
// DES算法要求有一个可信任的随机数源
// SecureRandom sr = new SecureRandom();
// 从原始密匙数据创建一个DESKeySpec对象
DESKeySpec dks = new DESKeySpec(rawKeyData);
// 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance("DES");
// 用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, key);
// 现在,获取数据并加密
byte data[] = str.getBytes("utf-8");
// 正式执行加密操作
byte[] encryptedData = cipher.doFinal(data);
return encryptedData;
}
/**
* 解密方法
*
* @param rawKeyData
* @param encryptedData
* @throws IllegalBlockSizeException
* @throws BadPaddingException
* @throws InvalidKeyException
* @throws NoSuchAlgorithmException
* @throws NoSuchPaddingException
* @throws InvalidKeySpecException
* @throws UnsupportedEncodingException
*/
public static String decrypt(byte[] encryptedData , byte[] rawKeyData)
throws IllegalBlockSizeException, BadPaddingException,
InvalidKeyException, NoSuchAlgorithmException,
NoSuchPaddingException, InvalidKeySpecException,
UnsupportedEncodingException {
// DES算法要求有一个可信任的随机数源
// SecureRandom sr = new SecureRandom();
// 从原始密匙数据创建一个DESKeySpec对象
DESKeySpec dks = new DESKeySpec(rawKeyData);
// 创建一个密匙工厂,然后用它把DESKeySpec对象转换成一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(dks);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance("DES");
// 用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, key);
// 正式执行解密操作
byte decryptedData[] = cipher.doFinal(encryptedData);
return new String(decryptedData, "utf-8");
}
public String getCurrentMillyTime() {
return Long.valueOf(System.currentTimeMillis()).toString();
}
public static String md5(String content) {
return DigestUtils.md5Hex(content);
}
public static String sha(String content) {
return DigestUtils.shaHex(content);
}
public static String base64Encode(String content, String charset) {
byte[] bytes = null;
try {
bytes = Base64.encodeBase64(content.getBytes(charset), true);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return new String(bytes);
}
public static String base64Decode(String content, String charset) {
byte[] bytes = null;
try {
bytes = Base64.decodeBase64(content.getBytes(charset));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return new String(bytes);
}
}
package com.chineseall.readingdata.common.vo;
import lombok.Data;
import java.io.Serializable;
/**
* Created by yuchunlin on 2019/5/28.
*/
@Data
public class ClientItem implements Serializable{
private String clientName;
private String clientId;
private String clientSecret;
}
package com.chineseall.readingdata.common.vo;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* Created by yuchunlin on 2019/5/28.
*/
@Data
@Component
@ConfigurationProperties(prefix = "oauthclient")
public class OauthClient {
private List<ClientItem> clients;
}
package com.chineseall.readingdata.common.vo;
import cn.sh.chineseall.framework.api.MapMessage;
import com.chineseall.readingdata.common.enums.ResultEnum;
/**
* 统一消息返回,<br>
* 目前只做错误消息返回
*
* @author yuchunlin
*/
public class TechMessage<T> extends MapMessage {
public Integer getCode() {
return (Integer) this.get("code");
}
public void setCode(Integer code) {
this.set("code", code);
}
public String getMsg() {
return (String) this.get("msg");
}
public void setMsg(String msg) {
this.set("msg", msg);
}
public T getData() {
return (T) this.get("data");
}
public void setData(T data) {
if (null != data){
this.put("data", data);
}
}
public TechMessage() {
this(ResultEnum.Success);
}
public TechMessage(Integer code, String msg) {
ResultEnum resultEnum = ResultEnum.findResultEnum(code);
if (resultEnum == ResultEnum.Success){
super.setSuccess(true);
}else {
super.setSuccess(false);
}
this.setCode(code);
this.setMsg(msg);
this.setInfo(msg);
}
public TechMessage(ResultEnum result) {
this(result.getCode(), result.getMessage());
}
public TechMessage(Integer code, String msg, T data) {
this(code, msg);
this.setData(data);
}
public TechMessage(ResultEnum result, T data) {
this(result);
this.setData(data);
}
}
package com.chineseall.readingdata.controller;
import cn.sh.chineseall.framework.lang.calendar.DateUtils;
import com.alibaba.fastjson.JSON;
import com.chineseall.readingdata.common.enums.ResultEnum;
import com.chineseall.readingdata.common.utils.DateUtil;
import com.chineseall.readingdata.common.vo.ClientItem;
import com.chineseall.readingdata.common.vo.OauthClient;
import com.chineseall.readingdata.common.vo.TechMessage;
import com.chineseall.readingdata.model.DateStatData;
import com.chineseall.readingdata.model.SourceStatData;
import com.chineseall.readingdata.service.DataLogService;
import com.chineseall.readingdata.service.DataService;
import com.chineseall.readingdata.service.DateStatService;
import com.chineseall.readingdata.service.ReadingDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@RestController
@RequestMapping("stat")
public class StatController {
@Autowired
private DataLogService dataLogService;
@Autowired
private ReadingDataService readingDataService;
@Autowired
private DateStatService dateStatService;
@Autowired
private DataService dataService;
@Autowired
private OauthClient oauthClient;
@RequestMapping("index")
public TechMessage index(@RequestParam(value = "begin_date", required = false) String beginDate, @RequestParam(value = "end_date", required = false) String endDate){
Map<String, Object> data = new HashMap<>();
if(beginDate==null && endDate==null){
data.put("begin_date", DateUtils.dateToString(DateUtils.nextDay(new Date(), -6), "yyyy-MM-dd"));
data.put("end_date", DateUtils.dateToString(new Date(), "yyyy-MM-dd"));
beginDate = DateUtils.dateToString(DateUtils.nextDay(new Date(), -6), "yyyy-MM-dd");
endDate = DateUtils.dateToString(new Date(), "yyyy-MM-dd");
}
// 新增数据量
data.put("addDataCount", dateStatService.countByDate(beginDate, endDate));
// 入库数据总量
data.put("totalDataCount", dateStatService.countAll());
// 数据来源渠道数量
data.put("appCount", dateStatService.countSource());
// 调用接口次数
data.put("queryApiCount", dataLogService.countByDate(DateUtil.getBeginTime(DateUtils.stringToDate(beginDate, "yyyy-MM-dd")), DateUtil.getEndTime(DateUtils.stringToDate(endDate, "yyyy-MM-dd"))));
List<Map<String, Object>> appRanks = new ArrayList<>();
// 数据来源渠道排行
List<SourceStatData> topTen = dateStatService.queryTopTen();
Long topTenSum = topTen.stream().mapToLong(SourceStatData::getCount).sum();
topTen.forEach(vo->{
Map<String, Object> appRank1 = new HashMap<>();
appRank1.put("name", vo.getClientName());
appRank1.put("count", vo.getCount());
appRank1.put("percent", vo.getCount()/topTenSum*100);
appRanks.add(appRank1);
});
data.put("appRanks", appRanks);
List<String> sources = dateStatService.querySourceByDate(beginDate, endDate);
Map<String, ClientItem> clientItemMap = oauthClient.getClients().stream().collect(Collectors.toMap(ClientItem::getClientId, Function.identity()));
List<Map<String, Object>> dateDatas = new ArrayList<>();
for(String clientId : sources) {
Map<String, Object> source1 = new HashMap<>();
source1.put("source", clientId);
source1.put("name", clientItemMap.get(clientId).getClientName());
List<Map<String, Object>> sourceDatas = new ArrayList<>();
List<DateStatData> dateStatDataList = dateStatService.queryByTimeAndSource(beginDate, endDate, clientId);
dateStatDataList.forEach(dateStatData -> {
Map<String, Object> dateData1 = new HashMap<>();
dateData1.put("date", dateStatData.getDate());
dateData1.put("count", dateStatData.getCount());
sourceDatas.add(dateData1);
});
source1.put("data", sourceDatas);
dateDatas.add(source1);
}
data.put("dateDatas", dateDatas);
return new TechMessage(ResultEnum.Success, data);
}
private Map<String, String> getLatest7DatesMap(Date date){
Map<String, String> map = new LinkedHashMap<>();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
map.put(format.format(date), cal.get(Calendar.MONTH)+1 + "月" + (cal.get(Calendar.DAY_OF_MONTH)) + "日");
for(int i = 0; i<6 ;i++) {
cal.add(Calendar.DAY_OF_MONTH, -1);
Date newDate = cal.getTime();
map.put(format.format(newDate), cal.get(Calendar.MONTH)+1 + "月" + (cal.get(Calendar.DAY_OF_MONTH)) + "日");
}
return map;
}
}
package com.chineseall.readingdata.controller.api;
import com.alibaba.fastjson.JSON;
import com.chineseall.readingdata.common.enums.ResultEnum;
import com.chineseall.readingdata.common.vo.ClientItem;
import com.chineseall.readingdata.common.vo.OauthClient;
import com.chineseall.readingdata.common.vo.TechMessage;
import com.chineseall.readingdata.model.DataLog;
import com.chineseall.readingdata.model.ReadingData;
import com.chineseall.readingdata.service.DataLogService;
import com.chineseall.readingdata.service.DateStatService;
import com.chineseall.readingdata.service.ReadingDataService;
import com.chineseall.readingdata.common.utils.EncodeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
@RestController
@RequestMapping("api")
public class ReadingDataApi {
@Autowired
private OauthClient oauthClient;
@Autowired
private DataLogService dataLogService;
@Autowired
private ReadingDataService readingDataService;
@Autowired
private DateStatService dateStatService;
@RequestMapping(value = "save", method = RequestMethod.POST, produces = "application/json; charset=utf-8")
public TechMessage save(HttpServletRequest request, HttpServletResponse response, @RequestBody ReadingData readingData){
Map<String, ClientItem> clientItemMap = oauthClient.getClients().stream().collect(Collectors.toMap(ClientItem::getClientId, Function.identity()));
System.out.println("clientItemMap.................................."+JSON.toJSONString(clientItemMap));
String clientId = request.getHeader("CLIENT_ID");
System.out.println("clientId.................................."+clientId);
ClientItem clientItem = clientItemMap.get(clientId);
System.out.println("clientItem.................................."+JSON.toJSONString(clientItem));
if (null == clientItem) {
return new TechMessage(ResultEnum.ParamsNull);
}
String sign = request.getHeader("SIGN");
String signOrigin = clientItem.getClientId() + "$$" + clientItem.getClientSecret();
String md5Hex = EncodeUtil.md5(signOrigin);
if (!Objects.equals(sign, md5Hex)) {
return new TechMessage(ResultEnum.SignUnValidate);
}
if(readingData==null){
return new TechMessage(ResultEnum.ReadingDataInvalid);
}
if(readingData.getId()==null||readingData.getActor()==null||readingData.getVerb()==null||readingData.getObject()==null){
return new TechMessage(ResultEnum.ReadingDataInvalid);
}
// 日志
DataLog dataLog = new DataLog();
dataLog.setClientId(clientId);
dataLog.setClientName(clientItem.getClientName());
try {
readingData.setId(clientId+readingData.getId());
readingData.setClientId(clientId);
readingData.setClientName(clientItem.getClientName());
readingDataService.save(readingData);
dataLog.setSuccess(true);
dataLog.setSuccessCount(1);
dataLogService.save(dataLog);
dateStatService.addDateStat(clientId, 1l);
dateStatService.addSourceStat(clientId, 1l);
}catch (Exception e){
e.printStackTrace();
dataLog.setSuccess(false);
dataLogService.save(dataLog);
return new TechMessage(ResultEnum.Error);
}
return new TechMessage(ResultEnum.Success);
}
@RequestMapping(value = "batch/save", method = RequestMethod.POST, produces = "application/json; charset=utf-8")
public TechMessage batchSave(HttpServletRequest request, HttpServletResponse response, @RequestBody List<ReadingData> readingDatas){
Map<String, ClientItem> clientItemMap = oauthClient.getClients().stream().collect(Collectors.toMap(ClientItem::getClientId, Function.identity()));
String clientId = request.getHeader("CLIENT_ID");
ClientItem clientItem = clientItemMap.get(clientId);
if (null == clientItem) {
return new TechMessage(ResultEnum.ParamsNull);
}
String sign = request.getHeader("SIGN");
String signOrigin = clientItem.getClientId() + "$$" + clientItem.getClientSecret();
String md5Hex = EncodeUtil.md5(signOrigin);
if (!Objects.equals(sign, md5Hex)) {
return new TechMessage(ResultEnum.SignUnValidate);
}
if(readingDatas==null){
return new TechMessage(ResultEnum.ReadingDataInvalid);
}
for(ReadingData readingData : readingDatas) {
if (readingData.getId() == null || readingData.getActor() == null || readingData.getVerb() == null || readingData.getObject() == null) {
return new TechMessage(ResultEnum.ReadingDataInvalid);
}
}
// 日志
DataLog dataLog = new DataLog();
dataLog.setClientId(clientId);
dataLog.setClientName(clientItem.getClientName());
try {
for(ReadingData readingData : readingDatas) {
readingData.setId(clientId + readingData.getId());
readingData.setClientId(clientId);
readingData.setClientName(clientItem.getClientName());
readingDataService.save(readingData);
}
dataLog.setSuccess(true);
dataLog.setSuccessCount(readingDatas.size());
dataLogService.save(dataLog);
dateStatService.addDateStat(clientId, readingDatas.size()*1l);
dateStatService.addSourceStat(clientId, readingDatas.size()*1l);
}catch (Exception e){
e.printStackTrace();
dataLog.setSuccess(false);
dataLogService.save(dataLog);
return new TechMessage(ResultEnum.Error);
}
return new TechMessage(ResultEnum.Success);
}
}
package com.chineseall.readingdata.dao;
import cn.sh.chineseall.framework.dao.core.hql.Criteria;
import cn.sh.chineseall.framework.dao.core.hql.Query;
import cn.sh.chineseall.framework.dao.mongo.dao.StaticCacheDimensionDocumentMongoDao;
import com.chineseall.readingdata.model.DataLog;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.Map;
@Component
public class DataLogDao extends StaticCacheDimensionDocumentMongoDao<DataLog, String> {
public Long countByDate(Date beginDate, Date endDate){
return count(Query.query(Criteria.where("createTime").gte(beginDate).lt(endDate)));
}
}
package com.chineseall.readingdata.dao;
import cn.sh.chineseall.framework.core.repackaged.org.springframework.data.domain.Sort;
import cn.sh.chineseall.framework.dao.core.hql.Criteria;
import cn.sh.chineseall.framework.dao.core.hql.Query;
import cn.sh.chineseall.framework.dao.mongo.dao.StaticCacheDimensionDocumentMongoDao;
import com.chineseall.readingdata.model.DateStatData;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.stream.Collectors;
@Component
public class DateStatDao extends StaticCacheDimensionDocumentMongoDao<DateStatData, String> {
public List<DateStatData> queryByTimeAndSource(String beginDate, String endDate, String clientId){
return query(Query.query(Criteria.where("date").gte(beginDate).lte(endDate).and("clientId").is(clientId)).with(new Sort(Sort.Direction.ASC, "date")));
}
public DateStatData queryByDateAndClientId(String date, String clientId){
return query(Query.query(Criteria.where("date").is(date).and("clientId").is(clientId))).stream().findFirst().orElse(null);
}
public Long countByDate(String beginDate, String endDate){
return query(Query.query(Criteria.where("date").gte(beginDate).lte(endDate))).stream().mapToLong(DateStatData::getCount).sum();
}
public List<String> querySourceByDate(String beginDate, String endDate){
return query(Query.query(Criteria.where("date").gte(beginDate).lte(endDate))).stream().map(DateStatData::getClientId).distinct().collect(Collectors.toList());
}
}
package com.chineseall.readingdata.dao;
import cn.sh.chineseall.framework.dao.mysql.jdbc.dao.AlphaStaticJdbcDao;
import com.chineseall.readingdata.model.ReadingBaseInfo;
import org.springframework.stereotype.Component;
import java.util.Collection;
@Component
public class ReadingBaseInfoDao extends AlphaStaticJdbcDao<ReadingBaseInfo, String> {
@Override
protected void calculateCacheDimensions(ReadingBaseInfo readingBaseInfo, Collection<String> collection) {
}
}
package com.chineseall.readingdata.dao;
import cn.sh.chineseall.framework.core.repackaged.org.springframework.data.domain.Sort;
import cn.sh.chineseall.framework.dao.core.hql.Criteria;
import cn.sh.chineseall.framework.dao.core.hql.Query;
import cn.sh.chineseall.framework.dao.mongo.dao.StaticCacheDimensionDocumentMongoDao;
import com.chineseall.readingdata.model.ReadingData;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
@Component
public class ReadingDataDao extends StaticCacheDimensionDocumentMongoDao<ReadingData, String> {
public List<ReadingData> queryDataByTime(Date beginTime, Date endTime){
Criteria criteria = Criteria.where("createTime").gte(beginTime).lt(endTime);
return query(new Query(criteria));
}
public List<ReadingData> queryDatas(Integer begin, Integer end){
return query(new Query(Criteria.where("id").gte(begin).lt(end)).with(new Sort(Sort.Direction.ASC, "id")));
}
public Long countByTime(Date beginTime, Date endTime){
Criteria criteria = Criteria.where("createTime").gte(beginTime).lt(endTime);
return count(new Query(criteria));
}
public ReadingData queryDataByTimeFirst(Date beginTime, Date endTime){
Criteria criteria = Criteria.where("createTime").gte(beginTime).lt(endTime);
return query(new Query(criteria).with(new Sort(Sort.Direction.ASC, "createTime")).limit(1)).stream().findFirst().orElse(null);
}
public ReadingData queryDataByTimeLast(Date beginTime, Date endTime){
Criteria criteria = Criteria.where("createTime").gte(beginTime).lt(endTime);
return query(new Query(criteria).with(new Sort(Sort.Direction.DESC, "createTime")).limit(1)).stream().findFirst().orElse(null);
}
}
package com.chineseall.readingdata.dao;
import cn.sh.chineseall.framework.core.repackaged.org.springframework.data.domain.Sort;
import cn.sh.chineseall.framework.dao.core.hql.Criteria;
import cn.sh.chineseall.framework.dao.core.hql.Query;
import cn.sh.chineseall.framework.dao.mysql.jdbc.dao.AlphaStaticJdbcDao;
import com.chineseall.readingdata.model.ReadingBaseInfo;
import com.chineseall.readingdata.model.ShangtuData;
import org.springframework.stereotype.Component;
import java.util.Collection;
import java.util.List;
@Component
public class ShangtuDataDao extends AlphaStaticJdbcDao<ShangtuData, Long> {
@Override
protected void calculateCacheDimensions(ShangtuData shangtuData, Collection<String> collection) {
}
public List<ShangtuData> queryDatas(Integer begin, Integer end){
return query(new Query(Criteria.where("id").gte(begin).lt(end)).with(new Sort(Sort.Direction.ASC, "id")));
}
}
package com.chineseall.readingdata.dao;
import cn.sh.chineseall.framework.core.repackaged.org.springframework.data.domain.Sort;
import cn.sh.chineseall.framework.dao.core.hql.Criteria;
import cn.sh.chineseall.framework.dao.core.hql.Query;
import cn.sh.chineseall.framework.dao.mongo.dao.StaticCacheDimensionDocumentMongoDao;
import com.chineseall.readingdata.model.SourceStatData;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class SourceStatDao extends StaticCacheDimensionDocumentMongoDao<SourceStatData, String> {
public List<SourceStatData> queryTopTen(){
return query(Query.query(new Criteria()).with(new Sort(Sort.Direction.DESC, "count")).limit(10));
}
public SourceStatData queryByClientId(String clientId){
return query(Query.query(Criteria.where("clientId").is(clientId))).stream().findFirst().orElse(null);
}
public Long countAll(){
return query(Query.query(new Criteria())).stream().mapToLong(SourceStatData::getCount).sum();
}
public Long countSource(){
return count(Query.query(new Criteria()));
}
}
package com.chineseall.readingdata.model;
import cn.sh.chineseall.framework.dao.core.CacheDimensionDocument;
import cn.sh.chineseall.framework.dao.core.annotation.*;
import cn.sh.chineseall.framework.dao.core.annotation.mongo.DocumentCollection;
import cn.sh.chineseall.framework.dao.core.annotation.mongo.DocumentDatabase;
import lombok.Data;
import java.util.Date;
@Data
@DocumentConnection(configName = "mongo")
@DocumentDatabase(database = "xapi")
@DocumentCollection(collection = "api_log")
public class DataLog implements CacheDimensionDocument {
@DocumentId
private String id;
@DocumentCreateTimestamp
private Date createTime;
@DocumentUpdateTimestamp
private Date updateTime;
@DocumentField
private String clientId;
@DocumentField
private String clientName;
@DocumentField
private Boolean success;
@DocumentField
private Integer successCount;
@Override
public String[] generateCacheDimensions() {
return new String[0];
}
}
package com.chineseall.readingdata.model;
import cn.sh.chineseall.framework.dao.core.CacheDimensionDocument;
import cn.sh.chineseall.framework.dao.core.annotation.*;
import cn.sh.chineseall.framework.dao.core.annotation.mongo.DocumentCollection;
import cn.sh.chineseall.framework.dao.core.annotation.mongo.DocumentDatabase;
import lombok.Data;
import java.util.Date;
@Data
@DocumentConnection(configName = "mongo")
@DocumentDatabase(database = "xapi")
@DocumentCollection(collection = "date_stat")
public class DateStatData implements CacheDimensionDocument {
@DocumentId
private String id;
@DocumentCreateTimestamp
private Date createTime;
@DocumentUpdateTimestamp
private Date updateTime;
@DocumentField
private String clientId;
@DocumentField
private String clientName;
@DocumentField
private String date;
@DocumentField
private Long count;
@Override
public String[] generateCacheDimensions() {
return new String[0];
}
}
package com.chineseall.readingdata.model;
import cn.sh.chineseall.framework.dao.core.CacheDimensionDocument;
import cn.sh.chineseall.framework.dao.core.annotation.*;
import cn.sh.chineseall.framework.dao.core.annotation.mongo.DocumentCollection;
import cn.sh.chineseall.framework.dao.core.annotation.mongo.DocumentDatabase;
import cn.sh.chineseall.framework.dao.core.annotation.mysql.DocumentTable;
import lombok.Data;
import java.util.Date;
import java.util.Map;
@Data
@DocumentConnection(configName = "mysql")
@DocumentTable(table = "reading_data")
public class ReadingBaseInfo implements CacheDimensionDocument {
@DocumentId
private String id;
@DocumentField("user_id")
private String userId;
@DocumentField("real_name")
private String realName;
@DocumentField
private String birthday;
@DocumentField
private String race;
@DocumentField("student_code")
private String studentCode;
@DocumentField
private String age;
@DocumentField("sex_code")
private String sexCode;
@DocumentField("sex_name")
private String sexName;
@DocumentField("grade_code")
private String gradeCode;
@DocumentField("grade_name")
private String gradeName;
@DocumentField("stage_code")
private String stageCode;
@DocumentField("stage_name")
private String stageName;
@DocumentField("school_code")
private String schoolCode;
@DocumentField("school_name")
private String schoolName;
@DocumentField("school_addr")
private String schoolAddr;
@DocumentField("region_code")
private String regionCode;
@DocumentField("region_name")
private String regionName;
@DocumentField("verb_type")
private String verbType;
@DocumentField("verb_name")
private String verbName;
@DocumentField("lend_type_name")
private String lendTypeName;
@DocumentField("lend_type_code")
private String lendTypeCode;
@DocumentField("lend_date")
private String lendDate;
@DocumentField("lend_expired_date")
private String lendExpiredDate;
@DocumentField("lend_addr")
private String lendAddr;
@DocumentField("book_id")
private String bookId;
@DocumentField("book_type_code")
private String bookTypeCode;
@DocumentField("book_type_name")
private String bookTypeName;
@DocumentField("bar_code")
private String barCode;
@DocumentField("book_name")
private String bookName;
@DocumentField("isbn")
private String isbn;
@DocumentField("pub_date")
private String pubDate;
@DocumentField("clc_code")
private String clcCode;
@DocumentField("words_count")
private String wordsCount;
@DocumentField("page_count")
private String pageCount;
@DocumentField
private String price;
@DocumentField
private String author;
@DocumentField("pub_name")
private String pubName;
@DocumentField("pub_code")
private String pubCode;
@DocumentField("subject_code")
private String subjectCode;
@DocumentField("subject_name")
private String subjectName;
@DocumentField("client_id")
private String clientId;
@DocumentField("client_name")
private String clientName;
@DocumentField("create_time")
private Date createTime;
@DocumentField
private Date timestamp;
@Override
public String[] generateCacheDimensions() {
return new String[0];
}
}
package com.chineseall.readingdata.model;
import cn.sh.chineseall.framework.dao.core.CacheDimensionDocument;
import cn.sh.chineseall.framework.dao.core.annotation.*;
import cn.sh.chineseall.framework.dao.core.annotation.mongo.DocumentCollection;
import cn.sh.chineseall.framework.dao.core.annotation.mongo.DocumentDatabase;
import lombok.Data;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
@Data
@DocumentConnection(configName = "mongo")
@DocumentDatabase(database = "xapi")
@DocumentCollection(collection = "reading_data")
public class ReadingData implements CacheDimensionDocument {
@DocumentId
private String id;
@DocumentCreateTimestamp
private Date createTime;
@DocumentField
private Date timestamp;
@DocumentField
private Map<String, Object> actor;
@DocumentField
private Map<String, Object> verb;
@DocumentField
private Map<String, Object> object;
@DocumentField
private Boolean valid;
@DocumentField
private String clientId;
@DocumentField
private String clientName;
@Override
public String[] generateCacheDimensions() {
return new String[0];
}
}
package com.chineseall.readingdata.model;
import cn.sh.chineseall.framework.dao.core.CacheDimensionDocument;
import cn.sh.chineseall.framework.dao.core.annotation.*;
import cn.sh.chineseall.framework.dao.core.annotation.mysql.DocumentTable;
import com.chineseall.readingdata.common.enums.BookType;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
@DocumentConnection(configName = "mysql")
@DocumentTable(table = "st")
public class ShangtuData implements CacheDimensionDocument {
@DocumentId
private Long id;
@DocumentField
private String jhlx;//借还状态
@DocumentField
private String jhrq;//借还日期
@DocumentField
private String yhrq;//预还日期 只有外借才有值
@DocumentField
private String jhdd;//借还地点
@DocumentField
private String tstm;//图书条码
@DocumentField
private String sm ;//书名
@DocumentField
private String isbn;//isbn号
@DocumentField
private String zz ;//作者
@DocumentField
private String cbs ;//出版社
@DocumentField
private String cbrq;//出版日期
@DocumentField
private String flh ;//分类号 中图分类号
@DocumentField
private String ys ;//页数
@DocumentField
private String dj ;//定价
@DocumentField
private String xjh ;//学籍号
@DocumentField
private String xxdm;//学校代码
@DocumentField
private String xxmc;//学校名称
@DocumentField
private String zjlx;//
@DocumentField
private String xbm ;//性别
@DocumentField
private String csrq;//出生日期
@DocumentField
private String mz ;//民族
@DocumentField
private String gj ;//国籍
@DocumentField
private String xd ;//学段 1、小学,2、中学
@DocumentField
private String xm ;//姓名
@DocumentField
private String sfz ;//身份证
@DocumentField
private String qxdm;//区县代码
@DocumentField
private String student_id ;//学生ID
@DocumentField
private String school_id ;//学校ID
@DocumentField
private String area_id;//区县ID
@DocumentField
private String book_id;//图书ID
@DocumentField
private String auth_id;//作者ID
@DocumentField
private String pub_id ;//出版社ID
@DocumentField
private String date6_birth;//出生日期
@DocumentField
private String date6_enter ;//入学时间
@DocumentField
private String date6_lend ;//借还时间
@DocumentField
private String grade_id ;//年级ID
@DocumentField
private String age_id ;//年龄ID
@DocumentField
private String period_id ;//学段ID
@DocumentField
private String sex_id ;//性别ID
@DocumentField
private String zt_id;//性别ID
@Override
public String[] generateCacheDimensions() {
return new String[0];
}
public ReadingData toReadingData(){
ReadingData readingData = new ReadingData();
Map<String, Object> actor = new HashMap<>();
Map<String, Object> userInfo = new HashMap<>();
userInfo.put("userId", this.student_id);
userInfo.put("realName", this.xm);
userInfo.put("birthday", this.csrq);
userInfo.put("race", this.mz);
userInfo.put("studentCode", this.xjh);
userInfo.put("age", this.age_id);
Map<String, Object> sex = new HashMap<>();
sex.put("sexCode", this.xbm);
sex.put("sexName", null);
userInfo.put("sex", sex);
Map<String, Object> grade = new HashMap<>();
grade.put("gradeCode", this.grade_id);
grade.put("gradeName", null);
userInfo.put("grade", grade);
Map<String, Object> stage = new HashMap<>();
stage.put("stageCode", this.xd);
stage.put("stageName", null);
userInfo.put("stage", stage);
Map<String, Object> schoolInfo = new HashMap<>();
schoolInfo.put("schoolId", this.school_id);
schoolInfo.put("schoolCode", this.xxdm);
schoolInfo.put("schoolName", this.xxmc);
schoolInfo.put("schoolAddr", null);
userInfo.put("schoolInfo", schoolInfo);
Map<String, Object> regionInfo = new HashMap<>();
regionInfo.put("regionCode", this.qxdm);
regionInfo.put("regionName", null);
userInfo.put("regionInfo", regionInfo);
actor.put("userInfo", userInfo);
readingData.setActor(actor);
Map<String, Object> verb = new HashMap<>();
verb.put("verbType", null);
verb.put("verbName", this.jhlx);
readingData.setVerb(verb);
Map<String, Object> object = new HashMap<>();
Map<String, Object> lendInfo = new HashMap<>();
Map<String, Object> lendType = new HashMap<>();
lendType.put("typeCode", null);
lendType.put("typeName", this.jhlx);
lendInfo.put("lendType", lendType);
lendInfo.put("lendDate", this.jhrq);
lendInfo.put("lendExpiredDate", this.yhrq);
lendInfo.put("lendAddr", this.jhdd);
object.put("lendInfo", lendInfo);
Map<String, Object> bookInfo = new HashMap<>();
Map<String, Object> bookType = new HashMap<>();
bookType.put("typeCode", BookType.PAPER.getCode());
bookType.put("typeName", BookType.PAPER.getDesc());
bookInfo.put("bookType", bookType);
bookInfo.put("bookId", this.book_id);
bookInfo.put("barCode", this.tstm);
bookInfo.put("bookName", this.sm);
bookInfo.put("isbn", this.isbn);
bookInfo.put("pubDate", this.cbrq);
bookInfo.put("clcCode", this.flh);
bookInfo.put("wordsCount", null);
bookInfo.put("pageCount", this.ys);
bookInfo.put("price", this.dj);
bookInfo.put("author", this.zz);
bookInfo.put("authorId", this.auth_id);
Map<String, Object> pubInfo = new HashMap<>();
pubInfo.put("pubCode", this.pub_id);
pubInfo.put("pubName", this.cbs);
bookInfo.put("pubInfo", pubInfo);
Map<String, Object> subject = new HashMap<>();
subject.put("subjectCode", null);
subject.put("subjectName", null);
bookInfo.put("subject", subject);
object.put("bookInfo", bookInfo);
readingData.setObject(object);
return readingData;
}
}
package com.chineseall.readingdata.model;
import cn.sh.chineseall.framework.dao.core.CacheDimensionDocument;
import cn.sh.chineseall.framework.dao.core.annotation.*;
import cn.sh.chineseall.framework.dao.core.annotation.mongo.DocumentCollection;
import cn.sh.chineseall.framework.dao.core.annotation.mongo.DocumentDatabase;
import lombok.Data;
import java.util.Date;
@Data
@DocumentConnection(configName = "mongo")
@DocumentDatabase(database = "xapi")
@DocumentCollection(collection = "source_stat")
public class SourceStatData implements CacheDimensionDocument {
@DocumentId
private String id;
@DocumentCreateTimestamp
private Date createTime;
@DocumentUpdateTimestamp
private Date updateTime;
@DocumentField
private String clientId;
@DocumentField
private String clientName;
@DocumentField
private Long count;
@Override
public String[] generateCacheDimensions() {
return new String[0];
}
}
package com.chineseall.readingdata.service;
import com.chineseall.readingdata.model.DataLog;
import java.util.Date;
import java.util.Map;
public interface DataLogService {
DataLog getById(String id);
void save(DataLog dataLog);
Long countByDate(Date beginDate, Date endDate);
}
package com.chineseall.readingdata.service;
import com.chineseall.readingdata.common.vo.TechMessage;
import com.chineseall.readingdata.model.ShangtuData;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.List;
public interface DataService {
@RequestMapping(value = "/init/shangtu", method = {RequestMethod.GET})
TechMessage initShangtuData();
List<ShangtuData> queryShangtuData(Integer begin, Integer end);
}
package com.chineseall.readingdata.service;
import com.chineseall.readingdata.common.vo.TechMessage;
import com.chineseall.readingdata.model.DateStatData;
import com.chineseall.readingdata.model.SourceStatData;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Date;
import java.util.List;
public interface DateStatService {
void save(DateStatData dateStatData);
List<DateStatData> queryByTimeAndSource(String beginDate, String endDate, String clientId);
List<SourceStatData> queryTopTen();
@RequestMapping(value = "/process/stat2", method = {RequestMethod.GET})
TechMessage processDateStatDate(@RequestParam(value = "begin_time", required = false) Date beginTime, @RequestParam(value = "end_time", required = false)Date endTime);
@RequestMapping(value = "/process/stat", method = {RequestMethod.GET})
TechMessage processDateStatDate2(@RequestParam(value = "date") String date);
Long countByDate(String beginDate, String endDate);
Long countAll();
Long countSource();
List<String> querySourceByDate(String beginDate, String endDate);
void addDateStat(String clientId, Long count);
void addSourceStat(String clientId, Long count);
}
package com.chineseall.readingdata.service;
import com.chineseall.readingdata.model.ReadingData;
public interface ReadingDataService {
ReadingData getById(String id);
void save(ReadingData readingData);
}
package com.chineseall.readingdata.service.impl;
import com.chineseall.readingdata.dao.DataLogDao;
import com.chineseall.readingdata.model.DataLog;
import com.chineseall.readingdata.service.DataLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.Map;
import java.util.UUID;
@Service
public class DataLogServiceImpl implements DataLogService {
@Autowired
private DataLogDao dataLogDao;
@Override
public DataLog getById(String id) {
return dataLogDao.load(id);
}
@Override
public void save(DataLog dataLog) {
if(dataLog.getId() != null){
dataLog.setUpdateTime(new Date());
dataLogDao.replace(dataLog);
} else{
dataLog.setId(UUID.randomUUID().toString());
dataLog.setCreateTime(new Date());
dataLogDao.insert(dataLog);
}
}
@Override
public Long countByDate(Date beginDate, Date endDate) {
return dataLogDao.countByDate(beginDate, endDate);
}
}
package com.chineseall.readingdata.service.impl;
import cn.sh.chineseall.framework.lang.calendar.DateUtils;
import com.chineseall.readingdata.common.enums.ResultEnum;
import com.chineseall.readingdata.common.vo.TechMessage;
import com.chineseall.readingdata.dao.ReadingBaseInfoDao;
import com.chineseall.readingdata.dao.ReadingDataDao;
import com.chineseall.readingdata.dao.ShangtuDataDao;
import com.chineseall.readingdata.model.ReadingData;
import com.chineseall.readingdata.model.ShangtuData;
import com.chineseall.readingdata.service.DataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@RestController
public class DataServiceImpl implements DataService {
@Autowired
private ReadingDataDao readingDataDao;
@Autowired
private ShangtuDataDao shangtuDataDao;
@Override
public TechMessage initShangtuData() {
int count = 5000;
int i = 0;
System.out.println("..........开始执行跑上图数据入库"+DateUtils.dateToString(new Date()));
while(true) {
List<ShangtuData> shangtuDatas = shangtuDataDao.queryDatas(i*count, (i+1)*count);
if (shangtuDatas.size() == 0) {
break;
}
List<ReadingData> readingDatas = new ArrayList<>();
shangtuDatas.forEach(shangtuData -> {
ReadingData readingData = shangtuData.toReadingData();
readingData.setId(shangtuData.getId().toString());
readingData.setCreateTime(new Date());
Date timestamp = DateUtils.stringToDate(shangtuData.getJhrq(), "yyyyMMdd");
readingData.setTimestamp(timestamp);
readingData.setClientId("shangtuClentId");
readingData.setClientName("上图");
readingDatas.add(readingData);
});
readingDataDao.inserts(readingDatas);
i++;
}
System.out.println("..........执行跑上图数据入库结束"+DateUtils.dateToString(new Date()));
return new TechMessage(ResultEnum.Success);
}
@Override
public List<ShangtuData> queryShangtuData(Integer begin, Integer end) {
return shangtuDataDao.queryDatas(begin, end);
}
}
package com.chineseall.readingdata.service.impl;
import com.chineseall.readingdata.dao.ReadingDataDao;
import com.chineseall.readingdata.model.ReadingData;
import com.chineseall.readingdata.service.ReadingDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.UUID;
@Service
public class ReadingDataServiceImpl implements ReadingDataService {
@Autowired
private ReadingDataDao readingDataDao;
@Override
public ReadingData getById(String id) {
return readingDataDao.load(id);
}
@Override
public void save(ReadingData readingData) {
readingData.setCreateTime(new Date());
readingDataDao.insert(readingData);
}
}
server:
port: 9600
context-path: /authcenter
security:
user:
name: admin
password: 123456
ignored: /**
spring:
application:
name: eden-authcenter-agent
mvc:
static-path-pattern: /static/**
thymeleaf:
cache: false
prefix: classpath:/templates/
suffix: .html
mode: LEGACYHTML5
encoding: UTF-8
enabled: true
content-type: text/html
jackson:
property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
default-property-inclusion: non_null
serialization: true
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
http:
multipart:
max-file-size: 200MB
max-request-size: 300MB
oauthclient:
clients:
- clientName: 上海数字教材
clientId: szjcClentId
clientSecret: szjcClientSecret
- clientName: 上图
clientId: shangtuClentId
clientSecret: shangtuClientSecret
{
"mongo": [
{
"connectionName": "mongo",
"host": "192.168.1.177",
"port": 27017,
"replicaSet": "192.168.1.177:27017",
"maxConnectionsPerHost": 3000,
"threadsAllowedToBlockForConnectionMultiplier": 10,
"authentication": true,
"connectTimeout": 10000,
"password": "123456",
"userName": "xapiUser",
"dbName": "xapi"
}
],
"mysql": [
{
"name": "mysql",
"masterConfig": {
"autoCommit": true,
"connectionTimeout": 30000,
"driverClass": "com.mysql.jdbc.Driver",
"idleTimeout": 600000,
"jdbcUrl": "jdbc:mysql://192.168.1.177:3306/st2020?characterEncoding=utf8",
"maxLifetime": 1800000,
"maximumPoolSize": 20,
"minimumIdle": 4,
"password": "chineseall",
"username": "root"
}
}
]
}
\ No newline at end of file
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big,
cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl,
dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, thead, tr, th, td, header {
margin: 0;
padding: 0;
border: 0;
}
ul li{ list-style:none;}
a{ text-decoration:none; outline:none;}
h1, h2, h3, h4 {
font-weight:normal;
}
html{
font-size:14px;
font-family:"Microsoft Yahei","微软雅黑"; color:#323232;
}
ul li{ list-style:none; margin: 0; padding: 0; border: 0;}
a{ text-decoration:none; -webkit-tap-highlight-color: transparent; }
.fl{ float:left; display:inline;}
.fr{ float:right; display:inline;}
.none{ display:none;}
.clearfix{overflow:hidden;_zoom:1;}
.clear{ clear:both;}
::-webkit-input-placeholder { /* WebKit browsers */
font-size:14px;
color:#c1c1c1;
font-family:"Microsoft Yahei","微软雅黑";
}
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
font-size:14px;
color:#c1c1c1;
font-family:"Microsoft Yahei","微软雅黑";
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
font-size:14px;
color:#c1c1c1;
font-family:"Microsoft Yahei","微软雅黑";
}
:-ms-input-placeholder { /* Internet Explorer 10+ */
font-size:14px;
color:#c1c1c1;
font-family:"Microsoft Yahei","微软雅黑";
}
.top{ width:100%; height:115px; border-top:solid 5px #87abe0;}
.main{ width:1070px; height:auto; margin-left:auto; margin-right:auto;}
.bottom{ width:100%; height:239px; background:#fff url(../images/Login-b.jpg) no-repeat top center; }
.pbottom{ position:absolute; bottom:0px;}
.bottom > p{ color:#aab9c5; font-size:12px; line-height:75px; text-align:center; }
.login-c{ width:100%; height:603px; background:url(../images/login-bg.jpg) no-repeat center center;}
.login-list{ padding-top:95px; padding-left:62px; }
ul.login-list-ul{ width:442px; height:285px; padding-left:30px; padding-top:25px; background:url(../images/login-list-bg.png) no-repeat top left;}
ul.login-list-ul > li > a{ padding-left:26px; width:416px; display:block; height:35px; line-height:35px; background:url(../images/li-icon.png) no-repeat left center; color:#313131; font-size:14px; }
ul.login-list-ul > li > a:hover{ text-decoration:underline;}
.login-form{ background-color:#fbfbfb; border-radius:3px; box-shadow:0px 0px 3px rgba(0,0,0,.15); width:270px; margin-top:90px;}
.login-form-h2{ border-bottom:solid 1px #f2f2f2; text-align:center; color:#565656; font-size:16px; line-height:55px; }
.login-form-tip{ background:url(../images/tip-tline.jpg) repeat-x top left; padding-top:16px; padding-bottom:20px; width:260px; margin-left:auto; margin-right:auto; }
.login-form-tip > p{ color:#9b9b9b; font-size:12px; -webkit-transform:scale(0.95,0.95) ; *font-size:11px; line-height:1.8em;}
.login-form-tip > p > a{ color:#5c5c5b; text-decoration:underline;}
.login-jump{height:110px; padding-top:50px; padding-bottom:50px;}
dl.jump-select-dl{ width:213px; height:38px; border:solid 1px #c1c1c1; margin-left:auto; margin-right:auto;}
dl.jump-select-dl dt{ width:37px; height:28px; padding-top:5px; padding-bottom:5px; float:left; display:inline; background:url(../images/user.png) no-repeat center center;}
dl.jump-select-dl > dt >span{ display:block; width:36px; height:28px; border-right:solid 1px #c1c1c1;}
dl.jump-select-dl dd{ width:176px; height:38px; float:right; display:inline;}
select.jump-select {
width: 176px;
padding-left:15px;
padding-right:30px;
font-family:"Microsoft Yahei","微软雅黑";
font-size:14px;
color: #c1c1c1;
height:38px;
-moz-appearance:none;
appearance: none;
-webkit-appearance: none;
outline:none;
border:none;
background:url(../images/select-arrow.png) no-repeat center right;
/*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/
order: solid 1px #000;
}
.login-jump-btn{ width:215px; height:37px; margin-top:30px; margin-left:auto; margin-right:auto; }
select::-ms-expand { display: none; }
a.jump-btn{ width:135px; height:37px; display:block; background:url(../images/login-jump-btn1.jpg) no-repeat left center;}
a.help-btn{ width:65px; height:37px; display:block; background:url(../images/help-btn.jpg) no-repeat left center;}
.login-eduroam{ padding-top:65px; height:465px;}
.login-eduroam-form{ width:462px; height:465px; margin-left:auto; margin-right:auto; background-color:#fdfcfc; border-radius:3px; box-shadow:0px 0px 3px rgba(0,0,0,.15); }
.login-eduroam-form > h2{ color:#565656; font-size:18px; padding-top:12px; line-height:2em; text-align:center;}
.login-eduroam-form > h3{ width:100%; background:url(../images/line2.jpg) repeat-x left center; height:20px; text-align:center; }
.login-eduroam-form > h3 > span{color:#85b4ed; font-family:Arial; font-size:12px; -webkit-transform:scale(0.95,0.95) ; *font-size:11px; line-height:1.8em; text-transform:uppercase; background-color:#fcfcfc; display:inline-block; padding-left:10px; padding-right:10px;}
.login-eduroam-tip{background: url(../images/tip-tline.jpg) repeat-x top left; padding-top:15px; padding-bottom:15px; text-align:center;}
ul.eduroam-ul{ margin-left:60px; width:315px;}
ul.eduroam-ul > li > a{ width:300px; padding-left:15px; display:block; text-align:left; background:url(../images/eduroam-li.png) no-repeat left center; color:#959595; font-size:12px; line-height:20px;}
ul.eduroam-ul > li > a > span{ color:#729dd1; font-family:Arial; font-size:12px; -webkit-transform:scale(0.95,0.95) ; *font-size:11px; text-transform:uppercase; display:inline-block; padding-left:5px;}
.login-eduroam-line{ width:346px; height:auto; margin-left:auto; margin-right:auto; margin-top:10px;}
a.login-btn{ width:346px; height:44px; margin-bottom:25px; margin-top:35px; display:block; background:url(../images/login-btn.png) no-repeat top center; }
dl.login-eduroam-txt{ border:solid 1px #c1c1c1; height:38px; width:344px; margin-top:25px;}
dl.login-eduroam-txt dt{ width:37px; height:38px; float:left; display:inline;}
dl.login-eduroam-txt dd{ width:305px; height:28px; padding-top:5px; padding-bottom:5px; float:right; display:inline;}
dl.login-eduroam-txt-user dt{ background:url(../images/user.png) no-repeat center center;}
dl.login-eduroam-txt-password dt{ background:url(../images/password.png) no-repeat center center;}
.login-eduroam-input{ border-left:solid 1px #c1c1c1; width:284px; height:28px; padding:0px 10px; margin:0px; border-bottom:0px; border-right:0px; border-top:0px; outline:none; font-size:14px; line-height:28px; color:#565656;}
\ No newline at end of file
{
"files": {
"main.css": "./static/css/main.8fb69879.chunk.css",
"main.js": "./static/js/main.faed6ecd.chunk.js",
"main.js.map": "./static/js/main.faed6ecd.chunk.js.map",
"runtime~main.js": "./static/js/runtime~main.d653cc00.js",
"runtime~main.js.map": "./static/js/runtime~main.d653cc00.js.map",
"static/css/2.7ff19518.chunk.css": "./static/css/2.7ff19518.chunk.css",
"static/js/2.4b069f49.chunk.js": "./static/js/2.4b069f49.chunk.js",
"static/js/2.4b069f49.chunk.js.map": "./static/js/2.4b069f49.chunk.js.map",
"index.html": "./index.html",
"precache-manifest.08859a8352fb5070d8bcbb1663076631.js": "./precache-manifest.08859a8352fb5070d8bcbb1663076631.js",
"service-worker.js": "./service-worker.js",
"static/css/2.7ff19518.chunk.css.map": "./static/css/2.7ff19518.chunk.css.map",
"static/css/main.8fb69879.chunk.css.map": "./static/css/main.8fb69879.chunk.css.map",
"static/media/404.svg": "./static/media/404.1a80a0a4.svg",
"static/media/logo.svg": "./static/media/logo.d5589c12.svg"
}
}
\ No newline at end of file
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="./favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><link rel="manifest" href="./manifest.json"/><title>电教馆XAPI数据管理系</title><link href="./static/css/2.7ff19518.chunk.css" rel="stylesheet"><link href="./static/css/main.8fb69879.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(l){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],f=0,i=[];f<n.length;f++)t=n[f],p[t]&&i.push(p[t][0]),p[t]=0;for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(l[r]=o[r]);for(s&&s(e);i.length;)i.shift()();return c.push.apply(c,u||[]),a()}function a(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,o=1;o<t.length;o++){var u=t[o];0!==p[u]&&(n=!1)}n&&(c.splice(r--,1),e=f(f.s=t[0]))}return e}var t={},p={1:0},c=[];function f(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return l[e].call(r.exports,r,r.exports,f),r.l=!0,r.exports}f.m=l,f.c=t,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(r,e){if(1&e&&(r=f(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var n in r)f.d(t,n,function(e){return r[e]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="./";var r=window.webpackJsonp=window.webpackJsonp||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;a()}([])</script><script src="./static/js/2.4b069f49.chunk.js"></script><script src="./static/js/main.faed6ecd.chunk.js"></script></body></html>
\ No newline at end of file
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}
self.__precacheManifest = (self.__precacheManifest || []).concat([
{
"revision": "64626c42c4304bd9fc8b5e69ad555cf4",
"url": "./index.html"
},
{
"revision": "85eda01238d071eb7192",
"url": "./static/css/2.7ff19518.chunk.css"
},
{
"revision": "f4479b5776a894543aaa",
"url": "./static/css/main.8fb69879.chunk.css"
},
{
"revision": "85eda01238d071eb7192",
"url": "./static/js/2.4b069f49.chunk.js"
},
{
"revision": "f4479b5776a894543aaa",
"url": "./static/js/main.faed6ecd.chunk.js"
},
{
"revision": "8c97409f0ee389fe75da",
"url": "./static/js/runtime~main.d653cc00.js"
},
{
"revision": "1a80a0a4f0fb36c0051a4dcb5482abd2",
"url": "./static/media/404.1a80a0a4.svg"
},
{
"revision": "d5589c12ae7768337d2745a6cfde2c0d",
"url": "./static/media/logo.d5589c12.svg"
}
]);
\ No newline at end of file
/**
* Welcome to your Workbox-powered service worker!
*
* You'll need to register this file in your web app and you should
* disable HTTP caching for this file too.
* See https://goo.gl/nhQhGp
*
* The rest of the code is auto-generated. Please don't update this file
* directly; instead, make changes to your Workbox build configuration
* and re-run your build process.
* See https://goo.gl/2aRDsh
*/
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
importScripts(
"./precache-manifest.08859a8352fb5070d8bcbb1663076631.js"
);
self.addEventListener('message', (event) => {
if (event.data && event.data.type === 'SKIP_WAITING') {
self.skipWaiting();
}
});
workbox.core.clientsClaim();
/**
* The workboxSW.precacheAndRoute() method efficiently caches and responds to
* requests for URLs in the manifest.
* See https://goo.gl/S9QRab
*/
self.__precacheManifest = [].concat(self.__precacheManifest || []);
workbox.precaching.precacheAndRoute(self.__precacheManifest, {});
workbox.routing.registerNavigationRoute(workbox.precaching.getCacheKeyForURL("./index.html"), {
blacklist: [/^\/_/,/\/[^\/]+\.[^\/]+$/],
});
This diff is collapsed.
html{font-size:16px}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.loginWrap{width:100%;height:100%}.loginWrap,.loginWrap .contentWrap{display:flex;flex-direction:row;align-items:center}.loginWrap .contentWrap{justify-content:space-around;width:75%;height:60%;margin:0 auto}.contentWrap .leftSide{display:flex;flex-direction:row;align-items:center;width:30%;height:100%}.leftSide .loginBg{width:100%;height:auto}.contentWrap .loginForm{width:50%;height:30rem;border-radius:.5rem;box-shadow:-2px -2px 45px #ddd}.loginForm .title{width:100%;height:5rem;padding:1rem 0;text-align:center;margin-top:2rem}.title .logo{height:100%}.title .name{height:50%;margin-left:.8rem}.loginForm .dataWrap{width:50%;height:auto;margin:3rem auto}#components-form-demo-normal-login .login-form{width:100%;margin-top:3rem}.dataWrap .ant-btn-primary{width:100%}.chartWrap{width:100%;height:100%;overflow:hidden;box-sizing:border-box;background-color:#f7fafc}.chartWrap .row{display:flex;flex-direction:row;flex-wrap:wrap}.chartWrap .chart{width:50%;float:left}.clearfix:after{content:".";height:0;display:block;clear:both}.Chart{float:left;width:67%;margin-top:20px;overflow:hidden;border-radius:6px;box-shadow:5px 1px 10px rgba(74,90,127,.5);margin-bottom:10px}.table{background:#fff;border-bottom:2px solid #f7fafc}.Chart p{display:inline-block;width:120px;height:40px;text-align:center;line-height:40px;cursor:pointer;position:relative;margin-bottom:0;display:none}.Chart .inner{position:relative;top:3px;left:0;display:inline-block;width:15px;height:15px;background-color:#d1e8ff;border:1px solid #d1e8ff;border-radius:2px;border-collapse:separate;-webkit-transition:all .3s;transition:all .3s;margin-right:5px}.Chart .inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;-webkit-transform:rotate(45deg) scale(1) translate(-50%,-50%);transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;-webkit-transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" ";width:5.71428571px;height:9.14285714px;top:50%;left:21%}.Chart p.cur .inner{background-color:#1890ff;border-color:#1890ff}.ant-card-body{padding:0!important}.ant-card-bordered{border:none!important}.wrap{flex-direction:row;justify-content:space-around;background-color:#fff;padding:20px;margin-bottom:20px;font-size:12px;border-bottom-left-radius:6px;border-bottom-right-radius:6px}.box,.wrap{display:flex}.box{width:250px}.icon{width:65px;height:64px}.icon,.wrap-box{margin-right:10px}.wrap-box{border-radius:6px;box-shadow:5px 1px 10px rgba(74,90,127,.5)}.overview{background:#fff;height:60px;overflow:hidden;padding:15px;border-bottom:1px solid #dae4ec;border-top-left-radius:6px;border-top-right-radius:6px}.data-title{line-height:30px;font-size:16px;color:#232d50;font-weight:700}.level{font-size:16px}.level,.number{margin-bottom:0}.number{font-size:30px}.dan{font-size:12px;margin-left:5px}.data-right{float:right;display:inline-block}.rank{float:right;width:31%;background:#fff;border-radius:6px;box-shadow:5px 1px 10px rgba(74,90,127,.5);margin:20px 10px 10px}.line,.rank{padding:10px}.line{border-bottom:1px solid #f1f1f1;font-size:16px;font-weight:700;color:#232d50}table{border-collapse:collapse}th{width:100px;padding:10px 10px 10px 0;font-size:14px;color:#4a5a7f}tr{border-bottom:1px solid #f1f1f1}td{padding:10px 0}thead{text-align:center}td p{width:100px;background:rgba(251,98,96,.3);margin-bottom:0;margin-left:10px;position:relative}td p,td p .wid{height:10px;border-radius:10px;display:inline-block}td p .wid{background:#fb6260;position:absolute;top:0;left:0}table tbody tr td{font-size:12px;color:#9aa2b5}table tbody tr td .number{width:20px;height:20px;display:inline-block;border-radius:50%;background:#dcdcdc;color:#4a5a7f;text-align:center;line-height:20px;font-size:12px}tbody{text-align:center}tbody tr:first-child .number{background:#f34d4e;color:#fff}tbody tr:nth-child(2) .number{background:#fdd843;color:#fff}tbody tr:nth-child(3) .number{background:#25d096;color:#fff}.notFound{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%;min-height:45rem}.notFound .notFoundIcon{width:35%;height:auto}.notFound .tips{font-size:1.3rem;font-weight:700;color:#91ddff;word-wrap:.1rem}.routeWrap{display:flex;flex-direction:row;justify-content:center;align-items:center;background-color:#fff}.title{color:#fff;font-size:1.1rem;padding-left:.2rem}.userInfo{box-sizing:border-box;height:64px;display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-right:3rem;cursor:pointer}.userInfo .label{padding:0 .8rem}.userInfo .head-title{margin-bottom:0;font-weight:700;font-size:30px;color:#000}.ant-layout{height:100%;background-color:#f7fafc!important}.logoIcon{display:flex;justify-content:center;align-items:center;width:100%;height:64px}.logoIcon .Icon{width:35px;height:35px}.navTitle a{color:#fff}#components-layout-demo-responsive .logo{height:32px;background:hsla(0,0%,100%,.2);margin:16px}.clearfix:before{content:".";height:0;display:block;clear:both}.ant-layout-footer{background:#f7fafc}.entryWrap{position:absolute;top:0;bottom:0;min-width:900px;width:100vw;height:auto}.fade-enter{opacity:0}.fade-enter.fade-enter-active{opacity:1;-webkit-transition:opacity .8s ease-in-out;transition:opacity .8s ease-in-out}.ant-menu{background:none}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected{width:162px;height:40px;border-radius:6px;background:-webkit-gradient(linear,left top,right top,from(#428dff),to(#397dff));background:-webkit-linear-gradient(left,#428dff,#397dff);background:linear-gradient(90deg,#428dff,#397dff);color:#fff;box-shadow:1px 4px 5px rgba(22,115,255,.4)}.ant-menu-item-selected>a{color:#fff}.navTitle{line-height:40px;margin-left:10px}.ant-layout-sider{position:relative;min-width:0;background:#f0f2f3;-webkit-transition:all .2s;transition:all .2s;height:97.2%;padding-top:24px;padding-left:15px}.ant-menu-item>a{color:#4a5a7f}.ant-menu-item.ant-menu-item-selected>a{color:#fff}.nav-icon{display:inline-block;height:18px;width:18px;vertical-align:text-bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjNENzAxNEJERkUwQzExRUE4RURFRjQ3ODZGOTk5ODc5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjNENzAxNEJFRkUwQzExRUE4RURFRjQ3ODZGOTk5ODc5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0Q3MDE0QkJGRTBDMTFFQThFREVGNDc4NkY5OTk4NzkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6M0Q3MDE0QkNGRTBDMTFFQThFREVGNDc4NkY5OTk4NzkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7dZka1AAABcUlEQVR42mKMLV/LQAKIAuJ6IFYD4ptA3L2oI2gusZqZSLCoEoiXQi0CAXUgnhNXsW4KtS3LBOI2HHLZQAtrqGVZKBATcn0z0MJoSi1zhwYdMY6aD7TQjlzLbIF4PRCzEhnUIHUbgRZqkGqZCRBvAWJOBtKAABBvB1ooRqxlOiANQMzHQB5QADkUaCEXIctUgHgHEIswUAZMQXENtJAZl2VSUIukGagDAoC4F5tl/EC8E4iVGagL8oG+y0O2jAuaGHQYaAP6gRb6wyzrBGIbBtoBkB3LQVkCxEhhoD0AZaFMkGVvGOgDfrJAy75+IJaECsoAMTOVLHgKxL+A+BIQd4EsOwHElkgKHgCxPJUsswHWdw/Iqc8oBiwkqt8NxN/QxLyJNYdUy9KgwYwMPkALBao2C6iS4UYtIwf8JWTZYypZ9B2IXxCybDaVLJsPzNC/CSX9RUAMUgSqFjjQ5L5hUb8ViLmR+H+A+BQQT0BXCBBgAN8zSnQ42pKGAAAAAElFTkSuQmCC);background-size:100% 100%}.ant-menu-item-selected .nav-icon{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjNEQkM4NUQzRkUwQzExRUFCREE0OENCMTRBQUEzQzI5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjNEQkM4NUQ0RkUwQzExRUFCREE0OENCMTRBQUEzQzI5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6M0RCQzg1RDFGRTBDMTFFQUJEQTQ4Q0IxNEFBQTNDMjkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6M0RCQzg1RDJGRTBDMTFFQUJEQTQ4Q0IxNEFBQTNDMjkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz47VDqBAAABM0lEQVR42mL4//8/Awk4Cohv/oeAG0CcTIp+Uiyq/I8dTKG2ZZn/8YMaalkWCsR//xMG0ZRa5g7Ev/4TB0Dq7Mi1zBaIv/0nDbwHYg1SLTMB4o//yQP3gViMWMt0gPj1f8rAKSDmImSZChA/+U8dsB6ImXFZJgXEd/5TF0zAZhk/EF/+TxuQh2wZKGwP/6cdAOVRf5hlk//THoCykAYjkPjOwMDAwUB7MIkJSLxhoA/4CfKZBZDRD8SSUEEZIGamkgVPgfgXEF8C4hRGcMShggdALE8lyxSh5oEBEwMdAQuJ6ncD8Tc0MW9izSHVsjTkYIGCD0DMT4xmugbjqGXkgr+ELHtMJYtAxeALQpbNppJl84H4N6GkvwiqyB9LAf0Ni/qtQMyNxP8DxKeAeAK6QoAAAwD7S/58QladYQAAAABJRU5ErkJggg==);background-size:100% 100%}.ant-menu-inline .ant-menu-item{padding:0 10px!important}.ant-menu-inline .ant-menu-item:after{border:0}.ant-menu-item>a:hover{color:#fff}
/*# sourceMappingURL=main.8fb69879.chunk.css.map */
\ No newline at end of file
{"version":3,"sources":["index.css","App.css"],"names":[],"mappings":"AAAA,KACE,cACF,CACA,KACE,QAAS,CACT,mIAEY,CACZ,kCAAmC,CACnC,iCACF,CAEA,KACE,uEAEF,CAfA,WAII,UAAW,CACX,WACJ,CAEA,mCAPI,YAAa,CACb,kBAAmB,CACnB,kBAaJ,CARA,wBAII,4BAA6B,CAC7B,SAAU,CACV,UAAW,CACX,aACJ,CAEA,uBACI,YAAa,CACb,kBAAmB,CACnB,kBAAmB,CACnB,SAAU,CACV,WACJ,CAEA,mBACI,UAAW,CACX,WACJ,CAEA,wBACI,SAAU,CACV,YAAa,CACb,mBAAqB,CACrB,8BACJ,CAEA,kBACI,UAAW,CACX,WAAY,CACZ,cAAe,CACf,iBAAkB,CAClB,eACJ,CAEA,aACI,WACJ,CAEA,aACI,UAAW,CACX,iBACJ,CAEA,qBACI,SAAU,CACV,WAAY,CACZ,gBACJ,CAEA,+CACI,UAAW,CACX,eACJ,CAEA,2BACI,UACJ,CApEA,WACI,UAAW,CACX,WAAY,CACZ,eAAgB,CAChB,qBAAsB,CAEtB,wBACJ,CACA,gBACI,YAAa,CACb,kBAAmB,CACnB,cACJ,CACA,kBACI,SAAU,CACV,UACJ,CACA,gBACI,WAAY,CACZ,QAAS,CACT,aAAc,CACd,UACJ,CAtBA,OACI,UAAW,CACX,SAAU,CACV,eAAgB,CAChB,eAAgB,CAChB,iBAAkB,CAClB,0CAA6C,CAC7C,kBACJ,CACA,OACI,eAAgB,CAChB,+BACJ,CACA,SACI,oBAAqB,CACrB,WAAY,CACZ,WAAY,CACZ,iBAAkB,CAClB,gBAAiB,CACjB,cAAe,CACf,iBAAkB,CAClB,eAAgB,CAChB,YACJ,CACA,cACI,iBAAkB,CAClB,OAAQ,CACR,MAAO,CACP,oBAAqB,CACrB,UAAW,CACX,WAAY,CACZ,wBAAyB,CACzB,wBAAyB,CACzB,iBAAkB,CAClB,wBAAyB,CACzB,0BAAoB,CAApB,kBAAoB,CACpB,gBACJ,CACA,oBACI,iBAAkB,CAClB,aAAc,CACd,qBAAsB,CACtB,YAAa,CACb,aAAc,CACd,6DAAuD,CAAvD,qDAAuD,CACvD,SAAU,CACV,4DAA6D,CAA7D,oDAA6D,CAC7D,WAAY,CACZ,kBAAmB,CACnB,mBAAoB,CACpB,OAAQ,CACR,QACJ,CACA,oBACE,wBAAyB,CACzB,oBACF,CAWA,eACI,mBACJ,CACA,mBACI,qBACJ,CAxEA,MAEI,kBAAmB,CACnB,4BAA4B,CAEzB,qBAAsB,CACzB,YAAa,CAEb,kBAAmB,CACnB,cAAe,CACf,6BAA8B,CAC9B,8BAEJ,CACA,WAbI,YAiBJ,CAJA,KAEI,WAEJ,CACA,MACI,UAAW,CACX,WAEJ,CACA,gBAFI,iBAMJ,CAJA,UACI,iBAAkB,CAClB,0CAEJ,CACA,UACI,eAAgB,CAChB,WAAY,CACZ,eAAgB,CAChB,YAAa,CACb,+BAAgC,CAChC,0BAA2B,CAC3B,2BAGJ,CACA,YACI,gBAAiB,CACjB,cAAe,CACf,aAAc,CACd,eACJ,CACA,OACI,cAEJ,CACA,eAFI,eAKJ,CAHA,QACI,cAEJ,CACA,KACI,cAAe,CACf,eACJ,CACA,YACI,WAAY,CACZ,oBACJ,CA7DA,MACI,WAAY,CACZ,SAAU,CACV,eAAgB,CAKhB,iBAAkB,CAClB,0CAA6C,CAC7C,qBACJ,CACA,YAPI,YAaJ,CANA,MACI,+BAAgC,CAEhC,cAAe,CACf,eAAgB,CAChB,aACJ,CACA,MACI,wBACJ,CACA,GACI,WAAY,CACZ,wBAAyB,CACzB,cAAe,CACf,aAEJ,CACA,GAEI,+BACJ,CACA,GACI,cAEJ,CACA,MACI,iBACJ,CACA,KACI,WAAY,CACZ,6BAAiC,CAGjC,eAAgB,CAEhB,gBAAiB,CACjB,iBACJ,CACA,eAPI,WAAY,CACZ,kBAAmB,CAEnB,oBAYJ,CARA,UAII,kBAA6B,CAC7B,iBAAkB,CAClB,KAAM,CACN,MACJ,CACA,kBACI,cAAe,CACf,aACJ,CACA,0BACI,UAAW,CACX,WAAY,CACZ,oBAAqB,CACrB,iBAAkB,CAClB,kBAAkB,CAClB,aAAc,CACd,iBAAkB,CAClB,gBAAiB,CACjB,cACJ,CACA,MACI,iBAEJ,CACA,6BACI,kBAAkB,CAClB,UACJ,CACA,8BACI,kBAAkB,CAClB,UACJ,CACA,8BACI,kBAAkB,CAClB,UACJ,CAzFA,UACI,YAAa,CACb,qBAAsB,CACtB,sBAAuB,CACvB,kBAAmB,CACnB,UAAW,CACX,WAAY,CACZ,gBACJ,CACA,wBACI,SAAU,CACV,WACJ,CACA,gBACI,gBAAiB,CACjB,eAAiB,CACjB,aAAc,CACd,eACJ,CAlBA,WACI,YAAa,CACb,kBAAmB,CACnB,sBAAuB,CACvB,kBAAmB,CACnB,qBACJ,CANA,OACI,UAAW,CACX,gBAAiB,CACjB,kBAEJ,CALA,UACI,qBAAsB,CACtB,WAAY,CACZ,YAAa,CACb,kBAAmB,CACnB,6BAA8B,CAC9B,kBAAmB,CACnB,kBAAmB,CACnB,cACJ,CACA,iBACI,eACJ,CACA,sBACI,eAAgB,CAChB,eAAgB,CAChB,cAAe,CACf,UACJ,CAlBA,YACI,WAAY,CACZ,kCACJ,CAEA,UACI,YAAa,CACb,sBAAuB,CACvB,kBAAmB,CACnB,UAAW,CACX,WACJ,CAEA,gBACI,UAAW,CACX,WACJ,CACA,YACI,UACJ,CACA,yCACI,WAAY,CACZ,6BAAoC,CACpC,WACJ,CACA,iBACI,WAAY,CACZ,QAAS,CACT,aAAc,CACd,UACJ,CACA,mBACI,kBACJ,CChCA,WACE,iBAAkB,CAClB,KAAK,CACL,QAAQ,CACR,eAAgB,CAChB,WAAY,CACZ,WACF,CACA,YACE,SACF,CACA,8BACE,SAAU,CACV,0CAAqC,CAArC,kCACF,CACA,UACE,eACF,CACA,4DACE,WAAY,CACZ,WAAY,CACZ,iBAAkB,CAClB,gFAAoD,CAApD,wDAAoD,CAApD,iDAAoD,CACpD,UAAU,CACV,0CACF,CACA,0BACE,UAEF,CACA,UACE,gBAAiB,CACjB,gBACF,CACA,kBACE,iBAAkB,CAClB,WAAY,CAEZ,kBAAmB,CACnB,0BAAoB,CAApB,kBAAoB,CACpB,YAAa,CACb,gBAAiB,CACjB,iBACF,CACA,iBACE,aACF,CACA,wCACE,UACF,CACA,UACE,oBAAqB,CACrB,WAAY,CACZ,UAAW,CACX,0BAA2B,CAC3B,wtDAAsD,CACtD,yBAEF,CACA,kCACE,woDAAwD,CACxD,yBACF,CACA,gCACE,wBACF,CACA,sCACE,QACF,CACA,uBACE,UACF","file":"main.8fb69879.chunk.css","sourcesContent":[".ant-layout {\r\n height: 100%;\r\n background-color:#f7fafc !important;\r\n}\r\n\r\n.logoIcon {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n height: 64px;\r\n}\r\n\r\n.logoIcon .Icon {\r\n width: 35px;\r\n height: 35px;\r\n}\r\n.navTitle a{\r\n color: #fff;\r\n}\r\n#components-layout-demo-responsive .logo {\r\n height: 32px;\r\n background: rgba(255, 255, 255, 0.2);\r\n margin: 16px;\r\n}\r\n.clearfix:before {\r\n content: '.';\r\n height: 0;\r\n display: block;\r\n clear: both;\r\n}\r\n.ant-layout-footer{\r\n background: #f7fafc ;\r\n}","@import '~antd/dist/antd.css';\r\n.entryWrap{\r\n position: absolute;\r\n top:0;\r\n bottom:0;\r\n min-width: 900px;\r\n width: 100vw;\r\n height: auto;\r\n}\r\n.fade-enter {\r\n opacity: 0;\r\n}\r\n.fade-enter.fade-enter-active {\r\n opacity: 1;\r\n transition: opacity 0.8s ease-in-out;\r\n}\r\n.ant-menu{\r\n background: none;\r\n}\r\n.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected{\r\n width: 162px;\r\n height: 40px;\r\n border-radius: 6px;\r\n background:linear-gradient(to right,#428dff,#397dff);\r\n color:#fff;\r\n box-shadow:1px 4px 5px rgba(22,115,255,0.4) ;\r\n}\r\n.ant-menu-item-selected > a{\r\n color: #fff;\r\n\r\n}\r\n.navTitle{\r\n line-height: 40px;\r\n margin-left: 10px;\r\n}\r\n.ant-layout-sider {\r\n position: relative;\r\n min-width: 0;\r\n\r\n background: #f0f2f3;\r\n transition: all 0.2s;\r\n height: 97.2%;\r\n padding-top: 24px;\r\n padding-left: 15px;\r\n}\r\n.ant-menu-item > a {\r\n color: #4a5a7f;\r\n}\r\n.ant-menu-item.ant-menu-item-selected >a{\r\n color: #fff;\r\n}\r\n.nav-icon{\r\n display: inline-block;\r\n height: 18px;\r\n width: 18px;\r\n vertical-align: text-bottom;\r\n background-image: url(\"./assets/images/idex_icon.png\");\r\n background-size: 100% 100%;\r\n \r\n}\r\n.ant-menu-item-selected .nav-icon{\r\n background-image: url(\"./assets/images/idex_icon_p.png\");\r\n background-size: 100% 100%;\r\n}\r\n.ant-menu-inline .ant-menu-item{\r\n padding: 0 10px !important;\r\n}\r\n.ant-menu-inline .ant-menu-item::after{\r\n border:0;\r\n}\r\n.ant-menu-item > a:hover {\r\n color: #fff;\r\n}"]}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
!function(e){function r(r){for(var n,f,i=r[0],l=r[1],a=r[2],c=0,s=[];c<i.length;c++)f=i[c],o[f]&&s.push(o[f][0]),o[f]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(r);s.length;)s.shift()();return u.push.apply(u,a||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var l=t[i];0!==o[l]&&(n=!1)}n&&(u.splice(r--,1),e=f(f.s=t[0]))}return e}var n={},o={1:0},u=[];function f(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,f),t.l=!0,t.exports}f.m=e,f.c=n,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,r){if(1&r&&(e=f(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)f.d(t,n,function(r){return e[r]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="./";var i=window.webpackJsonp=window.webpackJsonp||[],l=i.push.bind(i);i.push=r,i=i.slice();for(var a=0;a<i.length;a++)r(i[a]);var p=l;t()}([]);
//# sourceMappingURL=runtime~main.d653cc00.js.map
\ No newline at end of file
{"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice"],"mappings":"aACA,SAAAA,EAAAC,GAQA,IAPA,IAMAC,EAAAC,EANAC,EAAAH,EAAA,GACAI,EAAAJ,EAAA,GACAK,EAAAL,EAAA,GAIAM,EAAA,EAAAC,EAAA,GACQD,EAAAH,EAAAK,OAAoBF,IAC5BJ,EAAAC,EAAAG,GACAG,EAAAP,IACAK,EAAAG,KAAAD,EAAAP,GAAA,IAEAO,EAAAP,GAAA,EAEA,IAAAD,KAAAG,EACAO,OAAAC,UAAAC,eAAAC,KAAAV,EAAAH,KACAc,EAAAd,GAAAG,EAAAH,IAKA,IAFAe,KAAAhB,GAEAO,EAAAC,QACAD,EAAAU,OAAAV,GAOA,OAHAW,EAAAR,KAAAS,MAAAD,EAAAb,GAAA,IAGAe,IAEA,SAAAA,IAEA,IADA,IAAAC,EACAf,EAAA,EAAiBA,EAAAY,EAAAV,OAA4BF,IAAA,CAG7C,IAFA,IAAAgB,EAAAJ,EAAAZ,GACAiB,GAAA,EACAC,EAAA,EAAkBA,EAAAF,EAAAd,OAA2BgB,IAAA,CAC7C,IAAAC,EAAAH,EAAAE,GACA,IAAAf,EAAAgB,KAAAF,GAAA,GAEAA,IACAL,EAAAQ,OAAApB,IAAA,GACAe,EAAAM,IAAAC,EAAAN,EAAA,KAGA,OAAAD,EAIA,IAAAQ,EAAA,GAKApB,EAAA,CACAqB,EAAA,GAGAZ,EAAA,GAGA,SAAAS,EAAA1B,GAGA,GAAA4B,EAAA5B,GACA,OAAA4B,EAAA5B,GAAA8B,QAGA,IAAAC,EAAAH,EAAA5B,GAAA,CACAK,EAAAL,EACAgC,GAAA,EACAF,QAAA,IAUA,OANAhB,EAAAd,GAAAa,KAAAkB,EAAAD,QAAAC,IAAAD,QAAAJ,GAGAK,EAAAC,GAAA,EAGAD,EAAAD,QAKAJ,EAAAO,EAAAnB,EAGAY,EAAAQ,EAAAN,EAGAF,EAAAS,EAAA,SAAAL,EAAAM,EAAAC,GACAX,EAAAY,EAAAR,EAAAM,IACA1B,OAAA6B,eAAAT,EAAAM,EAAA,CAA0CI,YAAA,EAAAC,IAAAJ,KAK1CX,EAAAgB,EAAA,SAAAZ,GACA,qBAAAa,eAAAC,aACAlC,OAAA6B,eAAAT,EAAAa,OAAAC,YAAA,CAAwDC,MAAA,WAExDnC,OAAA6B,eAAAT,EAAA,cAAiDe,OAAA,KAQjDnB,EAAAoB,EAAA,SAAAD,EAAAE,GAEA,GADA,EAAAA,IAAAF,EAAAnB,EAAAmB,IACA,EAAAE,EAAA,OAAAF,EACA,KAAAE,GAAA,kBAAAF,QAAAG,WAAA,OAAAH,EACA,IAAAI,EAAAvC,OAAAwC,OAAA,MAGA,GAFAxB,EAAAgB,EAAAO,GACAvC,OAAA6B,eAAAU,EAAA,WAAyCT,YAAA,EAAAK,UACzC,EAAAE,GAAA,iBAAAF,EAAA,QAAAM,KAAAN,EAAAnB,EAAAS,EAAAc,EAAAE,EAAA,SAAAA,GAAgH,OAAAN,EAAAM,IAAqBC,KAAA,KAAAD,IACrI,OAAAF,GAIAvB,EAAA2B,EAAA,SAAAtB,GACA,IAAAM,EAAAN,KAAAiB,WACA,WAA2B,OAAAjB,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAL,EAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAgB,EAAAC,GAAsD,OAAA7C,OAAAC,UAAAC,eAAAC,KAAAyC,EAAAC,IAGtD7B,EAAA8B,EAAA,KAEA,IAAAC,EAAAC,OAAA,aAAAA,OAAA,iBACAC,EAAAF,EAAAhD,KAAA2C,KAAAK,GACAA,EAAAhD,KAAAX,EACA2D,IAAAG,QACA,QAAAvD,EAAA,EAAgBA,EAAAoD,EAAAlD,OAAuBF,IAAAP,EAAA2D,EAAApD,IACvC,IAAAU,EAAA4C,EAIAxC","file":"static/js/runtime~main.d653cc00.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""}
\ No newline at end of file
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="400px" height="400px" viewBox="0 0 200 200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
<title>Group 28 Copy 5</title>
<desc>Created with Sketch.</desc>
<defs>
<linearGradient x1="62.1023273%" y1="0%" x2="108.19718%" y2="37.8635764%" id="linearGradient-1">
<stop stop-color="#4285EB" offset="0%"></stop>
<stop stop-color="#2EC7FF" offset="100%"></stop>
</linearGradient>
<linearGradient x1="69.644116%" y1="0%" x2="54.0428975%" y2="108.456714%" id="linearGradient-2">
<stop stop-color="#29CDFF" offset="0%"></stop>
<stop stop-color="#148EFF" offset="37.8600687%"></stop>
<stop stop-color="#0A60FF" offset="100%"></stop>
</linearGradient>
<linearGradient x1="69.6908165%" y1="-12.9743587%" x2="16.7228981%" y2="117.391248%" id="linearGradient-3">
<stop stop-color="#FA816E" offset="0%"></stop>
<stop stop-color="#F74A5C" offset="41.472606%"></stop>
<stop stop-color="#F51D2C" offset="100%"></stop>
</linearGradient>
<linearGradient x1="68.1279872%" y1="-35.6905737%" x2="30.4400914%" y2="114.942679%" id="linearGradient-4">
<stop stop-color="#FA8E7D" offset="0%"></stop>
<stop stop-color="#F74A5C" offset="51.2635191%"></stop>
<stop stop-color="#F51D2C" offset="100%"></stop>
</linearGradient>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="logo" transform="translate(-20.000000, -20.000000)">
<g id="Group-28-Copy-5" transform="translate(20.000000, 20.000000)">
<g id="Group-27-Copy-3">
<g id="Group-25" fill-rule="nonzero">
<g id="2">
<path d="M91.5880863,4.17652823 L4.17996544,91.5127728 C-0.519240605,96.2081146 -0.519240605,103.791885 4.17996544,108.487227 L91.5880863,195.823472 C96.2872923,200.518814 103.877304,200.518814 108.57651,195.823472 L145.225487,159.204632 C149.433969,154.999611 149.433969,148.181924 145.225487,143.976903 C141.017005,139.771881 134.193707,139.771881 129.985225,143.976903 L102.20193,171.737352 C101.032305,172.906015 99.2571609,172.906015 98.0875359,171.737352 L28.285908,101.993122 C27.1162831,100.824459 27.1162831,99.050775 28.285908,97.8821118 L98.0875359,28.1378823 C99.2571609,26.9692191 101.032305,26.9692191 102.20193,28.1378823 L129.985225,55.8983314 C134.193707,60.1033528 141.017005,60.1033528 145.225487,55.8983314 C149.433969,51.69331 149.433969,44.8756232 145.225487,40.6706018 L108.58055,4.05574592 C103.862049,-0.537986846 96.2692618,-0.500797906 91.5880863,4.17652823 Z" id="Shape" fill="url(#linearGradient-1)"></path>
<path d="M91.5880863,4.17652823 L4.17996544,91.5127728 C-0.519240605,96.2081146 -0.519240605,103.791885 4.17996544,108.487227 L91.5880863,195.823472 C96.2872923,200.518814 103.877304,200.518814 108.57651,195.823472 L145.225487,159.204632 C149.433969,154.999611 149.433969,148.181924 145.225487,143.976903 C141.017005,139.771881 134.193707,139.771881 129.985225,143.976903 L102.20193,171.737352 C101.032305,172.906015 99.2571609,172.906015 98.0875359,171.737352 L28.285908,101.993122 C27.1162831,100.824459 27.1162831,99.050775 28.285908,97.8821118 L98.0875359,28.1378823 C100.999864,25.6271836 105.751642,20.541824 112.729652,19.3524487 C117.915585,18.4685261 123.585219,20.4140239 129.738554,25.1889424 C125.624663,21.0784292 118.571995,14.0340304 108.58055,4.05574592 C103.862049,-0.537986846 96.2692618,-0.500797906 91.5880863,4.17652823 Z" id="Shape" fill="url(#linearGradient-2)"></path>
</g>
<path d="M153.685633,135.854579 C157.894115,140.0596 164.717412,140.0596 168.925894,135.854579 L195.959977,108.842726 C200.659183,104.147384 200.659183,96.5636133 195.960527,91.8688194 L168.690777,64.7181159 C164.472332,60.5180858 157.646868,60.5241425 153.435895,64.7316526 C149.227413,68.936674 149.227413,75.7543607 153.435895,79.9593821 L171.854035,98.3623765 C173.02366,99.5310396 173.02366,101.304724 171.854035,102.473387 L153.685633,120.626849 C149.47715,124.83187 149.47715,131.649557 153.685633,135.854579 Z" id="Shape" fill="url(#linearGradient-3)"></path>
</g>
<ellipse id="Combined-Shape" fill="url(#linearGradient-4)" cx="100.519339" cy="100.436681" rx="23.6001926" ry="23.580786"></ellipse>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
This diff is collapsed.
<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<html class="no-js" xmlns:th="http://www.w3.org/1999/xhtml"> <!--<![endif]-->
<head>
<meta charset="utf-8" />
<!--<meta http-equiv="X-UA-Compatible" content="IE=edge">-->
<meta content="" name="description" />
<meta content="width=device-width, initial-scale=1" name="viewport" />
<title></title>
<!--<script src="../js/vendor/modernizr-2.6.2.min.js"></script>-->
</head>
<body>
<span th:text="${message}"></span>
</body></html>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment