Browse Source

初始化代码:
from:http://192.168.0.115:3000/4dkankan_back/4dkankan_v2-mini.git
branch:feature/zfb_modeling
version:cb658609

tianboguang 3 years ago
commit
219337836b
100 changed files with 5187 additions and 0 deletions
  1. 93 0
      4dkankan-agent/pom.xml
  2. 95 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/entity/AgentAuditEntity.java
  3. 63 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/entity/AgentEntity.java
  4. 25 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/entity/AgentFrameworkEntity.java
  5. 28 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/entity/AgentNoticeEntity.java
  6. 105 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/feign/AgentFeignClient.java
  7. 36 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/mapper/IAgentAuditMapper.java
  8. 12 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/mapper/IAgentFrameworkMapper.java
  9. 14 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/mapper/IAgentMapper.java
  10. 9 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/mapper/IAgentNoticeMapper.java
  11. 26 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/service/IAgentAuditService.java
  12. 10 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/service/IAgentFrameworkService.java
  13. 9 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/service/IAgentNoticeService.java
  14. 22 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/service/IAgentService.java
  15. 79 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/service/impl/AgentAuditServiceImpl.java
  16. 24 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/service/impl/AgentFrameworkServiceImpl.java
  17. 29 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/service/impl/AgentNoticeServiceImpl.java
  18. 113 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/service/impl/AgentServiceImpl.java
  19. 66 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/util/AgentFrameworkTree.java
  20. 100 0
      4dkankan-agent/src/main/java/com.fdkankan.agent/util/AgentFrameworkTreeUtil.java
  21. 169 0
      4dkankan-application/pom.xml
  22. 28 0
      4dkankan-application/src/main/java/com/fdkankan/App.java
  23. 154 0
      4dkankan-application/src/main/resources/application.properties
  24. 16 0
      4dkankan-application/src/main/resources/key/private_pkcs8.pem
  25. 6 0
      4dkankan-application/src/main/resources/key/public.pem
  26. 156 0
      4dkankan-application/src/main/resources/logback-spring.xml
  27. 7 0
      4dkankan-application/src/main/resources/mapper/primary/AgentMapper.xml
  28. 1 0
      4dkankan-application/src/main/resources/static/MP_verify_i9CLaVAyYoDvylKB.txt
  29. 9 0
      4dkankan-application/src/main/resources/static/apppro.html
  30. BIN
      4dkankan-application/src/main/resources/static/img/logo.jpg
  31. 12 0
      4dkankan-application/src/main/resources/static/refreshToken.json
  32. 1125 0
      4dkankan-application/src/main/resources/static/txt/SensitiveWord.txt
  33. 1 0
      4dkankan-application/src/main/resources/static/web/X0r8PxoEUm.txt
  34. 938 0
      4dkankan-application/src/main/resources/static/web/editProMobile.html
  35. 1484 0
      4dkankan-application/src/main/resources/static/web/editProPC.html
  36. 25 0
      4dkankan-application/src/main/resources/static/web/index.html
  37. 5 0
      4dkankan-application/src/main/resources/static/web/main.html
  38. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/index.html
  39. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.03566d57fba94cf3db54d31da3fde783.css
  40. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.03566d57fba94cf3db54d31da3fde783.css.map
  41. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.06f5af4297b015119cdc71452a4f4850.css
  42. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.06f5af4297b015119cdc71452a4f4850.css.map
  43. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.0a3bd5927ff6a83b253373e4b254d6d9.css
  44. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.0a3bd5927ff6a83b253373e4b254d6d9.css.map
  45. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.0dcd50fabe90ab980ce86aeeda3f2e9f.css
  46. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.0dcd50fabe90ab980ce86aeeda3f2e9f.css.map
  47. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.1005d7321d2fe97f19a652d85c9cc8be.css
  48. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.1005d7321d2fe97f19a652d85c9cc8be.css.map
  49. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.223154d11089bfb2aeeb1ce460431686.css
  50. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.223154d11089bfb2aeeb1ce460431686.css.map
  51. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.22735323393853d12fb006925deeb81e.css
  52. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.22735323393853d12fb006925deeb81e.css.map
  53. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.2f7df64759973c8ccbccd6c22687a28e.css
  54. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.2f7df64759973c8ccbccd6c22687a28e.css.map
  55. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.32ebbf911b096da79950a8a3fbedbd09.css
  56. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.32ebbf911b096da79950a8a3fbedbd09.css.map
  57. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.344493f7fed8f370689fe18fcb7753dd.css
  58. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.344493f7fed8f370689fe18fcb7753dd.css.map
  59. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.3794c1bb4f56b94e8fc0d2c7e468ca1a.css
  60. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.3794c1bb4f56b94e8fc0d2c7e468ca1a.css.map
  61. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.45c41b1de723fc3bbfa6418c10bc75ba.css
  62. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.45c41b1de723fc3bbfa6418c10bc75ba.css.map
  63. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.46168df1ce5bb0242ed64d4e2f9f4c53.css
  64. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.46168df1ce5bb0242ed64d4e2f9f4c53.css.map
  65. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4789d6efa9401122ad2cfa80d3e6d5f1.css
  66. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4789d6efa9401122ad2cfa80d3e6d5f1.css.map
  67. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4ae2ebe497d2d53b1724ec0405d85cb0.css
  68. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4ae2ebe497d2d53b1724ec0405d85cb0.css.map
  69. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4af4125e88c0bf418797314a5d7d4017.css
  70. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4af4125e88c0bf418797314a5d7d4017.css.map
  71. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4e8a03e39c23e3be4c46d8196539f941.css
  72. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4e8a03e39c23e3be4c46d8196539f941.css.map
  73. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.51100ade853547cd9005b30826895955.css
  74. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.51100ade853547cd9005b30826895955.css.map
  75. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.60ad4a1d0a3871da0d7e7205d6a7eb90.css
  76. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.60ad4a1d0a3871da0d7e7205d6a7eb90.css.map
  77. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.6b857134f8a4e41bf2f14f2b9b62ccd3.css
  78. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.6b857134f8a4e41bf2f14f2b9b62ccd3.css.map
  79. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.6f49d30727d13e8a62ebb8d572f74384.css
  80. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.6f49d30727d13e8a62ebb8d572f74384.css.map
  81. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.6f6cd1e0f2af1b4083ea55ee1f949564.css
  82. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.6f6cd1e0f2af1b4083ea55ee1f949564.css.map
  83. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.76ff4b8a7f42b53739b18d8d0a81ae1d.css
  84. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.76ff4b8a7f42b53739b18d8d0a81ae1d.css.map
  85. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.7d08d50f560d8788ff5cbb7f3e7d9172.css
  86. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.7d08d50f560d8788ff5cbb7f3e7d9172.css.map
  87. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.83261b526a44dae1a349965f8b53b461.css
  88. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.83261b526a44dae1a349965f8b53b461.css.map
  89. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.8891e43392b7ea49b0c7a8f01206241f.css
  90. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.8891e43392b7ea49b0c7a8f01206241f.css.map
  91. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.8d74e8c609b757bbbde21dd710b222ff.css
  92. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.8d74e8c609b757bbbde21dd710b222ff.css.map
  93. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.9aa3a8ba13cfc73dddefb8af7f0947ae.css
  94. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.9aa3a8ba13cfc73dddefb8af7f0947ae.css.map
  95. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.9ce70446cb684065aace8b20909532f7.css
  96. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.9ce70446cb684065aace8b20909532f7.css.map
  97. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.b20b8583952e946cbd4f96d95baf7b27.css
  98. 1 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.b20b8583952e946cbd4f96d95baf7b27.css.map
  99. 2 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.b3919dc158c61019daeaac1ab86dceb7.css
  100. 0 0
      4dkankan-application/src/main/resources/static/web/mobile/static/css/app.b3919dc158c61019daeaac1ab86dceb7.css.map

+ 93 - 0
4dkankan-agent/pom.xml

@@ -0,0 +1,93 @@
+<?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.fdkankan</groupId>
+    <artifactId>4dkankan-agent</artifactId>
+    <version>1.0.0</version>
+    <packaging>jar</packaging>
+    <repositories>
+        <repository>
+            <id>nexus-aliyun</id>
+            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
+        </repository>
+    </repositories>
+
+    <name>4dkankan-agent</name>
+    <description>4dkankan代理商模块</description>
+
+    <parent>
+        <groupId>com.fdkankan</groupId>
+        <artifactId>4dkankan_v2_mini</artifactId>
+        <version>1.0.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <java.version>1.8</java.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-base</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>tk.mybatis</groupId>
+            <artifactId>mapper-spring-boot-starter</artifactId>
+        </dependency>
+
+    </dependencies>
+
+    <distributionManagement>
+        <repository>
+            <!-- 这里的ID要和setting的id一致 -->
+            <id>releases</id>
+            <url>http://192.168.0.115:8081/nexus-2.14.2-01/content/repositories/releases/</url>
+        </repository>
+        <!--这是打成快照版本的配置 -->
+        <snapshotRepository>
+            <id>snapshots</id>
+            <url>http://192.168.0.115:8081/nexus-2.14.2-01/content/repositories/snapshots/</url>
+        </snapshotRepository>
+    </distributionManagement>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                </configuration>
+            </plugin>
+        </plugins>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*.xml</include>
+                </includes>
+            </resource>
+        </resources>
+    </build>
+</project>

+ 95 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/entity/AgentAuditEntity.java

@@ -0,0 +1,95 @@
+package com.fdkankan.agent.entity;
+
+import com.fdkankan.base.entity.BaseEntity;
+import lombok.Data;
+
+import javax.persistence.Column;
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * 代理商实体表
+ */
+@Data
+@Table(name = "t_agent_audit")
+public class AgentAuditEntity extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 7846210090737594665L;
+    /**
+     * 经销商公司名称
+     */
+    @Column(name = "name")
+    private String name;
+    /**
+     * 国家
+     */
+    @Column(name = "country")
+    private String country;
+    /**
+     * 地区
+     */
+    @Column(name = "region")
+    private String region;
+    /**
+     * 地址
+     */
+    @Column(name = "address")
+    private String address;
+    /**
+     * 类型,1为线下,2为线上
+     */
+    @Column(name = "type")
+    private Integer type;
+    /**
+     * 线下门店地址或线上网站
+     */
+    @Column(name = "store_address")
+    private String storeAddress;
+    /**
+     * 申请人的姓
+     */
+    @Column(name = "sur_name")
+    private String surName;
+    /**
+     * 状态, O:无效, 1:有效
+     */
+    @Column(name = "state")
+    private int state;
+    /**
+     * 申请人的名字
+     */
+    @Column(name = "user_name")
+    private String userName;
+    /**
+     * 申请人职位
+     */
+    @Column(name = "post")
+    private String post;
+    /**
+     * 区号
+     */
+    @Column(name = "area_code")
+    private String areaCode;
+    /**
+     * 手机号
+     */
+    @Column(name = "phone")
+    private String phone;
+    /**
+     * 邮箱地址
+     */
+    @Column(name = "email")
+    private String email;
+
+    /**
+     * 备注等级 (1:绿色,2:蓝,3:黄,4:橙,5红)
+     */
+    @Column(name = "note_type")
+    private Integer noteType;
+
+    /**
+     * 备注内容
+     */
+    @Column(name = "note_content")
+    private String noteContent;
+}

+ 63 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/entity/AgentEntity.java

@@ -0,0 +1,63 @@
+package com.fdkankan.agent.entity;
+
+import com.fdkankan.base.entity.BaseEntity;
+import lombok.Data;
+
+import javax.persistence.Column;
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * 代理商实体表
+ */
+@Data
+@Table(name = "t_agent")
+public class AgentEntity extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 7846210090737594665L;
+    /**
+     * 代理商公司名称
+     */
+    @Column(name = "agent_name")
+    private String agentName;
+    /**
+     * 代理商Id
+     */
+    @Column(name = "agent_id")
+    private String agentId;
+    /**
+     * 代理商密码
+     */
+    @Column(name = "agent_password")
+    private String agentPassword;
+    /**
+     * 代理商区域
+     */
+    @Column(name = "agent_area")
+    private String agentArea;
+    /**
+     * 代理商邮箱
+     */
+    @Column(name = "agent_email")
+    private String agentEmail;
+    /**
+     * 代理商电话
+     */
+    @Column(name = "agent_phone")
+    private String agentPhone;
+    /**
+     * 状态:1-正常,0-冻结
+     */
+    @Column(name = "state")
+    private int state;
+    /**
+     * 代理数量
+     */
+    @Column(name = "agent_num")
+    private int agentNum;
+    /**
+     * 代理商所在的国家
+     */
+    @Column(name = "agent_country")
+    private String agentCountry;
+}

+ 25 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/entity/AgentFrameworkEntity.java

@@ -0,0 +1,25 @@
+package com.fdkankan.agent.entity;
+
+/**
+ * Created by Hb_zzZ on 2021/2/25.
+ */
+
+import com.fdkankan.base.entity.BaseEntity;
+import lombok.Data;
+
+import javax.persistence.Column;
+import javax.persistence.Table;
+
+/**
+ * 代理商架构管理表
+ */
+@Data
+@Table(name = "t_agent")
+public class AgentFrameworkEntity extends BaseEntity{
+
+    @Column(name = "parent_id")
+    private Long parentId;
+
+    @Column(name = "name")
+    private String name;
+}

+ 28 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/entity/AgentNoticeEntity.java

@@ -0,0 +1,28 @@
+package com.fdkankan.agent.entity;
+
+import com.fdkankan.base.entity.BaseEntity;
+import lombok.Data;
+
+import javax.persistence.Column;
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * 代理公告表
+ */
+@Data
+@Table(name = "t_agent_notice")
+public class AgentNoticeEntity extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = -1440257784952609257L;
+    /**
+     * 标题
+     */
+    @Column(name = "title")
+    private String title;
+    /**
+     * 公告内容
+     */
+    @Column(name = "content")
+    private String content;
+}

+ 105 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/feign/AgentFeignClient.java

@@ -0,0 +1,105 @@
+package com.fdkankan.agent.feign;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fdkankan.agent.entity.AgentEntity;
+import com.fdkankan.agent.entity.AgentNoticeEntity;
+import com.fdkankan.agent.service.IAgentNoticeService;
+import com.fdkankan.agent.service.IAgentService;
+import com.fdkankan.common.model.Result;
+import com.fdkankan.common.model.SSOAgent;
+import com.fdkankan.common.vo.request.RequestAgent;
+import com.fdkankan.common.vo.response.ResponseAgent;
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageInfo;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import tk.mybatis.mapper.entity.Condition;
+
+import java.util.List;
+
+@Service
+public class AgentFeignClient {
+
+    @Autowired
+    private IAgentService agentService;
+    @Autowired
+    private IAgentNoticeService agentNoticeService;
+    @Autowired
+    private ObjectMapper mapper;
+
+    public Result findByAgentId(String agentId) throws Exception {
+        SSOAgent agent = null;
+        AgentEntity agentEntity = agentService.findByAgentId(agentId);
+        if (agentEntity != null){
+            agent = new SSOAgent();
+            agent.setAgentId(agentEntity.getAgentId());
+            agent.setAgentPassword(agentEntity.getAgentPassword());
+        }
+        return Result.success(agent);
+    }
+
+    public Result findAgentPagerByCondition(RequestAgent param, String orderBy) throws Exception {
+        Condition condition = new Condition(AgentEntity.class);
+        condition.excludeProperties("agentPassword");
+        condition.createCriteria().andEqualTo("recStatus", "A");
+        if (StringUtils.isNotEmpty(param.getAgentName())) {
+            condition.and().andLike("agentName", "%" + param.getAgentName() + "%");
+        }
+        if (StringUtils.isNotEmpty(param.getAgentId())) {
+            condition.and().andLike("agentId", "%" + param.getAgentId() + "%");
+        }
+
+        PageInfo<AgentEntity> pageInfo = agentService.findAll(condition, param.getPageNum(), param.getPageSize(), orderBy);
+        List<ResponseAgent> responseAgents = agentService.convert(pageInfo.getList());
+
+        Page<ResponseAgent> a = new Page<>(param.getPageNum(), param.getPageSize());
+        a.setTotal(pageInfo.getTotal());
+        PageInfo<ResponseAgent> result = a.toPageInfo();
+        result.setList(responseAgents);
+        return Result.success(result);
+    }
+
+    public Result findById(Long id) throws Exception {
+        AgentEntity agentEntity = agentService.findById(id);
+        ResponseAgent rsp =  new ResponseAgent();
+        BeanUtils.copyProperties(agentEntity, rsp);
+        return Result.success(rsp);
+    }
+
+    public Result saveAgent(RequestAgent param) throws Exception{
+        agentService.save(param);
+        return Result.success();
+    }
+
+    public Result deleteAgentById(Long id) throws Exception{
+        AgentEntity agentEntity = agentService.findById(id);
+        agentEntity.setRecStatus("I");
+        agentService.update(agentEntity);
+        return Result.success();
+    }
+
+    public Result updateAgentStatus(Long id, int status) throws Exception{
+        AgentEntity agentEntity = agentService.findById(id);
+        agentEntity.setState(status);
+        agentService.update(agentEntity);
+        return Result.success();
+    }
+
+    public Result publishAgentNotice(String title, String content) throws Exception{
+        AgentNoticeEntity entity = new AgentNoticeEntity();
+        entity.setTitle(title);
+        entity.setContent(content);
+        agentNoticeService.save(entity);
+        return Result.success();
+    }
+
+    public PageInfo<AgentEntity> searchList(RequestAgent param) throws Exception {
+        return agentService.searchList(param);
+    }
+
+    public List<AgentEntity> findAgentListByParam(RequestAgent param) throws Exception {
+        return agentService.findAgentListByParam(param);
+    }
+}

+ 36 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/mapper/IAgentAuditMapper.java

@@ -0,0 +1,36 @@
+package com.fdkankan.agent.mapper;
+
+import com.fdkankan.agent.entity.AgentAuditEntity;
+import com.fdkankan.base.mapper.base.IBaseMapper;
+import com.fdkankan.common.vo.response.ResponseAgentAudit;
+import com.github.pagehelper.PageInfo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * Created by Hb_zzZ on 2019/9/19.
+ */
+@Mapper
+public interface IAgentAuditMapper extends IBaseMapper<AgentAuditEntity, Long> {
+
+    @Select(" SELECT * FROM t_agent_audit WHERE REC_STATUS = 'A' ")
+    List<ResponseAgentAudit> list();
+
+
+//    @Select(" SELECT * FROM t_agent_audit where REC_STATUS = 'A' and create_time >= #{startDate} and create_time <= #{endDate} " +
+//            "and (name like #{itemName} or address like #{itemName} or note_content like #{itemName}) order by create_time desc  ")
+
+    @Select(" SELECT * FROM t_agent_audit where REC_STATUS = 'A' " +
+            "and (create_time >= #{startDate} or #{startDate} is null) " +
+            "and (create_time <= #{endDate} or #{endDate} is null) " +
+            "and ((name like #{itemName} or #{itemName} is null) " +
+            "or (address like #{itemName} or #{itemName} is null) " +
+            "or (note_content like #{itemName} or #{itemName} is null))" +
+            "order by create_time desc")
+    List<ResponseAgentAudit> searchAgentAuditLikes(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("itemName") String itemName);
+
+
+}

+ 12 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/mapper/IAgentFrameworkMapper.java

@@ -0,0 +1,12 @@
+package com.fdkankan.agent.mapper;
+
+import com.fdkankan.agent.entity.AgentFrameworkEntity;
+import com.fdkankan.base.mapper.base.IBaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * Created by Hb_zzZ on 2021/2/25.
+ */
+@Mapper
+public interface IAgentFrameworkMapper extends IBaseMapper<AgentFrameworkEntity, Long>{
+}

+ 14 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/mapper/IAgentMapper.java

@@ -0,0 +1,14 @@
+package com.fdkankan.agent.mapper;
+
+import com.fdkankan.agent.entity.AgentEntity;
+import com.fdkankan.base.mapper.base.IBaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+@Mapper
+public interface IAgentMapper extends IBaseMapper<AgentEntity, Long> {
+
+    @Select(" SELECT * FROM t_agent WHERE agent_id = #{agentId} AND REC_STATUS = 'A' ")
+    AgentEntity findByAgentId(@Param("agentId") String agentId);
+}

+ 9 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/mapper/IAgentNoticeMapper.java

@@ -0,0 +1,9 @@
+package com.fdkankan.agent.mapper;
+
+import com.fdkankan.agent.entity.AgentNoticeEntity;
+import com.fdkankan.base.mapper.base.IBaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface IAgentNoticeMapper extends IBaseMapper<AgentNoticeEntity, Long> {
+}

+ 26 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/service/IAgentAuditService.java

@@ -0,0 +1,26 @@
+package com.fdkankan.agent.service;
+
+import com.fdkankan.agent.entity.AgentAuditEntity;
+import com.fdkankan.base.service.IBaseService;
+import com.fdkankan.common.model.Result;
+import com.fdkankan.common.vo.request.RequestAgentAudit;
+import com.fdkankan.common.vo.request.RequestSearch;
+import com.fdkankan.common.vo.response.ResponseAgentAudit;
+import com.github.pagehelper.PageInfo;
+import tk.mybatis.mapper.entity.Condition;
+
+import java.util.List;
+
+/**
+ * Created by Hb_zzZ on 2019/9/19.
+ */
+public interface IAgentAuditService extends IBaseService<AgentAuditEntity, Long> {
+
+    List<ResponseAgentAudit> list(RequestAgentAudit param);
+
+    @Override
+    PageInfo<AgentAuditEntity> findAll(Condition condition, int pageNum, int pageSize);
+
+    // 多条件分页模糊查询
+    Result searchLike(RequestSearch param);
+}

+ 10 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/service/IAgentFrameworkService.java

@@ -0,0 +1,10 @@
+package com.fdkankan.agent.service;
+
+import com.fdkankan.agent.entity.AgentFrameworkEntity;
+import com.fdkankan.base.service.IBaseService;
+
+/**
+ * Created by Hb_zzZ on 2021/2/25.
+ */
+public interface IAgentFrameworkService extends IBaseService<AgentFrameworkEntity, Long> {
+}

+ 9 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/service/IAgentNoticeService.java

@@ -0,0 +1,9 @@
+package com.fdkankan.agent.service;
+
+import com.fdkankan.agent.entity.AgentNoticeEntity;
+import com.fdkankan.base.service.IBaseService;
+
+public interface IAgentNoticeService extends IBaseService<AgentNoticeEntity, Long> {
+
+    int update(AgentNoticeEntity agentNoticeEntity);
+}

+ 22 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/service/IAgentService.java

@@ -0,0 +1,22 @@
+package com.fdkankan.agent.service;
+
+import com.fdkankan.agent.entity.AgentEntity;
+import com.fdkankan.base.service.IBaseService;
+import com.fdkankan.common.vo.request.RequestAgent;
+import com.fdkankan.common.vo.response.ResponseAgent;
+import com.github.pagehelper.PageInfo;
+
+import java.util.List;
+
+public interface IAgentService extends IBaseService<AgentEntity, Long> {
+
+    void save(RequestAgent param) throws Exception;
+
+    PageInfo<AgentEntity> searchList(RequestAgent param) throws Exception;
+
+    AgentEntity findByAgentId(String agentId) throws Exception;
+
+    List<AgentEntity> findAgentListByParam(RequestAgent param) throws Exception;
+
+    List<ResponseAgent> convert(List<AgentEntity> list) throws Exception;
+}

+ 79 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/service/impl/AgentAuditServiceImpl.java

@@ -0,0 +1,79 @@
+package com.fdkankan.agent.service.impl;
+
+import com.fdkankan.agent.entity.AgentAuditEntity;
+import com.fdkankan.agent.mapper.IAgentAuditMapper;
+import com.fdkankan.agent.service.IAgentAuditService;
+import com.fdkankan.base.mapper.base.IBaseMapper;
+import com.fdkankan.base.service.impl.BaseServiceImpl;
+import com.fdkankan.common.model.Result;
+import com.fdkankan.common.vo.request.RequestAgentAudit;
+import com.fdkankan.common.vo.request.RequestSearch;
+import com.fdkankan.common.vo.response.ResponseAgentAudit;
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * Created by Hb_zzZ on 2019/9/19.
+ */
+@Service("agentAuditService")
+@Transactional
+public class AgentAuditServiceImpl extends BaseServiceImpl<AgentAuditEntity, Long> implements IAgentAuditService {
+
+    @Autowired
+    private IAgentAuditMapper mapper;
+
+    @Override
+    public IBaseMapper<AgentAuditEntity, Long> getBaseMapper() {
+        return this.mapper;
+    }
+
+    @Override
+    public List<ResponseAgentAudit> list(RequestAgentAudit param) {
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        return mapper.list();
+    }
+
+    public Result searchLike(RequestSearch param){
+
+        Integer pageNum = Integer.valueOf(param.getPageNum());
+        Integer pageSize = Integer.valueOf(param.getPageSize());
+        String startDate = param.getStartDate();
+        String endDate = param.getEndDate();
+        String itemName = param.getItemName();
+
+
+        // 开启查询总数
+        Page page = PageHelper.startPage(pageNum, pageSize, true);
+
+        // 如果不为空或null
+        if (StringUtils.isBlank(itemName)) {
+            itemName = null;
+        } else {
+            itemName = "%"+itemName+"%";
+        }
+
+        // 条件查询
+        List<ResponseAgentAudit> responseAgentAudits = mapper.searchAgentAuditLikes(startDate, endDate, itemName);
+
+        // 当前页信息
+        Page<ResponseAgentAudit> audits = new Page<>(pageNum, pageSize);
+        audits.setTotal(page.getTotal());
+
+        PageInfo<ResponseAgentAudit> info = audits.toPageInfo();
+
+        // 设计数据
+        info.setList(responseAgentAudits);
+
+        return Result.success(info);
+    }
+
+
+
+}

+ 24 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/service/impl/AgentFrameworkServiceImpl.java

@@ -0,0 +1,24 @@
+package com.fdkankan.agent.service.impl;
+
+import com.fdkankan.agent.entity.AgentFrameworkEntity;
+import com.fdkankan.agent.mapper.IAgentFrameworkMapper;
+import com.fdkankan.agent.service.IAgentFrameworkService;
+import com.fdkankan.base.mapper.base.IBaseMapper;
+import com.fdkankan.base.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * Created by Hb_zzZ on 2021/2/25.
+ */
+@Service
+public class AgentFrameworkServiceImpl extends BaseServiceImpl<AgentFrameworkEntity, Long> implements IAgentFrameworkService{
+
+    @Autowired
+    private IAgentFrameworkMapper mapper;
+
+    @Override
+    public IBaseMapper<AgentFrameworkEntity, Long> getBaseMapper() {
+        return mapper;
+    }
+}

+ 29 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/service/impl/AgentNoticeServiceImpl.java

@@ -0,0 +1,29 @@
+package com.fdkankan.agent.service.impl;
+
+import com.fdkankan.agent.entity.AgentNoticeEntity;
+import com.fdkankan.agent.mapper.IAgentNoticeMapper;
+import com.fdkankan.agent.service.IAgentNoticeService;
+import com.fdkankan.base.mapper.base.IBaseMapper;
+import com.fdkankan.base.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service("agentNoticeService")
+@Transactional
+public class AgentNoticeServiceImpl extends BaseServiceImpl<AgentNoticeEntity, Long> implements IAgentNoticeService {
+
+    @Autowired
+    private IAgentNoticeMapper agentNoticeMapper;
+
+    @Autowired
+    public IBaseMapper<AgentNoticeEntity, Long> getBaseMapper(){
+        return this.agentNoticeMapper;
+    }
+
+
+    @Override
+    public int update(AgentNoticeEntity agentNoticeEntity){
+        return super.update(agentNoticeEntity);
+    }
+}

+ 113 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/service/impl/AgentServiceImpl.java

@@ -0,0 +1,113 @@
+package com.fdkankan.agent.service.impl;
+
+import com.fdkankan.agent.entity.AgentEntity;
+import com.fdkankan.agent.mapper.IAgentMapper;
+import com.fdkankan.agent.service.IAgentNoticeService;
+import com.fdkankan.agent.service.IAgentService;
+import com.fdkankan.base.aop.SystemServiceLog;
+import com.fdkankan.base.mapper.base.IBaseMapper;
+import com.fdkankan.base.service.impl.BaseServiceImpl;
+import com.fdkankan.common.vo.request.RequestAgent;
+import com.fdkankan.common.vo.response.ResponseAgent;
+import com.github.pagehelper.PageInfo;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import tk.mybatis.mapper.entity.Condition;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Log4j2
+@Service("agentService")
+@Transactional
+public class AgentServiceImpl extends BaseServiceImpl<AgentEntity, Long> implements IAgentService {
+
+    @Autowired
+    private IAgentNoticeService agentNoticeService;
+    @Autowired
+    private IAgentMapper agentMapper;
+    @Autowired
+    public IBaseMapper<AgentEntity, Long> getBaseMapper() {
+        return this.agentMapper;
+    }
+
+    @Override
+    @SystemServiceLog(description = "新增或修改代理商信息")
+    public void save(RequestAgent param) throws Exception{
+        AgentEntity dbAgent = findById(param.getId());
+        if (dbAgent != null) {
+            dbAgent.setAgentId(param.getAgentId());
+            dbAgent.setAgentPassword(param.getAgentPassword());
+            dbAgent.setAgentName(param.getAgentName());
+            dbAgent.setAgentArea(param.getAgentArea());
+            dbAgent.setAgentEmail(param.getAgentEmail());
+            dbAgent.setAgentPhone(param.getAgentPhone());
+            dbAgent.setAgentCountry(param.getAgentCountry());
+            dbAgent.setAgentNum(param.getAgentNum());
+            update(dbAgent);
+        } else {
+            AgentEntity agentEntity = new AgentEntity();
+            agentEntity.setAgentId(param.getAgentId());
+            agentEntity.setAgentPassword(param.getAgentPassword());
+            agentEntity.setAgentName(param.getAgentName());
+            agentEntity.setAgentArea(param.getAgentArea());
+            agentEntity.setAgentEmail(param.getAgentEmail());
+            agentEntity.setAgentPhone(param.getAgentPhone());
+            agentEntity.setAgentCountry(param.getAgentCountry());
+            agentEntity.setAgentNum(param.getAgentNum());
+            save(agentEntity);
+        }
+    }
+
+    @Override
+    public PageInfo<AgentEntity> searchList(RequestAgent param) throws Exception{
+        Condition condition = new Condition(AgentEntity.class);
+        condition.excludeProperties("agentPassword");
+        condition.createCriteria().andEqualTo("recStatus", "A");
+        if (StringUtils.isNotEmpty(param.getStartDate()) && StringUtils.isNotEmpty(param.getEndDate())) {
+            condition.and().andBetween("createTime", param.getStartDate() + " 00:00:00", param.getEndDate() + " 23:59:59");
+        }
+        if (StringUtils.isNotEmpty(param.getAgentId())) {
+            condition.and().andLike("agentId", "%" + param.getAgentId() + "%");
+        }
+        PageInfo<AgentEntity> pageInfo = findAll(condition, param.getPageNum(), param.getPageSize(), "create_time desc");
+        return pageInfo;
+    }
+
+    @Override
+    public List<AgentEntity> findAgentListByParam(RequestAgent param) throws Exception{
+        Condition condition = new Condition(AgentEntity.class);
+        condition.excludeProperties("agentPassword");
+        condition.createCriteria().andEqualTo("recStatus", "A");
+        if (StringUtils.isNotEmpty(param.getStartDate()) && StringUtils.isNotEmpty(param.getEndDate())) {
+            condition.and().andBetween("createTime", param.getStartDate() + " 00:00:00", param.getEndDate() + " 23:59:59");
+        }
+        if (StringUtils.isNotEmpty(param.getAgentId())) {
+            condition.and().andLike("agentId", "%" + param.getAgentId() + "%");
+        }
+        List<AgentEntity> list = findAll(condition, "create_time desc");
+        return list;
+    }
+
+    @Override
+    public AgentEntity findByAgentId(String agentId) throws Exception{
+        return agentMapper.findByAgentId(agentId);
+    }
+
+    @Override
+    public List<ResponseAgent> convert(List<AgentEntity> list) throws Exception{
+        List<ResponseAgent> responseAgents = new ArrayList<>();
+        for (AgentEntity agentEntity : list){
+            ResponseAgent rsp = new ResponseAgent();
+            BeanUtils.copyProperties(agentEntity, rsp);
+            responseAgents.add(rsp);
+        }
+        return responseAgents;
+    }
+
+
+}

+ 66 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/util/AgentFrameworkTree.java

@@ -0,0 +1,66 @@
+package com.fdkankan.agent.util;
+
+import java.util.List;
+
+public class AgentFrameworkTree {
+
+    private Long id;
+
+    private String name;
+
+    private Long parentId;
+
+    private List<AgentFrameworkTree> children;
+
+    public List<AgentFrameworkTree> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<AgentFrameworkTree> children) {
+        this.children = children;
+    }
+
+    private int level;
+
+    private boolean checked = false;
+
+    public void setChecked(boolean checked) {
+        this.checked = checked;
+    }
+
+    public int getLevel() {
+        return level;
+    }
+
+    public boolean isChecked() {
+        return checked;
+    }
+
+    public void setLevel(int level) {
+        this.level = level;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Long getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId) {
+        this.parentId = parentId;
+    }
+}

+ 100 - 0
4dkankan-agent/src/main/java/com.fdkankan.agent/util/AgentFrameworkTreeUtil.java

@@ -0,0 +1,100 @@
+package com.fdkankan.agent.util;
+
+
+import com.fdkankan.agent.entity.AgentFrameworkEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class AgentFrameworkTreeUtil {
+
+    private List<AgentFrameworkTree> resultNodes = new ArrayList<AgentFrameworkTree>();//树形结构排序之后list内容
+
+    private List<AgentFrameworkTree> nodes = new ArrayList<AgentFrameworkTree>();
+    //传入list参数
+
+    public AgentFrameworkTreeUtil(List<AgentFrameworkEntity> nodesList) {//通过构造函数初始化
+        for (AgentFrameworkEntity n : nodesList) {
+            AgentFrameworkTree treeGrid = new AgentFrameworkTree();
+            treeGrid.setId(n.getId());
+            treeGrid.setName(n.getName());
+//            treeGrid.setIcon(n.getIcon());
+            if (n.getParentId() != null) {
+                treeGrid.setParentId(n.getParentId());
+            }
+            nodes.add(treeGrid);
+        }
+    }
+
+    public AgentFrameworkTreeUtil() {
+    }
+
+    /**
+     * 构建树形结构list
+     *
+     * @return 返回树形结构List列表
+     */
+    public List<AgentFrameworkTree> buildTree() {
+        for (AgentFrameworkTree node : nodes) {
+            Long id = node.getParentId();
+            if (id == null) {//通过循环一级节点 就可以通过递归获取二级以下节点
+                resultNodes.add(node);//添加一级节点
+//                node.setLevel(1);
+                build(node, node.getLevel());//递归获取二级、三级、。。。节点
+            }
+        }
+        return resultNodes;
+    }
+
+    /**
+     * 递归循环子节点
+     *
+     * @param node 当前节点
+     */
+    private void build(AgentFrameworkTree node, int level) {
+        List<AgentFrameworkTree> children = getChildren(node);
+        if (!children.isEmpty()) {//如果存在子节点
+            node.setChildren(children);
+//        	level++;
+            for (AgentFrameworkTree child : children) {//将子节点遍历加入返回值中
+//        		child.setLevel(level);
+                build(child, child.getLevel());
+            }
+        }
+    }
+
+    /**
+     * @param node
+     * @return 返回
+     */
+    private List<AgentFrameworkTree> getChildren(AgentFrameworkTree node) {
+        List<AgentFrameworkTree> children = new ArrayList<AgentFrameworkTree>();
+        Long id = node.getId();
+        for (AgentFrameworkTree child : nodes) {
+            if (child.getParentId() != null && id.longValue() == child.getParentId().longValue()) {//如果id等于父id
+                children.add(child);//将该节点加入循环列表中
+            }
+        }
+        return children;
+    }
+
+    public List<AgentFrameworkTree> buildTree(List<AgentFrameworkEntity> all, List<AgentFrameworkEntity> in) {
+        for (AgentFrameworkEntity n : all) {
+            AgentFrameworkTree treeGrid = new AgentFrameworkTree();
+            treeGrid.setId(n.getId());
+            treeGrid.setName(n.getName());
+            for (AgentFrameworkEntity nin : in) {
+                if (nin.getId().equals(n.getId())) {
+                    treeGrid.setChecked(true);
+                }
+            }
+            if (n.getParentId() != null) {
+                treeGrid.setParentId(n.getParentId());
+            }
+            nodes.add(treeGrid);
+        }
+        return buildTree();
+    }
+
+
+}

+ 169 - 0
4dkankan-application/pom.xml

@@ -0,0 +1,169 @@
+<?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>
+
+    <artifactId>4dkankan-application</artifactId>
+    <version>1.0.0</version>
+    <packaging>war</packaging>
+    <repositories>
+        <repository>
+            <id>nexus-aliyun</id>
+            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
+        </repository>
+    </repositories>
+
+    <name>4dkankan-application</name>
+    <description>程序入口</description>
+
+    <parent>
+        <artifactId>4dkankan_v2_mini</artifactId>
+        <groupId>com.fdkankan</groupId>
+        <version>1.0.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <java.version>1.8</java.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-base</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-agent</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-backend</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-bbs</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-goods</artifactId>
+        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>com.fdkankan</groupId>-->
+            <!--<artifactId>4dkankan-modeling</artifactId>-->
+        <!--</dependency>-->
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-order</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-pay</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-scene</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-trade</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-user</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-zuul</artifactId>
+        </dependency>
+        <!-- spring boot -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-tomcat</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-tomcat</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <!-- mysql -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>tk.mybatis</groupId>
+            <artifactId>mapper-spring-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-autoconfigure</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>4dkankan_v2_mini</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <!-- 指定该Main Class为全局的唯一入口 -->
+                    <mainClass>com.fdkankan.App</mainClass>
+                    <fork>true</fork>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 28 - 0
4dkankan-application/src/main/java/com/fdkankan/App.java

@@ -0,0 +1,28 @@
+package com.fdkankan;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.web.bind.annotation.RestController;
+
+@SpringBootApplication
+@EnableCaching
+@EnableScheduling
+@EnableAsync
+@RestController
+public class App extends SpringBootServletInitializer {
+
+    @Override
+    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+        return application.sources(App.class);
+    }
+
+    public static void main(String[] args) {
+        SpringApplication.run(App.class, args);
+    }
+}

+ 154 - 0
4dkankan-application/src/main/resources/application.properties

@@ -0,0 +1,154 @@
+server.port=8080
+server.servlet.context-path=/4dkankan_v2
+server.file.location=/mnt/4Dkankan/
+
+spring.mvc.async.request-timeout=1800000
+#log
+logging.path=/4Dkankan/logs/
+logging.config=classpath:logback-spring.xml
+logging.level.com.fdkankan=debug
+#mybatis
+mybatis.mapper-locations=classpath:mapper/*.xml
+mybatis.type-aliases-package=com.fdkankan.*.mapper
+mybatis.configuration.mapUnderscoreToCamelCase=true
+mapper.identity=MYSQL
+mapper.mappers=tk.mybatis.mapper.common.Mapper
+#pager
+pagehelper.helper-dialect=mysql
+pagehelper.params=count=countSql
+pagehelper.reasonable=false
+pagehelper.support-methods-arguments=true
+#DB (new)
+spring.datasource.primary.url=jdbc:mysql://35.157.124.143:3306/4dkankan_v2?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
+spring.datasource.primary.username=root
+spring.datasource.primary.password=4dkk2020test%
+spring.datasource.primary.driverClassName=com.mysql.jdbc.Driver
+#DB (old)
+spring.datasource.secondary.url=jdbc:mysql://35.157.124.143:3306/4dkankan?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
+spring.datasource.secondary.username=root
+spring.datasource.secondary.password=4dkk2020test%
+spring.datasource.secondary.driverClassName=com.mysql.jdbc.Driver
+#连接泄露  开启影响性能
+#spring.datasource.druid.remove-abandoned=true
+#如果连接超过10分钟未关闭,就会被强行回收 单位秒
+#spring.datasource.druid.remove-abandoned-timeout=600
+#spring.datasource.druid.log-abandoned=true
+
+#spring servlet
+
+spring.servlet.multipart.max-file-size=500MB
+spring.servlet.multipart.max-request-size=1000MB
+spring.servlet.multipart.enabled=true
+spring.servlet.multipart.location=/mnt/data/
+#redis
+spring.redis.database=0
+spring.redis.host=120.25.146.52
+spring.redis.port=6379
+spring.redis.password=
+# 连接超时时间 单位 ms(毫秒)
+spring.redis.timeout=3000ms
+# 连接池中的最大空闲连接,默认值也是8。
+spring.redis.jedis.pool.max-idle=50
+# 连接池中的最小空闲连接,默认值也是0。
+spring.redis.jedis.pool.min-idle=8
+# 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
+spring.redis.jedis.pool.max-active=8
+# 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
+spring.redis.jedis.pool.max-wait=-1ms
+# file route
+file.route.hardDisk=/mnt/data/
+file.route.imageFolder=IMAGE
+file.route.documentFolder=VIDEO
+file.route.videoFolder=DOCUMENT
+file.route.musicFolder=MUSIC
+file.route.imageType=[".bmp", ".jpg", ".jpeg", ".png", ".tiff", ".gif", ".pcx", ".tga", ".exif", ".fpx", ".svg", ".psd",".cdr", ".pcd", ".dxf", ".ufo", ".eps", ".ai", ".raw", ".wmf"]
+file.route.documentType=[".txt", ".doc", ".docx", ".xls", ".htm", ".html", ".jsp", ".rtf", ".wpd", ".pdf", ".ppt",".js"]
+file.route.videoType=[".mp4", ".avi", ".mov", ".wmv", ".asf", ".navi", ".3gp", ".mkv", ".f4v", ".rmvb", ".webm"]
+file.route.musicType=[".mp3", ".wma", ".wav", ".mod", ".ra", ".cd", ".md", ".asf", ".aac", ".vqf", ".ape", ".mid", ".ogg",".m4a", ".vqf"]
+file.route.IPs=["0:0:0:0:0:0:0:1","192.168.0.100"]
+#swagger
+swagger.basePackage=com.fdkankan.web.controller
+swagger.title=四维看看2.0单机版
+swagger.description=api文档
+swagger.serviceUrl=http://39.108.220.65:8080
+swagger.version=2.0
+#rabbitmq
+spring.rabbitmq.host=120.25.146.52
+spring.rabbitmq.port=5672
+spring.rabbitmq.username=guest
+spring.rabbitmq.password=guest
+
+spring.mvc.static-path-pattern=/**
+spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/, classpath:/static/, classpath:/web/, file:${server.file.location}
+
+spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
+spring.jackson.time-zone=GMT+8
+
+server.tomcat.uri-encoding=UTF-8
+spring.http.encoding.charset=UTF-8
+spring.http.encoding.enabled=true
+spring.http.encoding.force=true
+
+oss.point=http://oss-cn-shenzhen-internal.aliyuncs.com
+oss.key=LTAIUrvuHqj8pvry
+oss.secrey=JLOVl0k8Ke0aaM8nLMMiUAZ3EiiqI4
+oss.bucket=4dkankan
+#oss类型为oss(阿里云)或s3(亚马逊)
+oss.type=s3
+oss.s3key=AKIAWCV5QFZ3ZNELKYUY
+oss.s3secrey=epS5ghyR4LJ7rxk/qJO9ZYh6m9Oz6g5haKDu4yws
+oss.s3bucket=4dkankan
+
+main.url=https://testeur.4dkankan.com/
+scene.url=show.html?m=
+scene.pro.url=showProMobile.html?m=
+scene.pro.new.url=smobile.html?m=
+
+prefix.ali=https://4dkk.4dage.com/
+
+#获取含有热点的领域路径列表
+hot.domain.list=https://testopen.4dkankan.com/domainList/hot
+#删除领域中的热点数据
+hot.delete=/deleteHot
+
+#shop.goods.url=http://192.168.0.83:8089/goods/getGoodsListByScene
+#shop.category.url=http://192.168.0.83:8089/goods/getCategoryListByScene
+
+#服务器环境,dev为测试环境,formal为正式环境, hq横琴云副控制服务器
+environment=dev
+
+#国内阿里云服务器
+phone.code.cn=SMS_179150247
+phone.code.en=SMS_139242688
+phone.sign=四维看看
+
+#海外s3服务器
+#phone.code.cn=SMS_190720510
+#phone.code.en=SMS_190780147
+#phone.sign=4Dkankan
+
+#mq的任务key
+rabbitmq.queue=QUEUE_MODELING_A
+#mq当排队任务超过这个数量时启用弹性升缩
+mq.base.num=300
+#弹性伸缩组id
+scaling.group.id=asg-wz92989gdhgek3ktdlsw
+#弹性伸缩规则id
+scaling.rule.ari=ari:acs:ess:cn-shenzhen:1899912233141089:scalingrule/asr-wz97gv4s2nod1cxznynx
+
+#服务器类型,aliyun或hqyun
+ecs.type=hqyun
+
+knife4j.basic.enable=true
+knife4j.basic.username=apiadmin
+knife4j.basic.password=fdkankancui
+
+
+
+expected.time=2021-09-01 00:00:00
+
+
+copyScene-account-id=152
+
+
+

+ 16 - 0
4dkankan-application/src/main/resources/key/private_pkcs8.pem

@@ -0,0 +1,16 @@
+-----BEGIN PRIVATE KEY-----
+MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBAOScGE5AR1jixcGo
+HZMd0kySDk4BQarT1rbYTdXFKXmjn5cXnqGFEfCWnD+bSdLi7fyZdrPso8HjMELo
+vPhBdGmcLwSv74/OT8LnXb1nBZV0uvNe8euFLO3VSUJbOi05z4uTBLsiIJRIpMsU
+j43UpEmgVQvTtmDV23ddhbFMJKUxAgMBAAECgYEAjA6R2YcJ7wvn6jAsBlCz4ZNt
+zh5488aa+iRk8z26njo/cNrYpc4X4pTzHwjtXpUHBsWicrLc1NFyZNufwlyfi1eK
+AaoNC2dHghapmahzCdKRbozVA0+1zsGsUPCNXwPM58YHUtax+nSem1gQJME5+XAA
+A3B1HZSswmiYd6KkBm0CQQD+L1TpsIBpGFWAwvznfHymvifYRzSZzY+Jw110vpt2
+rgPCi77emlBqUsZ5q0VLYaqwuNUjcQp4DB2Ur+7+E7+7AkEA5j4CkmYsb4iIgPiQ
+urmpHrYmIfl8/U6pEaENPDyqzkhyD2IfRh1AqFQfTZzCYlzG7QzzNYY2VCeWMbam
+PMbSAwJBAIW7AUGxyt2AH/wOmmBv7mULxorTa6k/rTUdxB2X6tMV2oSQYWtcZNKL
+mkCJC3wNdnBjzj9HSeq+9RE1PtgOK+ECQQDO4v+an1bkbbIC+dfLAZN29kOzmaR3
+VRxUq/vhmb39mFlte0UQ0q5L0zNBoU+F5UoWreFIwi3FVsD+MNqVmC4TAkEArOZg
+qpGu5SgVNcZKQy0KdBQZoYafD9px+UY0KOo9n08l89DiW63YjrZfcOAf68CBV43R
+t+NFRAUK59TFqvNF6w==
+-----END PRIVATE KEY-----

+ 6 - 0
4dkankan-application/src/main/resources/key/public.pem

@@ -0,0 +1,6 @@
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDknBhOQEdY4sXBqB2THdJMkg5O
+AUGq09a22E3VxSl5o5+XF56hhRHwlpw/m0nS4u38mXaz7KPB4zBC6Lz4QXRpnC8E
+r++Pzk/C5129ZwWVdLrzXvHrhSzt1UlCWzotOc+LkwS7IiCUSKTLFI+N1KRJoFUL
+07Zg1dt3XYWxTCSlMQIDAQAB
+-----END PUBLIC KEY-----

+ 156 - 0
4dkankan-application/src/main/resources/logback-spring.xml

@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+    <property name="LOG_MAX_HISTORY" value="180"/>
+    <springProperty scope="context" name="LOG_PATH" source="logging.path"/>
+
+    <!-- 控制台输出 -->
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
+            <pattern>${LOG_PATH}/%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+    </appender>
+    <!-- 按照每天生成日志文件:主项目日志 -->
+    <appender name="file.all" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 追加日志到原文件结尾 -->
+        <Prudent>true</Prudent>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--日志文件输出的文件名 -->
+            <FileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
+            <MaxHistory>${LOG_MAX_HISTORY}</MaxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <!-- 除按日志记录之外,还配置了日志文件不能超过10M(默认),若超过10M,日志文件会以索引0开始, -->
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{500} - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+    </appender>
+
+    <!--info日志统一输出到这里-->
+    <appender name="file.info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <Prudent>true</Prudent>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--日志文件输出的文件名 每小时生成日志文件 -->
+            <FileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/info/console-info.%d{yyyy-MM-dd-HH}.%i.log</FileNamePattern>
+            <MaxHistory>${LOG_MAX_HISTORY}</MaxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <!-- 除按日志记录之外,还配置了日志文件不能超过10M(默认),若超过10M,日志文件会以索引0开始, -->
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %method 方法名  %L 行数 %msg:日志消息,%n是换行符-->
+            <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+        <!-- 此日志文件只记录info级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!--错误日志统一输出到这里-->
+    <appender name="file.error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <Prudent>true</Prudent>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--日志文件输出的文件名-->
+            <FileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/error/console-error.%d{yyyy-MM-dd-HH}.%i.log</FileNamePattern>
+            <!--日志文件保留天数-->
+            <MaxHistory>${LOG_MAX_HISTORY}</MaxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <!-- 除按日志记录之外,还配置了日志文件不能超过10M(默认),若超过10M,日志文件会以索引0开始, -->
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %method 方法名  %L 行数 %msg:日志消息,%n是换行符-->
+            <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+        <!-- 此日志文件只记录error级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!--warn日志统一输出到这里-->
+    <appender name="file.warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <Prudent>true</Prudent>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--日志文件输出的文件名 按小时生成日志-->
+            <FileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/warn/console-warn.%d{yyyy-MM-dd-HH}.%i.log</FileNamePattern>
+            <!--日志文件保留天数-->
+            <MaxHistory>${LOG_MAX_HISTORY}</MaxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <!-- 除按日志记录之外,还配置了日志文件不能超过10M(默认),若超过10M,日志文件会以索引0开始, -->
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %method 方法名  %L 行数 %msg:日志消息,%n是换行符-->
+            <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+        <!-- 此日志文件只记录warn级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>WARN</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!--debug级别日志统一输出到这里-->
+    <appender name="file.debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <Prudent>true</Prudent>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--日志文件输出的文件名 按小时生成日志-->
+            <FileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/debug/console-debug.%d{yyyy-MM-dd-HH}.%i.log</FileNamePattern>
+            <!--日志文件保留天数-->
+            <MaxHistory>${LOG_MAX_HISTORY}</MaxHistory>
+            <!-- 除按日志记录之外,还配置了日志文件不能超过5M,若超过5M,日志文件会以索引0开始,命名日志文件,例如console-debug.2018-08-24-09.1.log -->
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %method 方法名  %L 行数 %msg:日志消息,%n是换行符-->
+            <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern>
+            <charset>utf-8</charset>
+        </encoder>
+        <!-- 此日志文件只记录debug级别的 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>DEBUG</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY </onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
+    <appender name="file.async" class="ch.qos.logback.classic.AsyncAppender">
+        <discardingThreshold>0</discardingThreshold>
+        <queueSize>256</queueSize>
+        <includeCallerData>true</includeCallerData>
+        <appender-ref ref="file.all" />
+    </appender>
+
+    <!--  日志输出级别 -->
+    <!-- TRACE\DEBUG\INFO\WARN\ERROR\FATAL\OFF -->
+    <root level="INFO">
+        <appender-ref ref="console" />
+        <appender-ref ref="file.async"/>
+        <appender-ref ref="file.error" />
+        <appender-ref ref="file.info" />
+        <appender-ref ref="file.debug" />
+        <appender-ref ref="file.warn" />
+    </root>
+
+</configuration>

+ 7 - 0
4dkankan-application/src/main/resources/mapper/primary/AgentMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.agent.mapper.IAgentMapper">
+
+
+</mapper>

+ 1 - 0
4dkankan-application/src/main/resources/static/MP_verify_i9CLaVAyYoDvylKB.txt

@@ -0,0 +1 @@
+i9CLaVAyYoDvylKB

+ 9 - 0
4dkankan-application/src/main/resources/static/apppro.html

@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+    <head>
+    <title>1</title>
+    </head>
+    <body >
+        4dage,app部门文件,请勿删除
+    </body>
+</html>

BIN
4dkankan-application/src/main/resources/static/img/logo.jpg


File diff suppressed because it is too large
+ 12 - 0
4dkankan-application/src/main/resources/static/refreshToken.json


File diff suppressed because it is too large
+ 1125 - 0
4dkankan-application/src/main/resources/static/txt/SensitiveWord.txt


+ 1 - 0
4dkankan-application/src/main/resources/static/web/X0r8PxoEUm.txt

@@ -0,0 +1 @@
+ebea6e2c83ad7d665fd274edc800a00f

+ 938 - 0
4dkankan-application/src/main/resources/static/web/editProMobile.html

@@ -0,0 +1,938 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+        <meta charset="UTF-8">
+        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, minimal-ui">
+        <meta http-equiv="X-UA-Compatible" content="ie=edge">
+        <meta name="apple-mobile-web-app-capable" content="yes">
+        <meta name="browsermode" content="application">
+        <meta name="full-screen" content="yes">
+		<script src="static/lib/jquery-2.1.1.min.js"></script>
+		<script src="static/lib/jquery.ajax.arraybuffer.min.js"></script>
+        <script src="static/lib/bytebuffer.min.js"></script>
+        <script src="static/lib/protobuf.min.js"></script>
+        <script src="static/lib/base64.min.js"></script>
+        <script src="static/lib/Tween.js"></script>
+        <script src="static/lib/events.js"></script>
+		<script src="static/lib/three95.min.js"></script>
+		<script src="static/lib/howler.min.js"></script>  
+        <!--REVISION: "95"-->
+        <!-- <script src="static/lib/postprocessing/EffectComposer.js"></script> -->
+        <script src="static/lib/postprocessing/MaskPass.js"></script>
+        <script src="static/lib/postprocessing/RenderPass.js"></script>
+        <script src="static/lib/postprocessing/ShaderPass.js"></script>
+		<script src="static/lib/DetectBrowser.js"></script>
+		 
+		<title>四维看看编辑器</title>
+
+	<style>
+		.hide {
+			display: none !important
+		}
+	#consoleLog{ 
+      width: 120px;
+      height: 153px;
+      position: absolute;
+      left: 0px;
+      bottom: 160px;
+      z-index: 999999;
+      color: black;
+      opacity: 0.9;
+        font-size: 12px;
+    }		
+	</style>
+
+	 
+	<script>
+	
+		window.edit = true;
+		window.isMobile = isMobilePcForEdit()==1;
+		
+		if(window.location.href.substring(0,5)!="https" && window.location.href.indexOf("&test")==-1){
+			window.location.href = window.location.href.replace('http','https');
+		}
+		
+		if(!isMobile){
+			var a = window.location.href.indexOf(".html"); 
+			var postfix = window.location.href.substring(a+5);  
+			window.location.href = "editProPC.html"+postfix;  
+		}
+		 
+		
+	</script>
+	 
+	
+	<link rel="stylesheet" href="static/css/base.css"><!-- 公用 -->
+	<link rel="stylesheet" href="static/css/mainApp.css"> 
+	<link rel="stylesheet" href="static/css/icon/iconfont.css"> 
+	<link rel="stylesheet" href="static/css/toolBoxApp.css"> 	
+	<link rel="stylesheet" href="static/css/swiper-4.3.5.min.css"> 
+	<link rel="stylesheet" href="static/css/cropper.min.css"> 
+	<link rel="stylesheet" href="static/css/rulerLabel.css"> 
+	<link rel="shortcut icon" href="https://4dkk.4dage.com/FDKKIMG/icon/kankan_icon.ico">
+	<link rel="icon" type="image/png" href="https://4dkk.4dage.com/FDKKIMG/icon/kankan_icon192.png" sizes="192x192">
+	<link rel="apple-touch-icon" sizes="180x180" href="https://4dkk.4dage.com/FDKKIMG/icon/kankan_icon180.png">  
+	 
+	
+</head>
+
+<body class="mobile edit"> 
+	<div id="BGcover" class='hide' style="background:#fff; position:fixed; height:400%;width:100%;top:-150%;"></div>
+	<div id="gui-thumb" style="display: none;"></div> 
+	<div id="webgl">
+		<div id="addSpot" class=""> <!-- 热点编辑 --> 
+			<div id="playerB" class="view"> 
+			</div> 			
+		</div>
+		<div class="webgl-inside">
+			
+			<div id="player" style="display: none;"></div>  
+			<div id="mainDesignSth">
+				<!-- <div class="wallDesignOption" id="mainLabel"></div>  -->
+				<div class="rulerAndLabel">
+					<div class="rulers hide"> </div>
+					<div class="dollLabels hide"> </div>
+					<div class="planLabels hide"> </div> 
+				</div> 
+			</div>						 
+
+			<div id="gui-parent">
+				<div id="mediaUpOut" class="hide">
+					<div id="mediaUp"></div>
+				</div>
+				<div id="videoPlayer" class="hide">
+					<div class="overlay"></div>
+					<div class="close icon_close"></div>
+				</div>
+				<div id='tryPlay'></div>
+				<div class="snapshotFlash"></div>
+				<div class="reciprocal hide">
+					<span></span>
+				</div>
+				<div id="bottChoseList" class='bottSlideUp hide'>
+					<div>
+						<ul></ul><ul><li class="cancel">取消</li></ul>
+					</div>
+				</div> 
+				<div id="tourSnap" class="hide">新增导览</div>
+
+				<!-- 询问框 -->
+				<div class="dialog_box Box hide">
+					<div>
+						<div class="icon"></div>
+						<div class="tips">
+							<div class="title"></div>
+							<div class="content"></div>
+						</div>
+						<div class="buttons">
+							<button type="cancel">取消</button>
+							<button type="submit">确定</button>
+						</div>
+					</div>
+				</div>
+
+
+				<div id="hotspot" class="">
+					<div class="staticSpot hide">
+						<div class="inside"></div>
+						<div class="point"></div>
+						<div class="around">
+							<div class="iconfont icon_top"></div>
+							<div class="iconfont icon_top"></div>
+							<div class="iconfont icon_top"></div>
+							<div class="iconfont icon_top"></div>
+						</div>
+					</div>
+					<div class="rulers hide"> </div>
+					<div class="dollLabels hide"> </div>
+					<div class="planLabels hide"> </div>
+					<div class="doors hide"> </div>
+				</div>
+				<div class="snapshotGui overlayGui hide">
+					<div class="corner leftTop"></div>
+					<div class="corner rightTop"></div>
+					<div class="corner leftBott"></div>
+					<div class="corner rightBott"></div>
+				</div>
+				<div id="memory-info" style="display:none; position:fixed; right:10px; top:10px; background-color:#eeeeee; color:#222222; padding:3px 10px 3px 10px; font-size:100%;">
+					GPU memory used: <span id="memory-gpu"></span>
+				</div>
+				<div id="gui-loading" class="message-outer darkGlass2" style="z-index: 888;">
+					<div class="message-inner">
+						<!-- <div id="circleLoader">
+							<div id="loader-cont" title="{[{ LOADING }]}">
+								<svg id="svg" width="100" height="100" viewport="0 0 100 100" version="1.1" xmlns="https://www.w3.org/2000/svg">
+									<circle id="barBg" r="47" cx="50" cy="50" fill="transparent" stroke-dasharray="565.48" stroke-dashoffset="0"></circle>
+									<circle id="bar" r="47" cx="50" cy="50" transform="rotate(-90 50 50)" fill="transparent" stroke-dasharray="295.30" stroke-dashoffset="295.30" style="stroke-dashoffset : 295.30"></circle>
+								</svg>
+							</div>
+						</div> -->
+						<div class="loadingLogo">
+							<div class="img">
+								<i class="iconfont icon_logo"></i>
+							</div>
+							<h2 class="model-title">四维看看</h2>
+						</div>
+
+						<div id="loadProgress">
+							<div class="progressInside"></div>
+						</div>
+						<!-- <div id="loaderCoBrand" style="display:none">
+							<div class="vert-align">
+								<p>{[{ PRESENTED_BY_CAPS }]}</p>
+								<h2 id="loaderCoBrandName"></h2>
+							</div>
+						</div> -->
+						<div class="bottom-logo">
+							<div class="img">
+							<i class="iconfont icondkkr"></i>
+						  </div>
+						</div>
+						<div class="specialPower" style="display:none">
+							<!-- <span class="powered-by">{[{ POWERED_BY }]}</span>
+							&#xA0;<div class="img"></div> -->
+						</div>
+					</div>
+				</div>
+				<div id="gui" style="display: none;">
+					<div class="pinBottom-container">
+						<div class="pinBottom center hide">
+							<div id="view-controllers">
+								<div id="gui-modes-dollhouse" class="darkGlass">
+									<span class="mode">{[{ DOLLHOUSE }]}</span>
+								</div>
+								<div id="gui-modes-floorplan" class="darkGlass">
+									<span class="mode">{[{ FLOOR_PLAN }]}</span>
+								</div>
+							</div>
+						</div>
+						<div class="pinBottom zoomPanel hide">
+							<div id="gui-zoomin" class="buttonZoom buttonZoomIn buttonZoomEnabled" data-placement="top">
+								<div class="buttonZoomContent">
+									<a>
+										<i rel="tooltip" title="{[{ ZOOM_IN }]}" class="icon icon-plus"></i>
+									</a>
+								</div>
+							</div>
+							<div id="gui-zoomout" class="buttonZoom buttonZoomOut buttonZoomEnabled" data-placement="top">
+								<div class="buttonZoomContent">
+									<a>
+										<i rel="tooltip" title="{[{ ZOOM_OUT }]}" class="icon icon-minus"></i>
+									</a>
+								</div>
+							</div>
+						</div>
+						<div class="pinBottom left hide">
+							<div class="viewContainer">
+								<div id="pullTab" class="ui-icon darkGlass">
+									<a>
+										<i rel="tooltip" title="{[{ OPEN_HIGHLIGHTS }]}" class="icon icon-dpad-up"></i>
+									</a>
+								</div>
+								<div id="previous" class="previous desktop-only ui-icon tour">
+									<a>
+										<i rel="tooltip" title="{[{ PREVIOUS }]}" class="icon icon-dpad-left"></i>
+									</a>
+								</div>
+								<div id="play" class="ui-icon tour">
+									<a>
+										<i rel="tooltip" title="{[{ PLAY }]}" class="icon icon-play"></i>
+									</a>
+								</div>
+								<div id="pause" class="ui-icon tour" style="display: none;">
+									<a>
+										<i rel="tooltip" title="{[{ PAUSE }]}" class="icon icon-pause"></i>
+									</a>
+								</div>
+								<div id="next" class="next desktop-only ui-icon wide tour">
+									<a>
+										<i rel="tooltip" title="{[{ NEXT }]}" class="icon icon-dpad-right"></i>
+									</a>
+								</div>
+								<div id="gui-modes-inside" class="ui-icon hide">
+									<a>
+										<i rel="tooltip" title="{[{ EXPLORE_3D_SPACE }]}" class="icon icon-inside"></i>
+									</a>
+								</div>
+								<div id="gui-modes-outside" class="ui-icon hide">
+									<a>
+										<i rel="tooltip" title="{[{ VIEW_DOLLHOUSE }]}" class="icon icon-dollhouse"></i>
+									</a>
+								</div>
+							</div>
+						</div>
+						<div class="pinBottom right hideTarget">
+							<div class="rightViewContainer">
+								<div class="gui-floor">
+									<div class="gui-floor-title"></div>
+									<span class="gui-floor-number"></span>
+									<i class="icon icon-dpad-up"></i>
+									<div class="container"></div>
+								</div>
+								<!--<div id="vr" class="ui-icon wide hidden">
+									<a>
+										<i rel="tooltip" title="{[{ VIEW_IN_VR }]}" class="icon icon-webvr"></i>
+									</a>
+								</div>
+								<div id="sharing" class="ui-icon wide hidden hide">
+									<a>
+										<i rel="tooltip" title="{[{ SOCIAL_SHARING }]}" class="icon icon-share"></i>
+									</a>
+								</div>-->
+								<div id="gui-fullscreen" class="ui-icon wide hide" data-placement="top">
+									<a>
+										<i rel="tooltip" title="{[{ VIEW_FULLSCREEN }]}" class="icon icon-fullscreen"></i>
+									</a>
+								</div>
+								<div id="gui-fullscreen-exit" class="ui-icon wide hide" data-placement="top" style="display: none;">
+									<a>
+										<i rel="tooltip" title="{[{ EXIT_FULLSCREEN }]}" class="icon icon-fullscreen-exit"></i>
+									</a>
+								</div>
+								<!-- <div class="pull-right terms terms2">
+									<a>{[{ TERMS }]}</a>
+								</div> -->
+							</div>
+						</div>
+					</div>
+					<div id="drawer-container">
+						<div id="drawer" class="fullWidth">
+							<div class="frame-container darkGlass">
+								<div id="scrollFrame" class="frame">
+									<ul id="thumb-container" class="slidee"></ul>
+								</div>
+								<div class="scrollbar" id="scroller">
+									<div class="handle"></div>
+								</div>
+							</div>
+						</div>
+						<div id="playHead">
+							<div id="status">
+								<span class="curIdx">1</span>
+								of <span class="totalSteps"></span>
+							</div>
+							<div id="progressBar"></div>
+						</div>
+					</div>
+					<!-- <div class="footer hide">
+						<div class="standard">
+							<div class="footer-help">
+								<a class="hasHover">{[{ HELP }]}</a>
+							</div>
+							<div>|</div>
+							<div class="footer-terms">
+								<a class="hasHover">{[{ 4DAGE_TERMS }]}</a>
+							</div>
+							<img src="images/glyph.svg"> 
+						</div>
+						<div class="close">
+							<a class="hasHover">{[{ CLOSE }]}</a>
+						</div>
+					</div> -->
+				</div> 
+				<div id="gui-spinner" style="display: none;">
+					<div class="gui-spinner-icon"></div>
+				</div>
+				<div class="gui-error message-outer" style="display: none;">
+					<div class="message-inner">
+						<div class="message-content">
+							<div class="error-problem-text"></div>
+							<div class="error-solution-text"></div>
+							<div class="error-explanation"></div>
+							<div class="error-actions"></div>
+						</div>
+					</div>
+				</div>
+				<!-- <div id="quick-blackout" class="quick hide"></div> -->
+				<div id="quick-logo" class="quick-brand">
+					<!-- <img src="images/powered-by-4dage.svg"> -->
+				</div>
+				<div id="hover-top" class="hover-row"></div>
+				<div id="hover-bottom" class="hover-row"></div>
+				<div id="call-to-action">
+					<div id="pause-overlay">
+						<div id="pause-icon">
+							<a>
+								<i class="icon icon-pause"></i>
+							</a>
+						</div>
+					</div>
+					<div id="interaction-modal">
+						<div id="interaction-modal-inner">
+							<div class="tour-title">
+								<span class="desktop-title">{[{ DESKTOP_SHORT_CTA }]}</span>
+								<span class="mobile-title">{[{ MOBILE_SHORT_CTA }]}</span>
+							</div>
+							<div class="interaction left">
+								<h2 class="top-info"></h2>
+								<img class="big-image">
+								<hr>
+								<img class="keyboard">
+							</div>
+							<div class="interaction middle">
+								<h2 class="top-info"></h2>
+								<img class="big-image">
+								<hr>
+								<img class="keyboard">
+							</div>
+							<div class="interaction right">
+								<h2 class="top-info"></h2>
+								<img class="big-image">
+								<hr>
+								<img class="keyboard">
+							</div>
+						</div>
+					</div>
+				</div>
+				<div id="tag-billboards"></div>
+			</div>
+		</div>
+		<!--[if lte IE 9]>
+		 <div class="gui-error message-outer">
+		 <div class='message-inner'>
+		 <div class='message-content' style='font-family: Helvetica Neue, sans-serif;'>
+		 <div class="error-problem-text">浏览器不支持.</div>
+		 <div class="error-solution-text">请安装最新版本的浏览器.</div>
+		 <div class="error-actions">
+		 </div>
+		 </div>
+		 </div>
+		 </div>
+		<![endif]-->
+	</div>
+
+	<!-- 以上是webgl展示部分,以下是编辑页面部分 -->
+
+
+	<div class="resultBox hide">
+		<!--提示框 -->
+		<div>保存成功!</div>
+	</div>
+
+	<div class="waiting">
+		<div class="spinner">
+			<div class="bounce1"></div>
+			<div class="bounce2"></div>
+			<div class="bounce3"></div>
+		</div>
+		<div class="text">请等待...</div>
+	</div>
+
+	<div id="back" class="hide circle"><i class="iconfont icon_back"></i></div>
+	<div id="app">
+		<div id="map" class="">
+			<canvas class="canvas-minmap" id="miniMap" width="100" height="100"></canvas>
+			<canvas class="canvas-minmap" id="playMap" width="100" height="100"></canvas>
+		</div>
+		<header>
+			<!-- <a class="btn-left circle"></a> -->
+			<div id="j-header-dropdown" href="javascript:;" class="btn-center">
+				<i class="typeLogo iconfont  "></i>
+				<span id="j-header-scenename">四维看看</span>
+				<i id="j-header-arrow"></i>
+				<div class="desc">
+					<i></i>
+					<div>
+						<h4 id="j-header-scenetitle"></h4>
+						<div id="j-header-scenedesc"></div>
+					</div>
+				</div>
+			</div>
+			<a class="btn-right circle save"><i class="iconfont icon_save"></i></a>
+		</header>
+		<nav>
+			<ul>
+				<li>
+					<span data-type="dollhouse" class="_3d"><i class="icon_3d iconfont"></i></span>
+					
+					<label>3D</label>
+				</li>
+				<li>
+					<span data-type="floorplan" class="_2d "><i class="icon_2d iconfont"></i></span>
+					<label>2D</label>
+				</li>
+				<li>
+					<span data-type="panorama" class="_roam"><i class="icon_tour iconfont"></i></span>
+					<label>漫游</label>
+				</li>
+			</ul>
+		</nav>
+		<footer>
+			<div>
+				<!-- 菜单 -->
+				<div class="footer-tmpl tmpl-menu">
+					<div class="layout">
+						<ul>
+							<li data-name="information">
+								<span class="information"><i class="iconfont icon_information"></i></span>
+								<label>场景信息</label>
+							</li>
+							<li data-name="screen">
+								<span class="screen"><i class="iconfont icon_screen"></i></span>
+								<label>初始画面</label>
+							</li>
+
+							<li data-name="hotpoint.step-1">
+								<span class="hotpoint"><i class="iconfont icon_hotpoint"></i></span>
+								<label>添加热点</label>
+							</li>
+							<!-- <li data-name="lock">
+							<span class="lock"><i class="iconfont icon_lock"></span>
+							<label>隐私权限</label>
+						</li> -->
+							<li data-name="music">
+								<span class="music"><i class="iconfont icon_music"></i></span>
+								<label>背景音乐</label>
+							</li>
+							<li data-name="snapTour.step-1">
+								<span class="snapTour"><i class="iconfont icon_auto"></i></span>
+								<label>自动导览</label>
+							</li>
+							<li data-name="sign">
+								<span class="sign"><i class="iconfont icon_sign"></i></span>
+								<label>地面Logo</label>
+							</li>
+							<li data-name="wallDesign" class="hide">
+								<span class="wallDesign"><i class="iconfont icon_edit"></i></span>
+								<label>修整模型</label>
+							</li>
+							<!-- <li data-name="hotVisible">
+								<span class="hotVisible"><i class="iconfont icon_eye"></i></span>
+								<label>热点可视</label>
+							</li>
+							<li data-name="panoVisible">
+								<span class="panoVisible"><i class="iconfont icon_walk"></i></span>
+								<label>漫游可行</label>
+							</li> -->
+
+						</ul>
+					</div>
+				</div>
+				<div class="footer-tmpl tmpl-hotEdit buttons" style="display: none">
+					<div class="layout">
+						<div class="buttons">
+							<button type="delete">删除</button>
+							<button type="change">修改</button>
+						</div>
+					</div>
+				</div>
+		
+		
+		
+				<!-- 编辑模型 -->
+				
+				<div class="footer-tmpl tmpl-wallDesign" data-layout="" style="display: none">
+					<div class="layout" data-type="main"> 
+					 
+					
+						<div id="objProp" class="hide">
+							<div id="objWidth">
+								<div class="title">门宽度</div>
+								<div class="scrollCon">
+									<div class="hasValue"></div> 
+								</div>
+								<button class="rectBtn" attr-type="del">删除</button>	
+							</div>
+							<div id="objHeightOrDepth">
+								<div class="title">门高度</div>
+								<div class="scrollCon">
+									<div class="hasValue"></div> 
+								</div>
+								<button class="rectBtn" attr-type="done">确定</button>	
+							</div>
+						</div> 
+					
+						<div id="lineProp" class='hide'>
+							<ul class="chose" id="architecture">
+								<li attr-type="door">
+									<div><i class="iconfont icon_door"></i></div><span>门</span>
+								</li>
+								<li attr-type="window">
+									<div><i class="iconfont icon_window"></i></div><span>窗户</span>
+								</li>
+								<li attr-type="column">
+									<div><i class="iconfont icon_column"></i></div><span>柱子</span>
+								</li>
+								<li attr-type="point">
+									<div><i class="iconfont icon_point"></i></div><span>点</span>
+								</li>
+							</ul>
+							<button class="rectBtn">确定</button>
+						</div> 
+						<div id="houseHeight"> 
+							<div>
+								<div class="title"> 地面高度 </div> 
+								<div class="scrollCon">
+									<div id="floorHeight" class="hasValue"></div>
+								</div> 
+							</div> 
+							<div> 
+								<div class="title"> 屋顶高度 </div> 
+								<div class="scrollCon">
+									<div id="ceilHeight" class="hasValue"></div>
+								</div>  
+							</div> 
+						</div>
+						<div id="roomList" class='hide'>
+							<div class="swiper-container room-preview-rooms"> 
+								<div class="swiper-wrapper">
+								</div>
+								<div class="swiper-scrollbar room-preview-rooms-scrollbar"></div>
+							</div>  
+						</div>	
+						<div class="buttons" data-name="wallDesign">
+							<button type="button">返回主界面</button>
+							<button type="submit" class="unable">保存</button>
+						</div>
+					</div>
+					
+					<div class="layout hide" id="roomProp">  
+						<div>
+							<div>
+								<div class="title">房间名字</div>
+								<div class='name'>
+									<input id="roomName" spellcheck="false" class="right" type="text" minlength="1" maxlength="15" placeholder="限15字" >
+								</div>
+								<div class="tip">限定15字以内</div>
+							</div>
+							<div>
+								<div class="title">显示名称</div>
+								<div class="switch" data-name="nameDisplay"><div></div></div> 
+								<div class="title">显示面积</div>
+								<div class="switch" data-name="areaDisplay"><div></div></div>
+							</div>
+						</div> 
+						<div> 
+							<div id="localBottom">
+								<div class="title"> 房间地面 </div> 
+								<div class="scrollCon">
+									<div id="roomFloorHeight" class="hasValue"></div>
+								</div> 
+							</div> 
+							<div id="localTop"> 
+								<div class="title"> 房间屋顶 </div> 
+								<div class="scrollCon">
+									<div id="roomCeilHeight" class="hasValue"></div>
+								</div>  
+							</div> 
+						</div>
+						 
+						<div class="buttons"> 
+							<button type="submit">确定</button>
+						</div>
+						
+					</div>  
+					
+				</div> 
+		
+		
+		
+		
+		
+		
+				<!-- 热点 -->
+				<div class="footer-tmpl tmpl-hotpoint step-1" style="display: none">
+					<div class="layout">
+						<div class="tips center">选择热点,将上方热点对准所需标记的位置</div>
+						<div class="icons swiper-container">
+							<div class="swiper-wrapper"> </div>
+						</div>
+						<div class="buttons" data-name="hotpoint.step-1">
+							<button type="button">取消</button>
+							<button type="submit">确定</button>
+						</div>
+					</div>
+				</div>
+				<!-- 热点步奏2 -->
+				<div class="footer-tmpl tmpl-hotpoint step-2" data-layout="" style="display: none">
+					<div class="layout">
+						<div class="tips center">拖动滑块、根据绿色阴影调整热点位置</div>
+						<div class="slideCtrl"> </div>
+						<div class="buttons" data-name="hotpoint.step-2" data-next="">
+							<button type="preStep">上一步</button>
+							<button type="submit">确定</button>
+						</div>
+					</div>
+				</div>
+				<!-- 热点步奏3 -->
+				<div class="footer-tmpl tmpl-hotpoint step-3" style="display: none">
+					<div class="layout">
+						<div class="tips">标题</div>
+						<div class="word">
+							<input class="title" type="text" placeholder="请输入您的标题" maxlength="15">
+							<div class="warn hide">请添加标题(15字以内)</div>
+						</div>
+						<!-- <textarea class="desc" placeholder="请输入您的简介" maxlength="200"></textarea> -->
+						<div class="tips">内容简介</div>
+						<div class="textArea desc" contenteditable="true" placeholder="请输入您的简介" maxlength="200"></div>
+
+						<div class="tips">添加链接</div>
+						<div class="link">
+							<input class="text" type="text" placeholder="添加链接文本" maxlength="40">
+							<input class="url" type="text" placeholder="添加链接地址" maxlength="500">
+							<a class="submit">添加</a>
+							<a class="button">取消</a>
+						</div>
+
+						<div class="tips">添加图片</div>
+						<div class="photo">
+							<input id="spot_photo" class="mediaInput" type="file" style="display:none" accept="image/*">
+							<div for="spot_photo" class="preview">
+								添加图片
+							</div>
+							<!-- <a class="del hide"></a> -->
+						</div>
+
+						<div class="tips">添加音频</div>
+						<div class="audio">
+							<div class="textArea">无</div>
+							<a class="submit">上传音频</a>
+						</div>
+
+						<div class="tips">添加视频</div>
+						<div class="video">
+							<input id="spot_video" class="mediaInput" type="file" style="display:none" accept="video/*">
+							<div for="spot_video" class="preview">
+								<!-- <div class="playBtn"><span></span></div>  -->
+								<span class='text'>添加视频</span>
+							</div>
+							<!-- <a class="del hide"></a> -->
+						</div>
+						<div class="buttons whiteBG" data-name="hotpoint.step-3">
+							<span class="tips hide" style="padding-top: 0; display:block; line-height: 0.8rem;">旧版热点仅能修改展示信息,无法修改位置</span>
+							<button type="button" class="hide">取消</button>
+							<button type="preStep">上一步</button>
+							<button type="submit">保存</button>
+						</div>
+					</div>
+				</div>
+				<!-- 初始画面 -->
+				<div class="footer-tmpl tmpl-screen" style="display: none">
+					<div class="layout">
+						<div class="tips center">移动屏幕,点击确定选择您的初始画面</div>
+						<div class="buttons" data-name="screen">
+							<button type="button">取消</button>
+							<button type="submit">确定</button>
+						</div>
+					</div>
+				</div>
+			 
+				<!-- 场景信息 -->
+				<div class="footer-tmpl tmpl-information" style="display: none">
+					<div class="layout">
+						<div class="tips">填写您项目的场景信息</div> 
+						<div class="word">
+							<input class="title" type="text" placeholder="请输入您的标题" maxlength="15" spellcheck="false">
+							<div class="warn hide">请添加标题(15字以内)</div>
+						</div>  
+						<!-- <textarea class="desc" placeholder="请输入简介" maxlength="200"></textarea> -->
+						<div contenteditable="true" placeholder="请输入简介" class="desc" maxlength="200"></div>
+						<div class="link">
+							<input class="text" type="text" placeholder="添加链接文本" maxlength="40">
+							<input class="url" type="text" placeholder="添加链接地址" maxlength="500">
+							<a class="submit">添加</a>
+							<a class="button">取消</a>
+						</div>
+						<!-- <div class="limit">(&nbsp;
+						<label>0</label>/200&nbsp;)</div> -->
+						<div class="tips">请选择分类</div>
+						<div class="categorys">
+						</div>
+						<div class="lock">
+							<div>
+								<div class="tips">隐私权限</div>
+								<div class="switch">
+									<div></div>
+								</div>
+							</div>
+							<div class="word" style='opacity:0; pointer-events:none'>
+								<input type="text" maxlength="4" placeholder="4位数字或字母">
+								<!--4位字母或数字 -->
+								<div class="warn hide">请输入4位数的密码</div>
+							</div>
+						</div>
+						<div class="buttons" data-name="information">
+							<button type="button">取消</button>
+							<button type="submit">确定</button>
+						</div>
+					</div>
+				</div>
+				 
+				
+				
+				
+				<!-- 选择音乐 -->
+				<div class="footer-tmpl tmpl-music" style="display: none">
+					<div class="layout">
+						<div class="tips">选择音乐
+							<span class="right">无音乐</span>
+						</div>
+						<ul class="chose"></ul>
+						<div class="buttons" data-name="music">
+							<button type="button">取消</button>
+							<button type="submit">确定</button>
+						</div>
+					</div>
+				</div>
+				<!-- 地面标志 -->
+				<div class="footer-tmpl tmpl-sign" style="display: none">
+					<img class="icon">
+					<div class="layout">
+						<div class="tips">
+							标志样式
+							<span class="right">修改</span>
+						</div>
+						<ul class="chose">
+							<li><span></span></li>
+							<li><span></span></li>
+							<li><span></span></li>
+							<li><span></span></li>
+						</ul>
+						<div class="clear"></div>
+						<div class="size">
+							<span>标志大小</span>
+							<div id="floorLogoSize"> </div>
+						</div>
+						<div class="buttons" data-name="sign">
+							<button type="button" @click="close">取消</button>
+							<button type="submit" @click="save">确定</button>
+						</div>
+					</div>
+				</div>
+				<!-- 热点可视 -->
+				<div class="footer-tmpl tmpl-hotVisible" style="display: none">
+					<div class="layout">
+						<div class="tips center"> 点击选择要设置的热点</div>
+						<div class="buttons" data-name="hotVisible">
+							<button type="button">取消</button>
+							<button type="submit">确定</button>
+						</div>
+					</div>
+				</div>
+
+				<div class="footer-tmpl tmpl-panoVisible" style="display: none">
+					<div class="layout">
+						<div class="tips center">点击漫游点可以设置和中心漫游点是否通行</div>
+						<div class="buttons" data-name="panoVisible">
+							<button type="button">取消</button>
+							<button type="submit">确定</button>
+						</div>
+					</div>
+				</div>
+
+
+
+				<!-- 录制 -->
+				<div class="footer-tmpl tmpl-snapTour step-1" style="display: none">
+					<div class="layout">
+						<div class="tips center">点击确定开始录制导览</div>
+						<div class="buttons" data-name="snapTour.step-1">
+							<button type="button">取消</button>
+							<button type="submit">确定</button>
+						</div>
+					</div>
+				</div>
+
+				<div class="footer-tmpl tmpl-snapTour step-2" style="display: none">
+					<div class="layout">
+						<div class="tips center"><i></i><span class="times">00:00</span></div>
+						<div class="buttons" data-name="snapTour.step-2">
+							<button type="button">取消</button>
+							<button type="submit">完成录制</button>
+						</div>
+					</div>
+				</div>
+
+				<!-- 删除 -->
+				<div class="footer-tmpl tmpl-delete" style="display: none">
+					<div class="layout">
+						<div class="tips center"></div>
+						<small class="tips center">(该场景数据将被删除,不可恢复。)</small>
+						<div class="buttons" data-name="delete">
+							<button type="button">取消</button>
+							<button type="submit">确定</button>
+						</div>
+					</div>
+				</div>
+			</div>
+		</footer>
+		<!-- 隐私权限 -->
+		<div class="footer-tmpl tmpl-lock Box" style="display: none">
+			<div>
+				<div class="icon"></div>
+				<div class="psd">
+					<input type="text" maxlength="4">
+					<ul>
+						<!-- <li><input type="text" maxlength="1" ></li>
+						<li><input type="text" maxlength="1"></li>
+						<li><input type="text" maxlength="1"></li>
+						<li><input type="text" maxlength="1"></li> -->
+						<li></li>
+						<li></li>
+						<li></li>
+						<li></li>
+					</ul>
+				</div>
+				<div class="tips">请设置您的加密密码</div>
+				<div class="buttons" data-name="lock">
+					<button type="cancelPsd">取消加密</button>
+					<button type="submit">确定</button>
+				</div>
+			</div>
+		</div>
+	</div>
+	 
+	<script src="static/lib/flexible.min.js"></script> 
+	<script src="static/lib/exif.min.js"></script>
+	<script id='recordJS'></script> 
+	<script> 
+		//手机端是微信才使用网页录音
+		if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){
+			$("#recordJS")[0].src = 'static/lib/record/index.js';
+		}
+		
+		 
+	</script> 
+	 
+	
+	
+	<script src="static/lib/autoLogin.js"></script>  <!-- 防止掉线 --> 
+	
+	<script src="static/js/editApp.js"></script>   
+	
+	
+	 
+
+	<script> 
+			  
+
+		//function start() {
+			var app = new App('0mVvxHHT');
+			console.log('开始测试!');
+			//app.start();
+		//}
+		 
+	 
+	</script>  
+
+
+	
+	<script src="static/lib/swiper-4.3.5.min.js"></script>
+	<script src="static/lib/jroll.2.6.5.min.js"></script>
+	
+    <script src="static/lib/cropper.min.js"></script>
+	 
+	<script src="static/lib/wangEditorV2.min.js"></script>
+	<script src="static/lib/howler.min.js" class="build keep"></script>
+	 
+	<!-- <script src="static/lib/qiniu.js"></script>
+	<script src="static/lib/7niuUpload.js"></script>   -->
+	
+	 
+	
+	
+	
+</body>
+
+</html>

File diff suppressed because it is too large
+ 1484 - 0
4dkankan-application/src/main/resources/static/web/editProPC.html


+ 25 - 0
4dkankan-application/src/main/resources/static/web/index.html

@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <meta name="viewport" content="width=device-width,initial-scale=1.0">
+    <meta http-equiv="Cache-Control" content="max-age=7200" />
+    <meta content="telephone=no" name="format-detection">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="browsermode" content="application">
+    <meta name="full-screen" content="yes">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="description" content="世界上首款消费级3D相机—四维看看(4DKanKan)。技术核心三要素:易操作;自动化;高精度。主要应用领域为数字文博、数字地产、数字电商、数字餐饮、数字家居等。">
+    <link rel="shortcut icon" href="//4dkk.4dage.com/FDKKIMG/icon/kankan_icon.ico">
+    <link rel="icon" type="image/png" href="//4dkk.4dage.com/FDKKIMG/icon/kankan_icon192.png" sizes="192x192">
+    <link rel="apple-touch-icon" sizes="180x180" href="//4dkk.4dage.com/FDKKIMG/icon/kankan_icon180.png">
+    <title>四维看看</title>
+</head>
+<body>
+  <script>
+      location.href = '/main.html'
+  </script>
+</body>
+</html>

File diff suppressed because it is too large
+ 5 - 0
4dkankan-application/src/main/resources/static/web/main.html


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/index.html


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.03566d57fba94cf3db54d31da3fde783.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.03566d57fba94cf3db54d31da3fde783.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.06f5af4297b015119cdc71452a4f4850.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.06f5af4297b015119cdc71452a4f4850.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.0a3bd5927ff6a83b253373e4b254d6d9.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.0a3bd5927ff6a83b253373e4b254d6d9.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.0dcd50fabe90ab980ce86aeeda3f2e9f.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.0dcd50fabe90ab980ce86aeeda3f2e9f.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.1005d7321d2fe97f19a652d85c9cc8be.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.1005d7321d2fe97f19a652d85c9cc8be.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.223154d11089bfb2aeeb1ce460431686.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.223154d11089bfb2aeeb1ce460431686.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.22735323393853d12fb006925deeb81e.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.22735323393853d12fb006925deeb81e.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.2f7df64759973c8ccbccd6c22687a28e.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.2f7df64759973c8ccbccd6c22687a28e.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.32ebbf911b096da79950a8a3fbedbd09.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.32ebbf911b096da79950a8a3fbedbd09.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.344493f7fed8f370689fe18fcb7753dd.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.344493f7fed8f370689fe18fcb7753dd.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.3794c1bb4f56b94e8fc0d2c7e468ca1a.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.3794c1bb4f56b94e8fc0d2c7e468ca1a.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.45c41b1de723fc3bbfa6418c10bc75ba.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.45c41b1de723fc3bbfa6418c10bc75ba.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.46168df1ce5bb0242ed64d4e2f9f4c53.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.46168df1ce5bb0242ed64d4e2f9f4c53.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4789d6efa9401122ad2cfa80d3e6d5f1.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4789d6efa9401122ad2cfa80d3e6d5f1.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4ae2ebe497d2d53b1724ec0405d85cb0.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4ae2ebe497d2d53b1724ec0405d85cb0.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4af4125e88c0bf418797314a5d7d4017.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4af4125e88c0bf418797314a5d7d4017.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4e8a03e39c23e3be4c46d8196539f941.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.4e8a03e39c23e3be4c46d8196539f941.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.51100ade853547cd9005b30826895955.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.51100ade853547cd9005b30826895955.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.60ad4a1d0a3871da0d7e7205d6a7eb90.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.60ad4a1d0a3871da0d7e7205d6a7eb90.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.6b857134f8a4e41bf2f14f2b9b62ccd3.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.6b857134f8a4e41bf2f14f2b9b62ccd3.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.6f49d30727d13e8a62ebb8d572f74384.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.6f49d30727d13e8a62ebb8d572f74384.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.6f6cd1e0f2af1b4083ea55ee1f949564.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.6f6cd1e0f2af1b4083ea55ee1f949564.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.76ff4b8a7f42b53739b18d8d0a81ae1d.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.76ff4b8a7f42b53739b18d8d0a81ae1d.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.7d08d50f560d8788ff5cbb7f3e7d9172.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.7d08d50f560d8788ff5cbb7f3e7d9172.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.83261b526a44dae1a349965f8b53b461.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.83261b526a44dae1a349965f8b53b461.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.8891e43392b7ea49b0c7a8f01206241f.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.8891e43392b7ea49b0c7a8f01206241f.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.8d74e8c609b757bbbde21dd710b222ff.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.8d74e8c609b757bbbde21dd710b222ff.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.9aa3a8ba13cfc73dddefb8af7f0947ae.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.9aa3a8ba13cfc73dddefb8af7f0947ae.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.9ce70446cb684065aace8b20909532f7.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.9ce70446cb684065aace8b20909532f7.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.b20b8583952e946cbd4f96d95baf7b27.css


File diff suppressed because it is too large
+ 1 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.b20b8583952e946cbd4f96d95baf7b27.css.map


File diff suppressed because it is too large
+ 2 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.b3919dc158c61019daeaac1ab86dceb7.css


+ 0 - 0
4dkankan-application/src/main/resources/static/web/mobile/static/css/app.b3919dc158c61019daeaac1ab86dceb7.css.map


Some files were not shown because too many files changed in this diff