andrew 4 gadus atpakaļ
vecāks
revīzija
f1312aae8e
100 mainītis faili ar 14105 papildinājumiem un 0 dzēšanām
  1. 29
    0
      .gitignore
  2. 114
    0
      .mvn/wrapper/MavenWrapperDownloader.java
  3. Binārs
      .mvn/wrapper/maven-wrapper.jar
  4. 1
    0
      .mvn/wrapper/maven-wrapper.properties
  5. 0
    0
      git
  6. 337
    0
      hs_err_pid21432.log
  7. 286
    0
      mvnw
  8. 161
    0
      mvnw.cmd
  9. 202
    0
      pom.xml
  10. 4130
    0
      replay_pid21432.log
  11. 17
    0
      src/main/java/com/huiju/estateagents/EstateagentsApplication.java
  12. 88
    0
      src/main/java/com/huiju/estateagents/activity/controller/ActivityController.java
  13. 37
    0
      src/main/java/com/huiju/estateagents/activity/entity/Activity.java
  14. 23
    0
      src/main/java/com/huiju/estateagents/activity/mapper/ActivityMapper.java
  15. 27
    0
      src/main/java/com/huiju/estateagents/activity/service/ActivityServiceI.java
  16. 135
    0
      src/main/java/com/huiju/estateagents/activity/service/impl/ActivityServiceImpl.java
  17. 144
    0
      src/main/java/com/huiju/estateagents/base/BaseController.java
  18. 81
    0
      src/main/java/com/huiju/estateagents/base/ResponseBean.java
  19. 38
    0
      src/main/java/com/huiju/estateagents/base/UserControl.java
  20. 49
    0
      src/main/java/com/huiju/estateagents/bo/request/ActivityStatisticResponseBO.java
  21. 88
    0
      src/main/java/com/huiju/estateagents/bo/request/ContractRecordRequestBO.java
  22. 65
    0
      src/main/java/com/huiju/estateagents/bo/request/HousingRaiseRequestBO.java
  23. 72
    0
      src/main/java/com/huiju/estateagents/bo/request/PresecretRecordRequestBO.java
  24. 29
    0
      src/main/java/com/huiju/estateagents/bo/request/QrCodeStatisticResponseBO.java
  25. 75
    0
      src/main/java/com/huiju/estateagents/bo/request/RaiseOrderRequestBO.java
  26. 100
    0
      src/main/java/com/huiju/estateagents/bo/request/RaiseRecordRequestBO.java
  27. 18
    0
      src/main/java/com/huiju/estateagents/bo/request/SaveCzOrderRequestBO.java
  28. 18
    0
      src/main/java/com/huiju/estateagents/bo/request/SaveRefundOrderRequestBO.java
  29. 143
    0
      src/main/java/com/huiju/estateagents/center/sysUser/controller/SysTokenController.java
  30. 271
    0
      src/main/java/com/huiju/estateagents/center/sysUser/controller/SysUserController.java
  31. 38
    0
      src/main/java/com/huiju/estateagents/center/sysUser/entity/SysToken.java
  32. 55
    0
      src/main/java/com/huiju/estateagents/center/sysUser/entity/SysUser.java
  33. 18
    0
      src/main/java/com/huiju/estateagents/center/sysUser/mapper/SysTokenMapper.java
  34. 18
    0
      src/main/java/com/huiju/estateagents/center/sysUser/mapper/SysUserMapper.java
  35. 17
    0
      src/main/java/com/huiju/estateagents/center/sysUser/service/ISysTokenService.java
  36. 16
    0
      src/main/java/com/huiju/estateagents/center/sysUser/service/ISysUserService.java
  37. 35
    0
      src/main/java/com/huiju/estateagents/center/sysUser/service/impl/SysTokenServiceImpl.java
  38. 21
    0
      src/main/java/com/huiju/estateagents/center/sysUser/service/impl/SysUserServiceImpl.java
  39. 149
    0
      src/main/java/com/huiju/estateagents/center/taUser/controller/TaButtonUriMapController.java
  40. 149
    0
      src/main/java/com/huiju/estateagents/center/taUser/controller/TaTagUserController.java
  41. 150
    0
      src/main/java/com/huiju/estateagents/center/taUser/controller/TaTagsController.java
  42. 68
    0
      src/main/java/com/huiju/estateagents/center/taUser/controller/TaUserAuthButtonController.java
  43. 72
    0
      src/main/java/com/huiju/estateagents/center/taUser/controller/TaUserAuthMenuController.java
  44. 566
    0
      src/main/java/com/huiju/estateagents/center/taUser/controller/TaUserController.java
  45. 178
    0
      src/main/java/com/huiju/estateagents/center/taUser/controller/TaUserRoleController.java
  46. 40
    0
      src/main/java/com/huiju/estateagents/center/taUser/entity/TaButtonUriMap.java
  47. 35
    0
      src/main/java/com/huiju/estateagents/center/taUser/entity/TaTagUser.java
  48. 53
    0
      src/main/java/com/huiju/estateagents/center/taUser/entity/TaTags.java
  49. 270
    0
      src/main/java/com/huiju/estateagents/center/taUser/entity/TaUser.java
  50. 51
    0
      src/main/java/com/huiju/estateagents/center/taUser/entity/TaUserRole.java
  51. 20
    0
      src/main/java/com/huiju/estateagents/center/taUser/mapper/TaButtonUriMapMapper.java
  52. 18
    0
      src/main/java/com/huiju/estateagents/center/taUser/mapper/TaTagUserMapper.java
  53. 18
    0
      src/main/java/com/huiju/estateagents/center/taUser/mapper/TaTagsMapper.java
  54. 38
    0
      src/main/java/com/huiju/estateagents/center/taUser/mapper/TaUserAuthButtonMapper.java
  55. 46
    0
      src/main/java/com/huiju/estateagents/center/taUser/mapper/TaUserAuthMenuMapper.java
  56. 40
    0
      src/main/java/com/huiju/estateagents/center/taUser/mapper/TaUserMapper.java
  57. 18
    0
      src/main/java/com/huiju/estateagents/center/taUser/mapper/TaUserRoleMapper.java
  58. 17
    0
      src/main/java/com/huiju/estateagents/center/taUser/service/ITaButtonUriMapService.java
  59. 16
    0
      src/main/java/com/huiju/estateagents/center/taUser/service/ITaTagUserService.java
  60. 16
    0
      src/main/java/com/huiju/estateagents/center/taUser/service/ITaTagsService.java
  61. 22
    0
      src/main/java/com/huiju/estateagents/center/taUser/service/ITaUserAuthButtonService.java
  62. 24
    0
      src/main/java/com/huiju/estateagents/center/taUser/service/ITaUserAuthMenuService.java
  63. 16
    0
      src/main/java/com/huiju/estateagents/center/taUser/service/ITaUserRoleService.java
  64. 78
    0
      src/main/java/com/huiju/estateagents/center/taUser/service/ITaUserService.java
  65. 28
    0
      src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaButtonUriMapServiceImpl.java
  66. 20
    0
      src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaTagUserServiceImpl.java
  67. 20
    0
      src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaTagsServiceImpl.java
  68. 112
    0
      src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaUserAuthButtonServiceImpl.java
  69. 199
    0
      src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaUserAuthMenuServiceImpl.java
  70. 20
    0
      src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaUserRoleServiceImpl.java
  71. 748
    0
      src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaUserServiceImpl.java
  72. 293
    0
      src/main/java/com/huiju/estateagents/channel/sysChannel/controller/SysUserChannelController.java
  73. 41
    0
      src/main/java/com/huiju/estateagents/channel/sysChannel/entity/TaChannelProxy.java
  74. 12
    0
      src/main/java/com/huiju/estateagents/channel/sysChannel/mapper/TaChannelProxyMapper.java
  75. 12
    0
      src/main/java/com/huiju/estateagents/channel/sysChannel/service/ITaChannelProxyService.java
  76. 57
    0
      src/main/java/com/huiju/estateagents/channel/sysChannel/service/impl/TaChannelProxyServiceImpl.java
  77. 70
    0
      src/main/java/com/huiju/estateagents/cleancode/CleanCode.java
  78. 63
    0
      src/main/java/com/huiju/estateagents/common/AliOSSUtils.java
  79. 137
    0
      src/main/java/com/huiju/estateagents/common/BeanTools.java
  80. 919
    0
      src/main/java/com/huiju/estateagents/common/CommConstant.java
  81. 86
    0
      src/main/java/com/huiju/estateagents/common/CommonUtils.java
  82. 15
    0
      src/main/java/com/huiju/estateagents/common/DBUtils.java
  83. 117
    0
      src/main/java/com/huiju/estateagents/common/DateUtils.java
  84. 38
    0
      src/main/java/com/huiju/estateagents/common/ExcelUtils.java
  85. 109
    0
      src/main/java/com/huiju/estateagents/common/JWTUtils.java
  86. 16
    0
      src/main/java/com/huiju/estateagents/common/MD5Utils.java
  87. 90
    0
      src/main/java/com/huiju/estateagents/common/MiniAppPageEnum.java
  88. 18
    0
      src/main/java/com/huiju/estateagents/common/NumberUtils.java
  89. 165
    0
      src/main/java/com/huiju/estateagents/common/SMSUtils.java
  90. 72
    0
      src/main/java/com/huiju/estateagents/common/StringConverter.java
  91. 108
    0
      src/main/java/com/huiju/estateagents/common/StringUtils.java
  92. 33
    0
      src/main/java/com/huiju/estateagents/common/WxQrCodeUtils.java
  93. 59
    0
      src/main/java/com/huiju/estateagents/common/WxUtils.java
  94. 42
    0
      src/main/java/com/huiju/estateagents/common/wxpay/IWXPayDomain.java
  95. 689
    0
      src/main/java/com/huiju/estateagents/common/wxpay/WXPay.java
  96. 103
    0
      src/main/java/com/huiju/estateagents/common/wxpay/WXPayConfig.java
  97. 59
    0
      src/main/java/com/huiju/estateagents/common/wxpay/WXPayConstants.java
  98. 106
    0
      src/main/java/com/huiju/estateagents/common/wxpay/WXPayRefundReason.java
  99. 265
    0
      src/main/java/com/huiju/estateagents/common/wxpay/WXPayReport.java
  100. 0
    0
      src/main/java/com/huiju/estateagents/common/wxpay/WXPayRequest.java

+ 29
- 0
.gitignore Parādīt failu

@@ -0,0 +1,29 @@
1
+HELP.md
2
+/target/
3
+!.mvn/wrapper/maven-wrapper.jar
4
+
5
+### STS ###
6
+.apt_generated
7
+.classpath
8
+.factorypath
9
+.project
10
+.settings
11
+.springBeans
12
+.sts4-cache
13
+
14
+### IntelliJ IDEA ###
15
+.idea
16
+*.iws
17
+*.iml
18
+*.ipr
19
+
20
+### NetBeans ###
21
+/nbproject/private/
22
+/nbbuild/
23
+/dist/
24
+/nbdist/
25
+/.nb-gradle/
26
+/build/
27
+
28
+### VS Code ###
29
+.vscode/

+ 114
- 0
.mvn/wrapper/MavenWrapperDownloader.java Parādīt failu

@@ -0,0 +1,114 @@
1
+/*
2
+Licensed to the Apache Software Foundation (ASF) under one
3
+or more contributor license agreements.  See the NOTICE file
4
+distributed with this work for additional information
5
+regarding copyright ownership.  The ASF licenses this file
6
+to you under the Apache License, Version 2.0 (the
7
+"License"); you may not use this file except in compliance
8
+with the License.  You may obtain a copy of the License at
9
+
10
+  https://www.apache.org/licenses/LICENSE-2.0
11
+
12
+Unless required by applicable law or agreed to in writing,
13
+software distributed under the License is distributed on an
14
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+KIND, either express or implied.  See the License for the
16
+specific language governing permissions and limitations
17
+under the License.
18
+*/
19
+
20
+import java.io.File;
21
+import java.io.FileInputStream;
22
+import java.io.FileOutputStream;
23
+import java.io.IOException;
24
+import java.net.URL;
25
+import java.nio.channels.Channels;
26
+import java.nio.channels.ReadableByteChannel;
27
+import java.util.Properties;
28
+
29
+public class MavenWrapperDownloader {
30
+
31
+    /**
32
+     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
33
+     */
34
+    private static final String DEFAULT_DOWNLOAD_URL =
35
+            "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar";
36
+
37
+    /**
38
+     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
39
+     * use instead of the default one.
40
+     */
41
+    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
42
+            ".mvn/wrapper/maven-wrapper.properties";
43
+
44
+    /**
45
+     * Path where the maven-wrapper.jar will be saved to.
46
+     */
47
+    private static final String MAVEN_WRAPPER_JAR_PATH =
48
+            ".mvn/wrapper/maven-wrapper.jar";
49
+
50
+    /**
51
+     * Name of the property which should be used to override the default download url for the wrapper.
52
+     */
53
+    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
54
+
55
+    public static void main(String args[]) {
56
+        System.out.println("- Downloader started");
57
+        File baseDirectory = new File(args[0]);
58
+        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
59
+
60
+        // If the maven-wrapper.properties exists, read it and check if it contains a custom
61
+        // wrapperUrl parameter.
62
+        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
63
+        String url = DEFAULT_DOWNLOAD_URL;
64
+        if(mavenWrapperPropertyFile.exists()) {
65
+            FileInputStream mavenWrapperPropertyFileInputStream = null;
66
+            try {
67
+                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
68
+                Properties mavenWrapperProperties = new Properties();
69
+                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
70
+                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
71
+            } catch (IOException e) {
72
+                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
73
+            } finally {
74
+                try {
75
+                    if(mavenWrapperPropertyFileInputStream != null) {
76
+                        mavenWrapperPropertyFileInputStream.close();
77
+                    }
78
+                } catch (IOException e) {
79
+                    // Ignore ...
80
+                }
81
+            }
82
+        }
83
+        System.out.println("- Downloading from: : " + url);
84
+
85
+        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
86
+        if(!outputFile.getParentFile().exists()) {
87
+            if(!outputFile.getParentFile().mkdirs()) {
88
+                System.out.println(
89
+                        "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'");
90
+            }
91
+        }
92
+        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
93
+        try {
94
+            downloadFileFromURL(url, outputFile);
95
+            System.out.println("Done");
96
+            System.exit(0);
97
+        } catch (Throwable e) {
98
+            System.out.println("- Error downloading");
99
+            e.printStackTrace();
100
+            System.exit(1);
101
+        }
102
+    }
103
+
104
+    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
105
+        URL website = new URL(urlString);
106
+        ReadableByteChannel rbc;
107
+        rbc = Channels.newChannel(website.openStream());
108
+        FileOutputStream fos = new FileOutputStream(destination);
109
+        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
110
+        fos.close();
111
+        rbc.close();
112
+    }
113
+
114
+}

Binārs
.mvn/wrapper/maven-wrapper.jar Parādīt failu


+ 1
- 0
.mvn/wrapper/maven-wrapper.properties Parādīt failu

@@ -0,0 +1 @@
1
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip

+ 0
- 0
git Parādīt failu


+ 337
- 0
hs_err_pid21432.log Parādīt failu

@@ -0,0 +1,337 @@
1
+#
2
+# There is insufficient memory for the Java Runtime Environment to continue.
3
+# Native memory allocation (malloc) failed to allocate 1163536 bytes for Chunk::new
4
+# Possible reasons:
5
+#   The system is out of physical RAM or swap space
6
+#   In 32 bit mode, the process size limit was hit
7
+# Possible solutions:
8
+#   Reduce memory load on the system
9
+#   Increase physical memory or swap space
10
+#   Check if swap backing store is full
11
+#   Use 64 bit Java on a 64 bit OS
12
+#   Decrease Java heap size (-Xmx/-Xms)
13
+#   Decrease number of Java threads
14
+#   Decrease Java thread stack sizes (-Xss)
15
+#   Set larger code cache with -XX:ReservedCodeCacheSize=
16
+# This output file may be truncated or incomplete.
17
+#
18
+#  Out of Memory Error (allocation.cpp:390), pid=21432, tid=0x0000000000000624
19
+#
20
+# JRE version: Java(TM) SE Runtime Environment (8.0_181-b13) (build 1.8.0_181-b13)
21
+# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.181-b13 mixed mode windows-amd64 compressed oops)
22
+# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
23
+#
24
+
25
+---------------  T H R E A D  ---------------
26
+
27
+Current thread (0x0000000019b54800):  JavaThread "C2 CompilerThread5" daemon [_thread_in_native, id=1572, stack(0x000000001bbf0000,0x000000001bcf0000)]
28
+
29
+Stack: [0x000000001bbf0000,0x000000001bcf0000]
30
+[error occurred during error reporting (printing stack bounds), id 0xc0000005]
31
+
32
+Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
33
+
34
+
35
+Current CompileTask:
36
+C2:  38929 7370 %     4       lombok.javac.apt.LombokProcessor::process @ 366 (540 bytes)
37
+
38
+
39
+---------------  P R O C E S S  ---------------
40
+
41
+Java Threads: ( => current thread )
42
+  0x0000000019c32000 JavaThread "Service Thread" daemon [_thread_blocked, id=27076, stack(0x000000001c2f0000,0x000000001c3f0000)]
43
+  0x0000000019bd4000 JavaThread "C1 CompilerThread11" daemon [_thread_blocked, id=16184, stack(0x000000001c1f0000,0x000000001c2f0000)]
44
+  0x0000000019bd1000 JavaThread "C1 CompilerThread10" daemon [_thread_blocked, id=19572, stack(0x000000001c0f0000,0x000000001c1f0000)]
45
+  0x0000000019bb8800 JavaThread "C1 CompilerThread9" daemon [_thread_blocked, id=22288, stack(0x000000001bff0000,0x000000001c0f0000)]
46
+  0x0000000019b9f800 JavaThread "C1 CompilerThread8" daemon [_thread_blocked, id=19548, stack(0x000000001bef0000,0x000000001bff0000)]
47
+  0x0000000019b85000 JavaThread "C2 CompilerThread7" daemon [_thread_blocked, id=25536, stack(0x000000001bdf0000,0x000000001bef0000)]
48
+  0x0000000019b61000 JavaThread "C2 CompilerThread6" daemon [_thread_blocked, id=21360, stack(0x000000001bcf0000,0x000000001bdf0000)]
49
+=>0x0000000019b54800 JavaThread "C2 CompilerThread5" daemon [_thread_in_native, id=1572, stack(0x000000001bbf0000,0x000000001bcf0000)]
50
+  0x0000000019b53800 JavaThread "C2 CompilerThread4" daemon [_thread_in_native, id=16592, stack(0x000000001baf0000,0x000000001bbf0000)]
51
+  0x0000000019b43000 JavaThread "C2 CompilerThread3" daemon [_thread_in_vm, id=19900, stack(0x000000001b9f0000,0x000000001baf0000)]
52
+  0x0000000019b41000 JavaThread "C2 CompilerThread2" daemon [_thread_blocked, id=12120, stack(0x000000001b8f0000,0x000000001b9f0000)]
53
+  0x0000000019b3d800 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=23236, stack(0x000000001b7f0000,0x000000001b8f0000)]
54
+  0x0000000019b36800 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=22688, stack(0x000000001b6f0000,0x000000001b7f0000)]
55
+  0x0000000019b16800 JavaThread "Monitor Ctrl-Break" daemon [_thread_in_native, id=23452, stack(0x000000001b5f0000,0x000000001b6f0000)]
56
+  0x0000000019afd000 JavaThread "Attach Listener" daemon [_thread_blocked, id=22488, stack(0x000000001b4f0000,0x000000001b5f0000)]
57
+  0x0000000019afc800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=20252, stack(0x000000001b3f0000,0x000000001b4f0000)]
58
+  0x0000000019a86800 JavaThread "Finalizer" daemon [_thread_blocked, id=12740, stack(0x000000001b2f0000,0x000000001b3f0000)]
59
+  0x000000001800b800 JavaThread "Reference Handler" daemon [_thread_blocked, id=23336, stack(0x000000001b1f0000,0x000000001b2f0000)]
60
+  0x0000000002a12800 JavaThread "main" [_thread_in_native, id=25460, stack(0x0000000002650000,0x0000000002750000)]
61
+
62
+Other Threads:
63
+  0x0000000019a63000 VMThread [stack: 0x000000001b0f0000,0x000000001b1f0000] [id=10984]
64
+  0x0000000019c1c800 WatcherThread [stack: 0x000000001c3f0000,0x000000001c4f0000] [id=11000]
65
+
66
+VM state:not at safepoint (normal execution)
67
+
68
+VM Mutex/Monitor currently owned by a thread:  ([mutex/lock_event])
69
+[0x000000000280d820] CodeCache_lock - owner thread: 0x0000000019b53800
70
+
71
+Heap:
72
+ PSYoungGen      total 358912K, used 166452K [0x00000000d5980000, 0x00000000ed680000, 0x0000000100000000)
73
+  eden space 327680K, 49% used [0x00000000d5980000,0x00000000df948fd8,0x00000000e9980000)
74
+  from space 31232K, 9% used [0x00000000e9980000,0x00000000e9c44030,0x00000000eb800000)
75
+  to   space 29696K, 0% used [0x00000000eb980000,0x00000000eb980000,0x00000000ed680000)
76
+ ParOldGen       total 163840K, used 146007K [0x0000000080c00000, 0x000000008ac00000, 0x00000000d5980000)
77
+  object space 163840K, 89% used [0x0000000080c00000,0x0000000089a95f48,0x000000008ac00000)
78
+ Metaspace       used 27172K, capacity 27944K, committed 28160K, reserved 1075200K
79
+  class space    used 3030K, capacity 3239K, committed 3328K, reserved 1048576K
80
+
81
+Card table byte_map: [0x0000000011ed0000,0x00000000122d0000] byte_map_base: 0x0000000011aca000
82
+
83
+Marking Bits: (ParMarkBitMap*) 0x00000000548a2d00
84
+ Begin Bits: [0x0000000013280000, 0x0000000015250000)
85
+ End Bits:   [0x0000000015250000, 0x0000000017220000)
86
+
87
+Polling page: 0x00000000005d0000
88
+
89
+CodeCache: size=245760Kb used=26921Kb max_used=26933Kb free=218838Kb
90
+ bounds [0x0000000002b10000, 0x0000000004580000, 0x0000000011b10000]
91
+ total_blobs=6425 nmethods=5993 adapters=340
92
+ compilation: enabled
93
+
94
+Compilation events (10 events):
95
+Event: 38.378 Thread 0x0000000019b9f800 7383       3       com.sun.tools.javac.jvm.ClassReader::readInnerClasses (183 bytes)
96
+Event: 38.379 Thread 0x0000000019b53800 7384       4       com.sun.tools.javac.jvm.ClassReader::readClass (474 bytes)
97
+Event: 38.380 Thread 0x0000000019b9f800 nmethod 7383 0x000000000455f650 code [0x000000000455f920, 0x0000000004560b38]
98
+Event: 38.463 Thread 0x0000000019b43000 7385   !   4       com.sun.tools.javac.comp.MemberEnter::complete (1573 bytes)
99
+Event: 38.487 Thread 0x0000000019b36800 7386       4       java.util.HashMap::containsKey (18 bytes)
100
+Event: 38.501 Thread 0x0000000019b36800 nmethod 7386 0x0000000004562f50 code [0x00000000045630a0, 0x0000000004563358]
101
+Event: 38.502 Thread 0x0000000019bd4000 7387       1       com.sun.tools.javac.code.Type$JCVoidType::getTag (4 bytes)
102
+Event: 38.502 Thread 0x0000000019bd4000 nmethod 7387 0x000000000455f390 code [0x000000000455f4e0, 0x000000000455f5f0]
103
+Event: 38.657 Thread 0x0000000019b61000 7388       4       com.sun.tools.javac.tree.JCTree$JCCompilationUnit::accept (6 bytes)
104
+Event: 38.698 Thread 0x0000000019b61000 nmethod 7388 0x00000000043ff290 code [0x00000000043ff3c0, 0x00000000043ff438]
105
+
106
+GC Heap History (10 events):
107
+Event: 30.695 GC heap before
108
+{Heap before GC invocations=27 (full 2):
109
+ PSYoungGen      total 264704K, used 241712K [0x00000000d5980000, 0x00000000e7a00000, 0x0000000100000000)
110
+  eden space 236032K, 100% used [0x00000000d5980000,0x00000000e4000000,0x00000000e4000000)
111
+  from space 28672K, 19% used [0x00000000e5e00000,0x00000000e638c0c0,0x00000000e7a00000)
112
+  to   space 29696K, 0% used [0x00000000e4000000,0x00000000e4000000,0x00000000e5d00000)
113
+ ParOldGen       total 163840K, used 106742K [0x0000000080c00000, 0x000000008ac00000, 0x00000000d5980000)
114
+  object space 163840K, 65% used [0x0000000080c00000,0x000000008743da38,0x000000008ac00000)
115
+ Metaspace       used 27076K, capacity 27880K, committed 28160K, reserved 1075200K
116
+  class space    used 3024K, capacity 3239K, committed 3328K, reserved 1048576K
117
+Event: 30.708 GC heap after
118
+Heap after GC invocations=27 (full 2):
119
+ PSYoungGen      total 265728K, used 5744K [0x00000000d5980000, 0x00000000e9e80000, 0x0000000100000000)
120
+  eden space 236032K, 0% used [0x00000000d5980000,0x00000000d5980000,0x00000000e4000000)
121
+  from space 29696K, 19% used [0x00000000e4000000,0x00000000e459c130,0x00000000e5d00000)
122
+  to   space 29184K, 0% used [0x00000000e8200000,0x00000000e8200000,0x00000000e9e80000)
123
+ ParOldGen       total 163840K, used 112259K [0x0000000080c00000, 0x000000008ac00000, 0x00000000d5980000)
124
+  object space 163840K, 68% used [0x0000000080c00000,0x00000000879a0c48,0x000000008ac00000)
125
+ Metaspace       used 27076K, capacity 27880K, committed 28160K, reserved 1075200K
126
+  class space    used 3024K, capacity 3239K, committed 3328K, reserved 1048576K
127
+}
128
+Event: 31.975 GC heap before
129
+{Heap before GC invocations=28 (full 2):
130
+ PSYoungGen      total 265728K, used 241776K [0x00000000d5980000, 0x00000000e9e80000, 0x0000000100000000)
131
+  eden space 236032K, 100% used [0x00000000d5980000,0x00000000e4000000,0x00000000e4000000)
132
+  from space 29696K, 19% used [0x00000000e4000000,0x00000000e459c130,0x00000000e5d00000)
133
+  to   space 29184K, 0% used [0x00000000e8200000,0x00000000e8200000,0x00000000e9e80000)
134
+ ParOldGen       total 163840K, used 112259K [0x0000000080c00000, 0x000000008ac00000, 0x00000000d5980000)
135
+  object space 163840K, 68% used [0x0000000080c00000,0x00000000879a0c48,0x000000008ac00000)
136
+ Metaspace       used 27118K, capacity 27880K, committed 28160K, reserved 1075200K
137
+  class space    used 3027K, capacity 3239K, committed 3328K, reserved 1048576K
138
+Event: 31.992 GC heap after
139
+Heap after GC invocations=28 (full 2):
140
+ PSYoungGen      total 301568K, used 5808K [0x00000000d5980000, 0x00000000e9d00000, 0x0000000100000000)
141
+  eden space 273920K, 0% used [0x00000000d5980000,0x00000000d5980000,0x00000000e6500000)
142
+  from space 27648K, 21% used [0x00000000e8200000,0x00000000e87ac0f0,0x00000000e9d00000)
143
+  to   space 28672K, 0% used [0x00000000e6500000,0x00000000e6500000,0x00000000e8100000)
144
+ ParOldGen       total 163840K, used 117831K [0x0000000080c00000, 0x000000008ac00000, 0x00000000d5980000)
145
+  object space 163840K, 71% used [0x0000000080c00000,0x0000000087f11eb8,0x000000008ac00000)
146
+ Metaspace       used 27118K, capacity 27880K, committed 28160K, reserved 1075200K
147
+  class space    used 3027K, capacity 3239K, committed 3328K, reserved 1048576K
148
+}
149
+Event: 33.285 GC heap before
150
+{Heap before GC invocations=29 (full 2):
151
+ PSYoungGen      total 301568K, used 279728K [0x00000000d5980000, 0x00000000e9d00000, 0x0000000100000000)
152
+  eden space 273920K, 100% used [0x00000000d5980000,0x00000000e6500000,0x00000000e6500000)
153
+  from space 27648K, 21% used [0x00000000e8200000,0x00000000e87ac0f0,0x00000000e9d00000)
154
+  to   space 28672K, 0% used [0x00000000e6500000,0x00000000e6500000,0x00000000e8100000)
155
+ ParOldGen       total 163840K, used 117831K [0x0000000080c00000, 0x000000008ac00000, 0x00000000d5980000)
156
+  object space 163840K, 71% used [0x0000000080c00000,0x0000000087f11eb8,0x000000008ac00000)
157
+ Metaspace       used 27118K, capacity 27880K, committed 28160K, reserved 1075200K
158
+  class space    used 3027K, capacity 3239K, committed 3328K, reserved 1048576K
159
+Event: 33.382 GC heap after
160
+Heap after GC invocations=29 (full 2):
161
+ PSYoungGen      total 302592K, used 20881K [0x00000000d5980000, 0x00000000ed700000, 0x0000000100000000)
162
+  eden space 273920K, 0% used [0x00000000d5980000,0x00000000d5980000,0x00000000e6500000)
163
+  from space 28672K, 72% used [0x00000000e6500000,0x00000000e7964760,0x00000000e8100000)
164
+  to   space 30208K, 0% used [0x00000000eb980000,0x00000000eb980000,0x00000000ed700000)
165
+ ParOldGen       total 163840K, used 123440K [0x0000000080c00000, 0x000000008ac00000, 0x00000000d5980000)
166
+  object space 163840K, 75% used [0x0000000080c00000,0x000000008848c1d8,0x000000008ac00000)
167
+ Metaspace       used 27118K, capacity 27880K, committed 28160K, reserved 1075200K
168
+  class space    used 3027K, capacity 3239K, committed 3328K, reserved 1048576K
169
+}
170
+Event: 35.418 GC heap before
171
+{Heap before GC invocations=30 (full 2):
172
+ PSYoungGen      total 302592K, used 294801K [0x00000000d5980000, 0x00000000ed700000, 0x0000000100000000)
173
+  eden space 273920K, 100% used [0x00000000d5980000,0x00000000e6500000,0x00000000e6500000)
174
+  from space 28672K, 72% used [0x00000000e6500000,0x00000000e7964760,0x00000000e8100000)
175
+  to   space 30208K, 0% used [0x00000000eb980000,0x00000000eb980000,0x00000000ed700000)
176
+ ParOldGen       total 163840K, used 123440K [0x0000000080c00000, 0x000000008ac00000, 0x00000000d5980000)
177
+  object space 163840K, 75% used [0x0000000080c00000,0x000000008848c1d8,0x000000008ac00000)
178
+ Metaspace       used 27147K, capacity 27880K, committed 28160K, reserved 1075200K
179
+  class space    used 3030K, capacity 3239K, committed 3328K, reserved 1048576K
180
+Event: 35.444 GC heap after
181
+Heap after GC invocations=30 (full 2):
182
+ PSYoungGen      total 357376K, used 20072K [0x00000000d5980000, 0x00000000ed680000, 0x0000000100000000)
183
+  eden space 327680K, 0% used [0x00000000d5980000,0x00000000d5980000,0x00000000e9980000)
184
+  from space 29696K, 67% used [0x00000000eb980000,0x00000000ecd1a288,0x00000000ed680000)
185
+  to   space 31232K, 0% used [0x00000000e9980000,0x00000000e9980000,0x00000000eb800000)
186
+ ParOldGen       total 163840K, used 128825K [0x0000000080c00000, 0x000000008ac00000, 0x00000000d5980000)
187
+  object space 163840K, 78% used [0x0000000080c00000,0x00000000889ce4e8,0x000000008ac00000)
188
+ Metaspace       used 27147K, capacity 27880K, committed 28160K, reserved 1075200K
189
+  class space    used 3030K, capacity 3239K, committed 3328K, reserved 1048576K
190
+}
191
+Event: 37.040 GC heap before
192
+{Heap before GC invocations=31 (full 2):
193
+ PSYoungGen      total 357376K, used 347752K [0x00000000d5980000, 0x00000000ed680000, 0x0000000100000000)
194
+  eden space 327680K, 100% used [0x00000000d5980000,0x00000000e9980000,0x00000000e9980000)
195
+  from space 29696K, 67% used [0x00000000eb980000,0x00000000ecd1a288,0x00000000ed680000)
196
+  to   space 31232K, 0% used [0x00000000e9980000,0x00000000e9980000,0x00000000eb800000)
197
+ ParOldGen       total 163840K, used 128825K [0x0000000080c00000, 0x000000008ac00000, 0x00000000d5980000)
198
+  object space 163840K, 78% used [0x0000000080c00000,0x00000000889ce4e8,0x000000008ac00000)
199
+ Metaspace       used 27168K, capacity 27944K, committed 28160K, reserved 1075200K
200
+  class space    used 3030K, capacity 3239K, committed 3328K, reserved 1048576K
201
+Event: 37.083 GC heap after
202
+Heap after GC invocations=31 (full 2):
203
+ PSYoungGen      total 358912K, used 2832K [0x00000000d5980000, 0x00000000ed680000, 0x0000000100000000)
204
+  eden space 327680K, 0% used [0x00000000d5980000,0x00000000d5980000,0x00000000e9980000)
205
+  from space 31232K, 9% used [0x00000000e9980000,0x00000000e9c44030,0x00000000eb800000)
206
+  to   space 29696K, 0% used [0x00000000eb980000,0x00000000eb980000,0x00000000ed680000)
207
+ ParOldGen       total 163840K, used 146007K [0x0000000080c00000, 0x000000008ac00000, 0x00000000d5980000)
208
+  object space 163840K, 89% used [0x0000000080c00000,0x0000000089a95f48,0x000000008ac00000)
209
+ Metaspace       used 27168K, capacity 27944K, committed 28160K, reserved 1075200K
210
+  class space    used 3030K, capacity 3239K, committed 3328K, reserved 1048576K
211
+}
212
+
213
+Deoptimization events (10 events):
214
+Event: 36.377 Thread 0x0000000002a12800 Uncommon trap: reason=bimorphic action=maybe_recompile pc=0x0000000003bfe850 method=lombok.javac.JavacNode.traverse(Llombok/javac/JavacASTVisitor;)V @ 478
215
+Event: 36.377 Thread 0x0000000002a12800 Uncommon trap: reason=bimorphic action=maybe_recompile pc=0x0000000003bfe850 method=lombok.javac.JavacNode.traverse(Llombok/javac/JavacASTVisitor;)V @ 478
216
+Event: 36.401 Thread 0x0000000002a12800 Uncommon trap: reason=bimorphic action=maybe_recompile pc=0x0000000003e3a408 method=com.sun.tools.javac.tree.Pretty.print(Ljava/lang/Object;)V @ 5
217
+Event: 36.477 Thread 0x0000000002a12800 Uncommon trap: reason=bimorphic action=maybe_recompile pc=0x0000000003e3a408 method=com.sun.tools.javac.tree.Pretty.print(Ljava/lang/Object;)V @ 5
218
+Event: 36.477 Thread 0x0000000002a12800 Uncommon trap: reason=bimorphic action=maybe_recompile pc=0x0000000003e3a408 method=com.sun.tools.javac.tree.Pretty.print(Ljava/lang/Object;)V @ 5
219
+Event: 36.477 Thread 0x0000000002a12800 Uncommon trap: reason=bimorphic action=maybe_recompile pc=0x0000000003e3a408 method=com.sun.tools.javac.tree.Pretty.print(Ljava/lang/Object;)V @ 5
220
+Event: 36.477 Thread 0x0000000002a12800 Uncommon trap: reason=bimorphic action=maybe_recompile pc=0x00000000045562c4 method=lombok.javac.JavacNode.traverse(Llombok/javac/JavacASTVisitor;)V @ 623
221
+Event: 37.564 Thread 0x0000000002a12800 Uncommon trap: reason=null_check action=make_not_entrant pc=0x0000000003b7f21c method=java.lang.Long.equals(Ljava/lang/Object;)Z @ 1
222
+Event: 37.564 Thread 0x0000000002a12800 Uncommon trap: reason=null_check action=make_not_entrant pc=0x00000000030e3a5c method=java.lang.Long.equals(Ljava/lang/Object;)Z @ 1
223
+Event: 37.567 Thread 0x0000000002a12800 Uncommon trap: reason=class_check action=maybe_recompile pc=0x00000000040c2994 method=com.sun.tools.javac.util.ListBuffer.next()Ljava/lang/Object; @ 12
224
+
225
+Classes redefined (0 events):
226
+No events
227
+
228
+Internal exceptions (10 events):
229
+Event: 24.386 Thread 0x0000000002a12800 Implicit null exception at 0x0000000002ef04b6 to 0x0000000002ef05f1
230
+Event: 24.389 Thread 0x0000000002a12800 Implicit null exception at 0x000000000337422e to 0x0000000003374361
231
+Event: 24.391 Thread 0x0000000002a12800 Implicit null exception at 0x00000000034305a6 to 0x0000000003430629
232
+Event: 34.356 Thread 0x0000000002a12800 Implicit null exception at 0x0000000003dc35cf to 0x0000000003dc36cd
233
+Event: 34.383 Thread 0x0000000002a12800 Implicit null exception at 0x0000000003e95e93 to 0x0000000003e95eda
234
+Event: 34.654 Thread 0x0000000002a12800 Implicit null exception at 0x0000000003f9530e to 0x0000000003f9723d
235
+Event: 35.385 Thread 0x0000000002a12800 Implicit null exception at 0x0000000004148b26 to 0x0000000004149fe1
236
+Event: 35.385 Thread 0x0000000002a12800 Implicit null exception at 0x00000000040c2f35 to 0x00000000040c3125
237
+Event: 37.564 Thread 0x0000000002a12800 Implicit null exception at 0x0000000003b7c20e to 0x0000000003b7f1e9
238
+Event: 37.564 Thread 0x0000000002a12800 Implicit null exception at 0x00000000030e3a0c to 0x00000000030e3a4d
239
+
240
+Events (10 events):
241
+Event: 37.083 Executing VM operation: ParallelGCFailedAllocation done
242
+Event: 37.564 Thread 0x0000000002a12800 Uncommon trap: trap_request=0xfffffff4 fr.pc=0x0000000003b7f21c
243
+Event: 37.564 Thread 0x0000000002a12800 DEOPT PACKING pc=0x0000000003b7f21c sp=0x000000000274d990
244
+Event: 37.564 Thread 0x0000000002a12800 DEOPT UNPACKING pc=0x0000000002b5583b sp=0x000000000274d958 mode 2
245
+Event: 37.564 Thread 0x0000000002a12800 Uncommon trap: trap_request=0xfffffff4 fr.pc=0x00000000030e3a5c
246
+Event: 37.564 Thread 0x0000000002a12800 DEOPT PACKING pc=0x00000000030e3a5c sp=0x000000000274d9a0
247
+Event: 37.564 Thread 0x0000000002a12800 DEOPT UNPACKING pc=0x0000000002b5583b sp=0x000000000274d948 mode 2
248
+Event: 37.566 Thread 0x0000000002a12800 Uncommon trap: trap_request=0xffffffde fr.pc=0x00000000040c2994
249
+Event: 37.567 Thread 0x0000000002a12800 DEOPT PACKING pc=0x00000000040c2994 sp=0x000000000274dcf0
250
+Event: 37.567 Thread 0x0000000002a12800 DEOPT UNPACKING pc=0x0000000002b5583b sp=0x000000000274dc90 mode 2
251
+
252
+
253
+Dynamic libraries:
254
+0x00007ff6d4630000 - 0x00007ff6d4667000 	C:\Program Files\Java\jdk1.8.0_181\bin\java.exe
255
+0x00007ffebc320000 - 0x00007ffebc510000 	C:\WINDOWS\SYSTEM32\ntdll.dll
256
+0x00007ffebacf0000 - 0x00007ffebada2000 	C:\WINDOWS\System32\KERNEL32.DLL
257
+0x00007ffeb97e0000 - 0x00007ffeb9a83000 	C:\WINDOWS\System32\KERNELBASE.dll
258
+0x00007ffebab60000 - 0x00007ffebac03000 	C:\WINDOWS\System32\ADVAPI32.dll
259
+0x00007ffebb9f0000 - 0x00007ffebba8e000 	C:\WINDOWS\System32\msvcrt.dll
260
+0x00007ffeba920000 - 0x00007ffeba9b7000 	C:\WINDOWS\System32\sechost.dll
261
+0x00007ffebc160000 - 0x00007ffebc280000 	C:\WINDOWS\System32\RPCRT4.dll
262
+0x00007ffeba9c0000 - 0x00007ffebab54000 	C:\WINDOWS\System32\USER32.dll
263
+0x00007ffeb9610000 - 0x00007ffeb9631000 	C:\WINDOWS\System32\win32u.dll
264
+0x00007ffebc2b0000 - 0x00007ffebc2d6000 	C:\WINDOWS\System32\GDI32.dll
265
+0x00007ffeb9640000 - 0x00007ffeb97d4000 	C:\WINDOWS\System32\gdi32full.dll
266
+0x00007ffeb9ac0000 - 0x00007ffeb9b5e000 	C:\WINDOWS\System32\msvcp_win.dll
267
+0x00007ffeb9510000 - 0x00007ffeb960a000 	C:\WINDOWS\System32\ucrtbase.dll
268
+0x00007ffeaec30000 - 0x00007ffeaeeb5000 	C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.18362.720_none_e6beb5c51314836b\COMCTL32.dll
269
+0x00007ffebb650000 - 0x00007ffebb986000 	C:\WINDOWS\System32\combase.dll
270
+0x00007ffeb9b60000 - 0x00007ffeb9be0000 	C:\WINDOWS\System32\bcryptPrimitives.dll
271
+0x00007ffebc280000 - 0x00007ffebc2ae000 	C:\WINDOWS\System32\IMM32.DLL
272
+0x0000000054930000 - 0x0000000054a02000 	C:\Program Files\Java\jdk1.8.0_181\jre\bin\msvcr100.dll
273
+0x0000000054080000 - 0x0000000054922000 	C:\Program Files\Java\jdk1.8.0_181\jre\bin\server\jvm.dll
274
+0x00007ffebbfb0000 - 0x00007ffebbfb8000 	C:\WINDOWS\System32\PSAPI.DLL
275
+0x00007ffeb5b00000 - 0x00007ffeb5b24000 	C:\WINDOWS\SYSTEM32\WINMM.dll
276
+0x00007ffeb1f20000 - 0x00007ffeb1f29000 	C:\WINDOWS\SYSTEM32\WSOCK32.dll
277
+0x00007ffeb20b0000 - 0x00007ffeb20ba000 	C:\WINDOWS\SYSTEM32\VERSION.dll
278
+0x00007ffebc0f0000 - 0x00007ffebc15f000 	C:\WINDOWS\System32\WS2_32.dll
279
+0x00007ffeb5ad0000 - 0x00007ffeb5afd000 	C:\WINDOWS\SYSTEM32\winmmbase.dll
280
+0x00007ffeba360000 - 0x00007ffeba3aa000 	C:\WINDOWS\System32\cfgmgr32.dll
281
+0x0000000054070000 - 0x000000005407f000 	C:\Program Files\Java\jdk1.8.0_181\jre\bin\verify.dll
282
+0x0000000054040000 - 0x0000000054069000 	C:\Program Files\Java\jdk1.8.0_181\jre\bin\java.dll
283
+0x0000000053f30000 - 0x0000000053f53000 	C:\Program Files\Java\jdk1.8.0_181\jre\bin\instrument.dll
284
+0x0000000053f10000 - 0x0000000053f26000 	C:\Program Files\Java\jdk1.8.0_181\jre\bin\zip.dll
285
+0x00007ffebaf60000 - 0x00007ffebb645000 	C:\WINDOWS\System32\SHELL32.dll
286
+0x00007ffebbf00000 - 0x00007ffebbfa9000 	C:\WINDOWS\System32\shcore.dll
287
+0x00007ffeb9be0000 - 0x00007ffeba360000 	C:\WINDOWS\System32\windows.storage.dll
288
+0x00007ffeb9280000 - 0x00007ffeb92a3000 	C:\WINDOWS\System32\profapi.dll
289
+0x00007ffeb91f0000 - 0x00007ffeb923a000 	C:\WINDOWS\System32\powrprof.dll
290
+0x00007ffeb91e0000 - 0x00007ffeb91f0000 	C:\WINDOWS\System32\UMPDC.dll
291
+0x00007ffebc090000 - 0x00007ffebc0e2000 	C:\WINDOWS\System32\shlwapi.dll
292
+0x00007ffeb9260000 - 0x00007ffeb9271000 	C:\WINDOWS\System32\kernel.appcore.dll
293
+0x00007ffeba3b0000 - 0x00007ffeba3c7000 	C:\WINDOWS\System32\cryptsp.dll
294
+0x0000000053ef0000 - 0x0000000053f0a000 	C:\Program Files\Java\jdk1.8.0_181\jre\bin\net.dll
295
+0x00007ffeb8a20000 - 0x00007ffeb8a87000 	C:\WINDOWS\system32\mswsock.dll
296
+0x00007ffeb8590000 - 0x00007ffeb85c3000 	C:\WINDOWS\system32\rsaenh.dll
297
+0x00007ffeb9a90000 - 0x00007ffeb9ab6000 	C:\WINDOWS\System32\bcrypt.dll
298
+0x00007ffeb90d0000 - 0x00007ffeb90f5000 	C:\WINDOWS\SYSTEM32\USERENV.dll
299
+0x00007ffeb8bf0000 - 0x00007ffeb8bfc000 	C:\WINDOWS\SYSTEM32\CRYPTBASE.dll
300
+0x00007ffeb8730000 - 0x00007ffeb876a000 	C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL
301
+0x00007ffeba820000 - 0x00007ffeba828000 	C:\WINDOWS\System32\NSI.dll
302
+0x00007ffeb4b90000 - 0x00007ffeb4ba6000 	C:\WINDOWS\SYSTEM32\dhcpcsvc6.DLL
303
+0x00007ffeb4ab0000 - 0x00007ffeb4acc000 	C:\WINDOWS\SYSTEM32\dhcpcsvc.DLL
304
+0x00007ffeb8770000 - 0x00007ffeb883a000 	C:\WINDOWS\SYSTEM32\DNSAPI.dll
305
+0x0000000053ec0000 - 0x0000000053ed1000 	C:\Program Files\Java\jdk1.8.0_181\jre\bin\nio.dll
306
+0x00007ffeb4fb0000 - 0x00007ffeb4fba000 	C:\Users\gusy\AppData\Local\Temp\jansi-1.17.1-290790608197472631.dll
307
+0x00007ffeb1f30000 - 0x00007ffeb1f3a000 	C:\Users\gusy\AppData\Local\Temp\jansi-1.17.1-4597849990247348837.dll
308
+
309
+VM Arguments:
310
+jvm_args: -Dmaven.multiModuleProjectDirectory=D:\workspace\idea\2020\estateagents -Dmaven.home=D:\software\maven\apache-maven-3.6.3 -Dclassworlds.conf=D:\software\maven\apache-maven-3.6.3\bin\m2.conf -Dmaven.ext.class.path=D:\软件安装区\IntelliJ IDEA 2019.3.3\plugins\maven\lib\maven-event-listener.jar -javaagent:D:\软件安装区\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=53936:D:\软件安装区\IntelliJ IDEA 2019.3.3\bin -Dfile.encoding=UTF-8 
311
+java_command: org.codehaus.classworlds.Launcher -Didea.version2019.3.3 -s D:\software\maven\apache-maven-3.6.3\conf\settings.xml -Dmaven.repo.local=D:\software\maven\apache-maven-3.6.3\maven-rep -DskipTests=true compile -P blue
312
+java_class_path (initial): D:\software\maven\apache-maven-3.6.3\boot\plexus-classworlds-2.6.0.jar;D:\software\maven\apache-maven-3.6.3\boot\plexus-classworlds.license;D:\软件安装区\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar
313
+Launcher Type: SUN_STANDARD
314
+
315
+Environment Variables:
316
+JAVA_HOME=C:\Program Files\Java\jdk1.8.0_181
317
+CLASSPATH=.;C:\Program Files\Java\jdk1.8.0_181\lib\dt.jar;C:\Program Files\Java\jdk1.8.0_181\lib\tools.jar;D:\software\ant\apache-ant-1.10.7\lib
318
+PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\TortoiseGit\bin;C:\Program Files\Java\jdk1.8.0_181\bin;D:\software\ant\apache-ant-1.10.7\bin;C:\Users\gusy\AppData\Local\Yarn\bin;C:\Program Files\nodejs\;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\DockerDesktop\version-bin;C:\Users\gusy\AppData\Local\Microsoft\WindowsApps;;D:\软件安装区\Microsoft VS Code\bin;C:\Users\gusy\AppData\Roaming\npm
319
+USERNAME=gusy
320
+OS=Windows_NT
321
+PROCESSOR_IDENTIFIER=AMD64 Family 23 Model 8 Stepping 2, AuthenticAMD
322
+
323
+
324
+
325
+---------------  S Y S T E M  ---------------
326
+
327
+OS: Windows 10.0 , 64 bit Build 18362 (10.0.18362.329)
328
+
329
+CPU:total 16 (initial active 16) (16 cores per cpu, 1 threads per core) family 23 model 8 stepping 2, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, avx2, aes, clmul, mmxext, 3dnowpref, lzcnt, sse4a, tsc, tscinvbit, tscinv, bmi1
330
+
331
+Memory: 4k page, physical 8338388k(350444k free), swap 23987528k(3008k free)
332
+
333
+vm_info: Java HotSpot(TM) 64-Bit Server VM (25.181-b13) for windows-amd64 JRE (1.8.0_181-b13), built on Jul  7 2018 04:01:33 by "java_re" with MS VC++ 10.0 (VS2010)
334
+
335
+time: Sat Mar 28 14:51:40 2020
336
+elapsed time: 38 seconds (0d 0h 0m 38s)
337
+

+ 286
- 0
mvnw Parādīt failu

@@ -0,0 +1,286 @@
1
+#!/bin/sh
2
+# ----------------------------------------------------------------------------
3
+# Licensed to the Apache Software Foundation (ASF) under one
4
+# or more contributor license agreements.  See the NOTICE file
5
+# distributed with this work for additional information
6
+# regarding copyright ownership.  The ASF licenses this file
7
+# to you under the Apache License, Version 2.0 (the
8
+# "License"); you may not use this file except in compliance
9
+# with the License.  You may obtain a copy of the License at
10
+#
11
+#    https://www.apache.org/licenses/LICENSE-2.0
12
+#
13
+# Unless required by applicable law or agreed to in writing,
14
+# software distributed under the License is distributed on an
15
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+# KIND, either express or implied.  See the License for the
17
+# specific language governing permissions and limitations
18
+# under the License.
19
+# ----------------------------------------------------------------------------
20
+
21
+# ----------------------------------------------------------------------------
22
+# Maven2 Start Up Batch script
23
+#
24
+# Required ENV vars:
25
+# ------------------
26
+#   JAVA_HOME - location of a JDK home dir
27
+#
28
+# Optional ENV vars
29
+# -----------------
30
+#   M2_HOME - location of maven2's installed home dir
31
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
32
+#     e.g. to debug Maven itself, use
33
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
34
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
35
+# ----------------------------------------------------------------------------
36
+
37
+if [ -z "$MAVEN_SKIP_RC" ] ; then
38
+
39
+  if [ -f /etc/mavenrc ] ; then
40
+    . /etc/mavenrc
41
+  fi
42
+
43
+  if [ -f "$HOME/.mavenrc" ] ; then
44
+    . "$HOME/.mavenrc"
45
+  fi
46
+
47
+fi
48
+
49
+# OS specific support.  $var _must_ be set to either true or false.
50
+cygwin=false;
51
+darwin=false;
52
+mingw=false
53
+case "`uname`" in
54
+  CYGWIN*) cygwin=true ;;
55
+  MINGW*) mingw=true;;
56
+  Darwin*) darwin=true
57
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
58
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
59
+    if [ -z "$JAVA_HOME" ]; then
60
+      if [ -x "/usr/libexec/java_home" ]; then
61
+        export JAVA_HOME="`/usr/libexec/java_home`"
62
+      else
63
+        export JAVA_HOME="/Library/Java/Home"
64
+      fi
65
+    fi
66
+    ;;
67
+esac
68
+
69
+if [ -z "$JAVA_HOME" ] ; then
70
+  if [ -r /etc/gentoo-release ] ; then
71
+    JAVA_HOME=`java-config --jre-home`
72
+  fi
73
+fi
74
+
75
+if [ -z "$M2_HOME" ] ; then
76
+  ## resolve links - $0 may be a link to maven's home
77
+  PRG="$0"
78
+
79
+  # need this for relative symlinks
80
+  while [ -h "$PRG" ] ; do
81
+    ls=`ls -ld "$PRG"`
82
+    link=`expr "$ls" : '.*-> \(.*\)$'`
83
+    if expr "$link" : '/.*' > /dev/null; then
84
+      PRG="$link"
85
+    else
86
+      PRG="`dirname "$PRG"`/$link"
87
+    fi
88
+  done
89
+
90
+  saveddir=`pwd`
91
+
92
+  M2_HOME=`dirname "$PRG"`/..
93
+
94
+  # make it fully qualified
95
+  M2_HOME=`cd "$M2_HOME" && pwd`
96
+
97
+  cd "$saveddir"
98
+  # echo Using m2 at $M2_HOME
99
+fi
100
+
101
+# For Cygwin, ensure paths are in UNIX format before anything is touched
102
+if $cygwin ; then
103
+  [ -n "$M2_HOME" ] &&
104
+    M2_HOME=`cygpath --unix "$M2_HOME"`
105
+  [ -n "$JAVA_HOME" ] &&
106
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
107
+  [ -n "$CLASSPATH" ] &&
108
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
109
+fi
110
+
111
+# For Mingw, ensure paths are in UNIX format before anything is touched
112
+if $mingw ; then
113
+  [ -n "$M2_HOME" ] &&
114
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
115
+  [ -n "$JAVA_HOME" ] &&
116
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
117
+  # TODO classpath?
118
+fi
119
+
120
+if [ -z "$JAVA_HOME" ]; then
121
+  javaExecutable="`which javac`"
122
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
123
+    # readlink(1) is not available as standard on Solaris 10.
124
+    readLink=`which readlink`
125
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
126
+      if $darwin ; then
127
+        javaHome="`dirname \"$javaExecutable\"`"
128
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
129
+      else
130
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
131
+      fi
132
+      javaHome="`dirname \"$javaExecutable\"`"
133
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
134
+      JAVA_HOME="$javaHome"
135
+      export JAVA_HOME
136
+    fi
137
+  fi
138
+fi
139
+
140
+if [ -z "$JAVACMD" ] ; then
141
+  if [ -n "$JAVA_HOME"  ] ; then
142
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
143
+      # IBM's JDK on AIX uses strange locations for the executables
144
+      JAVACMD="$JAVA_HOME/jre/sh/java"
145
+    else
146
+      JAVACMD="$JAVA_HOME/bin/java"
147
+    fi
148
+  else
149
+    JAVACMD="`which java`"
150
+  fi
151
+fi
152
+
153
+if [ ! -x "$JAVACMD" ] ; then
154
+  echo "Error: JAVA_HOME is not defined correctly." >&2
155
+  echo "  We cannot execute $JAVACMD" >&2
156
+  exit 1
157
+fi
158
+
159
+if [ -z "$JAVA_HOME" ] ; then
160
+  echo "Warning: JAVA_HOME environment variable is not set."
161
+fi
162
+
163
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
164
+
165
+# traverses directory structure from process work directory to filesystem root
166
+# first directory with .mvn subdirectory is considered project base directory
167
+find_maven_basedir() {
168
+
169
+  if [ -z "$1" ]
170
+  then
171
+    echo "Path not specified to find_maven_basedir"
172
+    return 1
173
+  fi
174
+
175
+  basedir="$1"
176
+  wdir="$1"
177
+  while [ "$wdir" != '/' ] ; do
178
+    if [ -d "$wdir"/.mvn ] ; then
179
+      basedir=$wdir
180
+      break
181
+    fi
182
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
183
+    if [ -d "${wdir}" ]; then
184
+      wdir=`cd "$wdir/.."; pwd`
185
+    fi
186
+    # end of workaround
187
+  done
188
+  echo "${basedir}"
189
+}
190
+
191
+# concatenates all lines of a file
192
+concat_lines() {
193
+  if [ -f "$1" ]; then
194
+    echo "$(tr -s '\n' ' ' < "$1")"
195
+  fi
196
+}
197
+
198
+BASE_DIR=`find_maven_basedir "$(pwd)"`
199
+if [ -z "$BASE_DIR" ]; then
200
+  exit 1;
201
+fi
202
+
203
+##########################################################################################
204
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
205
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
206
+##########################################################################################
207
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
208
+    if [ "$MVNW_VERBOSE" = true ]; then
209
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
210
+    fi
211
+else
212
+    if [ "$MVNW_VERBOSE" = true ]; then
213
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
214
+    fi
215
+    jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
216
+    while IFS="=" read key value; do
217
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
218
+      esac
219
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
220
+    if [ "$MVNW_VERBOSE" = true ]; then
221
+      echo "Downloading from: $jarUrl"
222
+    fi
223
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
224
+
225
+    if command -v wget > /dev/null; then
226
+        if [ "$MVNW_VERBOSE" = true ]; then
227
+          echo "Found wget ... using wget"
228
+        fi
229
+        wget "$jarUrl" -O "$wrapperJarPath"
230
+    elif command -v curl > /dev/null; then
231
+        if [ "$MVNW_VERBOSE" = true ]; then
232
+          echo "Found curl ... using curl"
233
+        fi
234
+        curl -o "$wrapperJarPath" "$jarUrl"
235
+    else
236
+        if [ "$MVNW_VERBOSE" = true ]; then
237
+          echo "Falling back to using Java to download"
238
+        fi
239
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
240
+        if [ -e "$javaClass" ]; then
241
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
242
+                if [ "$MVNW_VERBOSE" = true ]; then
243
+                  echo " - Compiling MavenWrapperDownloader.java ..."
244
+                fi
245
+                # Compiling the Java class
246
+                ("$JAVA_HOME/bin/javac" "$javaClass")
247
+            fi
248
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
249
+                # Running the downloader
250
+                if [ "$MVNW_VERBOSE" = true ]; then
251
+                  echo " - Running MavenWrapperDownloader.java ..."
252
+                fi
253
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
254
+            fi
255
+        fi
256
+    fi
257
+fi
258
+##########################################################################################
259
+# End of extension
260
+##########################################################################################
261
+
262
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
263
+if [ "$MVNW_VERBOSE" = true ]; then
264
+  echo $MAVEN_PROJECTBASEDIR
265
+fi
266
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
267
+
268
+# For Cygwin, switch paths to Windows format before running java
269
+if $cygwin; then
270
+  [ -n "$M2_HOME" ] &&
271
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
272
+  [ -n "$JAVA_HOME" ] &&
273
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
274
+  [ -n "$CLASSPATH" ] &&
275
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
276
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
277
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
278
+fi
279
+
280
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
281
+
282
+exec "$JAVACMD" \
283
+  $MAVEN_OPTS \
284
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
285
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
286
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 161
- 0
mvnw.cmd Parādīt failu

@@ -0,0 +1,161 @@
1
+@REM ----------------------------------------------------------------------------
2
+@REM Licensed to the Apache Software Foundation (ASF) under one
3
+@REM or more contributor license agreements.  See the NOTICE file
4
+@REM distributed with this work for additional information
5
+@REM regarding copyright ownership.  The ASF licenses this file
6
+@REM to you under the Apache License, Version 2.0 (the
7
+@REM "License"); you may not use this file except in compliance
8
+@REM with the License.  You may obtain a copy of the License at
9
+@REM
10
+@REM    https://www.apache.org/licenses/LICENSE-2.0
11
+@REM
12
+@REM Unless required by applicable law or agreed to in writing,
13
+@REM software distributed under the License is distributed on an
14
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+@REM KIND, either express or implied.  See the License for the
16
+@REM specific language governing permissions and limitations
17
+@REM under the License.
18
+@REM ----------------------------------------------------------------------------
19
+
20
+@REM ----------------------------------------------------------------------------
21
+@REM Maven2 Start Up Batch script
22
+@REM
23
+@REM Required ENV vars:
24
+@REM JAVA_HOME - location of a JDK home dir
25
+@REM
26
+@REM Optional ENV vars
27
+@REM M2_HOME - location of maven2's installed home dir
28
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
29
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
30
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
31
+@REM     e.g. to debug Maven itself, use
32
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34
+@REM ----------------------------------------------------------------------------
35
+
36
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
37
+@echo off
38
+@REM set title of command window
39
+title %0
40
+@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
41
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
42
+
43
+@REM set %HOME% to equivalent of $HOME
44
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
45
+
46
+@REM Execute a user defined script before this one
47
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
48
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
49
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
50
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
51
+:skipRcPre
52
+
53
+@setlocal
54
+
55
+set ERROR_CODE=0
56
+
57
+@REM To isolate internal variables from possible post scripts, we use another setlocal
58
+@setlocal
59
+
60
+@REM ==== START VALIDATION ====
61
+if not "%JAVA_HOME%" == "" goto OkJHome
62
+
63
+echo.
64
+echo Error: JAVA_HOME not found in your environment. >&2
65
+echo Please set the JAVA_HOME variable in your environment to match the >&2
66
+echo location of your Java installation. >&2
67
+echo.
68
+goto error
69
+
70
+:OkJHome
71
+if exist "%JAVA_HOME%\bin\java.exe" goto init
72
+
73
+echo.
74
+echo Error: JAVA_HOME is set to an invalid directory. >&2
75
+echo JAVA_HOME = "%JAVA_HOME%" >&2
76
+echo Please set the JAVA_HOME variable in your environment to match the >&2
77
+echo location of your Java installation. >&2
78
+echo.
79
+goto error
80
+
81
+@REM ==== END VALIDATION ====
82
+
83
+:init
84
+
85
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
86
+@REM Fallback to current working directory if not found.
87
+
88
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
89
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
90
+
91
+set EXEC_DIR=%CD%
92
+set WDIR=%EXEC_DIR%
93
+:findBaseDir
94
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
95
+cd ..
96
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
97
+set WDIR=%CD%
98
+goto findBaseDir
99
+
100
+:baseDirFound
101
+set MAVEN_PROJECTBASEDIR=%WDIR%
102
+cd "%EXEC_DIR%"
103
+goto endDetectBaseDir
104
+
105
+:baseDirNotFound
106
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
107
+cd "%EXEC_DIR%"
108
+
109
+:endDetectBaseDir
110
+
111
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
112
+
113
+@setlocal EnableExtensions EnableDelayedExpansion
114
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
115
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
116
+
117
+:endReadAdditionalConfig
118
+
119
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
120
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
121
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
122
+
123
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
124
+FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO (
125
+	IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B 
126
+)
127
+
128
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
129
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
130
+if exist %WRAPPER_JAR% (
131
+    echo Found %WRAPPER_JAR%
132
+) else (
133
+    echo Couldn't find %WRAPPER_JAR%, downloading it ...
134
+	echo Downloading from: %DOWNLOAD_URL%
135
+    powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"
136
+    echo Finished downloading %WRAPPER_JAR%
137
+)
138
+@REM End of extension
139
+
140
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
141
+if ERRORLEVEL 1 goto error
142
+goto end
143
+
144
+:error
145
+set ERROR_CODE=1
146
+
147
+:end
148
+@endlocal & set ERROR_CODE=%ERROR_CODE%
149
+
150
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
151
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
152
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
153
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
154
+:skipRcPost
155
+
156
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
157
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
158
+
159
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
160
+
161
+exit /B %ERROR_CODE%

+ 202
- 0
pom.xml Parādīt failu

@@ -0,0 +1,202 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4
+	<modelVersion>4.0.0</modelVersion>
5
+	<parent>
6
+		<groupId>org.springframework.boot</groupId>
7
+		<artifactId>spring-boot-starter-parent</artifactId>
8
+		<version>2.1.4.RELEASE</version>
9
+		<relativePath/> <!-- lookup parent from repository -->
10
+	</parent>
11
+	<groupId>com.huiju</groupId>
12
+	<artifactId>zcloud</artifactId>
13
+	<version>v1.0.7</version>
14
+	<name>zhiyun</name>
15
+	<description>致云</description>
16
+
17
+	<properties>
18
+		<java.version>1.8</java.version>
19
+	</properties>
20
+
21
+	<dependencies>
22
+		<dependency>
23
+			<groupId>org.springframework.boot</groupId>
24
+			<artifactId>spring-boot-starter-web</artifactId>
25
+		</dependency>
26
+		<dependency>
27
+			<groupId>org.springframework.boot</groupId>
28
+			<artifactId>spring-boot-configuration-processor</artifactId>
29
+			<optional>true</optional>
30
+		</dependency>
31
+		<dependency>
32
+			<groupId>com.baomidou</groupId>
33
+			<artifactId>mybatis-plus-boot-starter</artifactId>
34
+			<version>3.1.1</version>
35
+		</dependency>
36
+		<dependency>
37
+			<groupId>org.springframework.boot</groupId>
38
+			<artifactId>spring-boot-starter-websocket</artifactId>
39
+		</dependency>
40
+
41
+		<dependency>
42
+			<groupId>mysql</groupId>
43
+			<artifactId>mysql-connector-java</artifactId>
44
+			<scope>runtime</scope>
45
+		</dependency>
46
+		<dependency>
47
+			<groupId>org.projectlombok</groupId>
48
+			<artifactId>lombok</artifactId>
49
+			<optional>true</optional>
50
+		</dependency>
51
+		<dependency>
52
+			<groupId>org.springframework.boot</groupId>
53
+			<artifactId>spring-boot-starter-test</artifactId>
54
+			<scope>test</scope>
55
+		</dependency>
56
+		<dependency>
57
+			<groupId>com.github.binarywang</groupId>
58
+			<artifactId>weixin-java-miniapp</artifactId>
59
+			<version>3.8.0</version>
60
+		</dependency>
61
+		<dependency>
62
+			<groupId>com.github.binarywang</groupId>
63
+			<artifactId>weixin-java-mp</artifactId>
64
+			<version>3.8.0</version>
65
+		</dependency>
66
+		<dependency>
67
+			<groupId>com.github.binarywang</groupId>
68
+			<artifactId>weixin-java-pay</artifactId>
69
+			<version>3.8.0</version>
70
+		</dependency>
71
+		<dependency>
72
+			<groupId>com.alibaba</groupId>
73
+			<artifactId>fastjson</artifactId>
74
+			<version>1.2.56</version>
75
+		</dependency>
76
+		<dependency>
77
+			<groupId>io.jsonwebtoken</groupId>
78
+			<artifactId>jjwt-api</artifactId>
79
+			<version>0.10.5</version>
80
+		</dependency>
81
+		<dependency>
82
+			<groupId>io.jsonwebtoken</groupId>
83
+			<artifactId>jjwt-impl</artifactId>
84
+			<version>0.10.5</version>
85
+			<scope>runtime</scope>
86
+		</dependency>
87
+		<dependency>
88
+			<groupId>io.jsonwebtoken</groupId>
89
+			<artifactId>jjwt-jackson</artifactId>
90
+			<version>0.10.5</version>
91
+			<scope>runtime</scope>
92
+		</dependency>
93
+		<dependency>
94
+			<groupId>com.aliyun.oss</groupId>
95
+			<artifactId>aliyun-sdk-oss</artifactId>
96
+			<version>2.8.3</version>
97
+		</dependency>
98
+		<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
99
+		<dependency>
100
+			<groupId>org.dom4j</groupId>
101
+			<artifactId>dom4j</artifactId>
102
+			<version>2.1.1</version>
103
+		</dependency>
104
+		<dependency>
105
+			<groupId>org.jodd</groupId>
106
+			<artifactId>jodd-bean</artifactId>
107
+			<version>3.7.1</version>
108
+		</dependency>
109
+		<dependency>
110
+			<groupId>commons-collections</groupId>
111
+			<artifactId>commons-collections</artifactId>
112
+			<version>3.2.1</version>
113
+		</dependency>
114
+
115
+		<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
116
+		<dependency>
117
+			<groupId>com.google.guava</groupId>
118
+			<artifactId>guava</artifactId>
119
+			<version>26.0-jre</version>
120
+		</dependency>
121
+
122
+		<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
123
+		<dependency>
124
+			<groupId>com.alibaba</groupId>
125
+			<artifactId>easyexcel</artifactId>
126
+			<version>2.0.4</version>
127
+		</dependency>
128
+
129
+		<!-- swagger2 -->
130
+		<dependency>
131
+			<groupId>io.springfox</groupId>
132
+			<artifactId>springfox-swagger2</artifactId>
133
+			<version>2.7.0</version>
134
+		</dependency>
135
+
136
+		<dependency>
137
+			<groupId>io.springfox</groupId>
138
+			<artifactId>springfox-swagger-ui</artifactId>
139
+			<version>2.7.0</version>
140
+		</dependency>
141
+
142
+        <!-- aop 依赖 -->
143
+        <dependency>
144
+            <groupId>org.springframework.boot</groupId>
145
+            <artifactId>spring-boot-starter-aop</artifactId>
146
+        </dependency>
147
+
148
+
149
+		<dependency>
150
+			<groupId>fadada</groupId>
151
+			<artifactId>fadada_api_sdk</artifactId>
152
+			<version>2.4.0</version>
153
+			<scope>system</scope>
154
+			<systemPath>${basedir}/src/main/resources/lib/fadada_api_sdk_2.4.0.jar</systemPath>
155
+		</dependency>
156
+	</dependencies>
157
+
158
+
159
+	<profiles>
160
+		<profile>
161
+			<id>dev</id>
162
+			<properties>
163
+				<profiles.active>dev</profiles.active>
164
+			</properties>
165
+		</profile>
166
+		<profile>
167
+			<id>prod</id>
168
+			<properties>
169
+				<profiles.active>prod</profiles.active>
170
+			</properties>
171
+		</profile>
172
+	</profiles>
173
+	<build>
174
+		<plugins>
175
+			<plugin>
176
+				<groupId>org.springframework.boot</groupId>
177
+				<artifactId>spring-boot-maven-plugin</artifactId>
178
+			</plugin>
179
+		</plugins>
180
+		<resources>
181
+				<resource>
182
+					<directory>${basedir}/src/main/resources/lib</directory>
183
+					<targetPath>BOOT-INF/lib/</targetPath>
184
+					<includes>
185
+						<include>**/*.jar</include>
186
+					</includes>
187
+				</resource>
188
+                <resource>
189
+                    <directory>src/main/resources</directory>
190
+                    <filtering>true</filtering>
191
+                    <includes>
192
+                        <include>application.yml</include>
193
+                        <include>application-${profiles.active}.yml</include>
194
+                        <include>mapper/**/*.xml</include>
195
+                        <include>log/*.xml</include>
196
+                        <include>lib/*.jar</include>
197
+                    </includes>
198
+                </resource>
199
+            </resources>
200
+        </build>
201
+
202
+    </project>

+ 4130
- 0
replay_pid21432.log
Failā izmaiņas netiks attēlotas, jo tās ir par lielu
Parādīt failu


+ 17
- 0
src/main/java/com/huiju/estateagents/EstateagentsApplication.java Parādīt failu

@@ -0,0 +1,17 @@
1
+package com.huiju.estateagents;
2
+
3
+import com.huiju.estateagents.websocket.ChatServer;
4
+import org.springframework.boot.SpringApplication;
5
+import org.springframework.boot.autoconfigure.SpringBootApplication;
6
+import org.springframework.context.ConfigurableApplicationContext;
7
+
8
+@SpringBootApplication
9
+public class EstateagentsApplication {
10
+
11
+	public static void main(String[] args) {
12
+		SpringApplication springApplication = new SpringApplication(EstateagentsApplication.class);
13
+		ConfigurableApplicationContext configurableApplicationContext = springApplication.run(args);
14
+		ChatServer.setApplicationContext(configurableApplicationContext);
15
+	}
16
+
17
+}

+ 88
- 0
src/main/java/com/huiju/estateagents/activity/controller/ActivityController.java Parādīt failu

@@ -0,0 +1,88 @@
1
+package com.huiju.estateagents.activity.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
5
+import com.huiju.estateagents.activity.service.ActivityServiceI;
6
+import com.huiju.estateagents.base.BaseController;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import com.huiju.estateagents.entity.TaPerson;
9
+import com.huiju.estateagents.entity.TaRecommendCustomer;
10
+import com.huiju.estateagents.service.ITaPersonService;
11
+import com.huiju.estateagents.service.ITaRecommendCustomerService;
12
+import io.swagger.annotations.Api;
13
+import org.springframework.beans.factory.annotation.Autowired;
14
+import org.springframework.web.bind.annotation.RequestMapping;
15
+import org.springframework.web.bind.annotation.RequestMethod;
16
+import org.springframework.web.bind.annotation.RequestParam;
17
+import org.springframework.web.bind.annotation.RestController;
18
+
19
+import javax.servlet.http.HttpServletRequest;
20
+import java.util.List;
21
+
22
+/**
23
+ * @author FXF
24
+ * @date 2019-10-21
25
+ */
26
+@RestController
27
+@RequestMapping("/api")
28
+@Api(value = "所有活动", tags = "所有活动")
29
+public class ActivityController extends BaseController {
30
+	
31
+	@Autowired
32
+	private ActivityServiceI activityService;
33
+	
34
+	@Autowired
35
+	private ITaPersonService taPersonService;
36
+	
37
+	@Autowired
38
+	ITaRecommendCustomerService taRecommendCustomerService;
39
+	
40
+	@RequestMapping(value = "/wx/activity/list", method = RequestMethod.GET)
41
+	public ResponseBean wxBuildingDynamiceList(@RequestParam(value = "pageNumber",defaultValue = "1")Integer pageNumber,
42
+	                                           @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize,
43
+	                                           @RequestParam(value = "cityId",required = false)Integer cityId,
44
+	                                           HttpServletRequest request){
45
+		String openid = getOpenId(request);
46
+		Integer orgId = getOrgId(request);
47
+		ResponseBean  responseBean = new ResponseBean();
48
+		List<TaPerson> taPersons = taPersonService.getPersonsByOpenId(openid);
49
+		if (null == taPersons || taPersons.size() != 1) {
50
+			return responseBean.error("验证人员信息失败", ResponseBean.ERROR_UNAVAILABLE);
51
+		}
52
+		TaPerson person = taPersons.get(0);
53
+		responseBean = activityService.getActivityList(pageNumber,pageSize,orgId,person,cityId);
54
+		
55
+		return responseBean;
56
+	}
57
+	
58
+	@RequestMapping(value = "/wx/customer/activity/list", method = RequestMethod.GET)
59
+	public ResponseBean wxActivityList(@RequestParam(value = "pageNumber",defaultValue = "1")Integer pageNumber,
60
+	                                           @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize,
61
+	                                           @RequestParam(value = "customerId") String customerId,
62
+	                                           HttpServletRequest request){
63
+		ResponseBean  responseBean = new ResponseBean();
64
+		Integer orgId = getOrgId(request);
65
+		//查找客户信息
66
+		QueryWrapper<TaRecommendCustomer> queryWrapper = new QueryWrapper<>();
67
+		queryWrapper.eq("customer_id",customerId);
68
+		TaRecommendCustomer taRecommendCustomer = taRecommendCustomerService.getOne(queryWrapper);
69
+		if (null == taRecommendCustomer){
70
+			//验证人员信息失败小程序端希望是空数组对象
71
+			return ResponseBean.success(new Page(pageNumber,pageSize));
72
+		}
73
+		if (null == taRecommendCustomer.getPersonId()){
74
+			//验证人员信息失败小程序端希望是空数组对象
75
+			return ResponseBean.success(new Page(pageNumber,pageSize));
76
+		}
77
+		
78
+		QueryWrapper<TaPerson> taPersonQueryWrapper = new QueryWrapper<>();
79
+		taPersonQueryWrapper.eq("person_id",taRecommendCustomer.getPersonId());
80
+		TaPerson person = taPersonService.getOne(taPersonQueryWrapper);
81
+		if (null == person){
82
+			//验证人员信息失败小程序端希望是空数组对象
83
+			return ResponseBean.success(new Page(pageNumber,pageSize));
84
+		}
85
+		responseBean = activityService.getCustomerActivityList(pageNumber,pageSize,orgId,person);
86
+		return responseBean;
87
+	}
88
+}

+ 37
- 0
src/main/java/com/huiju/estateagents/activity/entity/Activity.java Parādīt failu

@@ -0,0 +1,37 @@
1
+package com.huiju.estateagents.activity.entity;
2
+
3
+import lombok.Data;
4
+
5
+import java.time.LocalDateTime;
6
+
7
+/**
8
+ * @author FXF
9
+ * @date 2019-10-21
10
+ */
11
+@Data
12
+public class Activity {
13
+
14
+	private Object id;
15
+	
16
+	private String mainImg;
17
+	
18
+	private String title;
19
+	
20
+	private LocalDateTime startDate;
21
+	
22
+	private LocalDateTime endDate;
23
+	
24
+	private Integer weight;
25
+	
26
+	/**
27
+	 *  0:进行中 1:未开始 2:已结束 3:已参与(微信端用)
28
+	 */
29
+	private Integer activityStatus;
30
+	
31
+	private String type;
32
+	
33
+	/**
34
+	 * 完成数量
35
+	 */
36
+	private Integer successNum;
37
+}

+ 23
- 0
src/main/java/com/huiju/estateagents/activity/mapper/ActivityMapper.java Parādīt failu

@@ -0,0 +1,23 @@
1
+package com.huiju.estateagents.activity.mapper;
2
+
3
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
4
+import com.huiju.estateagents.activity.entity.Activity;
5
+import org.apache.ibatis.annotations.Mapper;
6
+import org.apache.ibatis.annotations.Param;
7
+
8
+import java.util.List;
9
+import java.util.Map;
10
+
11
+@Mapper
12
+public interface ActivityMapper {
13
+	List<Activity> getActivityList(Page pg, @Param("orgId") Integer orgId,@Param("status") Integer status,@Param("cityId") Integer cityId);
14
+	
15
+	/**
16
+	 * 获取客户参与的活动列表
17
+	 * @param pg
18
+	 * @param orgId
19
+	 * @param personId
20
+	 * @return
21
+	 */
22
+	List<Map<String,Object>> getCustomerActivityList(Page pg,@Param("orgId") Integer orgId,@Param("personId") String personId);
23
+}

+ 27
- 0
src/main/java/com/huiju/estateagents/activity/service/ActivityServiceI.java Parādīt failu

@@ -0,0 +1,27 @@
1
+package com.huiju.estateagents.activity.service;
2
+
3
+import com.huiju.estateagents.base.ResponseBean;
4
+import com.huiju.estateagents.entity.TaPerson;
5
+
6
+public interface ActivityServiceI {
7
+	
8
+	/**
9
+	 * 获取三个活动
10
+	 * @param pageNumber
11
+	 * @param pageSize
12
+	 * @param orgId
13
+	 * @param person
14
+	 * @return
15
+	 */
16
+	ResponseBean getActivityList(Integer pageNumber, Integer pageSize, Integer orgId, TaPerson person,Integer cityId);
17
+	
18
+	/**
19
+	 * 获取客户参加的活动信息
20
+	 * @param pageNumber
21
+	 * @param pageSize
22
+	 * @param orgId
23
+	 * @param person
24
+	 * @return
25
+	 */
26
+	ResponseBean getCustomerActivityList(Integer pageNumber, Integer pageSize, Integer orgId, TaPerson person);
27
+}

+ 135
- 0
src/main/java/com/huiju/estateagents/activity/service/impl/ActivityServiceImpl.java Parādīt failu

@@ -0,0 +1,135 @@
1
+package com.huiju.estateagents.activity.service.impl;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
5
+import com.huiju.estateagents.activity.entity.Activity;
6
+import com.huiju.estateagents.activity.mapper.ActivityMapper;
7
+import com.huiju.estateagents.activity.service.ActivityServiceI;
8
+import com.huiju.estateagents.base.ResponseBean;
9
+import com.huiju.estateagents.common.CommConstant;
10
+import com.huiju.estateagents.entity.HelpInitiateRecord;
11
+import com.huiju.estateagents.entity.HelpRecord;
12
+import com.huiju.estateagents.entity.TaActivityDynamicEnlist;
13
+import com.huiju.estateagents.entity.TaPerson;
14
+import com.huiju.estateagents.entity.TaShareRecord;
15
+import com.huiju.estateagents.mapper.HelpInitiateRecordMapper;
16
+import com.huiju.estateagents.mapper.HelpRecordMapper;
17
+import com.huiju.estateagents.mapper.TaActivityDynamicEnlistMapper;
18
+import com.huiju.estateagents.mapper.TaShareRecordMapper;
19
+import io.swagger.models.auth.In;
20
+import org.springframework.beans.factory.annotation.Autowired;
21
+import org.springframework.stereotype.Service;
22
+
23
+import java.util.List;
24
+import java.util.Map;
25
+
26
+/**
27
+ * @author FXF
28
+ * @date 2019-10-21
29
+ */
30
+@Service
31
+public class ActivityServiceImpl implements ActivityServiceI {
32
+	
33
+	@Autowired
34
+	private ActivityMapper activityMapper;
35
+	
36
+	@Autowired
37
+	private TaActivityDynamicEnlistMapper taActivityDynamicEnlistMapper;
38
+	
39
+	@Autowired
40
+	private TaShareRecordMapper taShareRecordMapper;
41
+	
42
+	@Autowired
43
+	private HelpRecordMapper helpRecordMapper;
44
+	
45
+	@Autowired
46
+	private HelpInitiateRecordMapper helpInitiateRecordMapper;
47
+	
48
+	/**
49
+	 * 获取三个活动
50
+	 *
51
+	 * @param pageNumber
52
+	 * @param pageSize
53
+	 * @param orgId
54
+	 * @param person
55
+	 * @return
56
+	 */
57
+	@Override
58
+	public ResponseBean getActivityList(Integer pageNumber, Integer pageSize, Integer orgId, TaPerson person, Integer cityId) {
59
+		//查询是否报名了普通活动
60
+		QueryWrapper<TaActivityDynamicEnlist> queryWrapper = new QueryWrapper<>();
61
+		queryWrapper.eq("org_id",orgId);
62
+		queryWrapper.eq("person_id",person.getPersonId());
63
+		List<TaActivityDynamicEnlist> taActivityDynamicEnlists = taActivityDynamicEnlistMapper.selectList(queryWrapper);
64
+		//查询是否报名了拼团活动
65
+		QueryWrapper<TaShareRecord> taShareRecordQueryWrapper = new QueryWrapper<>();
66
+		taShareRecordQueryWrapper.eq("org_id",orgId);
67
+		taShareRecordQueryWrapper.eq("person_id",person.getPersonId());
68
+		List<TaShareRecord> taShareRecords = taShareRecordMapper.selectList(taShareRecordQueryWrapper);
69
+		//判断是否发起了助力活动
70
+		QueryWrapper<HelpInitiateRecord> helpInitiateRecordListQueryWrapper = new QueryWrapper<>();
71
+		helpInitiateRecordListQueryWrapper.eq("org_id",orgId);
72
+		helpInitiateRecordListQueryWrapper.eq("person_id",person.getPersonId());
73
+		List<HelpInitiateRecord> HelpInitiateRecords = helpInitiateRecordMapper.selectList(helpInitiateRecordListQueryWrapper);
74
+		
75
+		//分页获取全部数据
76
+		Page pg = new Page(pageNumber,pageSize);
77
+		List<Activity> list = activityMapper.getActivityList(pg,orgId, CommConstant.STATUS_NORMAL,cityId);
78
+		list.forEach(e -> {
79
+			if (e.getType().equals("dynamic")){
80
+				taActivityDynamicEnlists.forEach(dynamic -> {
81
+					if (e.getId().equals(dynamic.getDynamicId())){
82
+						e.setActivityStatus(CommConstant.ACTIVITY_STATUS_PARTNER);
83
+					}
84
+				});
85
+				e.setSuccessNum(null);
86
+			}else if (e.getType().equals("group")){
87
+				taShareRecords.forEach(share -> {
88
+					if (e.getId().equals(String.valueOf(share.getGroupActivityId()))){
89
+						e.setActivityStatus(CommConstant.ACTIVITY_STATUS_PARTNER);
90
+					}
91
+				});
92
+				//查看此活动已经完成的数量
93
+				QueryWrapper<TaShareRecord> shareRecordQueryWrapper = new QueryWrapper<>();
94
+				shareRecordQueryWrapper.eq("org_id",orgId);
95
+				shareRecordQueryWrapper.eq("group_activity_id",e.getId());
96
+				shareRecordQueryWrapper.eq("status",CommConstant.STATUS_UNACCALIMED);
97
+				List<TaShareRecord> taShareRecordsList = taShareRecordMapper.selectList(shareRecordQueryWrapper);
98
+				e.setSuccessNum(taShareRecordsList.size());
99
+			}else if (e.getType().equals("help")){
100
+				HelpInitiateRecords.forEach(help -> {
101
+					if (e.getId().equals(help.getHelpActivityId())){
102
+						e.setActivityStatus(CommConstant.ACTIVITY_STATUS_PARTNER);
103
+					}
104
+				});
105
+				//查看此活动已经完成的数量
106
+				QueryWrapper<HelpInitiateRecord> helpInitiateRecordQueryWrapper = new QueryWrapper<>();
107
+				helpInitiateRecordQueryWrapper.eq("org_id",orgId);
108
+				helpInitiateRecordQueryWrapper.eq("help_activity_id",e.getId());
109
+				helpInitiateRecordQueryWrapper.eq("status",CommConstant.STATUS_UNACCALIMED);
110
+				List<HelpInitiateRecord> helpInitiateRecordList = helpInitiateRecordMapper.selectList(helpInitiateRecordQueryWrapper);
111
+				e.setSuccessNum(helpInitiateRecordList.size());
112
+			}
113
+		});
114
+		pg.setRecords(list);
115
+		return ResponseBean.success(pg);
116
+	}
117
+	
118
+	/**
119
+	 * 获取客户参加的活动信息
120
+	 *
121
+	 * @param pageNumber
122
+	 * @param pageSize
123
+	 * @param orgId
124
+	 * @param person
125
+	 * @return
126
+	 */
127
+	@Override
128
+	public ResponseBean getCustomerActivityList(Integer pageNumber, Integer pageSize, Integer orgId, TaPerson person) {
129
+		//分页获取全部数据
130
+		Page pg = new Page(pageNumber,pageSize);
131
+		List<Map<String, Object>> customerActivityList = activityMapper.getCustomerActivityList(pg, orgId, person.getPersonId());
132
+		pg.setRecords(customerActivityList);
133
+		return ResponseBean.success(pg);
134
+	}
135
+}

+ 144
- 0
src/main/java/com/huiju/estateagents/base/BaseController.java Parādīt failu

@@ -0,0 +1,144 @@
1
+package com.huiju.estateagents.base;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.huiju.estateagents.center.taUser.entity.TaUser;
5
+import com.huiju.estateagents.center.taUser.service.ITaUserService;
6
+import com.huiju.estateagents.common.JWTUtils;
7
+import com.huiju.estateagents.entity.TaPersonBuilding;
8
+import com.huiju.estateagents.service.ITaPersonBuildingService;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+
11
+import javax.servlet.http.HttpServletRequest;
12
+import java.util.ArrayList;
13
+import java.util.Enumeration;
14
+import java.util.List;
15
+import java.util.Map;
16
+
17
+/**
18
+ * @author FXF
19
+ * @date 2018-12-18
20
+ */
21
+public class BaseController {
22
+    @Autowired
23
+    private ITaUserService taUserService;
24
+
25
+    @Autowired
26
+    private ITaPersonBuildingService taPersonBuildingService;
27
+
28
+    /**
29
+     * 获取orgId
30
+     *
31
+     * @param request
32
+     * @return
33
+     */
34
+    public Integer getOrgId(HttpServletRequest request) {
35
+
36
+        Map map = JWTUtils.getUserIdAndOrgId(request);
37
+        if (null != map && null != map.get("orgId")) {
38
+            return Integer.valueOf(map.get("orgId").toString());
39
+        }
40
+
41
+        return null;
42
+    }
43
+
44
+    public Integer getChannelId(HttpServletRequest request) {
45
+
46
+        Map map = JWTUtils.getUserIdAndOrgId(request);
47
+        if (null != map && null != map.get("channelId")) {
48
+            return Integer.valueOf(map.get("channelId").toString());
49
+        }
50
+
51
+        return null;
52
+    }
53
+
54
+    public String getChannelUserName(HttpServletRequest request) {
55
+
56
+        Map map = JWTUtils.getUserIdAndOrgId(request);
57
+        if (null != map && null != map.get("userName")) {
58
+            return map.get("userName").toString();
59
+        }
60
+
61
+        return null;
62
+    }
63
+
64
+    public String getOpenId(HttpServletRequest request) {
65
+
66
+        Map map = JWTUtils.getUserIdAndOrgId(request);
67
+        if (null != map && null != map.get("openId")) {
68
+            return map.get("openId").toString();
69
+        }
70
+
71
+        return null;
72
+    }
73
+
74
+    public String getPersonId(HttpServletRequest request) {
75
+
76
+        Map map = JWTUtils.getUserIdAndOrgId(request);
77
+        if (null != map && null != map.get("personId")) {
78
+            return map.get("personId").toString();
79
+        }
80
+
81
+        return null;
82
+    }
83
+
84
+    /**
85
+     * 获取orgId
86
+     *
87
+     * @param request
88
+     * @return
89
+     */
90
+    public Integer getUserId(HttpServletRequest request) {
91
+
92
+        Map map = JWTUtils.getUserIdAndOrgId(request);
93
+        if (null != map && null != map.get("userId")) {
94
+            return Integer.valueOf(map.get("userId").toString());
95
+        }
96
+
97
+        return null;
98
+    }
99
+
100
+    /**
101
+     * 获取服务管理后台用户ID
102
+     *
103
+     * @param request
104
+     * @return
105
+     */
106
+    public Integer getSysUserId(HttpServletRequest request) {
107
+
108
+        Map map = JWTUtils.getUserIdAndOrgId(request);
109
+        if (null != map && null != map.get("userId")) {
110
+            return Integer.valueOf(map.get("userId").toString());
111
+        }
112
+        return null;
113
+    }
114
+
115
+    /**
116
+     * 获取服务管理后台用户ID
117
+     *
118
+     * @param request
119
+     * @return
120
+     */
121
+    public String getSysUserName(HttpServletRequest request) {
122
+
123
+        Map map = JWTUtils.getUserIdAndOrgId(request);
124
+        if (null != map && null != map.get("userName")) {
125
+            return map.get("userName") + "";
126
+        }
127
+        return null;
128
+    }
129
+
130
+    public List<TaPersonBuilding> getTaPersonBuildingListByUserId(HttpServletRequest request) {
131
+        TaUser taUser = taUserService.getById(getUserId(request));
132
+        if (taUser == null) {
133
+            return null;
134
+        }
135
+        QueryWrapper<TaPersonBuilding> taPersonBuildingQueryWrapper = new QueryWrapper<>();
136
+        taPersonBuildingQueryWrapper.eq("user_id", taUser.getUserId());
137
+        List<TaPersonBuilding> taPersonBuildingList = taPersonBuildingService.list(taPersonBuildingQueryWrapper);
138
+        if (null != taUser.getIsAdmin() && taUser.getIsAdmin()) {
139
+            taPersonBuildingList = new ArrayList<>();
140
+        }
141
+        return taPersonBuildingList;
142
+    }
143
+}
144
+

+ 81
- 0
src/main/java/com/huiju/estateagents/base/ResponseBean.java Parādīt failu

@@ -0,0 +1,81 @@
1
+package com.huiju.estateagents.base;
2
+
3
+import java.io.Serializable;
4
+
5
+/**
6
+ * 接口统一状态返回BEAN.
7
+ */
8
+public class ResponseBean<T> implements Serializable {
9
+
10
+    private static final long serialVersionUID = 3593827217136880822L;
11
+
12
+    public static final int CODE_SUCCESS = 1000;
13
+    public static final int ERROR_AUTH_FAIL = 1001;
14
+    public static final int ERROR_AUTH_EXPIRED = 1002;
15
+    public static final int ERROR_MISSING_PARAMS = 1003;
16
+    public static final int ERROR_ILLEGAL_PARAMS = 1004;
17
+    public static final int ERROR_UNAVAILABLE = 1005;
18
+
19
+    private int code;
20
+    private String message;
21
+    private T data;
22
+
23
+    public ResponseBean() {
24
+        code = ResponseBean.CODE_SUCCESS;
25
+    }
26
+
27
+    public static <T> ResponseBean success(T data, String ...msgs) {
28
+        ResponseBean responseBean = new ResponseBean();
29
+        responseBean.code = ResponseBean.CODE_SUCCESS;
30
+        responseBean.data = data;
31
+
32
+        if (null != msgs && msgs.length > 0) {
33
+            responseBean.message = msgs[0];
34
+        }
35
+
36
+        return responseBean;
37
+    }
38
+
39
+    public static <T> ResponseBean error(String msg, int code, T ...datas) {
40
+        ResponseBean responseBean = new ResponseBean();
41
+        responseBean.code = code;
42
+        responseBean.message = msg;
43
+
44
+        if (null != datas && datas.length > 0) {
45
+            responseBean.data = datas[0];
46
+        }
47
+
48
+        return responseBean;
49
+    }
50
+    
51
+    public void addError(String message) {
52
+        this.code = ResponseBean.ERROR_UNAVAILABLE;
53
+        this.message = message;
54
+    }
55
+    
56
+    public void addSuccess(String message) {
57
+        this.code = ResponseBean.CODE_SUCCESS;
58
+        this.message = message;
59
+    }
60
+    
61
+    public void addSuccess(T data) {
62
+        this.code = ResponseBean.CODE_SUCCESS;
63
+        this.message = "成功";
64
+        this.data = data;
65
+    }
66
+
67
+    public T getData() {
68
+        return this.data;
69
+    }
70
+    public int getCode() {
71
+        return this.code;
72
+    }
73
+    public String getMessage() {
74
+        return this.message;
75
+    }
76
+
77
+    @Override
78
+    public String toString() {
79
+        return  "{ code: "+code+", message: "+message+", data: <T> }";
80
+    }
81
+}

+ 38
- 0
src/main/java/com/huiju/estateagents/base/UserControl.java Parādīt failu

@@ -0,0 +1,38 @@
1
+package com.huiju.estateagents.base;
2
+
3
+import com.huiju.estateagents.center.taUser.entity.TaUser;
4
+import com.huiju.estateagents.exception.EstaException;
5
+import org.springframework.web.context.request.RequestContextHolder;
6
+import org.springframework.web.context.request.ServletRequestAttributes;
7
+
8
+import javax.servlet.http.HttpSession;
9
+
10
+/**
11
+ * 用户控制
12
+ */
13
+public class UserControl {
14
+
15
+    /**
16
+     * 获取用户信息
17
+     * @return
18
+     */
19
+    public static TaUser getUser() {
20
+        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
21
+        HttpSession session = servletRequestAttributes.getRequest().getSession();
22
+        TaUser taUser = (TaUser) session.getAttribute("miniapp_user");
23
+        if (null == taUser) {
24
+            throw new EstaException("用户信息不存在, 请登录!");
25
+        }
26
+        return taUser;
27
+    }
28
+
29
+    /**
30
+     * 获取公司 org_id
31
+     * @return
32
+     */
33
+    public static Integer getOrgId() {
34
+        TaUser user = getUser();
35
+        return user.getOrgId();
36
+    }
37
+
38
+}

+ 49
- 0
src/main/java/com/huiju/estateagents/bo/request/ActivityStatisticResponseBO.java Parādīt failu

@@ -0,0 +1,49 @@
1
+package com.huiju.estateagents.bo.request;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * 活动统计返回实体
7
+ *
8
+ * @author gusy
9
+ * @date 2020/4/26 13:15
10
+ */
11
+@Data
12
+public class ActivityStatisticResponseBO {
13
+
14
+    /**
15
+     * 活动分享人数
16
+     */
17
+    private Integer sharePersons;
18
+
19
+    /**
20
+     * 活动分享次数
21
+     */
22
+    private Integer shareNum;
23
+
24
+    /**
25
+     * 活动访问人数
26
+     */
27
+    private Integer visitPersons;
28
+
29
+    /**
30
+     * 活动访问次数
31
+     */
32
+    private Integer visitNum;
33
+
34
+    /**
35
+     * 分享新增用户
36
+     */
37
+    private Integer newPersons;
38
+
39
+    /**
40
+     * 分享新增客户
41
+     */
42
+    private Integer newCustomers;
43
+
44
+    /**
45
+     * 活动名称
46
+     */
47
+    private String activityName;
48
+
49
+}

+ 88
- 0
src/main/java/com/huiju/estateagents/bo/request/ContractRecordRequestBO.java Parādīt failu

@@ -0,0 +1,88 @@
1
+package com.huiju.estateagents.bo.request;
2
+
3
+import lombok.Data;
4
+import org.springframework.format.annotation.DateTimeFormat;
5
+
6
+import java.time.LocalDate;
7
+
8
+/**
9
+ * 查询合同列表请求实体
10
+ */
11
+@Data
12
+public class ContractRecordRequestBO {
13
+
14
+    /**
15
+     * 页码
16
+     */
17
+    private Integer pageNum = 1;
18
+
19
+    /**
20
+     * 分页大小
21
+     */
22
+    private Integer pageSize = 10;
23
+
24
+    /**
25
+     * 公司名
26
+     */
27
+    private String companyName;
28
+
29
+    /**
30
+     * 公司编码
31
+     */
32
+    private String companyCode;
33
+
34
+    /**
35
+     * 组织名
36
+     */
37
+    private String orgName;
38
+
39
+    /**
40
+     * 小程序名
41
+     */
42
+    private String miniAppName;
43
+
44
+    /**
45
+     * 合同编号
46
+     */
47
+    private Integer contractId;
48
+
49
+    /**
50
+     * 合同名
51
+     */
52
+    private String contractName;
53
+
54
+    /**
55
+     * 渠道代理商
56
+     */
57
+    private String channelProxyName;
58
+
59
+    /**
60
+     * 是否结算
61
+     */
62
+    private Boolean settlement;
63
+
64
+    /**
65
+     * 甲方签署开始时间
66
+     */
67
+    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
68
+    private LocalDate signatoryStartTime;
69
+
70
+    /**
71
+     * 甲方签署结束时间
72
+     */
73
+
74
+    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
75
+    private LocalDate signatoryEndTime;
76
+
77
+    /**
78
+     * 结算开始时间
79
+     */
80
+    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
81
+    private LocalDate settlementStartTime;
82
+
83
+    /**
84
+     * 结算结束时间
85
+     */
86
+    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
87
+    private LocalDate settlementEndTime;
88
+}

+ 65
- 0
src/main/java/com/huiju/estateagents/bo/request/HousingRaiseRequestBO.java Parādīt failu

@@ -0,0 +1,65 @@
1
+package com.huiju.estateagents.bo.request;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * 查询房源认筹记录请求实体
7
+ *
8
+ * @Auther: gusy
9
+ * @Date: 2020/2/28 01:01
10
+ */
11
+@Data
12
+public class HousingRaiseRequestBO {
13
+
14
+    private Integer orgId;
15
+
16
+    /**
17
+     * 销售批次ID
18
+     */
19
+    private Integer salesBatchId;
20
+
21
+    /**
22
+     * 房源ID
23
+     */
24
+    private Integer houseId;
25
+
26
+    /**
27
+     * 期名
28
+     */
29
+    private String termName;
30
+
31
+    /**
32
+     * 楼栋名
33
+     */
34
+    private String blockName;
35
+
36
+    /**
37
+     * 单元名
38
+     */
39
+    private String unitName;
40
+
41
+    /**
42
+     * 楼层名
43
+     */
44
+    private String floorName;
45
+
46
+    /**
47
+     * 房间名
48
+     */
49
+    private String roomName;
50
+
51
+    /**
52
+     * 户型Id
53
+     */
54
+    private String apartmentId;
55
+
56
+    /**
57
+     * 房源发布状态
58
+     */
59
+    private Integer status;
60
+
61
+    /**
62
+     * 房源锁定状态
63
+     */
64
+    private String lockingStatus;
65
+}

+ 72
- 0
src/main/java/com/huiju/estateagents/bo/request/PresecretRecordRequestBO.java Parādīt failu

@@ -0,0 +1,72 @@
1
+package com.huiju.estateagents.bo.request;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * 预选记录查询请求实体
7
+ *
8
+ * @Auther: gusy
9
+ * @Date: 2020/2/28 00:14
10
+ */
11
+@Data
12
+public class PresecretRecordRequestBO {
13
+
14
+    private Integer orgId;
15
+
16
+    private Integer salesBatchId;
17
+
18
+    /**
19
+     * 房源ID
20
+     */
21
+    private Integer houseId;
22
+
23
+    /**
24
+     * 期名
25
+     */
26
+    private String termName;
27
+
28
+    /**
29
+     * 楼栋名
30
+     */
31
+    private String blockName;
32
+
33
+    /**
34
+     * 单元名
35
+     */
36
+    private String unitName;
37
+
38
+    /**
39
+     * 楼层名
40
+     */
41
+    private String floorName;
42
+
43
+    /**
44
+     * 房间名
45
+     */
46
+    private String roomName;
47
+
48
+    /**
49
+     * 用户手机号
50
+     */
51
+    private String phone;
52
+
53
+    /**
54
+     * 户型Id
55
+     */
56
+    private String apartmentId;
57
+
58
+    /**
59
+     * 预选状态
60
+     */
61
+    private Integer status;
62
+
63
+    /**
64
+     * 修改开始时间
65
+     */
66
+    private String startTime;
67
+
68
+    /**
69
+     * 修改结束时间
70
+     */
71
+    private String endTime;
72
+}

+ 29
- 0
src/main/java/com/huiju/estateagents/bo/request/QrCodeStatisticResponseBO.java Parādīt failu

@@ -0,0 +1,29 @@
1
+package com.huiju.estateagents.bo.request;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * 二维码统计返回实体
7
+ *
8
+ * @author gusy
9
+ * @date 2020/5/21 13:53
10
+ */
11
+@Data
12
+public class QrCodeStatisticResponseBO {
13
+
14
+    /**
15
+     * 访问人数
16
+     */
17
+    private Integer visitPersons;
18
+
19
+    /**
20
+     * 访问次数
21
+     */
22
+    private Integer visitNum;
23
+
24
+    /**
25
+     * 新增用户
26
+     */
27
+    private Integer newPersons;
28
+
29
+}

+ 75
- 0
src/main/java/com/huiju/estateagents/bo/request/RaiseOrderRequestBO.java Parādīt failu

@@ -0,0 +1,75 @@
1
+package com.huiju.estateagents.bo.request;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * 查询认筹订单请求实体
7
+ *
8
+ * @Auther: gusy
9
+ * @Date: 2020/2/27 22:10
10
+ */
11
+@Data
12
+public class RaiseOrderRequestBO {
13
+
14
+    private Integer orgId;
15
+
16
+    /**
17
+     * 认筹ID
18
+     */
19
+    private Integer raiseId;
20
+
21
+    /**
22
+     * 订单表ID
23
+     */
24
+    private Integer orderId;
25
+
26
+    /**
27
+     * 订单表ID
28
+     */
29
+    private Integer refundedOrderId;
30
+
31
+    /**
32
+     * 认筹单表ID
33
+     */
34
+    private Integer raiseRecordId;
35
+
36
+    /**
37
+     * 认筹手机号
38
+     */
39
+    private String tel;
40
+
41
+    /**
42
+     * 用户手机号
43
+     */
44
+    private String personTel;
45
+
46
+    /**
47
+     * 微信流水号
48
+     */
49
+    private String transactionId;
50
+
51
+    /**
52
+     * 微信退款号
53
+     */
54
+    private String refundNo;
55
+
56
+    /**
57
+     * 支付状态
58
+     */
59
+    private String payStatus;
60
+
61
+    /**
62
+     * 开始时间
63
+     */
64
+    private String payStartTime;
65
+
66
+    /**
67
+     * 结束时间
68
+     */
69
+    private String payEndTime;
70
+
71
+    /**
72
+     * 微信订单号
73
+     */
74
+    private String tradeNo;
75
+}

+ 100
- 0
src/main/java/com/huiju/estateagents/bo/request/RaiseRecordRequestBO.java Parādīt failu

@@ -0,0 +1,100 @@
1
+package com.huiju.estateagents.bo.request;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * 认筹单记录查询请求实体
7
+ *
8
+ * @Auther: gusy
9
+ * @Date: 2020/2/27 18:39
10
+ */
11
+@Data
12
+public class RaiseRecordRequestBO {
13
+
14
+    private Integer orgId;
15
+
16
+    /**
17
+     * 房源ID
18
+     */
19
+    private String houseId;
20
+
21
+    /**
22
+     * 认筹表ID
23
+     */
24
+    private Integer raiseId;
25
+
26
+    /**
27
+     * 认筹单ID
28
+     */
29
+    private Integer raiseRecordId;
30
+
31
+    /**
32
+     * 期名
33
+     */
34
+    private String termName;
35
+
36
+    /**
37
+     * 楼栋名
38
+     */
39
+    private String blockName;
40
+
41
+    /**
42
+     * 单元名
43
+     */
44
+    private String unitName;
45
+
46
+    /**
47
+     * 楼层名
48
+     */
49
+    private String floorName;
50
+
51
+    /**
52
+     * 房间名
53
+     */
54
+    private String roomName;
55
+
56
+    /**
57
+     * 是否作废
58
+     */
59
+    private Integer status;
60
+
61
+    /**
62
+     * 房源锁定状态
63
+     */
64
+    private String lockingStatus;
65
+
66
+    /**
67
+     * 认筹手机号
68
+     */
69
+    private String tel;
70
+
71
+    /**
72
+     * 用户手机号
73
+     */
74
+    private String personTel;
75
+
76
+    /**
77
+     * 缴费状态
78
+     */
79
+    private String payStatus;
80
+
81
+    /**
82
+     * 缴费方式
83
+     */
84
+    private String payType;
85
+
86
+    /**
87
+     * 开始时间
88
+     */
89
+    private String startTime;
90
+
91
+    /**
92
+     * 结束时间
93
+     */
94
+    private String endTime;
95
+
96
+    /**
97
+     * 用户姓名
98
+     */
99
+    private String personName;
100
+}

+ 18
- 0
src/main/java/com/huiju/estateagents/bo/request/SaveCzOrderRequestBO.java Parādīt failu

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.bo.request;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * 创建充值订单请求实体
7
+ *
8
+ * @author gusy
9
+ * @date 2020/6/9 14:58
10
+ */
11
+@Data
12
+public class SaveCzOrderRequestBO {
13
+
14
+    /**
15
+     * 充值金额
16
+     */
17
+    private Integer amount;
18
+}

+ 18
- 0
src/main/java/com/huiju/estateagents/bo/request/SaveRefundOrderRequestBO.java Parādīt failu

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.bo.request;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * 创建退款订单请求实体
7
+ *
8
+ * @author gusy
9
+ * @date 2020/6/9 14:58
10
+ */
11
+@Data
12
+public class SaveRefundOrderRequestBO {
13
+
14
+    /**
15
+     * 退款金额
16
+     */
17
+    private Integer amount;
18
+}

+ 143
- 0
src/main/java/com/huiju/estateagents/center/sysUser/controller/SysTokenController.java Parādīt failu

@@ -0,0 +1,143 @@
1
+package com.huiju.estateagents.center.sysUser.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.base.BaseController;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import com.huiju.estateagents.center.sysUser.entity.SysToken;
9
+import com.huiju.estateagents.center.sysUser.service.ISysTokenService;
10
+import org.slf4j.Logger;
11
+import org.slf4j.LoggerFactory;
12
+import org.springframework.beans.factory.annotation.Autowired;
13
+import org.springframework.web.bind.annotation.*;
14
+
15
+/**
16
+ * <p>
17
+    * 令牌表  前端控制器
18
+    * </p>
19
+ *
20
+ * @author jobob
21
+ * @since 2019-09-11
22
+ */
23
+@RestController
24
+@RequestMapping("/")
25
+public class SysTokenController extends BaseController {
26
+
27
+    private final Logger logger = LoggerFactory.getLogger(SysTokenController.class);
28
+
29
+    @Autowired
30
+    public ISysTokenService iSysTokenService;
31
+
32
+
33
+    /**
34
+     * 分页查询列表
35
+     * @param pageNum
36
+     * @param pageSize
37
+     * @return
38
+     */
39
+    @RequestMapping(value="/sysToken",method= RequestMethod.GET)
40
+    public ResponseBean sysTokenList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
41
+									 @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
42
+        ResponseBean responseBean = new ResponseBean();
43
+        try {
44
+            //使用分页插件
45
+		    IPage<SysToken> pg = new Page<>(pageNum, pageSize);
46
+            QueryWrapper<SysToken> queryWrapper = new QueryWrapper<>();
47
+            queryWrapper.orderByDesc("create_date");
48
+
49
+            IPage<SysToken> result = iSysTokenService.page(pg, queryWrapper);
50
+            responseBean.addSuccess(result);
51
+        }catch (Exception e){
52
+            e.printStackTrace();
53
+            logger.error("sysTokenList -=- {}",e.toString());
54
+            responseBean.addError(e.getMessage());
55
+        }
56
+        return responseBean;
57
+    }
58
+
59
+    /**
60
+     * 保存对象
61
+     * @param sysToken 实体对象
62
+     * @return
63
+     */
64
+    @RequestMapping(value="/sysToken",method= RequestMethod.POST)
65
+    public ResponseBean sysTokenAdd(@RequestBody SysToken sysToken){
66
+        ResponseBean responseBean = new ResponseBean();
67
+        try {
68
+            if (iSysTokenService.save(sysToken)){
69
+                responseBean.addSuccess(sysToken);
70
+            }else {
71
+                responseBean.addError("fail");
72
+            }
73
+        }catch (Exception e){
74
+            e.printStackTrace();
75
+            logger.error("sysTokenAdd -=- {}",e.toString());
76
+            responseBean.addError(e.getMessage());
77
+        }
78
+        return responseBean;
79
+    }
80
+
81
+    /**
82
+     * 根据id删除对象
83
+     * @param id  实体ID
84
+     */
85
+    @ResponseBody
86
+    @RequestMapping(value="/sysToken/{id}", method= RequestMethod.DELETE)
87
+    public ResponseBean sysTokenDelete(@PathVariable Integer id){
88
+        ResponseBean responseBean = new ResponseBean();
89
+        try {
90
+            if(iSysTokenService.removeById(id)){
91
+                responseBean.addSuccess("success");
92
+            }else {
93
+                responseBean.addError("fail");
94
+            }
95
+        }catch (Exception e){
96
+            e.printStackTrace();
97
+            logger.error("sysTokenDelete -=- {}",e.toString());
98
+            responseBean.addError(e.getMessage());
99
+        }
100
+        return responseBean;
101
+    }
102
+
103
+    /**
104
+     * 修改对象
105
+     * @param id  实体ID
106
+     * @param sysToken 实体对象
107
+     * @return
108
+     */
109
+    @RequestMapping(value="/sysToken/{id}",method= RequestMethod.PUT)
110
+    public ResponseBean sysTokenUpdate(@PathVariable Integer id,
111
+                                        @RequestBody SysToken sysToken){
112
+        ResponseBean responseBean = new ResponseBean();
113
+        try {
114
+            if (iSysTokenService.updateById(sysToken)){
115
+                responseBean.addSuccess(sysToken);
116
+            }else {
117
+                responseBean.addError("fail");
118
+            }
119
+        }catch (Exception e){
120
+            e.printStackTrace();
121
+            logger.error("sysTokenUpdate -=- {}",e.toString());
122
+            responseBean.addError(e.getMessage());
123
+        }
124
+        return responseBean;
125
+    }
126
+
127
+    /**
128
+     * 根据id查询对象
129
+     * @param id  实体ID
130
+     */
131
+    @RequestMapping(value="/sysToken/{id}",method= RequestMethod.GET)
132
+    public ResponseBean sysTokenGet(@PathVariable Integer id){
133
+        ResponseBean responseBean = new ResponseBean();
134
+        try {
135
+            responseBean.addSuccess(iSysTokenService.getById(id));
136
+        }catch (Exception e){
137
+            e.printStackTrace();
138
+            logger.error("sysTokenDelete -=- {}",e.toString());
139
+            responseBean.addError(e.getMessage());
140
+        }
141
+        return responseBean;
142
+    }
143
+}

+ 271
- 0
src/main/java/com/huiju/estateagents/center/sysUser/controller/SysUserController.java Parādīt failu

@@ -0,0 +1,271 @@
1
+package com.huiju.estateagents.center.sysUser.controller;
2
+
3
+import com.alibaba.fastjson.JSONObject;
4
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5
+import com.baomidou.mybatisplus.core.metadata.IPage;
6
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
7
+import com.huiju.estateagents.base.BaseController;
8
+import com.huiju.estateagents.base.ResponseBean;
9
+import com.huiju.estateagents.center.sysUser.entity.SysToken;
10
+import com.huiju.estateagents.center.sysUser.entity.SysUser;
11
+import com.huiju.estateagents.center.sysUser.service.ISysTokenService;
12
+import com.huiju.estateagents.center.sysUser.service.ISysUserService;
13
+import com.huiju.estateagents.center.taUser.entity.TaUser;
14
+import com.huiju.estateagents.center.taUser.service.ITaUserService;
15
+import com.huiju.estateagents.channel.sysChannel.entity.TaChannelProxy;
16
+import com.huiju.estateagents.channel.sysChannel.service.ITaChannelProxyService;
17
+import com.huiju.estateagents.common.CommConstant;
18
+import com.huiju.estateagents.common.JWTUtils;
19
+import com.huiju.estateagents.common.MD5Utils;
20
+import com.huiju.estateagents.common.StringUtils;
21
+import org.slf4j.Logger;
22
+import org.slf4j.LoggerFactory;
23
+import org.springframework.beans.factory.annotation.Autowired;
24
+import org.springframework.web.bind.annotation.*;
25
+
26
+import javax.servlet.http.HttpServletRequest;
27
+import java.time.LocalDateTime;
28
+import java.util.HashMap;
29
+import java.util.Map;
30
+
31
+/**
32
+ * <p>
33
+    * 系统用户 系统中心账户 前端控制器
34
+    * </p>
35
+ *
36
+ * @author jobob
37
+ * @since 2019-09-11
38
+ */
39
+@RestController
40
+@RequestMapping("/api")
41
+public class SysUserController extends BaseController {
42
+
43
+    private final Logger logger = LoggerFactory.getLogger(SysUserController.class);
44
+
45
+    @Autowired
46
+    public ISysUserService iSysUserService;
47
+    
48
+    @Autowired
49
+    private ISysTokenService sysTokenService;
50
+
51
+    @Autowired
52
+    private ITaUserService iTaUserService;
53
+
54
+    @Autowired
55
+    private ITaChannelProxyService iTaChannelProxyService;
56
+
57
+    /**
58
+     * 分页查询列表
59
+     * @param pageNum
60
+     * @param pageSize
61
+     * @return
62
+     */
63
+    @RequestMapping(value="/sysUser",method= RequestMethod.GET)
64
+    public ResponseBean sysUserList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
65
+									 @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
66
+        ResponseBean responseBean = new ResponseBean();
67
+        try {
68
+            //使用分页插件
69
+		    IPage<SysUser> pg = new Page<>(pageNum, pageSize);
70
+            QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
71
+            queryWrapper.orderByDesc("create_date");
72
+
73
+            IPage<SysUser> result = iSysUserService.page(pg, queryWrapper);
74
+            responseBean.addSuccess(result);
75
+        }catch (Exception e){
76
+            e.printStackTrace();
77
+            logger.error("sysUserList -=- {}",e.toString());
78
+            responseBean.addError(e.getMessage());
79
+        }
80
+        return responseBean;
81
+    }
82
+
83
+    /**
84
+     * 保存对象
85
+     * @param sysUser 实体对象
86
+     * @return
87
+     */
88
+    @RequestMapping(value="/sysUser",method= RequestMethod.POST)
89
+    public ResponseBean sysUserAdd(@RequestBody SysUser sysUser){
90
+        ResponseBean responseBean = new ResponseBean();
91
+        try {
92
+            if (iSysUserService.save(sysUser)){
93
+                responseBean.addSuccess(sysUser);
94
+            }else {
95
+                responseBean.addError("fail");
96
+            }
97
+        }catch (Exception e){
98
+            e.printStackTrace();
99
+            logger.error("sysUserAdd -=- {}",e.toString());
100
+            responseBean.addError(e.getMessage());
101
+        }
102
+        return responseBean;
103
+    }
104
+
105
+    /**
106
+     * 根据id删除对象
107
+     * @param id  实体ID
108
+     */
109
+    @ResponseBody
110
+    @RequestMapping(value="/sysUser/{id}", method= RequestMethod.DELETE)
111
+    public ResponseBean sysUserDelete(@PathVariable Integer id){
112
+        ResponseBean responseBean = new ResponseBean();
113
+        try {
114
+            if(iSysUserService.removeById(id)){
115
+                responseBean.addSuccess("success");
116
+            }else {
117
+                responseBean.addError("fail");
118
+            }
119
+        }catch (Exception e){
120
+            e.printStackTrace();
121
+            logger.error("sysUserDelete -=- {}",e.toString());
122
+            responseBean.addError(e.getMessage());
123
+        }
124
+        return responseBean;
125
+    }
126
+
127
+    /**
128
+     * 修改对象
129
+     * @param sysUser 实体对象
130
+     * @return
131
+     */
132
+    @RequestMapping(value="/center/sysUser",method= RequestMethod.PUT)
133
+    public ResponseBean sysUserUpdate(@RequestBody SysUser sysUser,HttpServletRequest request){
134
+        ResponseBean responseBean = new ResponseBean();
135
+        try {
136
+            String userName = JWTUtils.getSubject(request);
137
+            sysUser.setPassword(MD5Utils.md5(sysUser.getPassword()));
138
+            sysUser.setUserName(userName);
139
+            if (iSysUserService.updateById(sysUser)){
140
+                responseBean.addSuccess(sysUser);
141
+            }else {
142
+                responseBean.addError("fail");
143
+            }
144
+        }catch (Exception e){
145
+            e.printStackTrace();
146
+            logger.error("sysUserUpdate -=- {}",e.toString());
147
+            responseBean.addError(e.getMessage());
148
+        }
149
+        return responseBean;
150
+    }
151
+
152
+    /**
153
+     * 根据id查询对象
154
+     * @param id  实体ID
155
+     */
156
+    @RequestMapping(value="/sysUser/{id}",method= RequestMethod.GET)
157
+    public ResponseBean sysUserGet(@PathVariable Integer id){
158
+        ResponseBean responseBean = new ResponseBean();
159
+        try {
160
+            responseBean.addSuccess(iSysUserService.getById(id));
161
+        }catch (Exception e){
162
+            e.printStackTrace();
163
+            logger.error("sysUserDelete -=- {}",e.toString());
164
+            responseBean.addError(e.getMessage());
165
+        }
166
+        return responseBean;
167
+    }
168
+
169
+    /**
170
+     * 根据id查询对象
171
+     * @param id  实体ID
172
+     */
173
+    @RequestMapping(value="/center/current",method=RequestMethod.GET)
174
+    public ResponseBean currentUser(HttpServletRequest request){
175
+        Map map = JWTUtils.getUserIdAndOrgId(request);
176
+        QueryWrapper<TaChannelProxy> taChannelProxyQueryWrapper = new QueryWrapper<>();
177
+        taChannelProxyQueryWrapper.eq("user_name", map.get("userName")).or().eq("channel_tel", map.get("userName"));
178
+        TaChannelProxy taChannelProxy = iTaChannelProxyService.getOne(taChannelProxyQueryWrapper);
179
+        if (StringUtils.isEmpty(taChannelProxy.getUserName())){
180
+            taChannelProxy.setUserName(map.get("userName").toString());
181
+        }
182
+        return ResponseBean.success(taChannelProxy);
183
+    }
184
+    
185
+    @PostMapping("/center/signin")
186
+    public ResponseBean signin(@RequestBody String paramStr) {
187
+        JSONObject params = JSONObject.parseObject(paramStr);
188
+        if (params == null) {
189
+            return ResponseBean.error("非法参数", ResponseBean.ERROR_MISSING_PARAMS);
190
+        }
191
+
192
+        QueryWrapper<TaChannelProxy> taChannelProxyQueryWrapper = new QueryWrapper<>();
193
+        String userName = params.getString("userName");
194
+        if (StringUtils.isEmpty(userName)){
195
+            return ResponseBean.error("用户名不能为空", ResponseBean.ERROR_ILLEGAL_PARAMS);
196
+        }
197
+
198
+        taChannelProxyQueryWrapper.eq("user_name", userName).or().eq("channel_tel", userName);
199
+
200
+        //验证用户名密码是否正确
201
+        TaChannelProxy taChannelProxy = iTaChannelProxyService.getOne(taChannelProxyQueryWrapper);
202
+        String defaultPsw = MD5Utils.md5(params.getString("password"));
203
+        if (taChannelProxy == null || !defaultPsw.equals(taChannelProxy.getPassword())) {
204
+            return ResponseBean.error("用户名或密码错误", ResponseBean.ERROR_ILLEGAL_PARAMS);
205
+        }
206
+
207
+        //校验是否过期且是否停用
208
+        if (LocalDateTime.now().isAfter(taChannelProxy.getExpireDate()) || taChannelProxy.getStatus() == 0){
209
+            return ResponseBean.error("当前后台服务已到期,请联系管理员", ResponseBean.ERROR_ILLEGAL_PARAMS);
210
+        }
211
+
212
+        Map map = new HashMap();
213
+        map.put("userName", StringUtils.isEmpty(taChannelProxy.getUserName()) ? taChannelProxy.getChannelTel() : taChannelProxy.getUserName());
214
+        map.put("channelId",taChannelProxy.getChannelId().toString());
215
+        String token = JWTUtils.newTokenByMap(map);
216
+
217
+        //保存token
218
+        sysTokenService.saveToken(token);
219
+        
220
+        Map<String, Object> result = new HashMap<>();
221
+        result.put("token", token);
222
+        result.put("user", taChannelProxy);
223
+        
224
+        return ResponseBean.success(result);
225
+    }
226
+
227
+    @PostMapping("/center/changePassword")
228
+    public ResponseBean changePassword(@RequestParam String originalPassword,
229
+                                       @RequestParam String newPassword,HttpServletRequest request) {
230
+
231
+        if (org.apache.commons.lang3.StringUtils.isBlank(newPassword) || newPassword.length() < 6) {
232
+            return ResponseBean.error("新密不能小于6位", ResponseBean.ERROR_UNAVAILABLE);
233
+        }
234
+
235
+        Integer channelId = getChannelId(request);
236
+
237
+        // 校验当前旧密码是否正确
238
+        String password = MD5Utils.md5(MD5Utils.md5(originalPassword));
239
+        TaChannelProxy taChannelProxy = iTaChannelProxyService.getById(channelId);
240
+        if (!password.equals(taChannelProxy.getPassword())){
241
+            return ResponseBean.error("旧密码错误,请重新输入", ResponseBean.ERROR_UNAVAILABLE);
242
+        }
243
+
244
+        try {
245
+            iTaChannelProxyService.resetPassword(channelId, newPassword);
246
+            return ResponseBean.success("操作成功!");
247
+        } catch (Exception e) {
248
+            e.printStackTrace();
249
+            return ResponseBean.error(e.getMessage(), ResponseBean.ERROR_UNAVAILABLE);
250
+        }
251
+    }
252
+
253
+    @PostMapping("/center/signout")
254
+    public ResponseBean signout(HttpServletRequest request) {
255
+        String token = JWTUtils.getToken(request);
256
+        QueryWrapper<SysToken> sysTokenQueryWrapper = new QueryWrapper<>();
257
+        sysTokenQueryWrapper.eq("token",token);
258
+        sysTokenService.remove(sysTokenQueryWrapper);
259
+        return ResponseBean.success("成功退出");
260
+    }
261
+
262
+    @RequestMapping(value="/center/logo",method= RequestMethod.GET)
263
+    public ResponseBean getLogoImg(HttpServletRequest request){
264
+        ResponseBean responseBean = new ResponseBean();
265
+        Integer channelId = getChannelId(request);
266
+        TaChannelProxy taChannelProxy = iTaChannelProxyService.getById(channelId);
267
+        responseBean.addSuccess(taChannelProxy);
268
+        return responseBean;
269
+    }
270
+
271
+}

+ 38
- 0
src/main/java/com/huiju/estateagents/center/sysUser/entity/SysToken.java Parādīt failu

@@ -0,0 +1,38 @@
1
+package com.huiju.estateagents.center.sysUser.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.TableId;
4
+import lombok.Data;
5
+import lombok.EqualsAndHashCode;
6
+import lombok.experimental.Accessors;
7
+
8
+import java.io.Serializable;
9
+import java.time.LocalDateTime;
10
+
11
+/**
12
+ * <p>
13
+ * 令牌表 
14
+ * </p>
15
+ *
16
+ * @author jobob
17
+ * @since 2019-09-11
18
+ */
19
+@Data
20
+@EqualsAndHashCode(callSuper = false)
21
+@Accessors(chain = true)
22
+public class SysToken implements Serializable {
23
+
24
+    private static final long serialVersionUID = 1L;
25
+
26
+    /**
27
+     * token
28
+     */
29
+    @TableId(value = "token")
30
+    private String token;
31
+
32
+    /**
33
+     * 过期时间
34
+     */
35
+    private LocalDateTime expDate;
36
+
37
+
38
+}

+ 55
- 0
src/main/java/com/huiju/estateagents/center/sysUser/entity/SysUser.java Parādīt failu

@@ -0,0 +1,55 @@
1
+package com.huiju.estateagents.center.sysUser.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableId;
5
+import lombok.Data;
6
+import lombok.EqualsAndHashCode;
7
+import lombok.experimental.Accessors;
8
+
9
+import java.io.Serializable;
10
+
11
+/**
12
+ * <p>
13
+ * 系统用户 系统中心账户
14
+ * </p>
15
+ *
16
+ * @author jobob
17
+ * @since 2019-09-11
18
+ */
19
+@Data
20
+@EqualsAndHashCode(callSuper = false)
21
+@Accessors(chain = true)
22
+public class SysUser implements Serializable {
23
+
24
+    private static final long serialVersionUID = 1L;
25
+
26
+    /**
27
+     * 账户登录
28
+     */
29
+    @TableId(value = "user_id")
30
+    private Integer userId;
31
+
32
+    private String userName;
33
+
34
+    /**
35
+     * 登录密码
36
+     */
37
+    private String password;
38
+
39
+    /**
40
+     * 用户名称
41
+     */
42
+    private String name;
43
+
44
+    /**
45
+     * 头像
46
+     */
47
+    private String avatar;
48
+
49
+    /**
50
+     * 状态
51
+     */
52
+    private Integer status;
53
+
54
+
55
+}

+ 18
- 0
src/main/java/com/huiju/estateagents/center/sysUser/mapper/SysTokenMapper.java Parādīt failu

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.center.sysUser.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.huiju.estateagents.center.sysUser.entity.SysToken;
5
+import org.apache.ibatis.annotations.Mapper;
6
+
7
+/**
8
+ * <p>
9
+ * 令牌表  Mapper 接口
10
+ * </p>
11
+ *
12
+ * @author jobob
13
+ * @since 2019-09-11
14
+ */
15
+@Mapper
16
+public interface SysTokenMapper extends BaseMapper<SysToken> {
17
+
18
+}

+ 18
- 0
src/main/java/com/huiju/estateagents/center/sysUser/mapper/SysUserMapper.java Parādīt failu

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.center.sysUser.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.huiju.estateagents.center.sysUser.entity.SysUser;
5
+import org.apache.ibatis.annotations.Mapper;
6
+
7
+/**
8
+ * <p>
9
+ * 系统用户 系统中心账户 Mapper 接口
10
+ * </p>
11
+ *
12
+ * @author jobob
13
+ * @since 2019-09-11
14
+ */
15
+@Mapper
16
+public interface SysUserMapper extends BaseMapper<SysUser> {
17
+
18
+}

+ 17
- 0
src/main/java/com/huiju/estateagents/center/sysUser/service/ISysTokenService.java Parādīt failu

@@ -0,0 +1,17 @@
1
+package com.huiju.estateagents.center.sysUser.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.center.sysUser.entity.SysToken;
5
+
6
+/**
7
+ * <p>
8
+ * 令牌表  服务类
9
+ * </p>
10
+ *
11
+ * @author jobob
12
+ * @since 2019-09-11
13
+ */
14
+public interface ISysTokenService extends IService<SysToken> {
15
+	
16
+	SysToken saveToken(String token);
17
+}

+ 16
- 0
src/main/java/com/huiju/estateagents/center/sysUser/service/ISysUserService.java Parādīt failu

@@ -0,0 +1,16 @@
1
+package com.huiju.estateagents.center.sysUser.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.center.sysUser.entity.SysUser;
5
+
6
+/**
7
+ * <p>
8
+ * 系统用户 系统中心账户 服务类
9
+ * </p>
10
+ *
11
+ * @author jobob
12
+ * @since 2019-09-11
13
+ */
14
+public interface ISysUserService extends IService<SysUser> {
15
+
16
+}

+ 35
- 0
src/main/java/com/huiju/estateagents/center/sysUser/service/impl/SysTokenServiceImpl.java Parādīt failu

@@ -0,0 +1,35 @@
1
+package com.huiju.estateagents.center.sysUser.service.impl;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.huiju.estateagents.center.sysUser.entity.SysToken;
6
+import com.huiju.estateagents.center.sysUser.mapper.SysTokenMapper;
7
+import com.huiju.estateagents.center.sysUser.service.ISysTokenService;
8
+import org.springframework.beans.factory.annotation.Autowired;
9
+import org.springframework.stereotype.Service;
10
+
11
+import java.time.LocalDateTime;
12
+
13
+/**
14
+ * <p>
15
+ * 令牌表  服务实现类
16
+ * </p>
17
+ *
18
+ * @author jobob
19
+ * @since 2019-09-11
20
+ */
21
+@Service
22
+public class SysTokenServiceImpl extends ServiceImpl<SysTokenMapper, SysToken> implements ISysTokenService {
23
+	
24
+	@Autowired
25
+	private SysTokenMapper sysTokenMapper;
26
+	
27
+	@Override
28
+	public SysToken saveToken(String token) {
29
+		SysToken sysToken = new SysToken();
30
+		sysToken.setToken(token);
31
+		sysToken.setExpDate(LocalDateTime.now().plusDays(7));
32
+		sysTokenMapper.insert(sysToken);
33
+		return sysToken;
34
+	}
35
+}

+ 21
- 0
src/main/java/com/huiju/estateagents/center/sysUser/service/impl/SysUserServiceImpl.java Parādīt failu

@@ -0,0 +1,21 @@
1
+package com.huiju.estateagents.center.sysUser.service.impl;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.huiju.estateagents.center.sysUser.entity.SysUser;
6
+import com.huiju.estateagents.center.sysUser.mapper.SysUserMapper;
7
+import com.huiju.estateagents.center.sysUser.service.ISysUserService;
8
+import org.springframework.stereotype.Service;
9
+
10
+/**
11
+ * <p>
12
+ * 系统用户 系统中心账户 服务实现类
13
+ * </p>
14
+ *
15
+ * @author jobob
16
+ * @since 2019-09-11
17
+ */
18
+@Service
19
+public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
20
+
21
+}

+ 149
- 0
src/main/java/com/huiju/estateagents/center/taUser/controller/TaButtonUriMapController.java Parādīt failu

@@ -0,0 +1,149 @@
1
+package com.huiju.estateagents.center.taUser.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.base.BaseController;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import com.huiju.estateagents.center.taUser.entity.TaButtonUriMap;
9
+import com.huiju.estateagents.center.taUser.service.ITaButtonUriMapService;
10
+import org.slf4j.Logger;
11
+import org.slf4j.LoggerFactory;
12
+import org.springframework.beans.factory.annotation.Autowired;
13
+import org.springframework.web.bind.annotation.PathVariable;
14
+import org.springframework.web.bind.annotation.RequestBody;
15
+import org.springframework.web.bind.annotation.RequestMapping;
16
+import org.springframework.web.bind.annotation.RequestMethod;
17
+import org.springframework.web.bind.annotation.RequestParam;
18
+import org.springframework.web.bind.annotation.ResponseBody;
19
+import org.springframework.web.bind.annotation.RestController;
20
+
21
+/**
22
+ * <p>
23
+    * 按钮路由映射表  前端控制器
24
+    * </p>
25
+ *
26
+ * @author jobob
27
+ * @since 2019-09-26
28
+ */
29
+@RestController
30
+@RequestMapping("/")
31
+public class TaButtonUriMapController extends BaseController {
32
+
33
+    private final Logger logger = LoggerFactory.getLogger(TaButtonUriMapController.class);
34
+
35
+    @Autowired
36
+    public ITaButtonUriMapService iTaButtonUriMapService;
37
+
38
+
39
+    /**
40
+     * 分页查询列表
41
+     * @param pageNum
42
+     * @param pageSize
43
+     * @return
44
+     */
45
+    @RequestMapping(value="/taButtonUriMap",method= RequestMethod.GET)
46
+    public ResponseBean taButtonUriMapList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
47
+                                           @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
48
+        ResponseBean responseBean = new ResponseBean();
49
+        try {
50
+            //使用分页插件
51
+		    IPage<TaButtonUriMap> pg = new Page<>(pageNum, pageSize);
52
+            QueryWrapper<TaButtonUriMap> queryWrapper = new QueryWrapper<>();
53
+            queryWrapper.orderByDesc("create_date");
54
+
55
+            IPage<TaButtonUriMap> result = iTaButtonUriMapService.page(pg, queryWrapper);
56
+            responseBean.addSuccess(result);
57
+        }catch (Exception e){
58
+            e.printStackTrace();
59
+            logger.error("taButtonUriMapList -=- {}",e.toString());
60
+            responseBean.addError(e.getMessage());
61
+        }
62
+        return responseBean;
63
+    }
64
+
65
+    /**
66
+     * 保存对象
67
+     * @param taButtonUriMap 实体对象
68
+     * @return
69
+     */
70
+    @RequestMapping(value="/taButtonUriMap",method= RequestMethod.POST)
71
+    public ResponseBean taButtonUriMapAdd(@RequestBody TaButtonUriMap taButtonUriMap){
72
+        ResponseBean responseBean = new ResponseBean();
73
+        try {
74
+            if (iTaButtonUriMapService.save(taButtonUriMap)){
75
+                responseBean.addSuccess(taButtonUriMap);
76
+            }else {
77
+                responseBean.addError("fail");
78
+            }
79
+        }catch (Exception e){
80
+            e.printStackTrace();
81
+            logger.error("taButtonUriMapAdd -=- {}",e.toString());
82
+            responseBean.addError(e.getMessage());
83
+        }
84
+        return responseBean;
85
+    }
86
+
87
+    /**
88
+     * 根据id删除对象
89
+     * @param id  实体ID
90
+     */
91
+    @ResponseBody
92
+    @RequestMapping(value="/taButtonUriMap/{id}", method= RequestMethod.DELETE)
93
+    public ResponseBean taButtonUriMapDelete(@PathVariable Integer id){
94
+        ResponseBean responseBean = new ResponseBean();
95
+        try {
96
+            if(iTaButtonUriMapService.removeById(id)){
97
+                responseBean.addSuccess("success");
98
+            }else {
99
+                responseBean.addError("fail");
100
+            }
101
+        }catch (Exception e){
102
+            e.printStackTrace();
103
+            logger.error("taButtonUriMapDelete -=- {}",e.toString());
104
+            responseBean.addError(e.getMessage());
105
+        }
106
+        return responseBean;
107
+    }
108
+
109
+    /**
110
+     * 修改对象
111
+     * @param id  实体ID
112
+     * @param taButtonUriMap 实体对象
113
+     * @return
114
+     */
115
+    @RequestMapping(value="/taButtonUriMap/{id}",method= RequestMethod.PUT)
116
+    public ResponseBean taButtonUriMapUpdate(@PathVariable Integer id,
117
+                                        @RequestBody TaButtonUriMap taButtonUriMap){
118
+        ResponseBean responseBean = new ResponseBean();
119
+        try {
120
+            if (iTaButtonUriMapService.updateById(taButtonUriMap)){
121
+                responseBean.addSuccess(taButtonUriMap);
122
+            }else {
123
+                responseBean.addError("fail");
124
+            }
125
+        }catch (Exception e){
126
+            e.printStackTrace();
127
+            logger.error("taButtonUriMapUpdate -=- {}",e.toString());
128
+            responseBean.addError(e.getMessage());
129
+        }
130
+        return responseBean;
131
+    }
132
+
133
+    /**
134
+     * 根据id查询对象
135
+     * @param id  实体ID
136
+     */
137
+    @RequestMapping(value="/taButtonUriMap/{id}",method= RequestMethod.GET)
138
+    public ResponseBean taButtonUriMapGet(@PathVariable Integer id){
139
+        ResponseBean responseBean = new ResponseBean();
140
+        try {
141
+            responseBean.addSuccess(iTaButtonUriMapService.getById(id));
142
+        }catch (Exception e){
143
+            e.printStackTrace();
144
+            logger.error("taButtonUriMapDelete -=- {}",e.toString());
145
+            responseBean.addError(e.getMessage());
146
+        }
147
+        return responseBean;
148
+    }
149
+}

+ 149
- 0
src/main/java/com/huiju/estateagents/center/taUser/controller/TaTagUserController.java Parādīt failu

@@ -0,0 +1,149 @@
1
+package com.huiju.estateagents.center.taUser.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.base.BaseController;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import com.huiju.estateagents.center.taUser.entity.TaTagUser;
9
+import com.huiju.estateagents.center.taUser.service.ITaTagUserService;
10
+import org.slf4j.Logger;
11
+import org.slf4j.LoggerFactory;
12
+import org.springframework.beans.factory.annotation.Autowired;
13
+import org.springframework.web.bind.annotation.PathVariable;
14
+import org.springframework.web.bind.annotation.RequestBody;
15
+import org.springframework.web.bind.annotation.RequestMapping;
16
+import org.springframework.web.bind.annotation.RequestMethod;
17
+import org.springframework.web.bind.annotation.RequestParam;
18
+import org.springframework.web.bind.annotation.ResponseBody;
19
+import org.springframework.web.bind.annotation.RestController;
20
+
21
+/**
22
+ * <p>
23
+    *   前端控制器
24
+    * </p>
25
+ *
26
+ * @author jobob
27
+ * @since 2019-09-24
28
+ */
29
+@RestController
30
+@RequestMapping("/")
31
+public class TaTagUserController extends BaseController {
32
+
33
+    private final Logger logger = LoggerFactory.getLogger(TaTagUserController.class);
34
+
35
+    @Autowired
36
+    public ITaTagUserService iTaTagUserService;
37
+
38
+
39
+    /**
40
+     * 分页查询列表
41
+     * @param pageNum
42
+     * @param pageSize
43
+     * @return
44
+     */
45
+    @RequestMapping(value="/taTagUser",method= RequestMethod.GET)
46
+    public ResponseBean taTagUserList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
47
+                                      @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
48
+        ResponseBean responseBean = new ResponseBean();
49
+        try {
50
+            //使用分页插件
51
+		    IPage<TaTagUser> pg = new Page<>(pageNum, pageSize);
52
+            QueryWrapper<TaTagUser> queryWrapper = new QueryWrapper<>();
53
+            queryWrapper.orderByDesc("create_date");
54
+
55
+            IPage<TaTagUser> result = iTaTagUserService.page(pg, queryWrapper);
56
+            responseBean.addSuccess(result);
57
+        }catch (Exception e){
58
+            e.printStackTrace();
59
+            logger.error("taTagUserList -=- {}",e.toString());
60
+            responseBean.addError(e.getMessage());
61
+        }
62
+        return responseBean;
63
+    }
64
+
65
+    /**
66
+     * 保存对象
67
+     * @param taTagUser 实体对象
68
+     * @return
69
+     */
70
+    @RequestMapping(value="/taTagUser",method= RequestMethod.POST)
71
+    public ResponseBean taTagUserAdd(@RequestBody TaTagUser taTagUser){
72
+        ResponseBean responseBean = new ResponseBean();
73
+        try {
74
+            if (iTaTagUserService.save(taTagUser)){
75
+                responseBean.addSuccess(taTagUser);
76
+            }else {
77
+                responseBean.addError("fail");
78
+            }
79
+        }catch (Exception e){
80
+            e.printStackTrace();
81
+            logger.error("taTagUserAdd -=- {}",e.toString());
82
+            responseBean.addError(e.getMessage());
83
+        }
84
+        return responseBean;
85
+    }
86
+
87
+    /**
88
+     * 根据id删除对象
89
+     * @param id  实体ID
90
+     */
91
+    @ResponseBody
92
+    @RequestMapping(value="/taTagUser/{id}", method= RequestMethod.DELETE)
93
+    public ResponseBean taTagUserDelete(@PathVariable Integer id){
94
+        ResponseBean responseBean = new ResponseBean();
95
+        try {
96
+            if(iTaTagUserService.removeById(id)){
97
+                responseBean.addSuccess("success");
98
+            }else {
99
+                responseBean.addError("fail");
100
+            }
101
+        }catch (Exception e){
102
+            e.printStackTrace();
103
+            logger.error("taTagUserDelete -=- {}",e.toString());
104
+            responseBean.addError(e.getMessage());
105
+        }
106
+        return responseBean;
107
+    }
108
+
109
+    /**
110
+     * 修改对象
111
+     * @param id  实体ID
112
+     * @param taTagUser 实体对象
113
+     * @return
114
+     */
115
+    @RequestMapping(value="/taTagUser/{id}",method= RequestMethod.PUT)
116
+    public ResponseBean taTagUserUpdate(@PathVariable Integer id,
117
+                                        @RequestBody TaTagUser taTagUser){
118
+        ResponseBean responseBean = new ResponseBean();
119
+        try {
120
+            if (iTaTagUserService.updateById(taTagUser)){
121
+                responseBean.addSuccess(taTagUser);
122
+            }else {
123
+                responseBean.addError("fail");
124
+            }
125
+        }catch (Exception e){
126
+            e.printStackTrace();
127
+            logger.error("taTagUserUpdate -=- {}",e.toString());
128
+            responseBean.addError(e.getMessage());
129
+        }
130
+        return responseBean;
131
+    }
132
+
133
+    /**
134
+     * 根据id查询对象
135
+     * @param id  实体ID
136
+     */
137
+    @RequestMapping(value="/taTagUser/{id}",method= RequestMethod.GET)
138
+    public ResponseBean taTagUserGet(@PathVariable Integer id){
139
+        ResponseBean responseBean = new ResponseBean();
140
+        try {
141
+            responseBean.addSuccess(iTaTagUserService.getById(id));
142
+        }catch (Exception e){
143
+            e.printStackTrace();
144
+            logger.error("taTagUserDelete -=- {}",e.toString());
145
+            responseBean.addError(e.getMessage());
146
+        }
147
+        return responseBean;
148
+    }
149
+}

+ 150
- 0
src/main/java/com/huiju/estateagents/center/taUser/controller/TaTagsController.java Parādīt failu

@@ -0,0 +1,150 @@
1
+package com.huiju.estateagents.center.taUser.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.base.BaseController;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import com.huiju.estateagents.center.taUser.entity.TaTags;
9
+import com.huiju.estateagents.center.taUser.service.ITaTagsService;
10
+import org.slf4j.Logger;
11
+import org.slf4j.LoggerFactory;
12
+import org.springframework.beans.factory.annotation.Autowired;
13
+import org.springframework.web.bind.annotation.PathVariable;
14
+import org.springframework.web.bind.annotation.RequestBody;
15
+import org.springframework.web.bind.annotation.RequestMapping;
16
+import org.springframework.web.bind.annotation.RequestMethod;
17
+import org.springframework.web.bind.annotation.RequestParam;
18
+import org.springframework.web.bind.annotation.ResponseBody;
19
+import org.springframework.web.bind.annotation.RestController;
20
+
21
+import javax.servlet.http.HttpServletRequest;
22
+
23
+/**
24
+ * <p>
25
+    *   前端控制器
26
+    * </p>
27
+ *
28
+ * @author jobob
29
+ * @since 2019-09-24
30
+ */
31
+@RestController
32
+@RequestMapping("/api")
33
+public class TaTagsController extends BaseController {
34
+
35
+    private final Logger logger = LoggerFactory.getLogger(TaTagsController.class);
36
+
37
+    @Autowired
38
+    public ITaTagsService iTaTagsService;
39
+
40
+
41
+    /**
42
+     * 分页查询列表
43
+     * @param pageNum
44
+     * @param pageSize
45
+     * @return
46
+     */
47
+    @RequestMapping(value="/admin/taTags",method= RequestMethod.GET)
48
+    public ResponseBean taTagsList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
49
+                                   @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize, HttpServletRequest request){
50
+        ResponseBean responseBean = new ResponseBean();
51
+        try {
52
+            //使用分页插件
53
+		    IPage<TaTags> pg = new Page<>(pageNum, pageSize);
54
+            QueryWrapper<TaTags> queryWrapper = new QueryWrapper<>();
55
+            queryWrapper.eq("org_id",getOrgId(request));
56
+            IPage<TaTags> result = iTaTagsService.page(pg, queryWrapper);
57
+            responseBean.addSuccess(result);
58
+        }catch (Exception e){
59
+            e.printStackTrace();
60
+            logger.error("taTagsList -=- {}",e.toString());
61
+            responseBean.addError(e.getMessage());
62
+        }
63
+        return responseBean;
64
+    }
65
+
66
+    /**
67
+     * 保存对象
68
+     * @param taTags 实体对象
69
+     * @return
70
+     */
71
+    @RequestMapping(value="/taTags",method= RequestMethod.POST)
72
+    public ResponseBean taTagsAdd(@RequestBody TaTags taTags){
73
+        ResponseBean responseBean = new ResponseBean();
74
+        try {
75
+            if (iTaTagsService.save(taTags)){
76
+                responseBean.addSuccess(taTags);
77
+            }else {
78
+                responseBean.addError("fail");
79
+            }
80
+        }catch (Exception e){
81
+            e.printStackTrace();
82
+            logger.error("taTagsAdd -=- {}",e.toString());
83
+            responseBean.addError(e.getMessage());
84
+        }
85
+        return responseBean;
86
+    }
87
+
88
+    /**
89
+     * 根据id删除对象
90
+     * @param id  实体ID
91
+     */
92
+    @ResponseBody
93
+    @RequestMapping(value="/taTags/{id}", method= RequestMethod.DELETE)
94
+    public ResponseBean taTagsDelete(@PathVariable Integer id){
95
+        ResponseBean responseBean = new ResponseBean();
96
+        try {
97
+            if(iTaTagsService.removeById(id)){
98
+                responseBean.addSuccess("success");
99
+            }else {
100
+                responseBean.addError("fail");
101
+            }
102
+        }catch (Exception e){
103
+            e.printStackTrace();
104
+            logger.error("taTagsDelete -=- {}",e.toString());
105
+            responseBean.addError(e.getMessage());
106
+        }
107
+        return responseBean;
108
+    }
109
+
110
+    /**
111
+     * 修改对象
112
+     * @param id  实体ID
113
+     * @param taTags 实体对象
114
+     * @return
115
+     */
116
+    @RequestMapping(value="/taTags/{id}",method= RequestMethod.PUT)
117
+    public ResponseBean taTagsUpdate(@PathVariable Integer id,
118
+                                        @RequestBody TaTags taTags){
119
+        ResponseBean responseBean = new ResponseBean();
120
+        try {
121
+            if (iTaTagsService.updateById(taTags)){
122
+                responseBean.addSuccess(taTags);
123
+            }else {
124
+                responseBean.addError("fail");
125
+            }
126
+        }catch (Exception e){
127
+            e.printStackTrace();
128
+            logger.error("taTagsUpdate -=- {}",e.toString());
129
+            responseBean.addError(e.getMessage());
130
+        }
131
+        return responseBean;
132
+    }
133
+
134
+    /**
135
+     * 根据id查询对象
136
+     * @param id  实体ID
137
+     */
138
+    @RequestMapping(value="/taTags/{id}",method= RequestMethod.GET)
139
+    public ResponseBean taTagsGet(@PathVariable Integer id){
140
+        ResponseBean responseBean = new ResponseBean();
141
+        try {
142
+            responseBean.addSuccess(iTaTagsService.getById(id));
143
+        }catch (Exception e){
144
+            e.printStackTrace();
145
+            logger.error("taTagsDelete -=- {}",e.toString());
146
+            responseBean.addError(e.getMessage());
147
+        }
148
+        return responseBean;
149
+    }
150
+}

+ 68
- 0
src/main/java/com/huiju/estateagents/center/taUser/controller/TaUserAuthButtonController.java Parādīt failu

@@ -0,0 +1,68 @@
1
+package com.huiju.estateagents.center.taUser.controller;
2
+
3
+import com.alibaba.fastjson.JSONArray;
4
+import com.alibaba.fastjson.JSONObject;
5
+import com.huiju.estateagents.base.BaseController;
6
+import com.huiju.estateagents.base.ResponseBean;
7
+import com.huiju.estateagents.center.taUser.service.ITaUserAuthButtonService;
8
+import com.huiju.estateagents.entity.SysButtonInMenu;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.web.bind.annotation.*;
11
+
12
+import javax.servlet.http.HttpServletRequest;
13
+import java.util.List;
14
+
15
+/**
16
+ * @author weicc
17
+ * @Title: TaUserAuthButtonController
18
+ * @Description: TODO
19
+ * @date 2019/9/23
20
+ */
21
+@RestController
22
+@RequestMapping("/api")
23
+public class TaUserAuthButtonController extends BaseController {
24
+
25
+    @Autowired
26
+    public ITaUserAuthButtonService iTaUserAuthButtonService;
27
+
28
+    /**
29
+     * 根据userId获取菜单列表
30
+     * @param pageNum
31
+     * @param pageSize
32
+     * @return
33
+     */
34
+    @RequestMapping(value="/admin/userAuthButton",method= RequestMethod.GET)
35
+    public ResponseBean getButtonByUserId(HttpServletRequest servletRequest,
36
+                                          @RequestParam("pageNum")Integer pageNum,
37
+                                          @RequestParam("pageSize")Integer pageSize){
38
+        Integer userId = getUserId(servletRequest);
39
+        return iTaUserAuthButtonService.getButtonByUserId(pageNum,pageSize,userId.toString(),getOrgId(servletRequest));
40
+    }
41
+
42
+
43
+    /**
44
+     * 获取所有的菜单按钮
45
+     * @param pageNum
46
+     * @param pageSize
47
+     * @return
48
+     */
49
+    @RequestMapping(value="/admin/buttonList",method= RequestMethod.GET)
50
+    public ResponseBean getMenuByRole(@RequestParam("pageNum")Integer pageNum,
51
+                                      @RequestParam("pageSize")Integer pageSize){
52
+        return iTaUserAuthButtonService.getAllButton(pageNum, pageSize);
53
+    }
54
+
55
+    /**
56
+     * 用户授权按钮
57
+     * @return
58
+     */
59
+    @RequestMapping(value="/admin/updateAuthButton",method= RequestMethod.PUT)
60
+    public ResponseBean updateUserAuthMenu(HttpServletRequest request,
61
+                                           @RequestBody String sysButton){
62
+        Integer userId = getUserId(request);
63
+        JSONObject Object = JSONObject.parseObject(sysButton);
64
+        JSONArray JSONArray = Object.getJSONArray("sysButton");
65
+        List<SysButtonInMenu> sysButtonInMenuList = JSONArray.toJavaList(SysButtonInMenu.class);
66
+        return iTaUserAuthButtonService.updateUserAuthButton(userId, sysButtonInMenuList);
67
+    }
68
+}

+ 72
- 0
src/main/java/com/huiju/estateagents/center/taUser/controller/TaUserAuthMenuController.java Parādīt failu

@@ -0,0 +1,72 @@
1
+package com.huiju.estateagents.center.taUser.controller;
2
+
3
+import com.alibaba.fastjson.JSONArray;
4
+import com.alibaba.fastjson.JSONObject;
5
+import com.huiju.estateagents.base.BaseController;
6
+import com.huiju.estateagents.base.ResponseBean;
7
+import com.huiju.estateagents.center.taUser.service.ITaUserAuthMenuService;
8
+import com.huiju.estateagents.entity.SysButtonInMenu;
9
+import com.huiju.estateagents.entity.SysMenu;
10
+import org.springframework.beans.factory.annotation.Autowired;
11
+import org.springframework.web.bind.annotation.*;
12
+
13
+import javax.servlet.http.HttpServletRequest;
14
+import java.util.List;
15
+
16
+/**
17
+ * @author weicc
18
+ * @Title: TaUserAuthMenuController
19
+ * @Description: TODO
20
+ * @date 2019/9/21
21
+ */
22
+@RestController
23
+@RequestMapping("/api")
24
+public class TaUserAuthMenuController extends BaseController {
25
+
26
+    @Autowired
27
+    public ITaUserAuthMenuService iTaUserAuthMenuService;
28
+
29
+    /**
30
+     * 根据userId获取菜单列表
31
+     * @param pageNum
32
+     * @param pageSize
33
+     * @return
34
+     */
35
+    @RequestMapping(value="/admin/userAuthMenu",method= RequestMethod.GET)
36
+    public ResponseBean  getMenuByUserId(@RequestParam("pageNum")Integer pageNum,
37
+                                         @RequestParam("pageSize")Integer pageSize,
38
+                                         HttpServletRequest request){
39
+        Integer userId = getUserId(request);
40
+        return iTaUserAuthMenuService.getMenuByUserId(pageNum,pageSize,userId.toString(), getOrgId(request));
41
+    }
42
+
43
+    /**
44
+     * 获取所有菜单
45
+     * @param pageNum
46
+     * @param pageSize
47
+     * @return
48
+     */
49
+    @RequestMapping(value="/admin/menuList",method= RequestMethod.GET)
50
+    public ResponseBean getMenuByRole(@RequestParam("pageNum")Integer pageNum,
51
+                                      @RequestParam("pageSize")Integer pageSize, HttpServletRequest request){
52
+        return iTaUserAuthMenuService.getAllMenu(pageNum, pageSize, getOrgId(request), null);
53
+    }
54
+
55
+    /**
56
+     * 用户授权菜单
57
+     * @return
58
+     */
59
+    @RequestMapping(value="/admin/updateAuthMenu",method= RequestMethod.POST)
60
+    public ResponseBean updateUserAuthMenu(HttpServletRequest request,
61
+                                           @RequestBody String sysMenu){
62
+        JSONObject Object = JSONObject.parseObject(sysMenu);
63
+        String name = Object.getString("name");
64
+        Integer userId = Object.getInteger("id");
65
+        JSONArray JSONArray = Object.getJSONArray("sysMenu");
66
+        List<SysMenu> sysMenuList = JSONArray.toJavaList(SysMenu.class);
67
+
68
+        JSONArray buttonArray = Object.getJSONArray("sysButton");
69
+        List<SysButtonInMenu> sysButtonInMenuList = buttonArray.toJavaList(SysButtonInMenu.class);
70
+        return iTaUserAuthMenuService.updateUserAuthMenu(userId, sysMenuList,name,getOrgId(request),sysButtonInMenuList);
71
+    }
72
+}

+ 566
- 0
src/main/java/com/huiju/estateagents/center/taUser/controller/TaUserController.java Parādīt failu

@@ -0,0 +1,566 @@
1
+package com.huiju.estateagents.center.taUser.controller;
2
+
3
+import com.alibaba.fastjson.JSONObject;
4
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5
+import com.baomidou.mybatisplus.core.metadata.IPage;
6
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
7
+import com.huiju.estateagents.base.BaseController;
8
+import com.huiju.estateagents.base.ResponseBean;
9
+import com.huiju.estateagents.center.sysUser.entity.SysToken;
10
+import com.huiju.estateagents.center.sysUser.service.ISysTokenService;
11
+import com.huiju.estateagents.center.taUser.entity.TaTagUser;
12
+import com.huiju.estateagents.center.taUser.entity.TaTags;
13
+import com.huiju.estateagents.center.taUser.entity.TaUser;
14
+import com.huiju.estateagents.center.taUser.entity.TaUserRole;
15
+import com.huiju.estateagents.center.taUser.service.*;
16
+import com.huiju.estateagents.common.CommConstant;
17
+import com.huiju.estateagents.common.JWTUtils;
18
+import com.huiju.estateagents.common.MD5Utils;
19
+import com.huiju.estateagents.entity.*;
20
+import com.huiju.estateagents.mapper.TaRoleMapper;
21
+import com.huiju.estateagents.service.*;
22
+import org.slf4j.Logger;
23
+import org.slf4j.LoggerFactory;
24
+import org.springframework.beans.factory.annotation.Autowired;
25
+import org.springframework.web.bind.annotation.*;
26
+
27
+import javax.servlet.http.HttpServletRequest;
28
+
29
+import java.time.LocalDateTime;
30
+import java.util.ArrayList;
31
+import java.util.HashMap;
32
+import java.util.List;
33
+import java.util.Map;
34
+
35
+/**
36
+ * <p>
37
+    * 用户表  前端控制器
38
+    * </p>
39
+ *
40
+ * @author jobob
41
+ * @since 2019-09-11
42
+ */
43
+@RestController
44
+@RequestMapping("/api")
45
+public class TaUserController extends BaseController {
46
+
47
+    private final Logger logger = LoggerFactory.getLogger(TaUserController.class);
48
+
49
+    @Autowired
50
+    public ITaUserService iTaUserService;
51
+
52
+    @Autowired
53
+    public ITaOrgService iTaOrgService;
54
+    
55
+    @Autowired
56
+    private ISysTokenService sysTokenService;
57
+
58
+    @Autowired
59
+    private ITaRoleService iTaRoleService;
60
+
61
+    @Autowired
62
+    private ITaUserAuthMenuService iTaUserAuthMenuService;
63
+
64
+    @Autowired
65
+    private ITaUserAuthButtonService iTaUserAuthButtonService;
66
+    
67
+    @Autowired
68
+    private ITaTagUserService taTagUserService;
69
+    
70
+    @Autowired
71
+    private ITaPersonBuildingService taPersonBuildingService;
72
+    
73
+    @Autowired
74
+    private ITaUserRoleService taUserRoleService;
75
+
76
+    @Autowired
77
+    private TaRoleMapper taRoleMapper;
78
+
79
+    @Autowired
80
+    private ITaPersonService iTaPersonService;
81
+
82
+    @Autowired
83
+    private ITaMiniappService iTaMiniappService;
84
+
85
+    /**
86
+     * 分页查询列表
87
+     * @param pageNum
88
+     * @param pageSize
89
+     * @return
90
+     */
91
+    @RequestMapping(value="/center/taUser",method= RequestMethod.GET)
92
+    public ResponseBean taUserList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
93
+									 @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize,
94
+                                     @RequestParam(value = "miniAppName", required = false) String miniAppName, HttpServletRequest request){
95
+        ResponseBean responseBean = new ResponseBean();
96
+
97
+        try {
98
+            //使用分页插件
99
+		    IPage pg = new Page<>(pageNum, pageSize);
100
+            IPage<Map<String,Object>> result = iTaUserService.getPageList(pg, getChannelId(request), miniAppName);
101
+            responseBean.addSuccess(result);
102
+        }catch (Exception e){
103
+            e.printStackTrace();
104
+            logger.error("taUserList -=- {}",e.toString());
105
+            responseBean.addError(e.getMessage());
106
+        }
107
+        return responseBean;
108
+    }
109
+
110
+    /**
111
+     * 分页查询列表
112
+     * @param pageNum
113
+     * @param pageSize
114
+     * @return
115
+     */
116
+    @RequestMapping(value="/channel/taUser",method= RequestMethod.GET)
117
+    public ResponseBean taUserChannelList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
118
+                                   @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
119
+        ResponseBean responseBean = new ResponseBean();
120
+        try {
121
+            //使用分页插件
122
+            IPage pg = new Page<>(pageNum, pageSize);
123
+            IPage<Map<String,Object>> result = iTaUserService.getPageList(pg, null, null);
124
+            responseBean.addSuccess(result);
125
+        }catch (Exception e){
126
+            e.printStackTrace();
127
+            logger.error("taUserList -=- {}",e.toString());
128
+            responseBean.addError(e.getMessage());
129
+        }
130
+        return responseBean;
131
+    }
132
+
133
+    /**
134
+     * 保存对象
135
+     * @param taUser 实体对象
136
+     * @return
137
+     */
138
+    @RequestMapping(value="/center/taUser",method= RequestMethod.POST)
139
+    public ResponseBean taUserAdd(@RequestBody TaUser taUser, HttpServletRequest request){
140
+        ResponseBean responseBean = new ResponseBean();
141
+        Integer channelId = getChannelId(request);
142
+        try {
143
+            responseBean.addSuccess(iTaUserService.newUserAndOrg(taUser, channelId));
144
+        }catch (Exception e){
145
+            e.printStackTrace();
146
+            logger.error("taUserAdd -=- {}",e.toString());
147
+            responseBean.addError(e.getMessage());
148
+        }
149
+        return responseBean;
150
+    }
151
+
152
+    @PutMapping(value = "/{plat}/turn/taUser/{id}/{type}")
153
+    public ResponseBean turnUser(@PathVariable String type, @PathVariable Integer id, @PathVariable("plat")String plat) {
154
+        try {
155
+            iTaUserService.turnUserOnOrNot(id, "on".equals(type), plat);
156
+        } catch (Exception e) {
157
+            e.printStackTrace();
158
+            return ResponseBean.error(e.getMessage(), ResponseBean.ERROR_UNAVAILABLE);
159
+        }
160
+
161
+        return ResponseBean.success("ok");
162
+    }
163
+
164
+    /**
165
+     * 根据id删除对象
166
+     * @param id  实体ID
167
+     */
168
+    @ResponseBody
169
+    @RequestMapping(value="/taUser/{id}", method= RequestMethod.DELETE)
170
+    public ResponseBean taUserDelete(@PathVariable Integer id){
171
+        ResponseBean responseBean = new ResponseBean();
172
+        try {
173
+            if(iTaUserService.removeById(id)){
174
+                responseBean.addSuccess("success");
175
+            }else {
176
+                responseBean.addError("fail");
177
+            }
178
+        }catch (Exception e){
179
+            e.printStackTrace();
180
+            logger.error("taUserDelete -=- {}",e.toString());
181
+            responseBean.addError(e.getMessage());
182
+        }
183
+        return responseBean;
184
+    }
185
+
186
+    /**
187
+     * 修改对象
188
+     * @param id  实体ID
189
+     * @param taUser 实体对象
190
+     * @return
191
+     */
192
+    @RequestMapping(value="/center/taUser/{id}",method= RequestMethod.PUT)
193
+    public ResponseBean taUserUpdate(@PathVariable Integer id,
194
+                                        @RequestBody TaUser taUser){
195
+        ResponseBean responseBean = new ResponseBean();
196
+        try {
197
+            iTaUserService.updateInfoWithOrg(taUser);
198
+        }catch (Exception e){
199
+            e.printStackTrace();
200
+            logger.error("taUserUpdate -=- {}",e.toString());
201
+            responseBean.addError(e.getMessage());
202
+        }
203
+        return responseBean;
204
+    }
205
+    /**
206
+     * 获取用户信息
207
+     */
208
+    @RequestMapping(value="/center/taUser/{id}",method= RequestMethod.GET)
209
+    public ResponseBean taUserGet(@PathVariable Integer id){
210
+        ResponseBean responseBean = new ResponseBean();
211
+        try {
212
+            responseBean.addSuccess(iTaUserService.getInfoWithOrg(id));
213
+        }catch (Exception e){
214
+            e.printStackTrace();
215
+            logger.error("taUserDelete -=- {}",e.toString());
216
+            responseBean.addError(e.getMessage());
217
+        }
218
+
219
+        return responseBean;
220
+    }
221
+
222
+    /**
223
+     * 重置密码
224
+     * @param plat
225
+     * @param id
226
+     * @return
227
+     */
228
+    @PutMapping(value = "/{plat}/password/taUser/{id}")
229
+    public ResponseBean resetPassword(@PathVariable String plat, @PathVariable Integer id, HttpServletRequest request) {
230
+        if (!"center".equals(plat) && !"admin".equals(plat)) {
231
+            return ResponseBean.error("您没有权限进行此操作", ResponseBean.ERROR_AUTH_EXPIRED);
232
+        }
233
+
234
+        String newPass = plat.equals("center") ? "abc@123" : "123456";
235
+        try {
236
+            iTaUserService.resetPassword(id, newPass);
237
+            return ResponseBean.success("新密码为: " + newPass);
238
+        } catch (Exception e) {
239
+            e.printStackTrace();
240
+            return ResponseBean.error(e.getMessage(), ResponseBean.ERROR_UNAVAILABLE);
241
+        }
242
+    }
243
+
244
+
245
+    /**
246
+     * 业务端  修改密码
247
+     * @return/
248
+     */
249
+    @PutMapping(value = "/admin/update/password")
250
+    public ResponseBean updatePassword( @RequestParam String originalPassword,
251
+                                        @RequestParam String newPassword,
252
+                                        HttpServletRequest request) {
253
+
254
+        if (org.apache.commons.lang3.StringUtils.isBlank(newPassword) || newPassword.length() < 6) {
255
+            return ResponseBean.error("新密不能小于6位", ResponseBean.ERROR_UNAVAILABLE);
256
+        }
257
+
258
+        Integer userId = getUserId(request);
259
+
260
+        // 校验当前旧密码是否正确
261
+        String password = MD5Utils.md5(MD5Utils.md5(originalPassword));
262
+        TaUser taUser = iTaUserService.getById(userId);
263
+        if (!password.equals(taUser.getLoginPassword())){
264
+            return ResponseBean.error("旧密码错误,请重新输入", ResponseBean.ERROR_UNAVAILABLE);
265
+        }
266
+
267
+        try {
268
+            iTaUserService.resetPassword(userId, newPassword);
269
+            return ResponseBean.success("操作成功!");
270
+        } catch (Exception e) {
271
+            e.printStackTrace();
272
+            return ResponseBean.error(e.getMessage(), ResponseBean.ERROR_UNAVAILABLE);
273
+        }
274
+    }
275
+
276
+    /**
277
+     * 获取当前用户信息
278
+     * @param request
279
+     * @return
280
+     */
281
+    @RequestMapping(value="/admin/taUser/current",method= RequestMethod.GET)
282
+    public ResponseBean taUserGetCurrent(HttpServletRequest request){
283
+        ResponseBean responseBean = new ResponseBean();
284
+        Map userMap = new HashMap();
285
+        Map map = JWTUtils.getUserIdAndOrgId(request);
286
+        try {
287
+            TaUser taUser = iTaUserService.getById(map.get("userId").toString());
288
+            List<TaRole> roles = iTaRoleService.getRolesByUser(taUser.getUserId());
289
+            ResponseBean authMenu = iTaUserAuthMenuService.getMenuByUserId(null, null, taUser.getUserId().toString(),taUser.getOrgId());
290
+            ResponseBean authButton = iTaUserAuthButtonService.getButtonByUserId(null, null, taUser.getUserId().toString(),taUser.getOrgId());
291
+            QueryWrapper<TaMiniapp> taMiniappQueryWrapper = new QueryWrapper<>();
292
+            taMiniappQueryWrapper.eq("org_id", getOrgId(request));
293
+            TaMiniapp taMiniapp = iTaMiniappService.getOne(taMiniappQueryWrapper);
294
+            //
295
+            TaOrg taOrg = iTaOrgService.getById(taUser.getOrgId());
296
+
297
+            taUser.setMenus((List<SysMenu>) authMenu.getData());
298
+            taUser.setButtons((List<SysButtonInMenu>) authButton.getData());
299
+            taUser.setRoles(roles);
300
+            taUser.setLoginPassword("");
301
+            taUser.setMiniAppName(taMiniapp.getName());
302
+            taUser.setOrgName(taOrg.getName());
303
+            taUser.setOrgThumb(taOrg.getThumb());
304
+            taUser.setOrgLogo(taOrg.getLogo());
305
+            taUser.setOrgDesc(taOrg.getOrgDesc());
306
+            taUser.setBossDisplay(taOrg.getBossDisplay());
307
+
308
+            //获取所有菜单
309
+            List<SysMenu> allMenus = (List<SysMenu>) iTaUserAuthMenuService.getAllMenu(null, null,taUser.getOrgId(), roles).getData();
310
+            List<SysButtonInMenu> allButtons = (List<SysButtonInMenu>) iTaUserAuthButtonService.getAllButton(null, null).getData();
311
+
312
+
313
+            userMap.put("taUser", taUser);
314
+            userMap.put("menuList", allMenus);
315
+            userMap.put("buttonList", allButtons);
316
+            responseBean.addSuccess(userMap);
317
+        }catch (Exception e){
318
+            e.printStackTrace();
319
+            logger.error("taUserDelete -=- {}",e.toString());
320
+            responseBean.addError(e.getMessage());
321
+        }
322
+        return responseBean;
323
+    }
324
+    
325
+    /**
326
+     * 用户手机号登录
327
+     * @param paramStr
328
+     * @return
329
+     */
330
+    @PostMapping("/admin/taUser/signin")
331
+    public ResponseBean signin(@RequestBody String paramStr) {
332
+        JSONObject params = JSONObject.parseObject(paramStr);
333
+        if (params == null) {
334
+            return ResponseBean.error("非法参数", ResponseBean.ERROR_MISSING_PARAMS);
335
+        }
336
+    
337
+        String userName = params.getString("loginName");
338
+        String userPassword = params.getString("loginPassword");
339
+    
340
+        //验证用户名密码是否正确
341
+        QueryWrapper<TaUser> sysUserQueryWrapper = new QueryWrapper<>();
342
+        sysUserQueryWrapper.eq("login_name",userName);
343
+        sysUserQueryWrapper.eq("login_password", MD5Utils.md5(userPassword));
344
+        TaUser taUser = iTaUserService.getOne(sysUserQueryWrapper);
345
+        if (taUser == null) {
346
+            return ResponseBean.error("用户名或密码错误", ResponseBean.ERROR_ILLEGAL_PARAMS);
347
+        }
348
+
349
+        QueryWrapper<TaUser> taUserQueryWrapper = new QueryWrapper<>();
350
+        taUserQueryWrapper.eq("org_id", taUser.getOrgId());
351
+        taUserQueryWrapper.eq("is_admin", 1);
352
+        TaUser taUserAdmin = iTaUserService.getOne(taUserQueryWrapper);
353
+
354
+        if (taUserAdmin.getExpDate().isBefore(LocalDateTime.now())){
355
+            return ResponseBean.error("该账号已经过期,请联系管理员", ResponseBean.ERROR_UNAVAILABLE);
356
+        }
357
+
358
+        if (!taUser.getStatus().equals(CommConstant.STATUS_NORMAL) ) {
359
+            return ResponseBean.error("该账号已经停用,请联系管理员", ResponseBean.ERROR_UNAVAILABLE);
360
+        }
361
+
362
+
363
+        List<TaRole> roles = iTaRoleService.getRolesByUser(taUser.getUserId());
364
+        taUser.setRoles(roles);
365
+        taUser.setLoginPassword("");
366
+        Map map = new HashMap();
367
+        map.put("userId",taUser.getUserId().toString());
368
+        map.put("orgId",taUser.getOrgId().toString());
369
+        String token = JWTUtils.newTokenByMap(map);
370
+
371
+        // 先尝试删除这个Token
372
+        // 因为偶尔出现了,Token插入失败,报的错就是主键重复
373
+        sysTokenService.removeById(token);
374
+
375
+        //保存token
376
+        sysTokenService.saveToken(token);
377
+    
378
+        Map<String, Object> result = new HashMap<>();
379
+        result.put("token", token);
380
+        result.put("user", taUser);
381
+
382
+        return ResponseBean.success(result);
383
+    }
384
+    
385
+    @PostMapping("/admin/taUser/signout")
386
+    public ResponseBean signout(HttpServletRequest request) {
387
+        String token = JWTUtils.getToken(request);
388
+        QueryWrapper<SysToken> sysTokenQueryWrapper = new QueryWrapper<>();
389
+        sysTokenQueryWrapper.eq("token",token);
390
+        sysTokenService.remove(sysTokenQueryWrapper);
391
+        return ResponseBean.success("成功退出");
392
+    }
393
+    
394
+    
395
+    /**
396
+     * 分页查询列表
397
+     * @param pageNum
398
+     * @param pageSize
399
+     * @return
400
+     */
401
+    @RequestMapping(value="/admin/taUser",method= RequestMethod.GET)
402
+    public ResponseBean taUserList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
403
+                                   @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize,
404
+                                   @RequestParam(value ="userName",required = false) String userName,
405
+                                   @RequestParam(value ="phone",required = false) String phone,
406
+                                   @RequestParam(value ="status",required = false) Integer status,
407
+                                   @RequestParam(value ="isConsultant",required = false) Integer isConsultant,
408
+                                   @RequestParam(value ="miniStatus",required = false) Integer miniStatus,
409
+                                   @RequestParam(value ="buildingId",required = false) String buildingId,
410
+                                   HttpServletRequest request){
411
+        ResponseBean responseBean = new ResponseBean();
412
+        try {
413
+            //使用分页插件
414
+            IPage pg = new Page<>(pageNum, pageSize);
415
+            TaUser taUser = new TaUser();
416
+            taUser.setOrgId(getOrgId(request));
417
+            taUser.setUserName(userName);
418
+            taUser.setPhone(phone);
419
+            taUser.setStatus(status);
420
+            taUser.setBuildingId(buildingId);
421
+            if(null != isConsultant && isConsultant == 1){
422
+                taUser.setIsConsultant(true);
423
+            }else if (null != isConsultant && isConsultant == 0){
424
+                taUser.setIsConsultant(false);
425
+            }
426
+            taUser.setMiniStatus(miniStatus);
427
+
428
+            IPage<TaUser> result = iTaUserService.seleUserList(pg,taUser,getTaPersonBuildingListByUserId(request));
429
+            List<TaUser> taUserList = result.getRecords();
430
+            taUserList.forEach(e -> {
431
+                List<TaTags> taTagsList = iTaUserService.getTagsList(e);
432
+                e.setTaTagsList(taTagsList);
433
+
434
+//                Integer person = iTaPersonService.judgeBindStatusByCondition(e.getUserId(), getOrgId(request), e.getPhone());
435
+//                e.setMiniStatus(0 == person ? 0 : 1);
436
+            });
437
+            result.setRecords(taUserList);
438
+            responseBean.addSuccess(result);
439
+        }catch (Exception e){
440
+            e.printStackTrace();
441
+            logger.error("taUserList -=- {}",e.toString());
442
+            responseBean.addError(e.getMessage());
443
+        }
444
+        return responseBean;
445
+    }
446
+    
447
+    
448
+    /**
449
+     * 获取用户信息
450
+     */
451
+    @RequestMapping(value="/admin/taUser/{id}",method= RequestMethod.GET)
452
+    public ResponseBean adminUserGet(@PathVariable Integer id){
453
+        ResponseBean responseBean = new ResponseBean();
454
+        try {
455
+            TaUser taUser = iTaUserService.getById(id);
456
+            QueryWrapper<TaTagUser> queryWrapper = new QueryWrapper<>();
457
+            queryWrapper.eq("user_id",id);
458
+            List<TaTagUser> taTagUserList = taTagUserService.list(queryWrapper);
459
+            List<Integer> tags = new ArrayList<>();
460
+            taTagUserList.forEach(e -> {
461
+                tags.add(e.getTagId());
462
+            });
463
+            taUser.setTaTags(tags);
464
+            //获取角色信息
465
+            QueryWrapper<TaUserRole> taUserRoleQueryWrapper = new QueryWrapper<>();
466
+            taUserRoleQueryWrapper.eq("user_id",id);
467
+            List<TaUserRole> taUserRoleList = taUserRoleService.list(taUserRoleQueryWrapper);
468
+            List<Integer> ids = new ArrayList<>();
469
+            taUserRoleList.forEach(e -> {
470
+                ids.add(e.getRoleId());
471
+            });
472
+            taUser.setRoleIds(ids);
473
+            taUser.setLoginPassword("");
474
+            QueryWrapper<TaPersonBuilding> taPersonBuildingQueryWrapper = new QueryWrapper<>();
475
+            taPersonBuildingQueryWrapper.eq("user_id",taUser.getUserId());
476
+            List<TaPersonBuilding> taPersonBuildingList = taPersonBuildingService.list(taPersonBuildingQueryWrapper);
477
+            //非置业顾问可以授权多个项目
478
+            if (taPersonBuildingList.size() > 0){
479
+                if (taUser.getIsConsultant()){
480
+                    taUser.setBuildingId(taPersonBuildingList.get(0).getBuildingId());
481
+                    QueryWrapper<TaPerson> taPersonQueryWrapper = new QueryWrapper<>();
482
+                    taPersonQueryWrapper.eq("user_id",id);
483
+                    taPersonQueryWrapper.eq("org_id",taUser.getOrgId());
484
+                    TaPerson taPerson = iTaPersonService.getOne(taPersonQueryWrapper);
485
+                    if (null != taPerson){
486
+                        taUser.setConsultantPersonId(taPerson.getPersonId());
487
+                    }
488
+                }else {
489
+                    List<String> buildings = new ArrayList<>();
490
+                    taPersonBuildingList.forEach(e -> {
491
+                        buildings.add(e.getBuildingId());
492
+                    });
493
+                    taUser.setBuildingIds(buildings);
494
+                }
495
+            }
496
+            responseBean.addSuccess(taUser);
497
+        }catch (Exception e){
498
+            e.printStackTrace();
499
+            logger.error("taUserDelete -=- {}",e.toString());
500
+            responseBean.addError(e.getMessage());
501
+        }
502
+        
503
+        return responseBean;
504
+    }
505
+    
506
+    /**
507
+     * 保存对象
508
+     * @param taUser 实体对象
509
+     * @return
510
+     */
511
+    @RequestMapping(value="/admin/taUser",method= RequestMethod.POST)
512
+    public ResponseBean adminUserAdd(@RequestBody TaUser taUser,HttpServletRequest request){
513
+        ResponseBean responseBean = new ResponseBean();
514
+        try {
515
+            taUser.setOrgId(getOrgId(request));
516
+            responseBean.addSuccess(iTaUserService.addAdminUser(taUser));
517
+        }catch (Exception e){
518
+            e.printStackTrace();
519
+            logger.error("taUserAdd -=- {}",e.toString());
520
+            responseBean.addError(e.getMessage());
521
+        }
522
+        return responseBean;
523
+    }
524
+    
525
+    /**
526
+     * 修改对象
527
+     * @param id  实体ID
528
+     * @param taUser 实体对象
529
+     * @return
530
+     */
531
+    @RequestMapping(value="/admin/taUser/{id}",method= RequestMethod.PUT)
532
+    public ResponseBean adminUserUpdate(@PathVariable Integer id,
533
+                                     @RequestBody TaUser taUser,HttpServletRequest request){
534
+        ResponseBean responseBean = new ResponseBean();
535
+        try {
536
+            taUser.setUserId(id);
537
+            taUser.setOrgId(getOrgId(request));
538
+            responseBean.addSuccess(iTaUserService.updateAdminUser(taUser));
539
+        }catch (Exception e){
540
+            e.printStackTrace();
541
+            logger.error("taUserUpdate -=- {}",e.toString());
542
+            responseBean.addError(e.getMessage());
543
+        }
544
+        return responseBean;
545
+    }
546
+
547
+    // 树形菜单
548
+    @RequestMapping(value="/center/taUser/city/tree",method= RequestMethod.GET)
549
+    public ResponseBean cityTree(){
550
+        ResponseBean taUser = iTaUserService.cityTree();
551
+        return taUser;
552
+    }
553
+
554
+    /**
555
+     * 员工离职
556
+     * @return
557
+     */
558
+    @RequestMapping(value = "/admin/user/departure/{userId}", method = RequestMethod.PUT)
559
+    public ResponseBean departureUser(@PathVariable("userId") Integer userId,
560
+                                      @RequestParam(value = "customerIdList", required = false) List<String> customerIdList,
561
+                                      @RequestParam(value = "consultantUserId", required = false) Integer consultantUserId) {
562
+        ResponseBean responseBean = new ResponseBean();
563
+        responseBean = iTaUserService.departureUser(userId, customerIdList, consultantUserId);
564
+        return responseBean;
565
+    }
566
+}

+ 178
- 0
src/main/java/com/huiju/estateagents/center/taUser/controller/TaUserRoleController.java Parādīt failu

@@ -0,0 +1,178 @@
1
+package com.huiju.estateagents.center.taUser.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.base.BaseController;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import com.huiju.estateagents.center.taUser.entity.TaUser;
9
+import com.huiju.estateagents.center.taUser.entity.TaUserRole;
10
+import com.huiju.estateagents.center.taUser.service.ITaUserRoleService;
11
+import org.slf4j.Logger;
12
+import org.slf4j.LoggerFactory;
13
+import org.springframework.beans.factory.annotation.Autowired;
14
+import org.springframework.web.bind.annotation.*;
15
+
16
+import java.util.ArrayList;
17
+import java.util.List;
18
+
19
+/**
20
+ * <p>
21
+    * 用户角色表  前端控制器
22
+    * </p>
23
+ *
24
+ * @author jobob
25
+ * @since 2019-09-11
26
+ */
27
+@RestController
28
+@RequestMapping("/")
29
+public class TaUserRoleController extends BaseController {
30
+
31
+    private final Logger logger = LoggerFactory.getLogger(TaUserRoleController.class);
32
+
33
+    @Autowired
34
+    public ITaUserRoleService iTaUserRoleService;
35
+
36
+
37
+    /**
38
+     * 分页查询列表
39
+     * @param pageNum
40
+     * @param pageSize
41
+     * @return
42
+     */
43
+    @RequestMapping(value="/center/taUserRole",method= RequestMethod.GET)
44
+    public ResponseBean taUserRoleList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
45
+									 @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
46
+        ResponseBean responseBean = new ResponseBean();
47
+        try {
48
+            //使用分页插件
49
+		    IPage<TaUserRole> pg = new Page<>(pageNum, pageSize);
50
+            QueryWrapper<TaUserRole> queryWrapper = new QueryWrapper<>();
51
+            queryWrapper.orderByDesc("create_date");
52
+
53
+            IPage<TaUserRole> result = iTaUserRoleService.page(pg, queryWrapper);
54
+            responseBean.addSuccess(result);
55
+        }catch (Exception e){
56
+            e.printStackTrace();
57
+            logger.error("taUserRoleList -=- {}",e.toString());
58
+            responseBean.addError(e.getMessage());
59
+        }
60
+        return responseBean;
61
+    }
62
+
63
+    /**
64
+     * 保存对象
65
+     * @param taUserRole 实体对象
66
+     * @return
67
+     */
68
+    @RequestMapping(value="/center/taUserRole",method= RequestMethod.POST)
69
+    public ResponseBean taUserRoleAdd(@RequestBody TaUserRole taUserRole){
70
+        ResponseBean responseBean = new ResponseBean();
71
+        try {
72
+            if (iTaUserRoleService.save(taUserRole)){
73
+                responseBean.addSuccess(taUserRole);
74
+            }else {
75
+                responseBean.addError("fail");
76
+            }
77
+        }catch (Exception e){
78
+            e.printStackTrace();
79
+            logger.error("taUserRoleAdd -=- {}",e.toString());
80
+            responseBean.addError(e.getMessage());
81
+        }
82
+        return responseBean;
83
+    }
84
+    
85
+    /**
86
+     * 批量保存用户角色
87
+     * @param taUserRole 实体对象
88
+     * @return
89
+     */
90
+    @RequestMapping(value="/center/taUserRoleList",method= RequestMethod.POST)
91
+    public ResponseBean taUserRoleListAdd(@RequestBody TaUserRole taUserRole){
92
+        ResponseBean responseBean = new ResponseBean();
93
+        try {
94
+            List<TaUserRole> taUserRoleList = new ArrayList<>();
95
+            List<Integer> roleIdList = taUserRole.getRoleIdList();
96
+            roleIdList.forEach(e -> {
97
+                TaUserRole taUserRoles = new TaUserRole();
98
+                taUserRoles.setRoleId(e);
99
+                taUserRole.setUserId(taUserRole.getUserId());
100
+                taUserRoleList.add(taUserRoles);
101
+            });
102
+            if (iTaUserRoleService.saveBatch(taUserRoleList)){
103
+                responseBean.addSuccess(taUserRole);
104
+            }else {
105
+                responseBean.addError("fail");
106
+            }
107
+        }catch (Exception e){
108
+            e.printStackTrace();
109
+            logger.error("taUserRoleAdd -=- {}",e.toString());
110
+            responseBean.addError(e.getMessage());
111
+        }
112
+        return responseBean;
113
+    }
114
+
115
+    /**
116
+     * 根据id删除对象
117
+     * @param id  实体ID
118
+     */
119
+    @ResponseBody
120
+    @RequestMapping(value="/taUserRole/{id}", method= RequestMethod.DELETE)
121
+    public ResponseBean taUserRoleDelete(@PathVariable Integer id){
122
+        ResponseBean responseBean = new ResponseBean();
123
+        try {
124
+            if(iTaUserRoleService.removeById(id)){
125
+                responseBean.addSuccess("success");
126
+            }else {
127
+                responseBean.addError("fail");
128
+            }
129
+        }catch (Exception e){
130
+            e.printStackTrace();
131
+            logger.error("taUserRoleDelete -=- {}",e.toString());
132
+            responseBean.addError(e.getMessage());
133
+        }
134
+        return responseBean;
135
+    }
136
+
137
+    /**
138
+     * 修改对象
139
+     * @param id  实体ID
140
+     * @param taUserRole 实体对象
141
+     * @return
142
+     */
143
+    @RequestMapping(value="/center/taUserRole/{id}",method= RequestMethod.PUT)
144
+    public ResponseBean taUserRoleUpdate(@PathVariable Integer id,
145
+                                        @RequestBody TaUserRole taUserRole){
146
+        ResponseBean responseBean = new ResponseBean();
147
+        try {
148
+            taUserRole.setRoleId(id);
149
+            if (iTaUserRoleService.updateById(taUserRole)){
150
+                responseBean.addSuccess(taUserRole);
151
+            }else {
152
+                responseBean.addError("fail");
153
+            }
154
+        }catch (Exception e){
155
+            e.printStackTrace();
156
+            logger.error("taUserRoleUpdate -=- {}",e.toString());
157
+            responseBean.addError(e.getMessage());
158
+        }
159
+        return responseBean;
160
+    }
161
+
162
+    /**
163
+     * 根据id查询对象
164
+     * @param id  实体ID
165
+     */
166
+    @RequestMapping(value="/taUserRole/{id}",method= RequestMethod.GET)
167
+    public ResponseBean taUserRoleGet(@PathVariable Integer id){
168
+        ResponseBean responseBean = new ResponseBean();
169
+        try {
170
+            responseBean.addSuccess(iTaUserRoleService.getById(id));
171
+        }catch (Exception e){
172
+            e.printStackTrace();
173
+            logger.error("taUserRoleDelete -=- {}",e.toString());
174
+            responseBean.addError(e.getMessage());
175
+        }
176
+        return responseBean;
177
+    }
178
+}

+ 40
- 0
src/main/java/com/huiju/estateagents/center/taUser/entity/TaButtonUriMap.java Parādīt failu

@@ -0,0 +1,40 @@
1
+package com.huiju.estateagents.center.taUser.entity;
2
+
3
+import lombok.Data;
4
+import lombok.EqualsAndHashCode;
5
+import lombok.experimental.Accessors;
6
+
7
+import java.io.Serializable;
8
+
9
+/**
10
+ * <p>
11
+ * 按钮路由映射表 
12
+ * </p>
13
+ *
14
+ * @author jobob
15
+ * @since 2019-09-26
16
+ */
17
+@Data
18
+@EqualsAndHashCode(callSuper = false)
19
+@Accessors(chain = true)
20
+public class TaButtonUriMap implements Serializable {
21
+
22
+    private static final long serialVersionUID = 1L;
23
+
24
+    /**
25
+     * 按钮
26
+     */
27
+    private String buttonCode;
28
+
29
+    /**
30
+     * uri
31
+     */
32
+    private String uri;
33
+
34
+    /**
35
+     * 说明
36
+     */
37
+    private String remark;
38
+
39
+
40
+}

+ 35
- 0
src/main/java/com/huiju/estateagents/center/taUser/entity/TaTagUser.java Parādīt failu

@@ -0,0 +1,35 @@
1
+package com.huiju.estateagents.center.taUser.entity;
2
+
3
+import lombok.Data;
4
+import lombok.EqualsAndHashCode;
5
+import lombok.experimental.Accessors;
6
+
7
+import java.io.Serializable;
8
+
9
+/**
10
+ * <p>
11
+ *  
12
+ * </p>
13
+ *
14
+ * @author jobob
15
+ * @since 2019-09-24
16
+ */
17
+@Data
18
+@EqualsAndHashCode(callSuper = false)
19
+@Accessors(chain = true)
20
+public class TaTagUser implements Serializable {
21
+
22
+    private static final long serialVersionUID = 1L;
23
+
24
+    /**
25
+     * 人员id
26
+     */
27
+    private Integer userId;
28
+
29
+    /**
30
+     * 标签id
31
+     */
32
+    private Integer tagId;
33
+
34
+
35
+}

+ 53
- 0
src/main/java/com/huiju/estateagents/center/taUser/entity/TaTags.java Parādīt failu

@@ -0,0 +1,53 @@
1
+package com.huiju.estateagents.center.taUser.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableId;
5
+import lombok.Data;
6
+import lombok.EqualsAndHashCode;
7
+import lombok.experimental.Accessors;
8
+
9
+import java.io.Serializable;
10
+
11
+/**
12
+ * <p>
13
+ *  
14
+ * </p>
15
+ *
16
+ * @author jobob
17
+ * @since 2019-09-24
18
+ */
19
+@Data
20
+@EqualsAndHashCode(callSuper = false)
21
+@Accessors(chain = true)
22
+public class TaTags implements Serializable {
23
+
24
+    private static final long serialVersionUID = 1L;
25
+
26
+    /**
27
+     * 标签id
28
+     */
29
+    @TableId(value = "tag_id", type = IdType.AUTO)
30
+    private Integer tagId;
31
+
32
+    /**
33
+     * 标签名称
34
+     */
35
+    private String tagName;
36
+
37
+    /**
38
+     * 标签颜色
39
+     */
40
+    private String tagColor;
41
+
42
+    /**
43
+     * 标签图表
44
+     */
45
+    private String tagIcon;
46
+
47
+    /**
48
+     * 公司id
49
+     */
50
+    private Integer orgId;
51
+
52
+
53
+}

+ 270
- 0
src/main/java/com/huiju/estateagents/center/taUser/entity/TaUser.java Parādīt failu

@@ -0,0 +1,270 @@
1
+package com.huiju.estateagents.center.taUser.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
4
+import com.baomidou.mybatisplus.annotation.IdType;
5
+import com.baomidou.mybatisplus.annotation.TableField;
6
+import com.baomidou.mybatisplus.annotation.TableId;
7
+import com.huiju.estateagents.entity.*;
8
+import lombok.Data;
9
+import lombok.EqualsAndHashCode;
10
+import lombok.experimental.Accessors;
11
+
12
+import java.io.Serializable;
13
+import java.time.LocalDateTime;
14
+import java.util.ArrayList;
15
+import java.util.List;
16
+
17
+/**
18
+ * <p>
19
+ * 用户表 
20
+ * </p>
21
+ *
22
+ * @author jobob
23
+ * @since 2019-09-11
24
+ */
25
+@Data
26
+@EqualsAndHashCode(callSuper = false)
27
+@Accessors(chain = true)
28
+public class TaUser implements Serializable {
29
+
30
+    private static final long serialVersionUID = 1L;
31
+
32
+    /**
33
+     * 用户ID
34
+     */
35
+    @TableId(value = "user_id", type = IdType.AUTO)
36
+    private Integer userId;
37
+
38
+    /**
39
+     * 公司id
40
+     */
41
+    private Integer orgId;
42
+
43
+    /**
44
+     * 用户名称
45
+     */
46
+    private String userName;
47
+
48
+    /**
49
+     * 登录账户
50
+     */
51
+    private String loginName;
52
+
53
+    /**
54
+     * 手机号
55
+     */
56
+    private String phone;
57
+
58
+    /**
59
+     * 登录密码
60
+     */
61
+    private String loginPassword;
62
+
63
+    /**
64
+     * 用户头像
65
+     */
66
+    private String avatar;
67
+
68
+    /**
69
+     * 用户状态
70
+     */
71
+    private Integer status;
72
+
73
+    /**
74
+     * 创建时间
75
+     */
76
+    private LocalDateTime createDate;
77
+
78
+    /**
79
+     * 账户过期时间
80
+     */
81
+    private LocalDateTime expDate;
82
+
83
+    /**
84
+     * 是否管理员
85
+     */
86
+    private Boolean isAdmin;
87
+
88
+    /**
89
+     * 公司名称
90
+     */
91
+    private String orgName;
92
+
93
+    /**
94
+     * 部门
95
+     */
96
+    private String department;
97
+
98
+    /**
99
+     * 职位
100
+     */
101
+    private String position;
102
+
103
+    /**
104
+     * 邮箱
105
+     */
106
+    private String email;
107
+
108
+    /**
109
+     * 身份证号
110
+     */
111
+    private String idNo;
112
+    
113
+    private String address;
114
+    private String photo;
115
+    private String description;
116
+
117
+    /**
118
+     * 权重
119
+     */
120
+    @TableField(strategy= FieldStrategy.IGNORED)
121
+    private String weight;
122
+
123
+    /**
124
+     * 是否置业顾问
125
+     */
126
+    private Boolean isConsultant;
127
+
128
+    /**
129
+     * 公司水印
130
+     */
131
+    @TableField(exist = false)
132
+    private String waterMark;
133
+
134
+    /**
135
+     * 关联小程序
136
+     */
137
+    @TableField(exist = false)
138
+    private TaMiniapp miniapp;
139
+
140
+    /**
141
+     * 授权角色列表
142
+     */
143
+    @TableField(exist = false)
144
+    private List<TaRole> roles;
145
+
146
+    /**
147
+     * 授权菜单列表
148
+     */
149
+    @TableField(exist = false)
150
+    private List<SysMenu> menus;
151
+
152
+    /**
153
+     * 授权按钮列表
154
+     */
155
+    @TableField(exist = false)
156
+    private List<SysButtonInMenu> buttons;
157
+    
158
+    @TableField(exist = false)
159
+    private List<TaTags> taTagsList = new ArrayList<TaTags>();
160
+    
161
+    @TableField(exist = false)
162
+    private List<Integer> taTags = new ArrayList<Integer>();
163
+    
164
+    @TableField(exist = false)
165
+    private List<Integer> roleIds = new ArrayList<Integer>();
166
+    
167
+    @TableField(exist = false)
168
+    private String buildingId;
169
+
170
+    @TableField(exist = false)
171
+    private List<String> projects;
172
+
173
+    /**
174
+     * ta_org/orgNum楼盘最大数
175
+     */
176
+  @TableField(exist = false)
177
+    private int orgNum;
178
+
179
+    // 所有省份城市
180
+    @TableField(exist = false)
181
+    List<TdCity> tdCityList;
182
+
183
+    /**
184
+     * 前台传值城市
185
+     */
186
+    @TableField(exist = false)
187
+    private ArrayList<String> selectCityTree;
188
+
189
+    /**
190
+     * 城市ID
191
+     */
192
+    @TableField(exist = false)
193
+    private Integer cityId;
194
+
195
+    /**
196
+     * 默认城市
197
+     */
198
+    @TableField(exist = false)
199
+    private Integer defaultCityId;
200
+
201
+    /**
202
+     * 小程序绑定状态
203
+     *
204
+     * 0 未绑定 1 绑定
205
+     */
206
+    @TableField(exist = false)
207
+    private Integer miniStatus;
208
+
209
+    @TableField(exist = false)
210
+    private List<String> buildingIds = new ArrayList<String>();
211
+
212
+    /**
213
+     * 新密码
214
+     */
215
+    @TableField(exist = false)
216
+    private String newPassword;
217
+
218
+    /**
219
+     * 确认新密码
220
+     */
221
+    @TableField(exist = false)
222
+    private String confirmPassword;
223
+
224
+    /**
225
+     * 置业顾问的personid
226
+     */
227
+    @TableField(exist = false)
228
+    private String consultantPersonId;
229
+
230
+    /**
231
+     * personId集合
232
+     */
233
+    @TableField(exist = false)
234
+    private List<TaPerson> personIds;
235
+
236
+    /**
237
+     * customerId集合
238
+     */
239
+    @TableField(exist = false)
240
+    private List<TaRecommendCustomer> customerIds;
241
+
242
+    @TableField(exist = false)
243
+    private String miniAppName;
244
+
245
+    private Boolean notShow;
246
+
247
+    /**
248
+     * 公司封面
249
+     */
250
+    @TableField(exist = false)
251
+    private String orgThumb;
252
+
253
+    /**
254
+     * 公司描述
255
+     */
256
+    @TableField(exist = false)
257
+    private String orgDesc;
258
+
259
+    /**
260
+     * 公司Logo
261
+     */
262
+    @TableField(exist = false)
263
+    private String orgLogo;
264
+
265
+    /**
266
+     * BOSS 开屏图
267
+     */
268
+    @TableField(exist = false)
269
+    private String bossDisplay;
270
+}

+ 51
- 0
src/main/java/com/huiju/estateagents/center/taUser/entity/TaUserRole.java Parādīt failu

@@ -0,0 +1,51 @@
1
+package com.huiju.estateagents.center.taUser.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableField;
5
+import com.baomidou.mybatisplus.annotation.TableId;
6
+import lombok.Data;
7
+import lombok.EqualsAndHashCode;
8
+import lombok.experimental.Accessors;
9
+
10
+import java.io.Serializable;
11
+import java.util.ArrayList;
12
+import java.util.List;
13
+
14
+/**
15
+ * <p>
16
+ * 用户角色表 
17
+ * </p>
18
+ *
19
+ * @author jobob
20
+ * @since 2019-09-11
21
+ */
22
+@Data
23
+@EqualsAndHashCode(callSuper = false)
24
+@Accessors(chain = true)
25
+public class TaUserRole implements Serializable {
26
+
27
+    private static final long serialVersionUID = 1L;
28
+
29
+    /**
30
+     * 序号
31
+     */
32
+    @TableId(value = "serial_no", type = IdType.AUTO)
33
+    private Integer serialNo;
34
+
35
+    /**
36
+     * 用户ID
37
+     */
38
+    private Integer userId;
39
+
40
+    /**
41
+     * 角色ID
42
+     */
43
+    private Integer roleId;
44
+    
45
+    /**
46
+     * 角色ID集合
47
+     */
48
+    @TableField(exist = false)
49
+    private List<Integer> roleIdList = new ArrayList<>();
50
+
51
+}

+ 20
- 0
src/main/java/com/huiju/estateagents/center/taUser/mapper/TaButtonUriMapMapper.java Parādīt failu

@@ -0,0 +1,20 @@
1
+package com.huiju.estateagents.center.taUser.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.huiju.estateagents.center.taUser.entity.TaButtonUriMap;
5
+import org.apache.ibatis.annotations.Mapper;
6
+import org.apache.ibatis.annotations.Param;
7
+
8
+/**
9
+ * <p>
10
+ * 按钮路由映射表  Mapper 接口
11
+ * </p>
12
+ *
13
+ * @author jobob
14
+ * @since 2019-09-26
15
+ */
16
+@Mapper
17
+public interface TaButtonUriMapMapper extends BaseMapper<TaButtonUriMap> {
18
+	
19
+	TaButtonUriMap getByURI(@Param("uri") String uri);
20
+}

+ 18
- 0
src/main/java/com/huiju/estateagents/center/taUser/mapper/TaTagUserMapper.java Parādīt failu

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.center.taUser.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.huiju.estateagents.center.taUser.entity.TaTagUser;
5
+import org.apache.ibatis.annotations.Mapper;
6
+
7
+/**
8
+ * <p>
9
+ *   Mapper 接口
10
+ * </p>
11
+ *
12
+ * @author jobob
13
+ * @since 2019-09-24
14
+ */
15
+@Mapper
16
+public interface TaTagUserMapper extends BaseMapper<TaTagUser> {
17
+
18
+}

+ 18
- 0
src/main/java/com/huiju/estateagents/center/taUser/mapper/TaTagsMapper.java Parādīt failu

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.center.taUser.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.huiju.estateagents.center.taUser.entity.TaTags;
5
+import org.apache.ibatis.annotations.Mapper;
6
+
7
+/**
8
+ * <p>
9
+ *   Mapper 接口
10
+ * </p>
11
+ *
12
+ * @author jobob
13
+ * @since 2019-09-24
14
+ */
15
+@Mapper
16
+public interface TaTagsMapper extends BaseMapper<TaTags> {
17
+
18
+}

+ 38
- 0
src/main/java/com/huiju/estateagents/center/taUser/mapper/TaUserAuthButtonMapper.java Parādīt failu

@@ -0,0 +1,38 @@
1
+package com.huiju.estateagents.center.taUser.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.entity.SysButtonInMenu;
7
+import org.apache.ibatis.annotations.Mapper;
8
+import org.apache.ibatis.annotations.Param;
9
+
10
+import java.util.List;
11
+
12
+/**
13
+ * @author admin
14
+ * @Title: TaUserAuthButtonMapper
15
+ * @Description: TODO
16
+ * @date 2019/9/23
17
+ */
18
+@Mapper
19
+public interface TaUserAuthButtonMapper  extends BaseMapper<SysButtonInMenu> {
20
+    /**
21
+     * 根据用户Id查询按钮列表
22
+     * @param userId
23
+     * @return
24
+     */
25
+    List<SysButtonInMenu> sysButtonListByUserId(@Param("userId")String userId);
26
+
27
+
28
+    /**
29
+     * 根据角色Id查询按钮列表
30
+     * @param page
31
+     * @return
32
+     */
33
+    List<SysButtonInMenu> sysButtonListByRoleId();
34
+
35
+    void deleteUserAuthButton(@Param("userId") Integer userId);
36
+
37
+    void addUserAuthButton(@Param("userId") Integer userId, @Param("sysButtons") List<SysButtonInMenu> sysButtonInMenus);
38
+}

+ 46
- 0
src/main/java/com/huiju/estateagents/center/taUser/mapper/TaUserAuthMenuMapper.java Parādīt failu

@@ -0,0 +1,46 @@
1
+package com.huiju.estateagents.center.taUser.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.entity.SysMenu;
7
+import org.apache.ibatis.annotations.Mapper;
8
+import org.apache.ibatis.annotations.Param;
9
+
10
+import java.util.List;
11
+
12
+
13
+/**
14
+ * @author weicc
15
+ * @Title: TaUserAuthMenuMapper
16
+ * @Description: TODO
17
+ * @date 2019/9/21
18
+ */
19
+@Mapper
20
+public interface TaUserAuthMenuMapper extends BaseMapper<SysMenu> {
21
+    /**
22
+     * 根据用户Id查询菜单列表
23
+     * @param userId
24
+     * @return
25
+     */
26
+    List<SysMenu> sysMenuListByUserId(@Param("userId")String userId);
27
+
28
+
29
+    /**
30
+     * 查询菜单列表
31
+     * @return
32
+     */
33
+    List<SysMenu> sysMenuListByRoleId();
34
+
35
+    /**
36
+     * 删除授权的菜单
37
+     * @param userId
38
+     */
39
+    void deleteUserAuthMenu(@Param("userId") Integer userId);
40
+
41
+    /**
42
+     * 新增授权的菜单
43
+     * @param userId
44
+     */
45
+    void addUserAuthMenu(@Param("userId") Integer userId, @Param("sysMenus") List<SysMenu> sysMenuList);
46
+}

+ 40
- 0
src/main/java/com/huiju/estateagents/center/taUser/mapper/TaUserMapper.java Parādīt failu

@@ -0,0 +1,40 @@
1
+package com.huiju.estateagents.center.taUser.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.huiju.estateagents.center.taUser.entity.TaTags;
6
+import com.huiju.estateagents.center.taUser.entity.TaUser;
7
+import com.huiju.estateagents.entity.TaPersonBuilding;
8
+import org.apache.ibatis.annotations.Mapper;
9
+import org.apache.ibatis.annotations.Param;
10
+
11
+import java.util.List;
12
+import java.util.Map;
13
+
14
+/**
15
+ * <p>
16
+ * 用户表  Mapper 接口
17
+ * </p>
18
+ *
19
+ * @author jobob
20
+ * @since 2019-09-11
21
+ */
22
+@Mapper
23
+public interface TaUserMapper extends BaseMapper<TaUser> {
24
+	
25
+	List<Map<String,Object>> getPageList(IPage<TaUser> pg, @Param("channelId") Integer channelId, @Param("miniAppName") String miniAppName);
26
+	
27
+	List<TaTags> getTagsList(@Param("userId") Integer userId,@Param("orgId") Integer orgId);
28
+	
29
+	List<TaUser> getUserList(@Param("phone") String phone,@Param("orgId") Integer orgId);
30
+
31
+    IPage<TaUser> seleUserList(IPage pg,@Param("taUser") TaUser taUser,@Param("personBuildingList") List<TaPersonBuilding> personBuildingList);
32
+
33
+    Integer validateWeight(@Param("buildingIds") List<String> buildingIds, @Param("buildingId") String buildingId, @Param("weight") String weight, @Param("userId")Integer userId);
34
+
35
+    TaUser getAdminByAppID(@Param("appid") String appID);
36
+
37
+    List<String> getBuildingIdsOf(@Param("userId") Integer userId,@Param("buildingId") String buildingId);
38
+
39
+    TaUser getUserByPerson(@Param("orgId") Integer orgId, @Param("personId") String personId);
40
+}

+ 18
- 0
src/main/java/com/huiju/estateagents/center/taUser/mapper/TaUserRoleMapper.java Parādīt failu

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.center.taUser.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.huiju.estateagents.center.taUser.entity.TaUserRole;
5
+import org.apache.ibatis.annotations.Mapper;
6
+
7
+/**
8
+ * <p>
9
+ * 用户角色表  Mapper 接口
10
+ * </p>
11
+ *
12
+ * @author jobob
13
+ * @since 2019-09-11
14
+ */
15
+@Mapper
16
+public interface TaUserRoleMapper extends BaseMapper<TaUserRole> {
17
+
18
+}

+ 17
- 0
src/main/java/com/huiju/estateagents/center/taUser/service/ITaButtonUriMapService.java Parādīt failu

@@ -0,0 +1,17 @@
1
+package com.huiju.estateagents.center.taUser.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.center.taUser.entity.TaButtonUriMap;
5
+
6
+/**
7
+ * <p>
8
+ * 按钮路由映射表  服务类
9
+ * </p>
10
+ *
11
+ * @author jobob
12
+ * @since 2019-09-26
13
+ */
14
+public interface ITaButtonUriMapService extends IService<TaButtonUriMap> {
15
+	
16
+	TaButtonUriMap getByURI(String uri);
17
+}

+ 16
- 0
src/main/java/com/huiju/estateagents/center/taUser/service/ITaTagUserService.java Parādīt failu

@@ -0,0 +1,16 @@
1
+package com.huiju.estateagents.center.taUser.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.center.taUser.entity.TaTagUser;
5
+
6
+/**
7
+ * <p>
8
+ *   服务类
9
+ * </p>
10
+ *
11
+ * @author jobob
12
+ * @since 2019-09-24
13
+ */
14
+public interface ITaTagUserService extends IService<TaTagUser> {
15
+
16
+}

+ 16
- 0
src/main/java/com/huiju/estateagents/center/taUser/service/ITaTagsService.java Parādīt failu

@@ -0,0 +1,16 @@
1
+package com.huiju.estateagents.center.taUser.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.center.taUser.entity.TaTags;
5
+
6
+/**
7
+ * <p>
8
+ *   服务类
9
+ * </p>
10
+ *
11
+ * @author jobob
12
+ * @since 2019-09-24
13
+ */
14
+public interface ITaTagsService extends IService<TaTags> {
15
+
16
+}

+ 22
- 0
src/main/java/com/huiju/estateagents/center/taUser/service/ITaUserAuthButtonService.java Parādīt failu

@@ -0,0 +1,22 @@
1
+package com.huiju.estateagents.center.taUser.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.base.ResponseBean;
5
+import com.huiju.estateagents.entity.SysButtonInMenu;
6
+
7
+import java.util.List;
8
+
9
+/**
10
+ * @author admin
11
+ * @Title: ITaUserAuthButtonService
12
+ * @Description: TODO
13
+ * @date 2019/9/23
14
+ */
15
+public interface ITaUserAuthButtonService extends IService<SysButtonInMenu> {
16
+
17
+    ResponseBean getButtonByUserId(Integer pageNum, Integer pageSize, String userId, Integer orgId);
18
+
19
+    ResponseBean getAllButton(Integer pageNum, Integer pageSize);
20
+
21
+    ResponseBean updateUserAuthButton(Integer userId, List<SysButtonInMenu> sysButtonInMenus);
22
+}

+ 24
- 0
src/main/java/com/huiju/estateagents/center/taUser/service/ITaUserAuthMenuService.java Parādīt failu

@@ -0,0 +1,24 @@
1
+package com.huiju.estateagents.center.taUser.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.base.ResponseBean;
5
+import com.huiju.estateagents.entity.SysButtonInMenu;
6
+import com.huiju.estateagents.entity.SysMenu;
7
+import com.huiju.estateagents.entity.TaRole;
8
+
9
+import java.util.List;
10
+
11
+/**
12
+ * @author admin
13
+ * @Title: ITaUserAuthMenuService
14
+ * @Description: TODO
15
+ * @date 2019/9/21
16
+ */
17
+public interface ITaUserAuthMenuService extends IService<SysMenu> {
18
+
19
+    ResponseBean getMenuByUserId(Integer pageNum, Integer pageSize, String userId, Integer orgId);
20
+
21
+    ResponseBean getAllMenu(Integer pageNum, Integer pageSize, Integer orgId, List<TaRole> roles);
22
+
23
+    ResponseBean updateUserAuthMenu(Integer userId, List<SysMenu> sysMenuList,String name,Integer orgid,List<SysButtonInMenu> sysButtonInMenuList);
24
+}

+ 16
- 0
src/main/java/com/huiju/estateagents/center/taUser/service/ITaUserRoleService.java Parādīt failu

@@ -0,0 +1,16 @@
1
+package com.huiju.estateagents.center.taUser.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.huiju.estateagents.center.taUser.entity.TaUserRole;
5
+
6
+/**
7
+ * <p>
8
+ * 用户角色表  服务类
9
+ * </p>
10
+ *
11
+ * @author jobob
12
+ * @since 2019-09-11
13
+ */
14
+public interface ITaUserRoleService extends IService<TaUserRole> {
15
+
16
+}

+ 78
- 0
src/main/java/com/huiju/estateagents/center/taUser/service/ITaUserService.java Parādīt failu

@@ -0,0 +1,78 @@
1
+package com.huiju.estateagents.center.taUser.service;
2
+
3
+import com.baomidou.mybatisplus.core.metadata.IPage;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.huiju.estateagents.base.ResponseBean;
6
+import com.huiju.estateagents.center.taUser.entity.TaTags;
7
+import com.huiju.estateagents.center.taUser.entity.TaUser;
8
+import com.huiju.estateagents.entity.TaPersonBuilding;
9
+
10
+import java.util.List;
11
+import java.util.Map;
12
+
13
+/**
14
+ * <p>
15
+ * 用户表  服务类
16
+ * </p>
17
+ *
18
+ * @author jobob
19
+ * @since 2019-09-11
20
+ */
21
+public interface ITaUserService extends IService<TaUser> {
22
+
23
+    IPage<Map<String, Object>> getPageList(IPage<TaUser> pg, Integer channelId, String miniAppName);
24
+
25
+    TaUser newUserAndOrg(TaUser taUser, Integer channelId) throws Exception;
26
+
27
+    TaUser getInfoWithOrg(Integer id);
28
+
29
+    void updateInfoWithOrg(TaUser taUser) throws Exception;
30
+
31
+    void turnUserOnOrNot(Integer id, boolean isOn, String plat) throws Exception;
32
+
33
+    void resetPassword(Integer id, String newPass) throws Exception;
34
+
35
+    List<TaTags> getTagsList(TaUser e);
36
+
37
+    TaUser addAdminUser(TaUser taUser) throws Exception;
38
+
39
+    TaUser updateAdminUser(TaUser taUser) throws Exception;
40
+
41
+    TaUser getAdminByAppID(String appid);
42
+
43
+    /**
44
+     * 查询所有城市
45
+     *
46
+     * @return
47
+     */
48
+    ResponseBean cityTree();
49
+
50
+    /**
51
+     * 员工离职
52
+     *
53
+     * @param userId
54
+     * @param customerIdList
55
+     * @param consultantUserId 置业顾问的userId
56
+     * @return
57
+     */
58
+    ResponseBean departureUser(Integer userId, List<String> customerIdList, Integer consultantUserId);
59
+
60
+    /**
61
+     * 分页查询用户列表
62
+     *
63
+     * @param pg
64
+     * @param taUser
65
+     * @param taPersonBuildingListByUserId
66
+     * @return
67
+     */
68
+    IPage<TaUser> seleUserList(IPage pg, TaUser taUser, List<TaPersonBuilding> taPersonBuildingListByUserId);
69
+
70
+    /**
71
+     * 获取用户信息
72
+     *
73
+     * @param userId
74
+     * @param orgId
75
+     * @return
76
+     */
77
+    TaUser getUserInfoById(Integer userId, Integer orgId);
78
+}

+ 28
- 0
src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaButtonUriMapServiceImpl.java Parādīt failu

@@ -0,0 +1,28 @@
1
+package com.huiju.estateagents.center.taUser.service.impl;
2
+
3
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
4
+import com.huiju.estateagents.center.taUser.entity.TaButtonUriMap;
5
+import com.huiju.estateagents.center.taUser.mapper.TaButtonUriMapMapper;
6
+import com.huiju.estateagents.center.taUser.service.ITaButtonUriMapService;
7
+import org.springframework.beans.factory.annotation.Autowired;
8
+import org.springframework.stereotype.Service;
9
+
10
+/**
11
+ * <p>
12
+ * 按钮路由映射表  服务实现类
13
+ * </p>
14
+ *
15
+ * @author jobob
16
+ * @since 2019-09-26
17
+ */
18
+@Service
19
+public class TaButtonUriMapServiceImpl extends ServiceImpl<TaButtonUriMapMapper, TaButtonUriMap> implements ITaButtonUriMapService {
20
+	
21
+	@Autowired
22
+	private TaButtonUriMapMapper taButtonUriMapMapper;
23
+	
24
+	@Override
25
+	public TaButtonUriMap getByURI(String uri) {
26
+		return taButtonUriMapMapper.getByURI(uri);
27
+	}
28
+}

+ 20
- 0
src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaTagUserServiceImpl.java Parādīt failu

@@ -0,0 +1,20 @@
1
+package com.huiju.estateagents.center.taUser.service.impl;
2
+
3
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
4
+import com.huiju.estateagents.center.taUser.entity.TaTagUser;
5
+import com.huiju.estateagents.center.taUser.mapper.TaTagUserMapper;
6
+import com.huiju.estateagents.center.taUser.service.ITaTagUserService;
7
+import org.springframework.stereotype.Service;
8
+
9
+/**
10
+ * <p>
11
+ *   服务实现类
12
+ * </p>
13
+ *
14
+ * @author jobob
15
+ * @since 2019-09-24
16
+ */
17
+@Service
18
+public class TaTagUserServiceImpl extends ServiceImpl<TaTagUserMapper, TaTagUser> implements ITaTagUserService {
19
+
20
+}

+ 20
- 0
src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaTagsServiceImpl.java Parādīt failu

@@ -0,0 +1,20 @@
1
+package com.huiju.estateagents.center.taUser.service.impl;
2
+
3
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
4
+import com.huiju.estateagents.center.taUser.entity.TaTags;
5
+import com.huiju.estateagents.center.taUser.mapper.TaTagsMapper;
6
+import com.huiju.estateagents.center.taUser.service.ITaTagsService;
7
+import org.springframework.stereotype.Service;
8
+
9
+/**
10
+ * <p>
11
+ *   服务实现类
12
+ * </p>
13
+ *
14
+ * @author jobob
15
+ * @since 2019-09-24
16
+ */
17
+@Service
18
+public class TaTagsServiceImpl extends ServiceImpl<TaTagsMapper, TaTags> implements ITaTagsService {
19
+
20
+}

+ 112
- 0
src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaUserAuthButtonServiceImpl.java Parādīt failu

@@ -0,0 +1,112 @@
1
+package com.huiju.estateagents.center.taUser.service.impl;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import com.huiju.estateagents.center.taUser.entity.TaUser;
9
+import com.huiju.estateagents.center.taUser.mapper.TaUserAuthButtonMapper;
10
+import com.huiju.estateagents.center.taUser.mapper.TaUserMapper;
11
+import com.huiju.estateagents.center.taUser.service.ITaUserAuthButtonService;
12
+import com.huiju.estateagents.common.CommConstant;
13
+import com.huiju.estateagents.entity.SysAdvancedConfigRelation;
14
+import com.huiju.estateagents.entity.SysButtonInMenu;
15
+import com.huiju.estateagents.entity.SysMenu;
16
+import com.huiju.estateagents.entity.TaAdvancedController;
17
+import com.huiju.estateagents.entity.TaRole;
18
+import com.huiju.estateagents.entity.TaRoleButton;
19
+import com.huiju.estateagents.mapper.SysAdvancedConfigRelationMapper;
20
+import com.huiju.estateagents.mapper.TaAdvancedControllerMapper;
21
+import com.huiju.estateagents.mapper.TaRoleButtonMapper;
22
+import com.huiju.estateagents.mapper.TaRoleMapper;
23
+import org.springframework.beans.factory.annotation.Autowired;
24
+import org.springframework.stereotype.Service;
25
+
26
+import java.util.ArrayList;
27
+import java.util.List;
28
+import java.util.stream.Collectors;
29
+
30
+/**
31
+ * @author admin
32
+ * @Title: TaUserAuthButtonServiceImpl
33
+ * @Description: TODO
34
+ * @date 2019/9/23
35
+ */
36
+@Service
37
+public class TaUserAuthButtonServiceImpl extends ServiceImpl<TaUserAuthButtonMapper, SysButtonInMenu> implements ITaUserAuthButtonService {
38
+
39
+    @Autowired
40
+    TaUserAuthButtonMapper taUserAuthButtonMapper;
41
+    @Autowired
42
+    TaRoleButtonMapper taRoleButtonMapper;
43
+    @Autowired
44
+    private TaUserMapper taUserMapper;
45
+    @Autowired
46
+    private TaRoleMapper taRoleMapper;
47
+    @Autowired
48
+    private TaAdvancedControllerMapper taAdvancedControllerMapper;
49
+    @Autowired
50
+    private SysAdvancedConfigRelationMapper sysAdvancedConfigRelationMapper;
51
+
52
+    @Override
53
+    public ResponseBean getButtonByUserId(Integer pageNum, Integer pageSize, String userId, Integer orgId) {
54
+        List<SysButtonInMenu> records = new ArrayList<>();
55
+        List<SysButtonInMenu> menuList = taUserAuthButtonMapper.sysButtonListByUserId(userId);
56
+        records.addAll(menuList);
57
+        //添加高级配置的过滤条件
58
+        List<TaAdvancedController> taAdvancedControllerList = taAdvancedControllerMapper.selectList(new QueryWrapper<TaAdvancedController>().eq("org_id", orgId));
59
+
60
+        //需要过滤的菜单
61
+        QueryWrapper<SysAdvancedConfigRelation> sysAdvancedConfigRelationQueryWrapper = new QueryWrapper<>();
62
+        sysAdvancedConfigRelationQueryWrapper.eq("target_type", CommConstant.ADVANCED_TYPE_BUTTON);
63
+        sysAdvancedConfigRelationQueryWrapper.notIn(taAdvancedControllerList.size() > 0,"advanced_config_id",taAdvancedControllerList.stream().map(TaAdvancedController::getAdvancedConfigId).collect(Collectors.toList()));
64
+        List<SysAdvancedConfigRelation> sysAdvancedConfigRelations = sysAdvancedConfigRelationMapper.selectList(sysAdvancedConfigRelationQueryWrapper);
65
+        menuList.forEach(e -> {
66
+            sysAdvancedConfigRelations.forEach(s -> {
67
+                if ((e.getBtnId()).equals(Integer.valueOf(s.getTargetId()))){
68
+                    records.remove(e);
69
+                }
70
+            });
71
+        });
72
+        return ResponseBean.success(records);
73
+
74
+    }
75
+
76
+    @Override
77
+    public ResponseBean getAllButton(Integer pageNum, Integer pageSize) {
78
+        List<SysButtonInMenu> records = taUserAuthButtonMapper.sysButtonListByRoleId();
79
+        records.forEach(e -> {
80
+            List<TaRole> taRoles = taRoleMapper.getRolesByBtnId(e.getBtnId());
81
+            e.setRolesList(taRoles);
82
+        });
83
+
84
+        return ResponseBean.success(records);
85
+    }
86
+
87
+    @Override
88
+    public ResponseBean updateUserAuthButton(Integer userId, List<SysButtonInMenu> sysButtonInMenus) {
89
+        ResponseBean responseBean = new ResponseBean();
90
+
91
+        // 人员
92
+        TaUser taUser = taUserMapper.selectById(userId);
93
+        if (null == taUser) {
94
+            responseBean.addError("授权人不存在");
95
+            return responseBean;
96
+        }
97
+
98
+
99
+        try{
100
+            //授权菜单按钮,先删除在新增
101
+            taUserAuthButtonMapper.deleteUserAuthButton(userId);
102
+            taUserAuthButtonMapper.addUserAuthButton(userId, sysButtonInMenus);
103
+            responseBean.addSuccess("操作成功");
104
+            return  responseBean;
105
+        }catch (Exception e){
106
+            responseBean.addSuccess("操作失败");
107
+            e.printStackTrace();
108
+            return responseBean;
109
+        }
110
+
111
+    }
112
+}

+ 199
- 0
src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaUserAuthMenuServiceImpl.java Parādīt failu

@@ -0,0 +1,199 @@
1
+package com.huiju.estateagents.center.taUser.service.impl;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.huiju.estateagents.base.ResponseBean;
6
+import com.huiju.estateagents.center.taUser.mapper.TaUserAuthMenuMapper;
7
+import com.huiju.estateagents.center.taUser.mapper.TaUserMapper;
8
+import com.huiju.estateagents.center.taUser.service.ITaUserAuthMenuService;
9
+import com.huiju.estateagents.common.CommConstant;
10
+import com.huiju.estateagents.entity.*;
11
+import com.huiju.estateagents.mapper.*;
12
+import org.apache.commons.collections.CollectionUtils;
13
+import org.springframework.beans.factory.annotation.Autowired;
14
+import org.springframework.stereotype.Service;
15
+
16
+import java.time.LocalDateTime;
17
+import java.util.ArrayList;
18
+import java.util.Collection;
19
+import java.util.Collections;
20
+import java.util.List;
21
+import java.util.stream.Collectors;
22
+
23
+/**
24
+ * @author weicc
25
+ * @Title: TaUserAuthMenuServiceImpl
26
+ * @Description: TODO
27
+ * @date 2019/9/21
28
+ */
29
+@Service
30
+public class TaUserAuthMenuServiceImpl extends ServiceImpl<TaUserAuthMenuMapper, SysMenu> implements ITaUserAuthMenuService {
31
+
32
+
33
+    @Autowired
34
+    private TaUserAuthMenuMapper taUserAuthMenuMapper;
35
+    @Autowired
36
+    private TaRoleMenuMapper taRoleMenuMapper;
37
+    @Autowired
38
+    private TaUserMapper taUserMapper;
39
+
40
+    @Autowired
41
+    private  TaRoleMapper taRoleMapper;
42
+
43
+    @Autowired
44
+    private TaRoleButtonMapper taRoleButtonMapper;
45
+
46
+    @Autowired
47
+    private TaAdvancedControllerMapper taAdvancedControllerMapper;
48
+
49
+    @Autowired
50
+    private SysAdvancedConfigRelationMapper sysAdvancedConfigRelationMapper;
51
+
52
+    /**
53
+     * 根据用户id获取授权菜单
54
+     * @param pageNum
55
+     * @param pageSize
56
+     * @param userId
57
+     * @param orgId
58
+     * @return
59
+     */
60
+    @Override
61
+    public ResponseBean getMenuByUserId(Integer pageNum, Integer pageSize, String userId, Integer orgId) {
62
+        List<SysMenu> records = new ArrayList<>();
63
+        List<SysMenu> menuList = taUserAuthMenuMapper.sysMenuListByUserId(userId);
64
+        records.addAll(menuList);
65
+        //添加高级配置的过滤条件
66
+        List<TaAdvancedController> taAdvancedControllerList = taAdvancedControllerMapper.selectList(new QueryWrapper<TaAdvancedController>().eq("org_id", orgId));
67
+
68
+        //需要过滤的菜单
69
+        QueryWrapper<SysAdvancedConfigRelation> sysAdvancedConfigRelationQueryWrapper = new QueryWrapper<>();
70
+        sysAdvancedConfigRelationQueryWrapper.eq("target_type",CommConstant.ADVANCED_TYPE_MENU);
71
+        sysAdvancedConfigRelationQueryWrapper.notIn(taAdvancedControllerList.size() > 0,"advanced_config_id",taAdvancedControllerList.stream().map(TaAdvancedController::getAdvancedConfigId).collect(Collectors.toList()));
72
+        List<SysAdvancedConfigRelation> sysAdvancedConfigRelations = sysAdvancedConfigRelationMapper.selectList(sysAdvancedConfigRelationQueryWrapper);
73
+        menuList.forEach(e -> {
74
+            sysAdvancedConfigRelations.forEach(s -> {
75
+                if (e.getMenuId() == Integer.valueOf(s.getTargetId())){
76
+                    records.remove(e);
77
+                }
78
+            });
79
+        });
80
+        return ResponseBean.success(records);
81
+    }
82
+
83
+    @Override
84
+    public ResponseBean getAllMenu(Integer pageNum, Integer pageSize, Integer orgId, List<TaRole> userRoles) {
85
+        List<SysMenu> records = new ArrayList<>();
86
+        List<SysMenu> menuList = taUserAuthMenuMapper.sysMenuListByRoleId();
87
+        records.addAll(menuList);
88
+        //添加高级配置的过滤条件
89
+        List<TaAdvancedController> taAdvancedControllerList = taAdvancedControllerMapper.selectList(new QueryWrapper<TaAdvancedController>().eq("org_id", orgId));
90
+
91
+        //需要过滤的菜单
92
+        QueryWrapper<SysAdvancedConfigRelation> sysAdvancedConfigRelationQueryWrapper = new QueryWrapper<>();
93
+        sysAdvancedConfigRelationQueryWrapper.eq("target_type",CommConstant.ADVANCED_TYPE_MENU);
94
+        sysAdvancedConfigRelationQueryWrapper.notIn(taAdvancedControllerList.size() > 0,"advanced_config_id",taAdvancedControllerList.stream().map(TaAdvancedController::getAdvancedConfigId).collect(Collectors.toList()));
95
+        List<SysAdvancedConfigRelation> sysAdvancedConfigRelations = sysAdvancedConfigRelationMapper.selectList(sysAdvancedConfigRelationQueryWrapper);
96
+
97
+        List<TaRoleMenu> configRelationRoleMenuList = new ArrayList<>();
98
+        if (CollectionUtils.isNotEmpty(userRoles) && CollectionUtils.isNotEmpty(sysAdvancedConfigRelations)){
99
+            QueryWrapper<TaRoleMenu> taRoleMenuQueryWrapper = new QueryWrapper<>();
100
+            taRoleMenuQueryWrapper.in("role_id", userRoles.stream().map(TaRole::getRoleId).collect(Collectors.toList()));
101
+            taRoleMenuQueryWrapper.in("menu_id", sysAdvancedConfigRelations.stream().map(SysAdvancedConfigRelation::getTargetId).collect(Collectors.toList()));
102
+            configRelationRoleMenuList = taRoleMenuMapper.selectList(taRoleMenuQueryWrapper);
103
+        }
104
+
105
+        QueryWrapper<TaRoleMenu> queryWrapper = new QueryWrapper();
106
+        List<TaRoleMenu> taRoleMenus = taRoleMenuMapper.selectList(queryWrapper);
107
+
108
+        for (SysMenu sysMenu : records){
109
+            ArrayList<Integer> roles = new ArrayList<>();
110
+            for (TaRoleMenu taRoleMenu : taRoleMenus){
111
+                if (taRoleMenu.getMenuId().equals(sysMenu.getMenuId()) && !roles.contains(taRoleMenu.getRoleId())){
112
+                    roles.add(taRoleMenu.getRoleId());
113
+                }
114
+            }
115
+            for (TaRoleMenu taRoleMenu : configRelationRoleMenuList){
116
+                if (sysMenu.getMenuId().equals(taRoleMenu.getMenuId())){
117
+                    roles.remove(taRoleMenu.getRoleId());
118
+                }
119
+            }
120
+            sysMenu.setRoles(roles);
121
+        }
122
+
123
+        return ResponseBean.success(records);
124
+    }
125
+
126
+    @Override
127
+    public ResponseBean updateUserAuthMenu(Integer roleId, List<SysMenu> sysMenuList,String name,Integer orgId,List<SysButtonInMenu> sysButtonInMenuList) {
128
+        ResponseBean responseBean = new ResponseBean();
129
+        if (null == roleId){
130
+            addUserAuthMenu( sysMenuList,name,orgId,sysButtonInMenuList);
131
+            return responseBean;
132
+        }
133
+        try {
134
+            //授权菜单,先删除在新增
135
+            taRoleMenuMapper.deleteCurrentMenu(roleId);
136
+            for (SysMenu sysMenu: sysMenuList) {
137
+                TaRoleMenu taRoleMenu = new TaRoleMenu();
138
+                taRoleMenu.setRoleId(roleId);
139
+                taRoleMenu.setMenuId(sysMenu.getMenuId());
140
+                taRoleMenuMapper.insert(taRoleMenu);
141
+            }
142
+            // 更新Role
143
+            TaRole taRole = new TaRole();
144
+            taRole.setRoleId(roleId);
145
+            taRole.setRoleName(name);
146
+            taRoleMapper.updateById(taRole);
147
+
148
+            // 当前角色的所有按钮再重新插入
149
+
150
+            taRoleButtonMapper.deleteCurrentBut(roleId);
151
+            for (SysButtonInMenu sysButtonInMenu :sysButtonInMenuList) {
152
+                TaRoleButton taRoleButton = new TaRoleButton();
153
+                taRoleButton.setRoleId(taRole.getRoleId());
154
+                taRoleButton.setBtnId(sysButtonInMenu.getBtnId());
155
+                taRoleButtonMapper.insert(taRoleButton);
156
+            }
157
+                responseBean.addSuccess("操作成功");
158
+            return responseBean;
159
+        } catch (Exception e) {
160
+            responseBean.addSuccess("操作失败");
161
+            e.printStackTrace();
162
+            return responseBean;
163
+        }
164
+    }
165
+
166
+    public Boolean addUserAuthMenu(List<SysMenu> sysMenuList,String name,Integer orgId,List<SysButtonInMenu> sysButtonInMenuList) {
167
+        ResponseBean responseBean = new ResponseBean();
168
+        try{
169
+            // 新增角色
170
+            TaRole taRole = new TaRole();
171
+            taRole.setRoleName(name);
172
+            taRole.setOrgId(orgId);
173
+            taRole.setStatus(1);
174
+            taRole.setCreateDate(LocalDateTime.now());
175
+            taRoleMapper.insert(taRole);
176
+
177
+            // 新增角色需要的菜单
178
+          for (SysMenu sysMenu: sysMenuList){
179
+              TaRoleMenu taRoleMenu = new TaRoleMenu();
180
+              taRoleMenu.setRoleId(taRole.getRoleId());
181
+              taRoleMenu.setMenuId(sysMenu.getMenuId());
182
+              taRoleMenuMapper.insert(taRoleMenu);
183
+          }
184
+          // 新增角色按钮
185
+          for (SysButtonInMenu sysButtonInMenu :sysButtonInMenuList){
186
+              TaRoleButton  taRoleButton = new TaRoleButton();
187
+              taRoleButton.setRoleId(taRole.getRoleId());
188
+              taRoleButton.setBtnId(sysButtonInMenu.getBtnId());
189
+              taRoleButtonMapper.insert(taRoleButton);
190
+          }
191
+            responseBean.addSuccess("操作成功");
192
+            return  true;
193
+        }catch (Exception e){
194
+            responseBean.addSuccess("操作失败");
195
+            e.printStackTrace();
196
+            return false;
197
+        }
198
+    }
199
+}

+ 20
- 0
src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaUserRoleServiceImpl.java Parādīt failu

@@ -0,0 +1,20 @@
1
+package com.huiju.estateagents.center.taUser.service.impl;
2
+
3
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
4
+import com.huiju.estateagents.center.taUser.entity.TaUserRole;
5
+import com.huiju.estateagents.center.taUser.mapper.TaUserRoleMapper;
6
+import com.huiju.estateagents.center.taUser.service.ITaUserRoleService;
7
+import org.springframework.stereotype.Service;
8
+
9
+/**
10
+ * <p>
11
+ * 用户角色表  服务实现类
12
+ * </p>
13
+ *
14
+ * @author jobob
15
+ * @since 2019-09-11
16
+ */
17
+@Service
18
+public class TaUserRoleServiceImpl extends ServiceImpl<TaUserRoleMapper, TaUserRole> implements ITaUserRoleService {
19
+
20
+}

+ 748
- 0
src/main/java/com/huiju/estateagents/center/taUser/service/impl/TaUserServiceImpl.java Parādīt failu

@@ -0,0 +1,748 @@
1
+package com.huiju.estateagents.center.taUser.service.impl;
2
+
3
+import cn.binarywang.wx.miniapp.api.WxMaService;
4
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
6
+import com.baomidou.mybatisplus.core.metadata.IPage;
7
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8
+import com.huiju.estateagents.base.ResponseBean;
9
+import com.huiju.estateagents.center.taUser.entity.TaTagUser;
10
+import com.huiju.estateagents.center.taUser.entity.TaTags;
11
+import com.huiju.estateagents.center.taUser.entity.TaUser;
12
+import com.huiju.estateagents.center.taUser.entity.TaUserRole;
13
+import com.huiju.estateagents.center.taUser.mapper.TaTagUserMapper;
14
+import com.huiju.estateagents.center.taUser.mapper.TaUserMapper;
15
+import com.huiju.estateagents.center.taUser.mapper.TaUserRoleMapper;
16
+import com.huiju.estateagents.center.taUser.service.ITaUserService;
17
+import com.huiju.estateagents.channel.sysChannel.entity.TaChannelProxy;
18
+import com.huiju.estateagents.channel.sysChannel.mapper.TaChannelProxyMapper;
19
+import com.huiju.estateagents.common.CommConstant;
20
+import com.huiju.estateagents.common.MD5Utils;
21
+import com.huiju.estateagents.common.StringUtils;
22
+import com.huiju.estateagents.common.WxUtils;
23
+import com.huiju.estateagents.entity.*;
24
+import com.huiju.estateagents.mapper.*;
25
+import com.huiju.estateagents.service.*;
26
+import org.apache.commons.collections.CollectionUtils;
27
+import org.springframework.beans.factory.annotation.Autowired;
28
+import org.springframework.stereotype.Service;
29
+
30
+import java.time.LocalDateTime;
31
+import java.util.ArrayList;
32
+import java.util.List;
33
+import java.util.Map;
34
+import java.util.stream.Collectors;
35
+
36
+/**
37
+ * <p>
38
+ * 用户表  服务实现类
39
+ * </p>
40
+ *
41
+ * @author jobob
42
+ * @since 2019-09-11
43
+ */
44
+@Service
45
+public class TaUserServiceImpl extends ServiceImpl<TaUserMapper, TaUser> implements ITaUserService {
46
+
47
+    @Autowired
48
+    private TaUserMapper taUserMapper;
49
+
50
+    @Autowired
51
+    private TaOrgMapper taOrgMapper;
52
+
53
+    @Autowired
54
+    private TaMiniappMapper taMiniappMapper;
55
+
56
+    @Autowired
57
+    private TaMiniappTemplateMapper taMiniappTemplateMapper;
58
+
59
+    @Autowired
60
+    private TaTagUserMapper taTagUserMapper;
61
+
62
+    @Autowired
63
+    private TaPersonBuildingMapper taPersonBuildingMapper;
64
+
65
+    @Autowired
66
+    private TaPersonMapper taPersonMapper;
67
+
68
+    @Autowired
69
+    private TaUserRoleMapper taUserRoleMapper;
70
+
71
+    @Autowired
72
+    private TdPointsRulesMapper tdPointsRulesMapper;
73
+
74
+    @Autowired
75
+    private ITdReportService iTdReportService;
76
+
77
+    @Autowired
78
+    private ITaBuildingReportService iTaBuildingReportService;
79
+
80
+    @Autowired
81
+    private TdCityMapper tdCityMapper;
82
+
83
+    @Autowired
84
+    private TaOrgCityMapper taOrgCityMapper;
85
+
86
+    @Autowired
87
+    private ITaPersonService iTaPersonService;
88
+
89
+    @Autowired
90
+    private ITaRecommendCustomerService iTaRecommendCustomerService;
91
+
92
+    @Autowired
93
+    private ISysOrgParamsService iSysOrgParamsService;
94
+
95
+    @Autowired
96
+    private TaChannelAppRelationMapper taChannelAppRelationMapper;
97
+
98
+    @Autowired
99
+    private TaChannelProxyMapper taChannelProxyMapper;
100
+
101
+    @Autowired
102
+    private WxUtils wxUtils;
103
+
104
+    @Override
105
+    public IPage<Map<String, Object>> getPageList(IPage pg, Integer channelId, String miniAppName) {
106
+        List<Map<String, Object>> taUserList = taUserMapper.getPageList(pg, channelId, miniAppName);
107
+
108
+        for (Map map : taUserList) {
109
+            if (map.get("orgId") == null) {
110
+                map.put("userCount", 0);
111
+                map.put("registeredCount", 0);
112
+                continue;
113
+            }
114
+            Integer userCount = taPersonMapper.selectChannelUserCount(map.get("orgId").toString());
115
+            Integer registeredCount = taPersonMapper.selectChannelRegisteredCount(map.get("orgId").toString());
116
+            map.put("userCount", userCount);
117
+            map.put("registeredCount", registeredCount);
118
+        }
119
+        pg.setRecords(taUserList);
120
+        return pg;
121
+    }
122
+
123
+    @Override
124
+    public TaUser newUserAndOrg(TaUser taUser, Integer channelId) throws Exception {
125
+        if (StringUtils.isEmpty(taUser.getPhone())) {
126
+            throw new Exception("电话号码不能为空");
127
+        }
128
+        if (StringUtils.isEmpty(taUser.getUserName())) {
129
+            throw new Exception("用户名称不能为空");
130
+        }
131
+
132
+        if (StringUtils.isEmpty(taUser.getLoginName())) {
133
+            taUser.setLoginName(taUser.getPhone());
134
+        }
135
+
136
+        //判断默认城市是否在维护城市内
137
+        verificationCity(taUser.getSelectCityTree(), taUser.getDefaultCityId());
138
+
139
+        QueryWrapper<TaUser> wrapper = new QueryWrapper<>();
140
+        wrapper.eq("phone", taUser.getPhone()).or().eq("login_Name", taUser.getLoginName());
141
+        List<TaUser> taUserList = this.list(wrapper);
142
+        if (null != taUserList && taUserList.size() > 0) {
143
+            throw new Exception("电话号码或登录名重复");
144
+        }
145
+
146
+        //判断渠道端新增小程序最大数
147
+        QueryWrapper<TaChannelProxy> taChannelProxyQueryWrapper = new QueryWrapper<>();
148
+        taChannelProxyQueryWrapper.eq("channel_id", channelId);
149
+        TaChannelProxy taChannelProxy = taChannelProxyMapper.selectOne(taChannelProxyQueryWrapper);
150
+
151
+        QueryWrapper<TaChannelAppRelation> relationQueryWrapper = new QueryWrapper<>();
152
+        relationQueryWrapper.eq("channel_id", channelId);
153
+        Integer miniAppCount = taChannelAppRelationMapper.selectCount(relationQueryWrapper);
154
+        if (miniAppCount >= taChannelProxy.getAppMaxNum()) {
155
+            throw new Exception("当前系统仅供维护" + taChannelProxy.getAppMaxNum() + "个小程序,需要维护更多项目,请联系相关管理人员");
156
+        }
157
+
158
+        // 先插入 org
159
+        TaOrg taOrg = new TaOrg();
160
+        taOrg.setName(taUser.getOrgName());
161
+        taOrg.setLogo(taUser.getOrgLogo());
162
+        taOrg.setWaterMark(taUser.getWaterMark());
163
+        taOrg.setCreateDate(LocalDateTime.now());
164
+        taOrg.setBuildingNum(taUser.getOrgNum());
165
+        taOrg.setDefaultCityId(taUser.getDefaultCityId());
166
+        taOrg.setThumb(taUser.getOrgThumb());
167
+        taOrg.setOrgDesc(taUser.getOrgDesc());
168
+        taOrg.setBossDisplay(taUser.getBossDisplay());
169
+        if (taOrgMapper.insert(taOrg) < 1) {
170
+            throw new Exception("生成用户公司信息失败");
171
+        }
172
+
173
+        //维护渠道和小程序关系
174
+        TaChannelAppRelation taChannelAppRelation = new TaChannelAppRelation();
175
+        taChannelAppRelation.setChannelId(channelId);
176
+        taChannelAppRelation.setOrgId(taOrg.getOrgId());
177
+        taChannelAppRelation.setCreateTime(LocalDateTime.now());
178
+        taChannelAppRelationMapper.insert(taChannelAppRelation);
179
+
180
+        // 维护当前城市所在城市
181
+        addAndupdate(taUser.getSelectCityTree(), false, taOrg.getOrgId());
182
+
183
+        // 插入积分, 默认全部 1 积分
184
+        List<TdPointsRules> pointsRules = tdPointsRulesMapper.getTPLRules();
185
+        if (pointsRules != null) {
186
+            for (int i = 0; i < pointsRules.size(); i++) {
187
+                TdPointsRules rule = pointsRules.get(i);
188
+                rule.setOrgId(taOrg.getOrgId());
189
+                rule.setStatus(CommConstant.STATUS_NORMAL);
190
+                rule.setPointsAmount(1);    // 默认1积分
191
+                tdPointsRulesMapper.insert(rule);
192
+            }
193
+        }
194
+
195
+        // 插入统计,默认全部显示
196
+        QueryWrapper<TdReport> queryWrapper = new QueryWrapper<>();
197
+        queryWrapper.orderByDesc("create_date");
198
+        queryWrapper.eq("status", 1);
199
+        List<TdReport> tdReportList = iTdReportService.list(queryWrapper);
200
+        if (CollectionUtils.isNotEmpty(tdReportList)) {
201
+            List<TaBuildingReport> buildingReportList = tdReportList.stream().map(e -> {
202
+                TaBuildingReport taBuildingReport = new TaBuildingReport();
203
+                taBuildingReport.setOrgId(taOrg.getOrgId());
204
+                taBuildingReport.setReportCode(e.getReportCode());
205
+                taBuildingReport.setCreateDate(LocalDateTime.now());
206
+
207
+                return taBuildingReport;
208
+            }).collect(Collectors.toList());
209
+
210
+            iTaBuildingReportService.saveBatch(buildingReportList);
211
+        }
212
+
213
+        taUser.setOrgId(taOrg.getOrgId());
214
+        taUser.setIsAdmin(true);
215
+        taUser.setLoginPassword(MD5Utils.md5(taUser.getLoginPassword()));
216
+        taUser.setStatus(CommConstant.STATUS_NORMAL);
217
+        taUser.setCreateDate(LocalDateTime.now());
218
+        if (!this.save(taUser)) {
219
+            throw new Exception("生成用户信息失败");
220
+        }
221
+
222
+        // 导入系统参数
223
+        iSysOrgParamsService.importParamsFromTemplate(taOrg.getOrgId());
224
+
225
+        return taUser;
226
+    }
227
+
228
+    // 维护公司所在城市
229
+    public void addAndupdate(ArrayList<String> selectCityTree, boolean isA, Integer orgid) {
230
+        // 查询当前所有的市
231
+        QueryWrapper<TdCity> tdCityQuery = new QueryWrapper<>();
232
+        tdCityQuery.eq("leveltype", 2);
233
+        List<TdCity> tdCityList = tdCityMapper.selectList(tdCityQuery);
234
+
235
+        // isA=true删除所有城市重新添加
236
+        if (isA == true) {
237
+            QueryWrapper<TaOrgCity> taOrgCity = new QueryWrapper<>();
238
+            taOrgCity.eq("org_id", orgid);
239
+            taOrgCityMapper.delete(taOrgCity);
240
+        }
241
+        TaOrgCity taOrgCity = new TaOrgCity();
242
+        // 对比现在的城市ID
243
+        for (String city : selectCityTree) {
244
+            for (TdCity tdCity : tdCityList) {
245
+                // 入库城市
246
+                if (city.equals(String.valueOf(tdCity.getId()))) {
247
+                    taOrgCity.setCityId(Integer.valueOf(city)).setName(tdCity.getName()).setOrgId(orgid).setStatus(1).setParentid(tdCity.getParentid());
248
+                    taOrgCityMapper.insert(taOrgCity);
249
+                    // 查询当前公司选择省份是否存在
250
+                    QueryWrapper<TaOrgCity> taOrgCityParent = new QueryWrapper<>();
251
+                    taOrgCityParent.eq("city_id", tdCity.getParentid());
252
+                    taOrgCityParent.eq("org_id", orgid);
253
+                    taOrgCityParent.last("limit 1");
254
+                    TaOrgCity taOrgParent = taOrgCityMapper.selectOne(taOrgCityParent);
255
+                    // 如果为空,查询行政表
256
+                    if (null == taOrgParent) {
257
+                        TdCity tdCityParent = tdCityMapper.selectById(tdCity.getParentid());
258
+                        taOrgCity.setCityId(tdCityParent.getId()).setName(tdCityParent.getName()).setOrgId(orgid).setStatus(1).setParentid(100000);
259
+                        taOrgCityMapper.insert(taOrgCity);
260
+                    }
261
+                }
262
+
263
+            }
264
+        }
265
+
266
+    }
267
+
268
+    // 判断当前城市是否存在
269
+    public void verificationCity(ArrayList<String> selectCityTree, Integer city) throws Exception {
270
+        for (String id : selectCityTree) {
271
+            if (id.equals(String.valueOf(city))) {
272
+                return;
273
+            }
274
+        }
275
+        throw new Exception("当前默认城市不在维护城市内");
276
+    }
277
+
278
+    @Override
279
+    public TaUser getInfoWithOrg(Integer id) {
280
+        TaUser taUser = this.getById(id);
281
+        if (null == taUser) {
282
+            return taUser;
283
+        }
284
+
285
+        TaOrg taOrg = taOrgMapper.selectById(taUser.getOrgId());
286
+        if (null != taOrg) {
287
+            taUser.setOrgName(taOrg.getName());
288
+            taUser.setWaterMark(taOrg.getWaterMark());
289
+            taUser.setOrgNum(taOrg.getBuildingNum());
290
+            taUser.setDefaultCityId(taOrg.getDefaultCityId());
291
+            taUser.setOrgThumb(taOrg.getThumb());
292
+            taUser.setOrgDesc(taOrg.getOrgDesc());
293
+            taUser.setOrgLogo(taOrg.getLogo());
294
+            taUser.setBossDisplay(taOrg.getBossDisplay());
295
+        }
296
+
297
+        TaMiniapp taMiniapp = getMiniappByOrg(taOrg);
298
+        if (null != taMiniapp) {
299
+            QueryWrapper<TaMiniappTemplate> query = new QueryWrapper<>();
300
+            query.eq("miniapp_id", taMiniapp.getMiniappId());
301
+            taMiniapp.setTpls(taMiniappTemplateMapper.selectList(query));
302
+        }
303
+
304
+        taUser.setMiniapp(taMiniapp);
305
+        taUser.setLoginPassword(null);
306
+        // 查询所有城市id
307
+        ArrayList<String> taOrgCityList = taOrgCityMapper.selectByIdCity(taUser.getOrgId());
308
+        taUser.setSelectCityTree(taOrgCityList);
309
+        return taUser;
310
+    }
311
+
312
+    @Override
313
+    public void updateInfoWithOrg(TaUser taUser) throws Exception {
314
+        //判断默认城市是否在维护城市内
315
+        verificationCity(taUser.getSelectCityTree(), taUser.getDefaultCityId());
316
+
317
+        TaOrg taOrg = taOrgMapper.selectById(taUser.getOrgId());
318
+        if (null != taOrg) {
319
+            taOrg.setName(taUser.getOrgName());
320
+            taOrg.setLogo(taUser.getOrgLogo());
321
+            taOrg.setWaterMark(taUser.getWaterMark());
322
+            taOrg.setBuildingNum(taUser.getOrgNum());
323
+            taOrg.setDefaultCityId(taUser.getDefaultCityId());
324
+            taOrg.setThumb(taUser.getOrgThumb());
325
+            taOrg.setOrgDesc(taUser.getOrgDesc());
326
+            taOrg.setBossDisplay(taUser.getBossDisplay());
327
+            if (taOrgMapper.updateById(taOrg) < 1) {
328
+                throw new Exception("更新用户公司信息失败");
329
+            }
330
+
331
+            addAndupdate(taUser.getSelectCityTree(), true, taOrg.getOrgId());
332
+        }
333
+
334
+        taUser.setLoginPassword(null);
335
+        if (taUserMapper.updateById(taUser) < 1) {
336
+            throw new Exception("更新用户信息失败");
337
+        }
338
+
339
+        // 如果服务未启动, 则启动服务
340
+        TaMiniapp miniapp = getMiniappByOrg(taOrg);
341
+        if (miniapp != null) {
342
+            WxMaService maService = wxUtils.getMiniApp(miniapp.getMiniappId());
343
+            if (null == maService) {
344
+                TaUser admin = taUserMapper.getAdminByAppID(miniapp.getMiniappId());
345
+
346
+                if (null != admin && CommConstant.STATUS_NORMAL == admin.getStatus() && LocalDateTime.now().isBefore(admin.getExpDate())) {
347
+                    wxUtils.newService(miniapp, true);
348
+                }
349
+            }
350
+        }
351
+    }
352
+
353
+    private TaMiniapp getMiniappByOrg(TaOrg taOrg) {
354
+        QueryWrapper<TaMiniapp> wrapper = new QueryWrapper<>();
355
+        wrapper.eq("org_id", taOrg.getOrgId());
356
+        wrapper.last("limit 1");
357
+
358
+        return taMiniappMapper.selectOne(wrapper);
359
+    }
360
+
361
+    @Override
362
+    public void turnUserOnOrNot(Integer id, boolean isOn, String plat) throws Exception {
363
+        TaUser taUser = this.getById(id);
364
+        if (null == taUser) {
365
+            throw new Exception("未找到有效的用户信息");
366
+        }
367
+
368
+        //停用
369
+        if (!isOn){
370
+            //查看是否置业顾问
371
+            if (taUser.getIsConsultant()){
372
+//                taUser.setIsConsultant(false);
373
+//                taUserMapper.updateById(taUser);
374
+                //小程序端调整为普通客户
375
+                QueryWrapper<TaPerson> taPersonQueryWrapper = new QueryWrapper<>();
376
+                taPersonQueryWrapper.eq("user_id",id);
377
+                taPersonQueryWrapper.eq("org_id",taUser.getOrgId());
378
+                TaPerson taPerson = taPersonMapper.selectOne(taPersonQueryWrapper);
379
+                if (null != taPerson){
380
+                    taPersonMapper.cancelConsulatant(taPerson.getPersonId());
381
+                }
382
+            }
383
+        }
384
+
385
+        Integer status = isOn ? CommConstant.STATUS_NORMAL : CommConstant.STATUS_CLOSED;
386
+        TaUser user = new TaUser();
387
+        user.setStatus(status);
388
+        user.setWeight(taUser.getWeight());
389
+
390
+        QueryWrapper<TaUser> taUserQueryWrapper = new QueryWrapper<>();
391
+        if (CommConstant.LOGIN_TYPE_ADMIN.equals(plat)) {
392
+            taUserQueryWrapper.eq("user_id", id);
393
+        }
394
+        taUserQueryWrapper.eq("org_id", taUserMapper.selectById(id).getOrgId());
395
+
396
+        if (!this.update(user, taUserQueryWrapper)) {
397
+            throw new Exception("开启或禁用用户失败");
398
+        }
399
+    }
400
+
401
+    @Override
402
+    public void resetPassword(Integer id, String newPass) throws Exception {
403
+        TaUser taUser = this.getById(id);
404
+        if (null == taUser) {
405
+            throw new Exception("未找到有效的用户信息");
406
+        }
407
+
408
+        String encryptPass = MD5Utils.md5(MD5Utils.md5(newPass));
409
+        TaUser user = new TaUser();
410
+        user.setLoginPassword(encryptPass);
411
+        user.setUserId(id);
412
+
413
+        if (!this.updateById(user)) {
414
+            throw new Exception("重置用户密码失败");
415
+        }
416
+    }
417
+
418
+    @Override
419
+    public List<TaTags> getTagsList(TaUser e) {
420
+        return taUserMapper.getTagsList(e.getUserId(), e.getOrgId());
421
+    }
422
+
423
+    @Override
424
+    public TaUser addAdminUser(TaUser taUser) throws Exception {
425
+        if (StringUtils.isEmpty(taUser.getPhone())) {
426
+            throw new Exception("电话号码不能为空");
427
+        }
428
+        if (StringUtils.isEmpty(taUser.getUserName())) {
429
+            throw new Exception("用户名称不能为空");
430
+        }
431
+
432
+        if (!StringUtils.isEmpty(taUser.getLoginName())) {
433
+            QueryWrapper<TaUser> wrapper = new QueryWrapper<>();
434
+            wrapper.eq("login_name", taUser.getLoginName());
435
+            List<TaUser> taUserList = this.list(wrapper);
436
+            if (null != taUserList && taUserList.size() > 0) {
437
+                throw new Exception("登录名重复");
438
+            }
439
+        }
440
+
441
+        boolean weightCount = validateWeight(taUser, "add");
442
+        if (weightCount) {
443
+            throw new Exception("同一项目下权重值不能重复");
444
+        }
445
+
446
+        List<TaUser> taUserList = taUserMapper.getUserList(taUser.getPhone(), taUser.getOrgId());
447
+        if (null != taUserList && taUserList.size() > 0) {
448
+            throw new Exception("电话号码重复");
449
+        }
450
+        taUser.setLoginPassword(MD5Utils.md5(MD5Utils.md5("123456")));
451
+        taUser.setStatus(CommConstant.STATUS_NORMAL);
452
+        taUser.setCreateDate(LocalDateTime.now());
453
+        if (taUser.getIsConsultant() == null) {
454
+            taUser.setIsConsultant(false);
455
+        }
456
+        if (taUserMapper.insert(taUser) < 1) {
457
+            throw new Exception("生成用户信息失败");
458
+        }
459
+
460
+        //保存标签
461
+        List<Integer> tags = taUser.getTaTags();
462
+        tags.forEach(e -> {
463
+            TaTagUser taTagUser = new TaTagUser();
464
+            taTagUser.setUserId(taUser.getUserId());
465
+            taTagUser.setTagId(e);
466
+            taTagUserMapper.insert(taTagUser);
467
+        });
468
+
469
+        //保存用户角色
470
+        List<Integer> roleIds = taUser.getRoleIds();
471
+        roleIds.forEach(e -> {
472
+            TaUserRole taUserRole = new TaUserRole();
473
+            taUserRole.setUserId(taUser.getUserId());
474
+            taUserRole.setRoleId(e);
475
+            taUserRoleMapper.insert(taUserRole);
476
+        });
477
+
478
+        //保存项目
479
+        if (taUser.getIsConsultant()) {
480
+            TaPersonBuilding taPersonBuilding = new TaPersonBuilding();
481
+            taPersonBuilding.setBuildingId(taUser.getBuildingId());
482
+            taPersonBuilding.setUserId(taUser.getUserId());
483
+            taPersonBuilding.setCreateDate(LocalDateTime.now());
484
+            taPersonBuildingMapper.insert(taPersonBuilding);
485
+        } else {
486
+            //非置业顾问可授权多个项目
487
+            List<String> buildingIdList = taUser.getBuildingIds();
488
+            LocalDateTime nowTime = LocalDateTime.now();
489
+            buildingIdList.forEach(e -> {
490
+                TaPersonBuilding taPersonBuilding = new TaPersonBuilding();
491
+                taPersonBuilding.setBuildingId(e);
492
+                taPersonBuilding.setUserId(taUser.getUserId());
493
+                taPersonBuilding.setCreateDate(nowTime);
494
+                taPersonBuildingMapper.insert(taPersonBuilding);
495
+            });
496
+        }
497
+
498
+        return taUser;
499
+    }
500
+
501
+    @Override
502
+    public TaUser updateAdminUser(TaUser taUser) throws Exception {
503
+        TaUser taUserBefore = taUserMapper.selectById(taUser.getUserId());
504
+        if (StringUtils.isEmpty(taUser.getPhone())) {
505
+            throw new Exception("电话号码不能为空");
506
+        }
507
+        if (StringUtils.isEmpty(taUser.getUserName())) {
508
+            throw new Exception("用户名称不能为空");
509
+        }
510
+        if (!StringUtils.isEmpty(taUser.getWeight()) && taUser.getWeight().length() > 11) {
511
+            throw new Exception("权重最大为11位");
512
+        }
513
+        if (StringUtils.isEmpty(taUser.getWeight())) {
514
+            taUser.setWeight(null);
515
+        }
516
+        if (!StringUtils.isEmpty(taUser.getLoginName()) && !taUser.getLoginName().equals(taUserBefore.getLoginName())) {
517
+            if (!StringUtils.isEmpty(taUser.getLoginName())) {
518
+                QueryWrapper<TaUser> wrapper = new QueryWrapper<>();
519
+                wrapper.eq("login_name", taUser.getLoginName());
520
+                List<TaUser> taUserList = this.list(wrapper);
521
+                if (null != taUserList && taUserList.size() > 0) {
522
+                    throw new Exception("登录名重复");
523
+                }
524
+            }
525
+        }
526
+
527
+        boolean weightCount = validateWeight(taUser, "update");
528
+        if (weightCount) {
529
+            throw new Exception("同一项目下权重值不能重复");
530
+        }
531
+
532
+        QueryWrapper<TaUser> wrapper = new QueryWrapper<>();
533
+//        wrapper.nested(q -> q.eq("phone", taUser.getPhone()).or().eq("login_Name", taUser.getLoginName()));
534
+        wrapper.eq("phone", taUser.getPhone());
535
+        wrapper.eq("org_id", taUser.getOrgId());
536
+        wrapper.ne("user_id", taUser.getUserId());
537
+        List<TaUser> taUserList = this.list(wrapper);
538
+        if (null != taUserList && taUserList.size() > 0) {
539
+            throw new Exception("电话号码重复");
540
+        }
541
+        if (taUserMapper.updateById(taUser) < 1) {
542
+            throw new Exception("更新用户信息失败");
543
+        }
544
+        QueryWrapper<TaTagUser> queryWrapper = new QueryWrapper<>();
545
+        queryWrapper.eq("user_id", taUser.getUserId());
546
+        taTagUserMapper.delete(queryWrapper);
547
+        //保存标签
548
+        List<Integer> tags = taUser.getTaTags();
549
+        tags.forEach(e -> {
550
+            TaTagUser taTagUser = new TaTagUser();
551
+            taTagUser.setUserId(taUser.getUserId());
552
+            taTagUser.setTagId(e);
553
+            taTagUserMapper.insert(taTagUser);
554
+        });
555
+
556
+        QueryWrapper<TaUserRole> taUserRoleQueryWrapper = new QueryWrapper<>();
557
+        taUserRoleQueryWrapper.eq("user_id", taUser.getUserId());
558
+        taUserRoleMapper.delete(taUserRoleQueryWrapper);
559
+        //保存用户角色
560
+        List<Integer> roleIds = taUser.getRoleIds();
561
+        roleIds.forEach(e -> {
562
+            TaUserRole taUserRole = new TaUserRole();
563
+            taUserRole.setUserId(taUser.getUserId());
564
+            taUserRole.setRoleId(e);
565
+            taUserRoleMapper.insert(taUserRole);
566
+        });
567
+
568
+        QueryWrapper<TaPersonBuilding> taPersonBuildingQueryWrapper = new QueryWrapper<>();
569
+        taPersonBuildingQueryWrapper.eq("user_id", taUser.getUserId());
570
+        taPersonBuildingMapper.delete(taPersonBuildingQueryWrapper);
571
+        //保存项目
572
+        if (taUser.getIsConsultant()) {
573
+            TaPersonBuilding taPersonBuilding = new TaPersonBuilding();
574
+            taPersonBuilding.setBuildingId(taUser.getBuildingId());
575
+            taPersonBuilding.setUserId(taUser.getUserId());
576
+            taPersonBuilding.setCreateDate(LocalDateTime.now());
577
+            taPersonBuildingMapper.insert(taPersonBuilding);
578
+        } else {
579
+            //非置业顾问可授权多个项目
580
+            List<String> buildingIdList = taUser.getBuildingIds();
581
+            LocalDateTime nowTime = LocalDateTime.now();
582
+            buildingIdList.forEach(e -> {
583
+                TaPersonBuilding taPersonBuilding = new TaPersonBuilding();
584
+                taPersonBuilding.setBuildingId(e);
585
+                taPersonBuilding.setUserId(taUser.getUserId());
586
+                taPersonBuilding.setCreateDate(nowTime);
587
+                taPersonBuildingMapper.insert(taPersonBuilding);
588
+            });
589
+        }
590
+
591
+        //更新person
592
+        TaPerson taPerson = new TaPerson();
593
+        taPerson.setAvatarurl(taUser.getAvatar());
594
+        taPerson.setCompany(taUser.getOrgName());
595
+        taPerson.setTel(taUser.getPhone());
596
+        taPerson.setName(taUser.getUserName());
597
+        taPerson.setAddress(taUser.getAddress());
598
+        taPerson.setIdNo(taUser.getIdNo());
599
+        taPerson.setDepartment(taUser.getDepartment());
600
+        taPerson.setPost(taUser.getPosition());
601
+        taPerson.setPhoto(taUser.getPhoto());
602
+        QueryWrapper<TaPerson> taPersonQueryWrapper = new QueryWrapper<>();
603
+        taPersonQueryWrapper.eq("user_id", taUser.getUserId());
604
+        taPersonMapper.update(taPerson, taPersonQueryWrapper);
605
+
606
+        return taUser;
607
+    }
608
+
609
+    @Override
610
+    public TaUser getAdminByAppID(String appid) {
611
+        return taUserMapper.getAdminByAppID(appid);
612
+    }
613
+
614
+    @Override
615
+    public ResponseBean cityTree() {
616
+        ResponseBean responseBean = new ResponseBean<>();
617
+        // 省份
618
+        TaUser taUser = new TaUser();
619
+        QueryWrapper<TdCity> tdCityQueryWrapper = new QueryWrapper<>();
620
+        tdCityQueryWrapper.eq("leveltype", 1);
621
+        List<TdCity> tdCityList = tdCityMapper.selectList(tdCityQueryWrapper);
622
+        taUser.setTdCityList(tdCityList);
623
+        for (TdCity tdCity : tdCityList) {
624
+            // 根据parentid查询城市
625
+            QueryWrapper<TdCity> tdCityQuery = new QueryWrapper<>();
626
+            tdCityQuery.eq("parentid", tdCity.getId());
627
+            List<TdCity> city = tdCityMapper.selectList(tdCityQuery);
628
+            tdCity.setChildren(city);
629
+        }
630
+        responseBean.addSuccess(taUser);
631
+        return responseBean;
632
+    }
633
+
634
+    @Override
635
+    public ResponseBean departureUser(Integer userId, List<String> customerIdList, Integer consultantUserId) {
636
+        ResponseBean responseBean = new ResponseBean();
637
+        TaUser user = this.getById(userId);
638
+        if (null == user) {
639
+            responseBean.addError("此员工不存在!");
640
+            return responseBean;
641
+        }
642
+
643
+        // 不是置业顾问
644
+        if (user.getIsConsultant() == false) {
645
+            // 设置员工离职
646
+            updateUserStatus(user);
647
+            return ResponseBean.success("操作成功!");
648
+        }
649
+        /**
650
+         * 是置业顾问
651
+         */
652
+
653
+        // 更改员工表的用户类型,清空关联关系user_id
654
+
655
+        QueryWrapper<TaPerson> userQueryWrapper = new QueryWrapper<>();
656
+        userQueryWrapper.eq("user_id", consultantUserId);
657
+        TaPerson person = iTaPersonService.getOne(userQueryWrapper);
658
+        if (null == person) {
659
+            responseBean.addError("置业顾问未绑定小程序!");
660
+            return responseBean;
661
+        }
662
+
663
+        // 设置员工离职
664
+        updateUserStatus(user);
665
+
666
+        // 转移客户
667
+        UpdateWrapper<TaRecommendCustomer> updateWrapper = new UpdateWrapper<>();
668
+        updateWrapper.in("customer_id", customerIdList);
669
+        updateWrapper.set("realty_consultant", person.getPersonId());
670
+        boolean update = iTaRecommendCustomerService.update(updateWrapper);
671
+        if (!update) {
672
+            return ResponseBean.error("操作失败!", ResponseBean.ERROR_ILLEGAL_PARAMS);
673
+        }
674
+
675
+        return ResponseBean.success("操作成功!");
676
+    }
677
+
678
+    /**
679
+     * 分页查询用户列表
680
+     *
681
+     * @param pg
682
+     * @param taUser
683
+     * @param personBuildingList
684
+     * @return
685
+     */
686
+    @Override
687
+    public IPage<TaUser> seleUserList(IPage pg, TaUser taUser, List<TaPersonBuilding> personBuildingList) {
688
+        return taUserMapper.seleUserList(pg, taUser, personBuildingList);
689
+    }
690
+
691
+    @Override
692
+    public TaUser getUserInfoById(Integer userId, Integer orgId) {
693
+        QueryWrapper<TaUser> userQueryWrapper = new QueryWrapper<>();
694
+        userQueryWrapper.eq("user_id", userId);
695
+        userQueryWrapper.eq("org_id", orgId);
696
+        userQueryWrapper.ne("status", -1);
697
+        return getOne(userQueryWrapper);
698
+    }
699
+
700
+    private boolean updateUserStatus(TaUser user) {
701
+        UpdateWrapper<TaUser> updateWrapper = new UpdateWrapper<>();
702
+        updateWrapper.eq("user_id", user.getUserId());
703
+        updateWrapper.set("status", 9);
704
+
705
+        QueryWrapper<TaPerson> taPersonQueryWrapper = new QueryWrapper<>();
706
+        taPersonQueryWrapper.eq("user_id", user.getUserId());
707
+        taPersonQueryWrapper.last("limit 1");
708
+        TaPerson taPerson = taPersonMapper.selectOne(taPersonQueryWrapper);
709
+        // 可能存在没有绑定小程序端
710
+        if (null != taPerson) {
711
+            UpdateWrapper<TaPerson> personUpdateWrapper = new UpdateWrapper<>();
712
+            personUpdateWrapper.eq("person_id", taPerson.getPersonId());
713
+
714
+            // 如果是置业顾问,设置为客户类型
715
+            if (user.getIsConsultant() == true) {
716
+                personUpdateWrapper.set("person_type", CommConstant.PERSON_ESTATE_CUSTOMER);
717
+            }
718
+
719
+            personUpdateWrapper.set("user_id", null);
720
+            iTaPersonService.update(personUpdateWrapper);
721
+        }
722
+
723
+        return this.update(updateWrapper);
724
+    }
725
+
726
+    public boolean validateWeight(TaUser taUser, String operateType) {
727
+        if (StringUtils.isEmpty(taUser.getWeight())) {
728
+            return false;
729
+        }
730
+
731
+        Integer count;
732
+        if (taUser.getIsConsultant() != null && taUser.getIsConsultant()) {
733
+            String buildingId = taUser.getBuildingId();
734
+            String weight = taUser.getWeight();
735
+            count = taUserMapper.validateWeight(null, buildingId, weight, operateType.equals("add") ? null : taUser.getUserId());
736
+        } else {
737
+            List<String> buildingIds = taUser.getBuildingIds();
738
+            String weight = taUser.getWeight();
739
+            count = taUserMapper.validateWeight(buildingIds, null, weight, operateType.equals("add") ? null : taUser.getUserId());
740
+        }
741
+
742
+        if (count > 0) {
743
+            return true;
744
+        }
745
+        return false;
746
+    }
747
+
748
+}

+ 293
- 0
src/main/java/com/huiju/estateagents/channel/sysChannel/controller/SysUserChannelController.java Parādīt failu

@@ -0,0 +1,293 @@
1
+package com.huiju.estateagents.channel.sysUser.controller;
2
+
3
+import com.alibaba.fastjson.JSONObject;
4
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5
+import com.baomidou.mybatisplus.core.metadata.IPage;
6
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
7
+import com.huiju.estateagents.base.BaseController;
8
+import com.huiju.estateagents.base.ResponseBean;
9
+import com.huiju.estateagents.center.sysUser.entity.SysToken;
10
+import com.huiju.estateagents.center.sysUser.entity.SysUser;
11
+import com.huiju.estateagents.center.sysUser.service.ISysTokenService;
12
+import com.huiju.estateagents.center.sysUser.service.ISysUserService;
13
+import com.huiju.estateagents.center.taUser.entity.TaUser;
14
+import com.huiju.estateagents.center.taUser.service.ITaUserService;
15
+import com.huiju.estateagents.channel.sysChannel.entity.TaChannelProxy;
16
+import com.huiju.estateagents.channel.sysChannel.service.ITaChannelProxyService;
17
+import com.huiju.estateagents.common.CommConstant;
18
+import com.huiju.estateagents.common.JWTUtils;
19
+import com.huiju.estateagents.common.MD5Utils;
20
+import com.huiju.estateagents.common.StringUtils;
21
+import com.huiju.estateagents.entity.TaChannelAppRelation;
22
+import com.huiju.estateagents.service.ITaChannelAppRelationService;
23
+import org.apache.commons.collections.CollectionUtils;
24
+import org.slf4j.Logger;
25
+import org.slf4j.LoggerFactory;
26
+import org.springframework.beans.factory.annotation.Autowired;
27
+import org.springframework.web.bind.annotation.*;
28
+
29
+import javax.servlet.http.HttpServletRequest;
30
+import java.time.LocalDateTime;
31
+import java.util.ArrayList;
32
+import java.util.HashMap;
33
+import java.util.List;
34
+import java.util.Map;
35
+
36
+/**
37
+ * <p>
38
+    * 系统用户 系统中心账户 前端控制器
39
+    * </p>
40
+ *
41
+ * @author jobob
42
+ * @since 2019-09-11
43
+ */
44
+@RestController
45
+@RequestMapping("/api")
46
+public class SysUserChannelController extends BaseController {
47
+
48
+    private final Logger logger = LoggerFactory.getLogger(SysUserChannelController.class);
49
+
50
+    @Autowired
51
+    public ISysUserService iSysUserService;
52
+    
53
+    @Autowired
54
+    private ISysTokenService sysTokenService;
55
+
56
+    @Autowired
57
+    private ITaUserService iTaUserService;
58
+
59
+    @Autowired
60
+    private ITaChannelProxyService iTaChannelProxyService;
61
+
62
+    @Autowired
63
+    private ITaChannelAppRelationService iTaChannelAppRelationService;
64
+
65
+    /**
66
+     * 修改对象
67
+     * @param sysUser 实体对象
68
+     * @return
69
+     */
70
+    @RequestMapping(value="/channel/sysUser",method= RequestMethod.PUT)
71
+    public ResponseBean sysUserUpdate(@RequestBody SysUser sysUser, HttpServletRequest request){
72
+        ResponseBean responseBean = new ResponseBean();
73
+        try {
74
+            String userName = JWTUtils.getSubject(request);
75
+            sysUser.setPassword(MD5Utils.md5(sysUser.getPassword()));
76
+            sysUser.setUserName(userName);
77
+            if (iSysUserService.updateById(sysUser)){
78
+                responseBean.addSuccess(sysUser);
79
+            }else {
80
+                responseBean.addError("fail");
81
+            }
82
+        }catch (Exception e){
83
+            e.printStackTrace();
84
+            logger.error("sysUserUpdate -=- {}",e.toString());
85
+            responseBean.addError(e.getMessage());
86
+        }
87
+        return responseBean;
88
+    }
89
+
90
+    @PostMapping("/channel/signin")
91
+    public ResponseBean signinChannel(@RequestBody String paramStr) {
92
+        JSONObject params = JSONObject.parseObject(paramStr);
93
+        if (params == null) {
94
+            return ResponseBean.error("非法参数", ResponseBean.ERROR_MISSING_PARAMS);
95
+        }
96
+
97
+        String userName = params.getString("userName");
98
+        String userPassword = params.getString("password");
99
+
100
+        //验证用户名密码是否正确
101
+        QueryWrapper<SysUser> sysUserQueryWrapper = new QueryWrapper<>();
102
+        sysUserQueryWrapper.eq("user_name",userName);
103
+        sysUserQueryWrapper.eq("password", MD5Utils.md5(userPassword));
104
+        sysUserQueryWrapper.eq("type", CommConstant.LOGIN_TYPE_CHANNEL);
105
+        SysUser sysUser = iSysUserService.getOne(sysUserQueryWrapper);
106
+        if (sysUser == null) {
107
+            return ResponseBean.error("用户名或密码错误", ResponseBean.ERROR_ILLEGAL_PARAMS);
108
+        }
109
+
110
+        if (sysUser.getStatus() != CommConstant.STATUS_NORMAL) {
111
+            return ResponseBean.error("用户状态异常", ResponseBean.ERROR_UNAVAILABLE);
112
+        }
113
+
114
+        Map map = new HashMap();
115
+        map.put("userName", sysUser.getUserName());
116
+        map.put("userId",sysUser.getUserId());
117
+
118
+        String token = JWTUtils.newTokenByMap(map);
119
+
120
+        //保存token
121
+        sysTokenService.saveToken(token);
122
+
123
+        Map<String, Object> result = new HashMap<>();
124
+        result.put("token", token);
125
+        result.put("user", sysUser);
126
+
127
+        return ResponseBean.success(result);
128
+    }
129
+
130
+    @PostMapping("/channel/signout")
131
+    public ResponseBean signoutChannel(HttpServletRequest request) {
132
+        String token = JWTUtils.getToken(request);
133
+        QueryWrapper<SysToken> sysTokenQueryWrapper = new QueryWrapper<>();
134
+        sysTokenQueryWrapper.eq("token",token);
135
+        sysTokenService.remove(sysTokenQueryWrapper);
136
+        return ResponseBean.success("成功退出");
137
+    }
138
+
139
+    /**
140
+     * 根据id查询对象
141
+     * @param id  实体ID
142
+     */
143
+    @RequestMapping(value="/channel/current",method=RequestMethod.GET)
144
+    public ResponseBean currentChannelUser(HttpServletRequest request){
145
+        String userName = getSysUserName(request);
146
+        QueryWrapper<SysUser> sysUserQueryWrapper = new QueryWrapper<>();
147
+        sysUserQueryWrapper.eq("user_name",userName);
148
+        sysUserQueryWrapper.eq("type",CommConstant.LOGIN_TYPE_CHANNEL);
149
+        SysUser sysUser = iSysUserService.getOne(sysUserQueryWrapper);
150
+        sysUser.setPassword(null);
151
+
152
+        return ResponseBean.success(sysUser);
153
+    }
154
+
155
+    /**
156
+     * 分页查询列表
157
+     * @param pageNum
158
+     * @param pageSize
159
+     * @return
160
+     */
161
+    @RequestMapping(value="/channel/taChannel",method= RequestMethod.GET)
162
+    public ResponseBean taUserList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
163
+                                   @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
164
+        ResponseBean responseBean = new ResponseBean();
165
+        try {
166
+            //使用分页插件
167
+            IPage pg = new Page<>(pageNum, pageSize);
168
+            IPage<TaChannelProxy> result = iTaChannelProxyService.getChannelList(pg);
169
+            responseBean.addSuccess(result);
170
+        }catch (Exception e){
171
+            e.printStackTrace();
172
+            logger.error("taUserList -=- {}",e.toString());
173
+            responseBean.addError(e.getMessage());
174
+        }
175
+        return responseBean;
176
+    }
177
+
178
+    /**
179
+     * 新增代理商
180
+     * @param taChannelProxy
181
+     * @param request
182
+     * @return
183
+     */
184
+    @RequestMapping(value="/channel/taChannel",method= RequestMethod.POST)
185
+    public ResponseBean taUserList(@RequestBody TaChannelProxy taChannelProxy, HttpServletRequest request){
186
+        ResponseBean responseBean = new ResponseBean();
187
+        try {
188
+            if (taChannelProxy.getAppMaxNum() != null && taChannelProxy.getAppMaxNum() <= 0){
189
+                responseBean.addError("维护小程序数量不得小于0");
190
+                return responseBean;
191
+            }
192
+            if (StringUtils.isEmpty(taChannelProxy.getUserName())){
193
+                taChannelProxy.setUserName(taChannelProxy.getChannelTel());
194
+            }
195
+
196
+            QueryWrapper<TaChannelProxy> userNameQueryWrapper = new QueryWrapper<>();
197
+            userNameQueryWrapper.eq("user_name", taChannelProxy.getUserName());
198
+            Integer countUserName = iTaChannelProxyService.count(userNameQueryWrapper);
199
+            if (countUserName > 0){
200
+                responseBean.addError("账户名已存在");
201
+                return responseBean;
202
+            }
203
+
204
+
205
+            QueryWrapper<TaChannelProxy> taChannelProxyQueryWrapper = new QueryWrapper<>();
206
+            taChannelProxyQueryWrapper.eq("channel_tel", taChannelProxy.getChannelTel());
207
+            Integer countChannel = iTaChannelProxyService.count(taChannelProxyQueryWrapper);
208
+            if (countChannel > 0){
209
+                responseBean.addError("手机号已存在");
210
+                return responseBean;
211
+            }
212
+            taChannelProxy.setPassword(MD5Utils.md5(MD5Utils.md5("abc@123")));
213
+            taChannelProxy.setStatus(1);
214
+            taChannelProxy.setCreateTime(LocalDateTime.now());
215
+            iTaChannelProxyService.save(taChannelProxy);
216
+        }catch (Exception e){
217
+            e.printStackTrace();
218
+            logger.error("taUserList -=- {}",e.toString());
219
+            responseBean.addError(e.getMessage());
220
+        }
221
+        return responseBean;
222
+    }
223
+
224
+    /**
225
+     * 根据id查询对象
226
+     * @param id  实体ID
227
+     */
228
+    @RequestMapping(value="/channel/taChannel/{id}",method= RequestMethod.GET)
229
+    public ResponseBean getChannelProxyById(@PathVariable Integer id){
230
+        ResponseBean responseBean = new ResponseBean();
231
+        QueryWrapper<TaChannelProxy> queryWrapper = new QueryWrapper<>();
232
+        queryWrapper.eq("channel_id", id);
233
+        TaChannelProxy taChannelProxy = iTaChannelProxyService.getOne(queryWrapper);
234
+        responseBean.addSuccess(taChannelProxy);
235
+        return responseBean;
236
+    }
237
+
238
+    /**
239
+     * 修改对象
240
+     * @param id
241
+     * @param taChannelProxy
242
+     * @param request
243
+     * @return
244
+     */
245
+    @RequestMapping(value="/channel/taChannel/{id}",method= RequestMethod.PUT)
246
+    public ResponseBean taNewsTypeUpdate(@PathVariable Integer id,
247
+                                         @RequestBody TaChannelProxy taChannelProxy, HttpServletRequest request){
248
+        ResponseBean responseBean = new ResponseBean();
249
+        if (taChannelProxy.getAppMaxNum() != null && taChannelProxy.getAppMaxNum() <= 0){
250
+            responseBean.addError("维护小程序数量不得小于0");
251
+            return responseBean;
252
+        }
253
+
254
+        if (StringUtils.isEmpty(taChannelProxy.getUserName())){
255
+            taChannelProxy.setUserName(taChannelProxy.getChannelTel());
256
+        }
257
+
258
+        QueryWrapper<TaChannelProxy> userNameQueryWrapper = new QueryWrapper<>();
259
+        userNameQueryWrapper.eq("user_name", taChannelProxy.getUserName());
260
+        userNameQueryWrapper.ne("channel_id", id);
261
+        Integer countUserName = iTaChannelProxyService.count(userNameQueryWrapper);
262
+        if (countUserName > 0){
263
+            responseBean.addError("账户名已存在");
264
+            return responseBean;
265
+        }
266
+
267
+        taChannelProxy.setExpireDate(taChannelProxy.getExpireDate().plusDays(1L));
268
+        //更新业务层的登录账号为禁用
269
+        if (taChannelProxy.getStatus() != null){
270
+            QueryWrapper<TaChannelAppRelation> taChannelAppRelationQueryWrapper = new QueryWrapper<>();
271
+            taChannelAppRelationQueryWrapper.eq("channel_id", id);
272
+            List<TaChannelAppRelation> taChannelAppRelation = iTaChannelAppRelationService.list(taChannelAppRelationQueryWrapper);
273
+            List<Integer> orgIdList = new ArrayList<>();
274
+            taChannelAppRelation.forEach(e->{
275
+                orgIdList.add(e.getOrgId());
276
+            });
277
+            if (CollectionUtils.isNotEmpty(orgIdList)){
278
+                QueryWrapper<TaUser> taUserQueryWrapper = new QueryWrapper<>();
279
+                taUserQueryWrapper.in("org_id", orgIdList);
280
+                TaUser taUser = new TaUser();
281
+                taUser.setStatus(taChannelProxy.getStatus());
282
+                iTaUserService.update(taUser, taUserQueryWrapper);
283
+            }
284
+
285
+        }
286
+
287
+        QueryWrapper<TaChannelProxy> taChannelProxyQueryWrapper = new QueryWrapper<>();
288
+        taChannelProxyQueryWrapper.eq("channel_id", id);
289
+        iTaChannelProxyService.update(taChannelProxy, taChannelProxyQueryWrapper);
290
+        return ResponseBean.success("更新成功");
291
+    }
292
+
293
+}

+ 41
- 0
src/main/java/com/huiju/estateagents/channel/sysChannel/entity/TaChannelProxy.java Parādīt failu

@@ -0,0 +1,41 @@
1
+package com.huiju.estateagents.channel.sysChannel.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableField;
5
+import com.baomidou.mybatisplus.annotation.TableId;
6
+import lombok.Data;
7
+import lombok.EqualsAndHashCode;
8
+import lombok.experimental.Accessors;
9
+
10
+import java.time.LocalDateTime;
11
+
12
+@Data
13
+@EqualsAndHashCode(callSuper = false)
14
+@Accessors(chain = true)
15
+public class TaChannelProxy {
16
+    @TableId(value = "channel_id", type = IdType.AUTO)
17
+    private Integer channelId;
18
+
19
+    private String channelProxyName;
20
+
21
+    private String channelImg;
22
+
23
+    private String channelContactName;
24
+
25
+    private String channelTel;
26
+
27
+    private String userName;
28
+
29
+    private String password;
30
+
31
+    private LocalDateTime expireDate;
32
+
33
+    private Integer status;
34
+
35
+    private Integer appMaxNum;
36
+
37
+    private LocalDateTime createTime;
38
+
39
+    @TableField(exist = false)
40
+    private Integer appCurrentNum;
41
+}

+ 12
- 0
src/main/java/com/huiju/estateagents/channel/sysChannel/mapper/TaChannelProxyMapper.java Parādīt failu

@@ -0,0 +1,12 @@
1
+package com.huiju.estateagents.channel.sysChannel.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.channel.sysChannel.entity.TaChannelProxy;
7
+import org.apache.ibatis.annotations.Mapper;
8
+
9
+@Mapper
10
+public interface TaChannelProxyMapper extends BaseMapper<TaChannelProxy> {
11
+    IPage<TaChannelProxy> getChannelList(IPage page);
12
+}

+ 12
- 0
src/main/java/com/huiju/estateagents/channel/sysChannel/service/ITaChannelProxyService.java Parādīt failu

@@ -0,0 +1,12 @@
1
+package com.huiju.estateagents.channel.sysChannel.service;
2
+
3
+import com.baomidou.mybatisplus.core.metadata.IPage;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.huiju.estateagents.channel.sysChannel.entity.TaChannelProxy;
6
+
7
+
8
+public interface ITaChannelProxyService extends IService<TaChannelProxy> {
9
+    IPage<TaChannelProxy> getChannelList(IPage page);
10
+
11
+    void resetPassword(Integer id, String newPass) throws Exception;
12
+}

+ 57
- 0
src/main/java/com/huiju/estateagents/channel/sysChannel/service/impl/TaChannelProxyServiceImpl.java Parādīt failu

@@ -0,0 +1,57 @@
1
+package com.huiju.estateagents.channel.sysChannel.service.impl;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7
+import com.huiju.estateagents.center.taUser.entity.TaUser;
8
+import com.huiju.estateagents.channel.sysChannel.entity.TaChannelProxy;
9
+import com.huiju.estateagents.channel.sysChannel.mapper.TaChannelProxyMapper;
10
+import com.huiju.estateagents.channel.sysChannel.service.ITaChannelProxyService;
11
+import com.huiju.estateagents.common.MD5Utils;
12
+import com.huiju.estateagents.entity.TaChannelAppRelation;
13
+import com.huiju.estateagents.mapper.TaChannelAppRelationMapper;
14
+import org.apache.commons.collections.CollectionUtils;
15
+import org.springframework.beans.factory.annotation.Autowired;
16
+import org.springframework.stereotype.Service;
17
+
18
+@Service
19
+public class TaChannelProxyServiceImpl extends ServiceImpl<TaChannelProxyMapper, TaChannelProxy>  implements ITaChannelProxyService {
20
+    @Autowired
21
+    private TaChannelProxyMapper taChannelProxyMapper;
22
+
23
+    @Autowired
24
+    private TaChannelAppRelationMapper taChannelAppRelationMapper;
25
+
26
+    @Override
27
+    public IPage<TaChannelProxy> getChannelList(IPage page) {
28
+        IPage<TaChannelProxy> taChannelProxyIPage = taChannelProxyMapper.getChannelList(page);
29
+        if (CollectionUtils.isNotEmpty(taChannelProxyIPage.getRecords())){
30
+            taChannelProxyIPage.getRecords().forEach(e->{
31
+                QueryWrapper<TaChannelAppRelation> taChannelAppRelationQueryWrapper = new QueryWrapper<>();
32
+                taChannelAppRelationQueryWrapper.eq("channel_id", e.getChannelId());
33
+                taChannelAppRelationQueryWrapper.groupBy("channel_id");
34
+                e.setAppCurrentNum(taChannelAppRelationMapper.selectCount(taChannelAppRelationQueryWrapper));
35
+            });
36
+            taChannelProxyIPage.setRecords(taChannelProxyIPage.getRecords());
37
+        }
38
+        return taChannelProxyIPage;
39
+    }
40
+
41
+    @Override
42
+    public void resetPassword(Integer id, String newPass) throws Exception {
43
+        TaChannelProxy taChannelProxy = this.getById(id);
44
+        if (null == taChannelProxy) {
45
+            throw new Exception("未找到有效的渠道信息");
46
+        }
47
+
48
+        String encryptPass = MD5Utils.md5(MD5Utils.md5(newPass));
49
+        TaChannelProxy proxy = new TaChannelProxy();
50
+        proxy.setPassword(encryptPass);
51
+        proxy.setChannelId(id);
52
+
53
+        if (!this.updateById(proxy)) {
54
+            throw new Exception("重置渠道密码失败");
55
+        }
56
+    }
57
+}

+ 70
- 0
src/main/java/com/huiju/estateagents/cleancode/CleanCode.java Parādīt failu

@@ -0,0 +1,70 @@
1
+package com.huiju.estateagents.cleancode;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.huiju.estateagents.base.ResponseBean;
5
+import com.huiju.estateagents.entity.*;
6
+import com.huiju.estateagents.service.*;
7
+import org.springframework.beans.factory.annotation.Autowired;
8
+import org.springframework.web.bind.annotation.RequestMapping;
9
+import org.springframework.web.bind.annotation.RequestMethod;
10
+import org.springframework.web.bind.annotation.RequestParam;
11
+import org.springframework.web.bind.annotation.RestController;
12
+
13
+import javax.servlet.http.HttpServletRequest;
14
+import java.util.List;
15
+
16
+@RestController
17
+@RequestMapping("/api")
18
+public class CleanCode {
19
+
20
+    @Autowired
21
+    private ISysMenuService sysMenuService;
22
+
23
+    @Autowired
24
+    private ITaRoleService taRoleService;
25
+
26
+    @Autowired
27
+    private ITaRoleMenuService taRoleMenuService;
28
+
29
+    @Autowired
30
+    private ITaRoleButtonService taRoleButtonService;
31
+
32
+    @Autowired
33
+    private ISysButtonInMenuService sysButtonInMenuService;
34
+
35
+    @RequestMapping(value = "/admin/clean/menurole", method = RequestMethod.GET)
36
+    public void cleanMenu() {
37
+        List<SysMenu> sysMenuList = sysMenuService.list();
38
+
39
+        QueryWrapper<TaRole> roleQueryWrapper = new QueryWrapper<>();
40
+        roleQueryWrapper.eq("is_admin",1);
41
+        List<TaRole> roleList = taRoleService.list(roleQueryWrapper);
42
+
43
+        roleList.forEach(e -> {
44
+            sysMenuList.forEach(s -> {
45
+                TaRoleMenu taRoleMenu = new TaRoleMenu();
46
+                taRoleMenu.setRoleId(e.getRoleId());
47
+                taRoleMenu.setMenuId(s.getMenuId());
48
+                taRoleMenuService.save(taRoleMenu);
49
+            });
50
+        });
51
+    }
52
+
53
+    @RequestMapping(value = "/admin/clean/buttonrole", method = RequestMethod.GET)
54
+    public void cleanButton() {
55
+        List<SysButtonInMenu> buttlist = sysButtonInMenuService.list();
56
+
57
+        QueryWrapper<TaRole> roleQueryWrapper = new QueryWrapper<>();
58
+        roleQueryWrapper.eq("is_admin",1);
59
+        List<TaRole> roleList = taRoleService.list(roleQueryWrapper);
60
+
61
+        roleList.forEach(e -> {
62
+            buttlist.forEach(s -> {
63
+                TaRoleButton taRoleButton = new TaRoleButton();
64
+                taRoleButton.setBtnId(s.getBtnId());
65
+                taRoleButton.setRoleId(e.getRoleId());
66
+                taRoleButtonService.save(taRoleButton);
67
+            });
68
+        });
69
+    }
70
+}

+ 63
- 0
src/main/java/com/huiju/estateagents/common/AliOSSUtils.java Parādīt failu

@@ -0,0 +1,63 @@
1
+package com.huiju.estateagents.common;
2
+
3
+import com.aliyun.oss.OSSClient;
4
+import com.huiju.estateagents.config.AliOSSProperties;
5
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
6
+import org.springframework.context.annotation.Configuration;
7
+import org.springframework.web.multipart.MultipartFile;
8
+
9
+import java.io.*;
10
+import java.nio.channels.FileChannel;
11
+
12
+@Configuration
13
+@EnableConfigurationProperties(AliOSSProperties.class)
14
+public class AliOSSUtils {
15
+
16
+    /**
17
+     * 上传文件
18
+     * @param mf 上传的文件
19
+     * @param toDirs 上传到的目录
20
+     * @return
21
+     */
22
+    public static String putObject(MultipartFile mf, String ... toDirs) throws IOException {
23
+        String fName = StringUtils.ifNull(mf.getOriginalFilename(), StringUtils.random(16) + ".png");
24
+        String preFix = String.valueOf(System.currentTimeMillis());
25
+        String toDir = "/";
26
+        if (null != toDirs && toDirs.length > 0) {
27
+            toDir = toDirs[0];
28
+        }
29
+        String nwFName = toDir + preFix + "-" + fName;
30
+        nwFName = StringUtils.trim(nwFName,"/");
31
+
32
+        return putFile(nwFName, new ByteArrayInputStream(mf.getBytes()));
33
+    }
34
+
35
+    public static String putObject(File f, String ... toDirs) throws FileNotFoundException {
36
+        String fName = StringUtils.ifNull(f.getName(), StringUtils.random(16) + ".png");
37
+        String preFix = String.valueOf(System.currentTimeMillis());
38
+        String toDir = "/";
39
+        if (null != toDirs && toDirs.length > 0) {
40
+            toDir = toDirs[0];
41
+        }
42
+        String nwFName = toDir + preFix + "-" + fName;
43
+        nwFName = StringUtils.trim(nwFName,"/");
44
+
45
+        InputStream inputStream = new FileInputStream(f);
46
+        return putFile(nwFName, inputStream);
47
+    }
48
+
49
+    private static String putFile(String fname, InputStream input) {
50
+        OSSClient ossClient = new OSSClient(AliOSSProperties.oss.getEndpoint(), AliOSSProperties.accessKeyId, AliOSSProperties.accessKeySecret);
51
+        ossClient.putObject(AliOSSProperties.oss.getBucketName(), fname, input);
52
+        ossClient.shutdown();
53
+
54
+        // String url = ossClient.generatePresignedUrl(AliOSSUtils.oss.getBucketName(), fname, expiration).toString();
55
+
56
+        String preURL = AliOSSProperties.oss.getBucketURL();
57
+        if (!preURL.endsWith("/")) {
58
+            preURL += "/";
59
+        }
60
+
61
+        return preURL + fname;
62
+    }
63
+}

+ 137
- 0
src/main/java/com/huiju/estateagents/common/BeanTools.java Parādīt failu

@@ -0,0 +1,137 @@
1
+package com.huiju.estateagents.common;
2
+
3
+import jodd.bean.BeanCopy;
4
+import jodd.typeconverter.TypeConverterManager;
5
+import org.apache.commons.collections.BeanMap;
6
+import org.springframework.beans.BeanUtils;
7
+import org.springframework.beans.BeanWrapper;
8
+import org.springframework.beans.BeanWrapperImpl;
9
+
10
+import java.beans.PropertyDescriptor;
11
+import java.lang.reflect.Method;
12
+import java.util.*;
13
+
14
+@SuppressWarnings("deprecation")
15
+public final class BeanTools {
16
+
17
+    private static Map<String, Object> toBeanMethodMap = new HashMap<String, Object>();
18
+
19
+    /**
20
+     * <pre>
21
+     * 功能:实现BEAN的属性对拷
22
+     * 创建人:JokenWang
23
+     * </pre>
24
+     *
25
+     * @param fromBean        待转换的源bean
26
+     * @param toBeanClassName 转换成目标bean的名称 形如:ItemSeries.class.getName()
27
+     * @return 目标BEAN类
28
+     */
29
+    public static <T> T convertBean(Object fromBean, Class<T> toBeanClassName) {
30
+        T toBean = null;
31
+        try {
32
+            toBean = getBeanInstance(toBeanClassName.getName());
33
+            return convertBean(fromBean, toBean);
34
+        } catch (Exception e) {
35
+            e.printStackTrace();
36
+        }
37
+        return toBean;
38
+    }
39
+
40
+    private static <T> T convertBean(Object fromBean, T toBean) {
41
+        TypeConverterManager.register(String.class, new StringConverter());
42
+        BeanCopy.beans(fromBean, toBean).copy();
43
+        return toBean;
44
+    }
45
+
46
+    public static Method getDeclaredMethod(Object object, String methodName, Class<?>... parameterTypes) {
47
+        Method method;
48
+        for (Class<?> clazz = object.getClass(); clazz != Object.class; clazz = clazz.getSuperclass()) {
49
+            try {
50
+                method = clazz.getDeclaredMethod(methodName, parameterTypes);
51
+                return method;
52
+            } catch (Exception ignored) {
53
+
54
+            }
55
+        }
56
+        return null;
57
+    }
58
+
59
+    @SuppressWarnings("unchecked")
60
+    public static <T> T getBeanInstance(String clazzName)
61
+            throws InstantiationException, IllegalAccessException, ClassNotFoundException {
62
+
63
+        return (T) Class.forName(clazzName).newInstance();
64
+    }
65
+
66
+    public static Map<String, Object> toBeanMethodMap(String toBean)
67
+            throws InstantiationException, IllegalAccessException, ClassNotFoundException {
68
+
69
+        Class<?> toBeanClazz = getBeanInstance(toBean).getClass();
70
+        Method[] toBeanMethods = toBeanClazz.getDeclaredMethods();
71
+        if (!toBeanClazz.isInstance(Object.class))// 非超类Object
72
+        {
73
+            for (Method method : toBeanMethods) {
74
+                String methodName = method.getName();
75
+                toBeanMethodMap.put(methodName, method);
76
+            }
77
+
78
+            Class<?> toBeanSuperclazz = toBeanClazz.getSuperclass();// 获取父类
79
+            toBeanMethodMap(toBeanSuperclazz.getName());
80
+        }
81
+
82
+        return toBeanMethodMap;
83
+    }
84
+
85
+    public static Map<String, Object> toMap(Object object) {
86
+        Map<String, Object> map = new HashMap<String, Object>();
87
+
88
+        if (object == null) {
89
+            return map;
90
+        }
91
+
92
+        BeanMap beanMap;
93
+        beanMap = new BeanMap(object);
94
+        @SuppressWarnings("unchecked")
95
+        Iterator<String> it = beanMap.keyIterator();
96
+        while (it.hasNext()) {
97
+            String name = it.next();
98
+            Object value = beanMap.get(name);
99
+            // 转换时会将类名也转换成属性,此处去掉
100
+            if (value != null && !name.equals("class")) {
101
+                map.put(name, value);
102
+            }
103
+        }
104
+
105
+        return map;
106
+    }
107
+
108
+    public static Map<String, Object> toMap(Object... objs) {
109
+        Map<String, Object> map = new HashMap<>();
110
+        for (Object object : objs) {
111
+            if (object != null) {
112
+                map.putAll(toMap(object));
113
+            }
114
+        }
115
+        return map;
116
+    }
117
+
118
+    public static String[] getNullPropertyNames (Object source) {
119
+        final BeanWrapper src = new BeanWrapperImpl(source);
120
+        PropertyDescriptor[] pds = src.getPropertyDescriptors();
121
+
122
+        Set<String> emptyNames = new HashSet<String>();
123
+        for(PropertyDescriptor pd : pds) {
124
+            Object srcValue = src.getPropertyValue(pd.getName());
125
+            if (srcValue == null) {
126
+                emptyNames.add(pd.getName());
127
+            }
128
+        }
129
+        String[] result = new String[emptyNames.size()];
130
+        return emptyNames.toArray(result);
131
+    }
132
+
133
+    public static void copyProperties(Object src, Object target) {
134
+        BeanUtils.copyProperties(src, target, getNullPropertyNames(src));
135
+    }
136
+
137
+}

+ 919
- 0
src/main/java/com/huiju/estateagents/common/CommConstant.java Parādīt failu

@@ -0,0 +1,919 @@
1
+package com.huiju.estateagents.common;
2
+
3
+public class CommConstant {
4
+    public final static String ALIOSS_DEFAULT_UPLOAD = "/miniapp/upload/images/";
5
+
6
+    /**
7
+     * 人员类型: 置业顾问
8
+     */
9
+    public final static String PERSON_REALTY_CONSULTANT = "Realty Consultant";
10
+
11
+    /**
12
+     * 人员类型: 销售主管
13
+     */
14
+    public final static String PERSON_SALES_EXECUTIVE = "Sales Executive";
15
+
16
+    /**
17
+     * 人员类型: 经纪人
18
+     */
19
+    public final static String PERSON_ESTATE_AGENT = "estate agent";
20
+
21
+    /**
22
+     * 人员类型: 客户
23
+     */
24
+    public final static String PERSON_ESTATE_CUSTOMER = "customer";
25
+
26
+    /**
27
+     * 人员类型: 渠道经纪人
28
+     */
29
+    public final static String PERSON_ESTATE_CHANNEL = "channel agent";
30
+
31
+    /**
32
+     * 人员类型: 游客
33
+     */
34
+    public final static String PERSON_ESTATE_DRIFT = "drift";
35
+
36
+    /**
37
+     * 状态: 正常
38
+     */
39
+    public final static Integer STATUS_NORMAL = 1;
40
+
41
+    /**
42
+     * 状态: 删除
43
+     */
44
+    public final static Integer STATUS_DELETE = -1;
45
+
46
+    /**
47
+     * 状态: 关闭、禁用
48
+     */
49
+    public final static Integer STATUS_CLOSED = 9;
50
+
51
+    /**
52
+     * 消息未读
53
+     */
54
+    public final static Integer MESSAGE_UNREAD = 0;
55
+
56
+    /**
57
+     * 消息已读
58
+     */
59
+    public final static Integer MESSAGE_READED = 1;
60
+
61
+    /**
62
+     * 点赞置业卡片
63
+     */
64
+    public final static String FAVOR_CONSULTANT = "consultant";
65
+
66
+    /**
67
+     * 点赞资讯
68
+     */
69
+    public final static String FAVOR_NEWS = "news";
70
+
71
+    /**
72
+     * 点赞项目
73
+     */
74
+    public final static String FAVOR_PROJECT = "project";
75
+
76
+    /**
77
+     * 活动点赞
78
+     */
79
+    public final static String FAVOR_ACTIVITY = "activity";
80
+
81
+
82
+    /**
83
+     * 兑换商品
84
+     */
85
+    public final static String POINTS_CHANGE_GOODS = "goods";
86
+
87
+    /**
88
+     * 签到
89
+     */
90
+    public final static String POINTS_CHANGE_CHECKIN = "checkin";
91
+
92
+    /**
93
+     * 分享
94
+     */
95
+    public final static String POINTS_CHANGE_SHARE_POSTER = "share-poster";
96
+
97
+    /**
98
+     * 授权手机号
99
+     */
100
+    public final static String POINTS_CHANGE_SIGNUP_AGENT = "signup-agent";
101
+
102
+    /**
103
+     * 拼团
104
+     */
105
+    public final static String POINTS_CHANGE_GROUP = "group";
106
+
107
+    /**
108
+     * 拼团
109
+     */
110
+    public final static String POINTS_CHANGE_HELP = "help";
111
+
112
+    /**
113
+     * 推荐客户
114
+     */
115
+    public final static String POINTS_CHANGE_RECOMMEND_CUSTOMER = "recommend-customer";
116
+
117
+    /**
118
+     * 活动核销
119
+     */
120
+    public final static String POINTS_CHANGE_ACTIVITY_VERIFICATION = "activity_verification";
121
+
122
+    /**
123
+     * 资料审核
124
+     */
125
+    public final static String POINTS_CHANGE_DOCUMENT_VERIFY = "document_verify";
126
+
127
+    /**
128
+     * 活动签到
129
+     */
130
+    public final static String POINTS_CHANGE_ACTIVITY_CHECKIN = "activity_checkin";
131
+
132
+
133
+    /**
134
+     * 小程序默认首页
135
+     */
136
+    public final static String MINIAPP_INDEX = "/index/index";
137
+
138
+    public final static String MINIAPP_DEFAULT_AVATAR = "https://njcj.oss-cn-shanghai.aliyuncs.com/miniapp/upload/images/default_avatar.jpg";
139
+
140
+
141
+    /**
142
+     * 未领取
143
+     */
144
+    public static final Integer STATUS_UNACCALIMED = 0;
145
+
146
+    /**
147
+     * 成功
148
+     */
149
+    public static final String SUCCESS = "success";
150
+
151
+
152
+    /**
153
+     * 活动的当前状态1:进行中
154
+     */
155
+    public static final Integer ACTIVITY_CONDITION_PROCESSING = 1;
156
+
157
+    /**
158
+     * 活动的当前状态2:未开始
159
+     */
160
+    public static final Integer ACTIVITY_CONDITION_PREPARE = 2;
161
+
162
+    /**
163
+     * 活动的当前状态3:结束
164
+     */
165
+    public static final Integer ACTIVITY_CONDITION_FINISH = 3;
166
+
167
+    //=================  首屏广告 / 轮播图 start =======================
168
+
169
+    /**
170
+     * 首页 轮播图/广告 类型 ====  活动
171
+     */
172
+    public static final String CAROUSEL_ACTIVITY = "activity";
173
+
174
+    /**
175
+     * 首页 轮播图/广告 类型 ==== 项目
176
+     */
177
+    public static final String CAROUSEL_PROJECT = "project";
178
+
179
+    /**
180
+     * 首页轮播图/广告 类型 ==== 资讯
181
+     */
182
+    public static final String CAROUSEL_NEWS = "news";
183
+
184
+    /**
185
+     * 首页轮播图/广告 类型 ==== 其他
186
+     */
187
+    public static final String CAROUSEL_OTHER = "other";
188
+
189
+    /**
190
+     * 打开放式_开屏
191
+     */
192
+    public static final String OPEN_SCREEN = "screen";
193
+
194
+    /**
195
+     * 打开放式_首页轮播图
196
+     */
197
+    public static final String CAROUSEL = "banner";
198
+
199
+    /**
200
+     * 首屏广告_发布位置——商城
201
+     */
202
+    public static final String MALL = "mall";
203
+
204
+    /**
205
+     * 首屏广告_发布位置——首页
206
+     */
207
+    public static final String BANNER_INDEX = "index";
208
+
209
+    /**
210
+     * 首屏广告_发布位置——项目
211
+     */
212
+    public static final String BANNER_BUILDING = "building";
213
+
214
+    //首页资讯
215
+    public static final String INDEX_NEWS = "indexNews";
216
+
217
+    //首页分享类型
218
+    public static final String IMG_TYPE = "imgType";
219
+
220
+    //=================  首屏广告 / 轮播图 end =======================
221
+
222
+    /**
223
+     * 客户报备
224
+     */
225
+    public static final Integer CUSTOMER_REPORT = 1;
226
+
227
+    /**
228
+     * 客户到访
229
+     */
230
+    public static final Integer CUSTOMER_VISITE = 2;
231
+
232
+    /**
233
+     * 客户认购
234
+     */
235
+    public static final Integer CUSTOMER_PREORDER = 3;
236
+
237
+    /**
238
+     * 客户签约
239
+     */
240
+    public static final Integer CUSTOMER_SIGNED = 4;
241
+
242
+
243
+    /**
244
+     * 待审核
245
+     */
246
+    public static final Integer VERIFY_READY = 0;
247
+
248
+    /**
249
+     * 审核同意
250
+     */
251
+    public static final Integer VERIFY_AGREE = 1;
252
+
253
+    /**
254
+     * 审核不同意
255
+     */
256
+    public static final Integer VERIFY_DISAGREE = 2;
257
+
258
+    //=================  客户入口类型 start =======================
259
+    /*
260
+     * 自主进入
261
+     * */
262
+    public static final String ENTRY_VOLUNTEER = "volunteer";
263
+    /*
264
+    添加
265
+    */
266
+    public static final String ENTRY_INPUT = "input";
267
+    /*
268
+     * 报备
269
+     * */
270
+    public static final String ENTRY_VERIFY = "verify";
271
+    //=================  客户入口类型 end =======================
272
+
273
+    /**
274
+     * 积分规则开启
275
+     */
276
+    public static final Integer POINTS_RULE_ON = 1;
277
+
278
+    /**
279
+     * 积分规则关闭
280
+     */
281
+    public static final Integer POINTS_RULE_OFF = 0;
282
+
283
+    /**
284
+     * 签到积分规则
285
+     */
286
+    public static final Integer POINTS_RULE_CHECKIN = 1;
287
+
288
+    /**
289
+     * 分享海报积分规则
290
+     */
291
+    public static final Integer POINTS_RULE_SHARE_POSTER = 2;
292
+
293
+    /**
294
+     * 推荐客户积分规则
295
+     */
296
+    public static final Integer POINTS_RULE_RECOMMENDER_CUSTOMER = 3;
297
+
298
+    /**
299
+     * 注册经纪人积分规则
300
+     */
301
+    public static final Integer POINTS_RULE_SIGNUP_AGENT = 4;
302
+
303
+    /**
304
+     * 活动核销送积分规则
305
+     */
306
+    public static final Integer POINTS_RULE_ACTIVITY_VERIFICATION = 6;
307
+
308
+    /**
309
+     * 资料审核送积分规则
310
+     */
311
+    public static final Integer POINTS_RULE_DOCUMENT_VERIFY = 7;
312
+
313
+    /**
314
+     * 普通活动签到送积分规则
315
+     */
316
+    public static final Integer POINTS_RULE_ACTIVITY_CHECKIN = 8;
317
+
318
+    /**
319
+     * 平台积分
320
+     */
321
+    public static final String POINTS_RULE_PLATFORM = "platform";
322
+
323
+    /**
324
+     * 项目积分
325
+     */
326
+    public static final String POINTS_RULE_PROJECT = "project";
327
+
328
+
329
+    // ----   用户活跃数  查询条件 start ------
330
+
331
+    public static final String DAY = "day";
332
+
333
+    public static final String WEEK = "week";
334
+
335
+    public static final String MONTH = "month";
336
+
337
+    // ----     查询条件 end ------
338
+
339
+    // -----   转化率 start -------
340
+
341
+    /**
342
+     * 项目收藏
343
+     */
344
+    public static final String BUILDING_SAVE = "building_save";
345
+
346
+    /**
347
+     * 项目转发
348
+     */
349
+    public static final String BUILDING_SHARE = "building_share";
350
+
351
+    /**
352
+     * 活动收藏
353
+     */
354
+    public static final String ACTIVITY_SAVE = "activity_save";
355
+
356
+    /**
357
+     * 活动转发
358
+     */
359
+    public static final String ACTIVITY_SHARE = "activity_share";
360
+
361
+    /**
362
+     * 咨迅收藏
363
+     */
364
+    public static final String NEWS_SAVE = "news_save";
365
+
366
+    /**
367
+     * 咨迅转发
368
+     */
369
+    public static final String NEWS_SHARE = "news_share";
370
+
371
+    /**
372
+     * 活动报名
373
+     */
374
+    public static final String ACTIVITY_SIGN = "activity_sign";
375
+
376
+    /**
377
+     * 授权手机号
378
+     */
379
+    public static final String AUTHORIZATION_PHONE = "authorization_phone";
380
+
381
+    // ------   转化率 end ---------
382
+
383
+
384
+    // ------- 用户来源 查询条件 start ----------
385
+
386
+    public static final String REGISTERED_TYPE = "registered";
387
+
388
+    // ------- 用户来源 查询条件 end ----------
389
+
390
+    // ------- 性别 start -------
391
+    public static final Integer SEX_MALE = 1;
392
+    public static final Integer SEX_FEMALE = 2;
393
+    public static final Integer SEX_UNKNOWN = 3;
394
+    // ------- 性别 end -------
395
+
396
+    // ------- 推荐客户状态 start -------
397
+    // 到访
398
+    public static final Integer RECOMMEND_CUSTOMER_STATUS_ARRIVAL = 1;
399
+    // 签约
400
+    public static final Integer RECOMMEND_CUSTOMER_STATUS_SIGN = 2;
401
+    //
402
+    public static final Integer RECOMMEND_CUSTOMER_STATUS_PRE_ORDER = 2;
403
+    // ------- 推荐客户状态 end -------
404
+
405
+
406
+    // ------- 客户推荐报备状态 start -------
407
+    // 未报备,未推荐
408
+    public static final Integer READY = 0;
409
+    // 已报备
410
+    public static final Integer REPORTED = 1;
411
+    // 已推荐
412
+    public static final Integer RECOMMENDED = 2;
413
+    // ------- 客户推荐报备状态 end -------
414
+
415
+    // ------- 政策发布状态 start -------
416
+    // 已发布
417
+    public static final Integer IS_PUBLISH = 1;
418
+    // 未发布
419
+    public static final Integer NOT_PUBLISH = 0;
420
+    // ------- 政策发布状态 end -------
421
+
422
+    // 公客
423
+    public static final String CUTOMER_TYPE_PUBLIC = "public";
424
+    // 私客
425
+    public static final String CUTOMER_TYPE_PRIVATE = "private";
426
+
427
+
428
+    //项目
429
+    public static final String POSTER_CONTENT_TYPE_BUILDING = "building";
430
+    //活动
431
+    public static final String POSTER_CONTENT_TYPE_ACTIVITY = "activity";
432
+    //资讯
433
+    public static final String POSTER_CONTENT_TYPE_NEWS = "news";
434
+    //人员
435
+    public static final String POSTER_CONTENT_TYPE_PERSON = "person";
436
+
437
+
438
+    public static final String GD_KEY = "c9fc664a9030aed2ec2183508c2ca476";
439
+
440
+    //已参与微信端用
441
+    public static final Integer ACTIVITY_STATUS_PARTNER = 3;
442
+
443
+    //发起者
444
+    public static final String HELP_STATUS_INITIATE = "Initiate";
445
+
446
+    //助力活动
447
+    public static final Object HELP_ACTIVITY = "helpActivity";
448
+
449
+    //分享活动
450
+    public static final Object GROUP_ACTIVITY = "groupActivity";
451
+    public static final String TARGET_TYPE_H5 = "H5";
452
+    public static final String ACTIVITY_QRCODE = "{\"scene\":\"id=#0&type=#1\",\"page\":\"pages/checkin/index\"}";
453
+    public static final String LIVE_ACTIVITY_QRCODE = "{\"scene\":\"id=#0&type=#1\",\"page\":\"onlineSelling/pages/live/index\"}";
454
+    public static final String DRAINAGE_QRCODE = "{\"scene\":\"id=#0&type=#1\",\"page\":\"pages/project/h5Page\"}";
455
+    public static final String HOUSE_QRCODE = "{\"scene\":\"id=#0&type=#1\",\"page\":\"onlineSelling/pages/houseList/index\"}";
456
+
457
+    /**
458
+     * 消息通知
459
+     * 必须存在表   td_miniapp_template_type 中
460
+     */
461
+    public static final String MESSAGE_CONTENT_OF_NOTICE = "notice";
462
+
463
+    /**
464
+     * 需求通知
465
+     * 必须存在表   td_miniapp_template_type 中
466
+     */
467
+    public static final String MESSAGE_CONTENT_OF_DEMAND = "demand";
468
+
469
+    /**
470
+     * 助力通知
471
+     * 必须存在表   td_miniapp_template_type 中
472
+     */
473
+    public static final String MESSAGE_CONTENT_OF_HELP = "help-result";
474
+
475
+    /**
476
+     * 拼团通知
477
+     * 必须存在表   td_miniapp_template_type 中
478
+     */
479
+    public static final String MESSAGE_CONTENT_OF_GROUP = "group-result";
480
+
481
+    /**
482
+     * 审核通知  预选/认筹
483
+     * 必须存在表   td_miniapp_template_type 中
484
+     */
485
+    public static final String MESSAGE_CONTENT_OF_HOUSE = "house";
486
+
487
+    /**
488
+     * 合同签订通知
489
+     * 必须存在表   td_miniapp_template_type 中
490
+     */
491
+    public static final String MESSAGE_CONTRACT_SIGNING = "contract-signing";
492
+
493
+    /**
494
+     * 官网推广
495
+     */
496
+    public static final String MESSAGE_CONTENT_OF_OFFICE_PROMOTION = "office-promotion";
497
+
498
+    /**
499
+     * 活动以结束
500
+     */
501
+    public static final Integer ACTIVITY_STATUS_FINISH = 2;
502
+
503
+    /**
504
+     * 客户统计类型:跟进客户
505
+     */
506
+    public static final String CUSTOMER_TYPE_FOLLOW = "follow";
507
+
508
+    /**
509
+     * 客户统计类型:新增客户
510
+     */
511
+    public static final String CUSTOMER_TYPE_NEW = "new";
512
+
513
+    /**
514
+     * 客户统计类型:到访客户
515
+     */
516
+    public static final String CUSTOMER_TYPE_VISITE = "visite";
517
+
518
+    // =================   项目图片类型 ==============
519
+
520
+    /**
521
+     * 项目banner
522
+     */
523
+    public static final String BUILDING_IMG_BANNER = "banner";
524
+
525
+    /**
526
+     * 项目列表图(现在是用于楼盘封面图)
527
+     */
528
+    public static final String BUILDING_IMG_LIST = "list";
529
+
530
+    /**
531
+     * 视频封面图
532
+     */
533
+    public static final String BUILDING_IMG_VIDEOIMAGE = "videoImage";
534
+
535
+    /**
536
+     * 户型图
537
+     */
538
+    public static final String BUILDING_IMG_APARMENT = "aparment";
539
+
540
+    /**
541
+     * 高德地图url
542
+     */
543
+    public static final String AMAP_HTTP = "https://restapi.amap.com/v3/geocode/regeo";
544
+
545
+    /**
546
+     * 高德地图key
547
+     */
548
+    public static final String AMAP_KEY = "14f05ce59c26364fd0674014dc0d8b1b";
549
+
550
+    /**
551
+     * 埋点类型h5
552
+     */
553
+    public static final String EVENT_H5 = "h5";
554
+
555
+    /**
556
+     * 房源分享
557
+     */
558
+    public static final String HOUSE = "house";
559
+
560
+
561
+    /**
562
+     * 首页分享
563
+     */
564
+    public static final String INDEX = "index";
565
+
566
+
567
+    /**
568
+     * 批量销售
569
+     */
570
+    public static final String SALES_BATCH = "salesBatch";
571
+
572
+    /**
573
+     * 直播分享
574
+     */
575
+    public static final String LIVE = "live";
576
+
577
+    /**
578
+     * 红包类型标识
579
+     */
580
+    public static final String RED_PACKET = "RedPacket";
581
+
582
+    /**
583
+     * 系统参数  通知消息次时间间隔
584
+     */
585
+    public static final String SYSPARAM_NOTICE_MESSAGE_INTERVAL = "notice_message_interval";
586
+
587
+    /**
588
+     * 任一消息, 可以是下面的任意一种
589
+     */
590
+    public static final String MESSAGE_TYPE_OF_SOMEWAY = "someway";
591
+
592
+    /**
593
+     * 短信消息
594
+     */
595
+    public static final String MESSAGE_TYPE_OF_SMS = "sms";
596
+
597
+    /**
598
+     * 小程序订阅消息
599
+     */
600
+    public static final String MESSAGE_TYPE_OF_MINIAPP_SUBSCRIBE = "miniapp_subscribe";
601
+
602
+    /**
603
+     * 小程序模板消息
604
+     */
605
+    public static final String MESSAGE_TYPE_OF_MINIAPP_TEMPLATE = "miniapp_template";
606
+
607
+    /**
608
+     * 进入小程序
609
+     */
610
+    public static final String BIZ_EVENT_START = "start";
611
+
612
+    /**
613
+     * 登录渠道端系统类型
614
+     */
615
+    public static final String LOGIN_TYPE_CHANNEL = "channel";
616
+
617
+    /**
618
+     * 登录业务端系统类型
619
+     */
620
+    public static final String LOGIN_TYPE_ADMIN = "admin";
621
+
622
+
623
+    /**
624
+     * 登录中心端系统类型
625
+     */
626
+    public static final String LOGIN_TYPE_CENTER = "center";
627
+
628
+
629
+    /**
630
+     * 查看分享者活动类型 h5
631
+     */
632
+    public static final String H5_SHARE = "h5_share";
633
+
634
+    /**
635
+     * 查看分享者活动类型 拼团
636
+     */
637
+    public static final String GROUP_SHARE = "group_share";
638
+
639
+    /**
640
+     * 查看分享者活动类型 助力
641
+     */
642
+    public static final String HELP_SHARE = "help_share";
643
+
644
+    /**
645
+     * 查看分享者活动类型 活动
646
+     */
647
+    public static final String DYNAMIC_SHARE = "dynamic_share";
648
+
649
+    /**
650
+     * 户型
651
+     */
652
+    public static final String APARTMENT_TYPR_APART = "apart";
653
+
654
+    /**
655
+     * 户型全景图
656
+     */
657
+    public static final String PANORAMA_TYPE_APARTMENT = "apartment";
658
+
659
+    /**
660
+     * 价格类型 均价
661
+     */
662
+    public static final String PRICE_TYPE_AVERAGE = "average";
663
+
664
+    /**
665
+     * excel后缀
666
+     */
667
+    public static final String SUFFIX_2003 = ".xls";
668
+    public static final String SUFFIX_2007 = ".xlsx";
669
+
670
+    /**
671
+     * 小程序房源详情路径
672
+     */
673
+    public static final String HOUSE_DETAIL_PATH = "onlineSelling/pages/detail/index?id=%s";
674
+
675
+    public static final String RAISE_DETAIL_PATH = "/onlineSelling/pages/raiseProfile/index?id=%s";
676
+
677
+    /**
678
+     * 已锁定
679
+     */
680
+    public static final String HOUSE_LOCKING_STATUS_LOCKED = "locked";
681
+
682
+    /**
683
+     * 未锁定
684
+     */
685
+    public static final String HOUSE_LOCKING_STATUS_UNLOCKED = "unlocked";
686
+
687
+    /**
688
+     * 房源订单
689
+     */
690
+    public static final String ORDER_TARGET_TYPE_HOUSE = "house";
691
+
692
+    /**
693
+     * 自动锁房
694
+     */
695
+    public static final String HOUSE_LOCKING_TYPE_AUTO = "auto";
696
+
697
+    /**
698
+     * 手动锁房
699
+     */
700
+    public static final String HOUSE_LOCKING_TYPE_MANUAL = "manual";
701
+
702
+    /**
703
+     * 正在缴费
704
+     */
705
+    public static final String PAY_STATUS_PAYING = "paying";
706
+
707
+    /**
708
+     * 未缴费
709
+     */
710
+    public static final String PAY_STATUS_UNPAID = "unpaid";
711
+
712
+    /**
713
+     * 已缴费
714
+     */
715
+    public static final String PAY_STATUS_PAID = "paid";
716
+
717
+    /**
718
+     * 已退费
719
+     */
720
+    public static final String PAY_STATUS_REFUNDED = "refunded";
721
+
722
+    /**
723
+     * 退款异常
724
+     */
725
+    public static final String PAY_STATUS_CHANGE = "change";
726
+
727
+
728
+    /**
729
+     * 已经取消支付
730
+     */
731
+    public static final String PAY_STATUS_CANCEL = "cancel";
732
+
733
+    /**
734
+     * 支付超时
735
+     */
736
+    public static final String PAY_STATUS_TIMEOUT = "timeout";
737
+
738
+    /**
739
+     * 最大认筹金额
740
+     */
741
+    public static final Integer MAX_RAISE_PRICE = 5000000;
742
+
743
+    /**
744
+     * 菜单
745
+     */
746
+    public static final Object ADVANCED_TYPE_MENU = "menu";
747
+
748
+    /**
749
+     * 菜单
750
+     */
751
+    public static final Object ADVANCED_TYPE_BUTTON = "button";
752
+
753
+    /**
754
+     * 线下缴费
755
+     */
756
+    public static final String PAY_TYPE_OFFLINE = "offLine";
757
+
758
+    /**
759
+     * 线下缴费
760
+     */
761
+    public static final String PAY_TYPE_ONLINE = "onLine";
762
+
763
+    /**
764
+     * 作废状态
765
+     */
766
+    public static final Integer DEMAND_STATUS_INVALID = 4;
767
+
768
+
769
+    /**
770
+     * 已提交
771
+     */
772
+    public static final Integer DEMAND_STATUS_SUBMIT = 1;
773
+
774
+    /**
775
+     * 样例类型H5
776
+     */
777
+    public static final String NOTICE_TYPE_H5 = "H5";
778
+
779
+    /**
780
+     * 法大大账户类型  2 企业
781
+     */
782
+    public static final String ACCOUNT_TYPE_COMPANY = "2";
783
+
784
+    /**
785
+     * 企业在法大大的状态  已注册
786
+     */
787
+    public static final String CERTIFIED_STATUS_REGISTERED = "registered";
788
+
789
+    /**
790
+     * 企业在法大大的状态  认证中
791
+     */
792
+    public static final String CERTIFIED_STATUS_CERTIFICATION = "certification";
793
+
794
+    /**
795
+     * 企业认证人员的身份 法人
796
+     */
797
+    public static final String COMPANY_MANAGER_TYPE_LEGAL = "legal";
798
+
799
+
800
+    /**
801
+     * 企业认证人员的身份 代理人
802
+     */
803
+    public static final String COMPANY_MANAGER_TYPE_AGENT = "agent";
804
+
805
+    /**
806
+     * 企业认证人员的身份 1 法人
807
+     */
808
+    public static final String COMPANY_PRINCIPAL_TYPE_LEGAL = "1";
809
+
810
+    /**
811
+     * 企业认证人员的身份 2 代理人
812
+     */
813
+    public static final String COMPANY_PRINCIPAL_TYPE_AGENT = "2";
814
+
815
+    /**
816
+     * 授权类型 1自动签
817
+     */
818
+    public static final Integer AUTH_TYPE = 1;
819
+
820
+    /**
821
+     * 合同关联业务类型
822
+     */
823
+    public static final String AUTH = "auth";
824
+
825
+    /**
826
+     * 接口线上授权
827
+     */
828
+    public static final String ONLINEAUTH = "onLine";
829
+
830
+    /**
831
+     * 企业实名状态
832
+     */
833
+    public static final Integer REAL_NAME_STATUS = 4;
834
+
835
+    /**
836
+     * 已授权自动签章
837
+     */
838
+    public static final String AUTO_AUTH_STATUS = "3000";
839
+
840
+    public static final String AUTO_UNAUTH_STATUS = "3001";
841
+
842
+    public static final String AUTH_SUCCESS_DESC = "签章成功";
843
+
844
+    /**
845
+     * 审核通过
846
+     */
847
+    public static final Integer STATUS_VERIFY_PASS = 4;
848
+
849
+    /**
850
+     * 充值操作
851
+     */
852
+    public static final String RECHARGE = "CZ";
853
+
854
+    /**
855
+     * 退款操作
856
+     */
857
+    public static final String REFUND = "TK";
858
+
859
+    /**
860
+     * 明细类型--充值
861
+     */
862
+    public static final String ITEM_TYPE_RECHARGE = "recharge";
863
+
864
+    /**
865
+     * 明细类型--退费
866
+     */
867
+    public static final String ITEM_TYPE_REFUND = "refund";
868
+
869
+    /**
870
+     * 明细类型--退费
871
+     */
872
+    public static final String ITEM_TYPE_REJECT = "reject";
873
+
874
+
875
+    /**
876
+     * 明细类型--红包
877
+     */
878
+    public static final String ITEM_TYPE_REDPACKAGE = "RedPacket";
879
+
880
+    /**
881
+     * 交易状态 成功
882
+     */
883
+    public static final String TRADING_STATUS_SUCCESS = "success";
884
+
885
+    /**
886
+     * 交易状态 失败
887
+     */
888
+    public static final String TRADING_STATUS_FAIL = "fail";
889
+
890
+    /**
891
+     * 交易状态 进行中
892
+     */
893
+    public static final String TRADING_STATUS_PROCESSING = "processing";
894
+
895
+    /**
896
+     * 人员类型---财务
897
+     */
898
+    public static final String CONTACT_FINANCE = "finance";
899
+
900
+    /**
901
+     * 人员类型---售前
902
+     */
903
+    public static final String CONTACT_PRESALE = "pre-sale";
904
+
905
+    /**
906
+     * 审核状态-审核中
907
+     */
908
+    public static final String CHECK_STATUS_CHECKING = "checking";
909
+
910
+    /**
911
+     * 微信商户手续费率
912
+     */
913
+    public static final Double WXMCH_PAY_RATE = 0.01;
914
+
915
+    /**
916
+     * 微信商户手续费率-前端展示
917
+     */
918
+    public static final String WXMCH_PAY_RATE_STRING = "1%";
919
+}

+ 86
- 0
src/main/java/com/huiju/estateagents/common/CommonUtils.java Parādīt failu

@@ -0,0 +1,86 @@
1
+package com.huiju.estateagents.common;
2
+
3
+import java.math.BigDecimal;
4
+import java.text.SimpleDateFormat;
5
+import java.util.Date;
6
+import java.util.Random;
7
+import java.util.UUID;
8
+import java.util.regex.Matcher;
9
+import java.util.regex.Pattern;
10
+
11
+public class CommonUtils {
12
+    /**
13
+     * 金额校验
14
+     *
15
+     * @param str
16
+     * @return
17
+     */
18
+    public static boolean isAmount(String str) {
19
+        Pattern pattern = Pattern.compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); // 判断小数点后2位的数字的正则表达式
20
+        Matcher match = pattern.matcher(str);
21
+        if (match.matches() == false) {
22
+            return false;
23
+        } else {
24
+            return true;
25
+        }
26
+    }
27
+
28
+
29
+    /**
30
+     * 获取uuid
31
+     *
32
+     * @return
33
+     */
34
+    public static String getUUIDS() {
35
+        String uuid = UUID.randomUUID().toString().replace("-", "");
36
+        return uuid;
37
+    }
38
+
39
+    /**
40
+     * 生成订单号
41
+     *
42
+     * @param tradeType
43
+     * @return
44
+     */
45
+    public static String generateTradeNo(String tradeType) {
46
+        String sdf = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
47
+        int randNum = (int) (new Random().nextDouble() * (9999 - 1000 + 1)) + 1000;// 获取5位随机数
48
+        return tradeType + sdf + randNum;
49
+    }
50
+
51
+    /**
52
+     * 元转分
53
+     *
54
+     * @param money
55
+     * @return
56
+     */
57
+    public static Integer yuanToFen(Double money) {
58
+        Double moneyd = money * 100;
59
+        Integer moneyi = moneyd.intValue();
60
+        return moneyi;
61
+    }
62
+
63
+    /**
64
+     * 元转分
65
+     *
66
+     * @param money
67
+     * @return
68
+     */
69
+    public static Double fenToYuan(Integer money) {
70
+        return Double.parseDouble(BigDecimal.valueOf(Long.valueOf(money)).divide(new BigDecimal(100)).toString());
71
+    }
72
+
73
+    /**
74
+     * double减法运算,防止直接相减失去精度
75
+     *
76
+     * @param m1 减数
77
+     * @param m2 被减数
78
+     * @return
79
+     */
80
+    public static Double subDouble(double m1, double m2) {
81
+        BigDecimal p1 = new BigDecimal(Double.toString(m1));
82
+        BigDecimal p2 = new BigDecimal(Double.toString(m2));
83
+        return p1.subtract(p2).doubleValue();
84
+    }
85
+
86
+}

+ 15
- 0
src/main/java/com/huiju/estateagents/common/DBUtils.java Parādīt failu

@@ -0,0 +1,15 @@
1
+package com.huiju.estateagents.common;
2
+
3
+import com.huiju.estateagents.mapper.TaSequenceMapper;
4
+import org.springframework.beans.factory.annotation.Autowired;
5
+import org.springframework.stereotype.Component;
6
+
7
+@Component
8
+public class DBUtils {
9
+    @Autowired
10
+    TaSequenceMapper taSequenceMapper;
11
+
12
+    public Integer nextVal(String seqName) {
13
+        return taSequenceMapper.nextval(seqName);
14
+    }
15
+}

+ 117
- 0
src/main/java/com/huiju/estateagents/common/DateUtils.java Parādīt failu

@@ -0,0 +1,117 @@
1
+package com.huiju.estateagents.common;
2
+
3
+import java.time.Duration;
4
+import java.time.Instant;
5
+import java.time.LocalDateTime;
6
+import java.time.ZoneId;
7
+import java.time.format.DateTimeFormatter;
8
+import java.util.Date;
9
+
10
+public class DateUtils {
11
+    public static LocalDateTime date2LocalDateTime(Date date) {
12
+        Instant instant = date.toInstant();
13
+        ZoneId zone = ZoneId.systemDefault();
14
+        return LocalDateTime.ofInstant(instant, zone);
15
+    }
16
+
17
+    public static boolean sameDay(LocalDateTime d1, LocalDateTime d2) {
18
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
19
+        return d1.format(formatter).equals(d2.format(formatter));
20
+    }
21
+
22
+    public static String cutSecond(LocalDateTime dt) {
23
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
24
+        return dt.format(formatter);
25
+    }
26
+
27
+    public static String today() {
28
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
29
+        return LocalDateTime.now().format(formatter);
30
+    }
31
+
32
+    public static String todayCompact() {
33
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
34
+        return LocalDateTime.now().format(formatter);
35
+    }
36
+
37
+    public static String localDateTimeToString(LocalDateTime d) {
38
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
39
+        return d.format(formatter);
40
+    }
41
+
42
+    public static LocalDateTime day2LocalDateime(String day) {
43
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
44
+        return LocalDateTime.parse(day + " 00:00:00", df);
45
+    }
46
+
47
+    public static LocalDateTime dayToLocalDateime(String day) {
48
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
49
+        return LocalDateTime.parse(day, df);
50
+    }
51
+
52
+    public static boolean checkTimeRange(LocalDateTime start, LocalDateTime end, LocalDateTime dt) {
53
+        if (dt == null) {
54
+            dt = LocalDateTime.now();
55
+        }
56
+
57
+        if (dt.isAfter(start) && dt.isBefore(end)) {
58
+            return true;
59
+        }
60
+        return false;
61
+    }
62
+
63
+    /**
64
+     * 当前时间是否早于指定时间
65
+     *
66
+     * @param target
67
+     * @return
68
+     */
69
+    public static boolean isBefore(String target) {
70
+        LocalDateTime dt = LocalDateTime.now();
71
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
72
+        LocalDateTime targetTime = LocalDateTime.parse(target, df);
73
+        if (dt.isBefore(targetTime)) {
74
+            return true;
75
+        }
76
+        return false;
77
+    }
78
+
79
+    /**
80
+     * 当前时间是否晚于指定时间
81
+     *
82
+     * @param target
83
+     * @return
84
+     */
85
+    public static boolean isAfter(String target) {
86
+        LocalDateTime dt = LocalDateTime.now();
87
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
88
+        LocalDateTime targetTime = LocalDateTime.parse(target, df);
89
+        if (dt.isAfter(targetTime)) {
90
+            return true;
91
+        }
92
+        return false;
93
+    }
94
+
95
+    /**
96
+     * 获取时间差
97
+     *
98
+     * @param dt1
99
+     * @param dt2 目标时间
100
+     * @return
101
+     */
102
+    public static String diffTime(LocalDateTime dt1, LocalDateTime dt2) {
103
+        Duration duration = Duration.between(dt1, dt2);
104
+        long minutes = duration.toMinutes();
105
+        int hours = (int) Math.floor(minutes / 60);
106
+        int minute = (int) minutes % 60;
107
+        int day = (int) Math.floor(hours / 24);
108
+        int hour = hours % 24;
109
+
110
+        return day + "天" + hour + "小时" + minute + "分钟";
111
+    }
112
+
113
+    public static LocalDateTime timeToLocalDateTime(String target){
114
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
115
+        return LocalDateTime.parse(target, df);
116
+    }
117
+}

+ 38
- 0
src/main/java/com/huiju/estateagents/common/ExcelUtils.java Parādīt failu

@@ -0,0 +1,38 @@
1
+package com.huiju.estateagents.common;
2
+
3
+import com.alibaba.excel.EasyExcel;
4
+import com.alibaba.excel.ExcelWriter;
5
+import com.alibaba.excel.write.metadata.WriteSheet;
6
+import com.huiju.estateagents.excel.ConsultantKPIExport;
7
+import com.huiju.estateagents.excel.handler.CustomCellWriteHandler;
8
+
9
+import javax.servlet.http.HttpServletResponse;
10
+import java.io.IOException;
11
+import java.lang.reflect.ParameterizedType;
12
+import java.lang.reflect.Type;
13
+import java.util.List;
14
+
15
+public class ExcelUtils {
16
+
17
+    /**
18
+     * 发送 excel 到客户端
19
+     * 暂时只支持单 sheet 页
20
+     * @param response
21
+     * @param data
22
+     * @param fileName
23
+     * @throws IOException
24
+     */
25
+    public static void flush(HttpServletResponse response, Class dataClass, List data, String fileName) throws IOException {
26
+        response.setContentType("application/octet-stream");
27
+        response.setCharacterEncoding("utf-8");
28
+        response.setHeader("Content-disposition", "attachment;filename="+StringUtils.strToUnicode(fileName)+".xlsx");
29
+
30
+//        ParameterizedType type = (ParameterizedType) data.getClass().getGenericSuperclass();
31
+//        Class dataClass = (Class) type.getActualTypeArguments()[0];
32
+
33
+        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), dataClass).registerWriteHandler(new CustomCellWriteHandler()).build();
34
+        WriteSheet sheet1 = EasyExcel.writerSheet("sheet1").build();
35
+        excelWriter.write(data, sheet1);
36
+        excelWriter.finish();
37
+    }
38
+}

+ 109
- 0
src/main/java/com/huiju/estateagents/common/JWTUtils.java Parādīt failu

@@ -0,0 +1,109 @@
1
+package com.huiju.estateagents.common;
2
+
3
+import io.jsonwebtoken.Jwts;
4
+import io.jsonwebtoken.security.Keys;
5
+
6
+import javax.servlet.http.HttpServletRequest;
7
+import java.security.Key;
8
+import java.util.Calendar;
9
+import java.util.Date;
10
+import java.util.Map;
11
+
12
+/**
13
+ * JWTUtils
14
+ * jwt 辅助类
15
+ * https://github.com/jwtk/jjwt
16
+ */
17
+public class JWTUtils {
18
+    // 直接定义常量是不安全的
19
+    public final static Key key = Keys.hmacShaKeyFor("yansenisahero,2019-5-17 16:18:14".getBytes());
20
+    
21
+    /**
22
+     * getSubject 获取 jwt subject
23
+     * @param request
24
+     * @return
25
+     */
26
+    public static String getSubject(HttpServletRequest request) {
27
+        String jwtHeader = request.getHeader("authorization");
28
+        if (null == jwtHeader || "".equals(jwtHeader.trim())) return null;
29
+
30
+        String[] jwtAuths = jwtHeader.split("Bearer ");
31
+        if (null == jwtAuths || jwtAuths.length < 2) return null;
32
+
33
+        try {
34
+            return Jwts.parser().setSigningKey(key).parseClaimsJws(jwtAuths[1]).getBody().getSubject();
35
+        } catch (Exception e) {
36
+            e.printStackTrace();
37
+        }
38
+
39
+        return null;
40
+    }
41
+    
42
+    /**
43
+     * getSubject 获取 jwt subject
44
+     * @param request
45
+     * @return
46
+     */
47
+    public static Map getUserIdAndOrgId(HttpServletRequest request) {
48
+        String jwtHeader = request.getHeader("authorization");
49
+        if (null == jwtHeader || "".equals(jwtHeader.trim())) return null;
50
+        
51
+        String[] jwtAuths = jwtHeader.split("Bearer ");
52
+        if (null == jwtAuths || jwtAuths.length < 2) return null;
53
+        
54
+        try {
55
+            return Jwts.parser().setSigningKey(key).parseClaimsJws(jwtAuths[1]).getBody();
56
+        } catch (Exception e) {
57
+            e.printStackTrace();
58
+        }
59
+        
60
+        return null;
61
+    }
62
+    
63
+    /**
64
+     * getSubject 获取 jwt subject
65
+     * @param request
66
+     * @return
67
+     */
68
+    public static String getToken(HttpServletRequest request) {
69
+        String jwtHeader = request.getHeader("authorization");
70
+        if (null == jwtHeader || "".equals(jwtHeader.trim())) {
71
+            return null;
72
+        }
73
+        
74
+        String[] jwtAuths = jwtHeader.split("Bearer ");
75
+        if (null == jwtAuths || jwtAuths.length < 2) {
76
+            return null;
77
+        }
78
+        
79
+        
80
+        return jwtAuths[1];
81
+    }
82
+
83
+    /**
84
+     * newToken 生成新的 token
85
+     * @param subject
86
+     * @return
87
+     */
88
+    public static String newToken(String subject) {
89
+        // 有效期 7 天
90
+        Calendar calendar = Calendar.getInstance();
91
+        calendar.setTime(new Date());
92
+        calendar.set(Calendar.DAY_OF_MONTH,calendar.get(Calendar.DAY_OF_MONTH)+7);
93
+        return Jwts.builder().setSubject(subject).setExpiration(calendar.getTime()).signWith(key).compact();
94
+    }
95
+    
96
+    /**
97
+     * newToken 生成新的 token
98
+     * @param subject
99
+     * @return
100
+     */
101
+    public static String newTokenByMap(Map subject) {
102
+        // 有效期 7 天
103
+        Calendar calendar = Calendar.getInstance();
104
+        calendar.setTime(new Date());
105
+        calendar.set(Calendar.DAY_OF_MONTH,calendar.get(Calendar.DAY_OF_MONTH)+7);
106
+
107
+        return Jwts.builder().setClaims(subject).setExpiration(calendar.getTime()).signWith(key).compact();
108
+    }
109
+}

+ 16
- 0
src/main/java/com/huiju/estateagents/common/MD5Utils.java Parādīt failu

@@ -0,0 +1,16 @@
1
+package com.huiju.estateagents.common;
2
+
3
+import org.springframework.util.DigestUtils;
4
+
5
+public class MD5Utils {
6
+    public static String md5(String str, String ...slats) {
7
+        String slat = "";
8
+        if (null != slats && slats.length > 0) {
9
+            slat = slats[0];
10
+        }
11
+
12
+        String base = str + slat;
13
+        String md5 = DigestUtils.md5DigestAsHex(base.getBytes());
14
+        return md5;
15
+    }
16
+}

+ 90
- 0
src/main/java/com/huiju/estateagents/common/MiniAppPageEnum.java Parādīt failu

@@ -0,0 +1,90 @@
1
+package com.huiju.estateagents.common;
2
+
3
+/**
4
+ * 小程序页面枚举
5
+ *
6
+ * @author gusy
7
+ * @date 2020/5/21 15:58
8
+ */
9
+public enum MiniAppPageEnum {
10
+
11
+    /**
12
+     * 项目
13
+     */
14
+    PROJECT("project", "id=%s&targetType=%S&channelId=%s&qrCodeId=%s&buildingId=%s", "pages/project/detail/index"),
15
+
16
+    /**
17
+     * 报名活动
18
+     */
19
+    ACTIVITY("activity", "id=%s&targetType=%S&channelId=%s&qrCodeId=%s&buildingId=%s", "pages/activity/detail/index"),
20
+
21
+    /**
22
+     * 助力活动
23
+     */
24
+    HELP("help", "id=%s&targetType=%S&channelId=%s&qrCodeId=%s&buildingId=%s", "pages/activity/detail/assistance"),
25
+
26
+    /**
27
+     * 拼团活动
28
+     */
29
+    GROUP("group", "id=%s&targetType=%S&channelId=%s&qrCodeId=%s&buildingId=%s", "pages/activity/detail/assemble"),
30
+
31
+    /**
32
+     * h5活动
33
+     */
34
+    H5("h5", "id=%s&targetType=%S&channelId=%s&qrCodeId=%s&buildingId=%s", "pages/project/h5Page"),
35
+
36
+    /**
37
+     * 直播活动
38
+     */
39
+    LIVE("live", "id=%s&targetType=%S&channelId=%s&qrCodeId=%s&buildingId=%s", "onlineSelling/pages/live/index"),
40
+
41
+    /**
42
+     * 资讯
43
+     */
44
+    NEWS("news", "id=%s&targetType=%S&channelId=%s&qrCodeId=%s&buildingId=%s", "pages/news/detail/index"),
45
+
46
+    /**
47
+     * 在线选房
48
+     */
49
+    SALESBATCH("salesBatch", "id=%s&targetType=%S&channelId=%s&qrCodeId=%s&buildingId=%s", "onlineSelling/pages/houseList/index");
50
+
51
+    private String type;
52
+    private String scene;
53
+    private String page;
54
+
55
+    MiniAppPageEnum(String type, String scene, String page) {
56
+        this.type = type;
57
+        this.scene = scene;
58
+        this.page = page;
59
+    }
60
+
61
+    public String getType() {
62
+        return type;
63
+    }
64
+
65
+    public String getScene() {
66
+        return scene;
67
+    }
68
+
69
+    public String getPage() {
70
+        return page;
71
+    }
72
+
73
+    public static String getSceneByType(String type) {
74
+        for (MiniAppPageEnum pageEnum : MiniAppPageEnum.values()) {
75
+            if (type.equals(pageEnum.getType())) {
76
+                return pageEnum.getScene();
77
+            }
78
+        }
79
+        return null;
80
+    }
81
+
82
+    public static String getPageByType(String type) {
83
+        for (MiniAppPageEnum pageEnum : MiniAppPageEnum.values()) {
84
+            if (type.equals(pageEnum.getType())) {
85
+                return pageEnum.getPage();
86
+            }
87
+        }
88
+        return null;
89
+    }
90
+}

+ 18
- 0
src/main/java/com/huiju/estateagents/common/NumberUtils.java Parādīt failu

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.common;
2
+
3
+import java.math.BigDecimal;
4
+
5
+public class NumberUtils {
6
+    /**
7
+     * 元转分(乘以100)
8
+     * @param amount 金额 分(支持大数字,16位以上)
9
+     * @return
10
+     */
11
+    public static Integer yuanToFen(String amount){
12
+        return new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
13
+    }
14
+
15
+    public static String  fenToYuan(String price) {
16
+        return BigDecimal.valueOf(Long.valueOf(price)).divide(new BigDecimal(100)).toString();
17
+    }
18
+}

+ 165
- 0
src/main/java/com/huiju/estateagents/common/SMSUtils.java Parādīt failu

@@ -0,0 +1,165 @@
1
+package com.huiju.estateagents.common;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.huiju.estateagents.config.SMSProperties;
5
+import com.huiju.estateagents.entity.SysSmsSetting;
6
+import com.huiju.estateagents.mapper.SysSmsSettingMapper;
7
+import lombok.Data;
8
+import lombok.extern.slf4j.Slf4j;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
11
+import org.springframework.context.annotation.Configuration;
12
+import org.springframework.http.*;
13
+import org.springframework.web.client.RestTemplate;
14
+
15
+import java.time.LocalDateTime;
16
+import java.util.*;
17
+
18
+@Slf4j
19
+@Configuration
20
+@EnableConfigurationProperties(SMSProperties.class)
21
+public class SMSUtils {
22
+    // 短信服务配置
23
+    SMSProperties smsProperties;
24
+
25
+    Hashtable<String, Phone> allPhones;
26
+
27
+    @Autowired
28
+    SysSmsSettingMapper sysSmsSettingMapper;
29
+
30
+    @Autowired
31
+    public SMSUtils(SMSProperties properties) {
32
+        smsProperties = properties;
33
+        allPhones = new Hashtable<>();
34
+    }
35
+
36
+    /**
37
+     * 发送验证码到 tel
38
+     * @param tel
39
+     * @return
40
+     */
41
+    public boolean sendCaptcha(String tel) {
42
+        Phone phone = allPhones.get(tel);
43
+        if (null == phone) {
44
+            phone = new Phone();
45
+            phone.setTel(tel);
46
+        }
47
+
48
+        phone.setCaptcha(genCaptcha(smsProperties.getCaptcha().getSize()));
49
+        phone.setExpire(LocalDateTime.now().plusSeconds(smsProperties.getCaptcha().getExpire()));
50
+        allPhones.put(tel, phone);
51
+
52
+        log.info("发送手机 {} 验证码 {}", tel, phone.getCaptcha());
53
+
54
+        String[] params = { phone.getCaptcha(), smsProperties.getCaptcha().getSign() };
55
+        return sendMessage(smsProperties.getCaptcha().getCode(), tel, params);
56
+    }
57
+
58
+    /**
59
+     * 校验验证码
60
+     * @param tel
61
+     * @param smsCaptcha
62
+     * @return
63
+     */
64
+    public boolean checkCaptcha(String tel, String smsCaptcha) {
65
+        Phone phone = allPhones.get(tel);
66
+        if (null == phone) {
67
+            log.error("手机号 {} 的验证码未找到", tel);
68
+            return false;
69
+        }
70
+
71
+        if (null == smsCaptcha || !smsCaptcha.equals(phone.getCaptcha())) {
72
+            log.error("手机号 {} 校验验证码出错, 正确: {}, 错误: {}", tel, phone.getCaptcha(), smsCaptcha);
73
+            return false;
74
+        }
75
+
76
+        LocalDateTime now = LocalDateTime.now();
77
+        if (now.isAfter(phone.getExpire())) {
78
+            log.error("手机号 {} 的验证码已过期", tel);
79
+            return false;
80
+        }
81
+
82
+        // 如果验证成功, 则从缓存中删除
83
+        allPhones.remove(tel);
84
+        return true;
85
+    }
86
+
87
+    public boolean sendVisitor(String tel, String name) {
88
+        log.info("发送手机 {} 客户名称 {}", tel, name);
89
+
90
+        String[] params = { name };
91
+        return sendMessage(smsProperties.getVisitor().getCode(), tel, params);
92
+    }
93
+
94
+    private String genCaptcha(int length) {
95
+        List<String> nums = new ArrayList<>();
96
+        for (int i = 0; i < length; i ++) {
97
+            int rand = (new Random()).nextInt(10);
98
+            nums.add(String.valueOf(rand));
99
+        }
100
+        return String.join("", nums);
101
+    }
102
+
103
+    public boolean sendMessage(String code, String tel, String[] params) {
104
+        // 发送内容
105
+        SMSProperties.Template message = new SMSProperties.Template();
106
+        message.setCode(code);
107
+        message.setTel(tel);
108
+        message.setParams(params);
109
+
110
+        // 构造 request
111
+        HttpHeaders headers = new HttpHeaders();
112
+        headers.setContentType(MediaType.parseMediaType(smsProperties.getContentType()));
113
+//        String body = JSONObject.toJSONString(message);
114
+        HttpMethod method = HttpMethod.resolve(smsProperties.getMethod());
115
+        HttpEntity requestEntity = new HttpEntity(message, headers);
116
+
117
+        RestTemplate template = new RestTemplate();
118
+        HttpEntity<String> response = template.exchange(
119
+                smsProperties.getUrl(),
120
+                method,
121
+                requestEntity,
122
+                String.class,
123
+                new Object()
124
+        );
125
+
126
+        if (((ResponseEntity<String>) response).getStatusCodeValue() != HttpStatus.OK.value()) {
127
+            log.error("请求发送短信失败: {}", response.toString());
128
+            return false;
129
+        }
130
+
131
+        return true;
132
+    }
133
+
134
+    public void sendMessage(String tel, List<String> params, String type) throws Exception {
135
+        if (StringUtils.isEmpty(tel) || StringUtils.isEmpty(type)) {
136
+            throw new Exception("短信发送失败: 没有手机号或者短信模板");
137
+        }
138
+
139
+        QueryWrapper<SysSmsSetting> query = new QueryWrapper<>();
140
+        query.eq("sms_type", type);
141
+        query.eq("status", CommConstant.STATUS_NORMAL);
142
+        query.last("limit 1");
143
+
144
+        SysSmsSetting smsSetting = sysSmsSettingMapper.selectOne(query);
145
+        if (null == smsSetting) {
146
+            throw new Exception("没有设置有效的【" + type + "】短信模板");
147
+        }
148
+
149
+        params.add("橙蕉"); // 短信签名
150
+        String[] paramArr = new String[params.size()];
151
+        params.toArray(paramArr);
152
+
153
+        boolean success = sendMessage(smsSetting.getTplCode(), tel, paramArr);
154
+        if (!success) {
155
+            throw new Exception("短信发送失败");
156
+        }
157
+    }
158
+
159
+    @Data
160
+    public static class Phone {
161
+        String tel;
162
+        String captcha;
163
+        LocalDateTime expire;
164
+    }
165
+}

+ 72
- 0
src/main/java/com/huiju/estateagents/common/StringConverter.java Parādīt failu

@@ -0,0 +1,72 @@
1
+package com.huiju.estateagents.common;
2
+
3
+import jodd.typeconverter.TypeConversionException;
4
+import jodd.typeconverter.TypeConverter;
5
+import jodd.util.ArraysUtil;
6
+
7
+import java.sql.Clob;
8
+import java.sql.SQLException;
9
+import java.util.Date;
10
+
11
+public class StringConverter implements TypeConverter<String> {
12
+
13
+    public String convert(Object value) {
14
+        if (value == null) {
15
+            return null;
16
+        }
17
+
18
+        if (value instanceof CharSequence) { // for speed
19
+            return value.toString();
20
+        }
21
+        Class<?> type = value.getClass();
22
+        if (type == Class.class) {
23
+            return ((Class<?>) value).getName();
24
+        }
25
+        if (type.isArray()) {
26
+            if (type == char[].class) {
27
+                char[] charArray = (char[]) value;
28
+                return new String(charArray);
29
+            }
30
+            if (type == int[].class) {
31
+                return ArraysUtil.toString((int[]) value);
32
+            }
33
+            if (type == long[].class) {
34
+                return ArraysUtil.toString((long[]) value);
35
+            }
36
+            if (type == byte[].class) {
37
+                return ArraysUtil.toString((byte[]) value);
38
+            }
39
+            if (type == float[].class) {
40
+                return ArraysUtil.toString((float[]) value);
41
+            }
42
+            if (type == double[].class) {
43
+                return ArraysUtil.toString((double[]) value);
44
+            }
45
+            if (type == short[].class) {
46
+                return ArraysUtil.toString((short[]) value);
47
+            }
48
+            if (type == boolean[].class) {
49
+                return ArraysUtil.toString((boolean[]) value);
50
+            }
51
+            return ArraysUtil.toString((Object[]) value);
52
+        }
53
+        if (value instanceof Clob) {
54
+            Clob clob = (Clob) value;
55
+            try {
56
+                long length = clob.length();
57
+                if (length > Integer.MAX_VALUE) {
58
+                    throw new TypeConversionException("Clob is too big.");
59
+                }
60
+                return clob.getSubString(1, (int) length);
61
+            } catch (SQLException sex) {
62
+                throw new TypeConversionException(value, sex);
63
+            }
64
+        }
65
+        if (value instanceof Date) {
66
+            java.text.DateFormat format1 = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
67
+            return format1.format(value);
68
+        }
69
+
70
+        return value.toString();
71
+    }
72
+}

+ 108
- 0
src/main/java/com/huiju/estateagents/common/StringUtils.java Parādīt failu

@@ -0,0 +1,108 @@
1
+package com.huiju.estateagents.common;
2
+
3
+import java.io.UnsupportedEncodingException;
4
+import java.net.URLEncoder;
5
+import java.util.Random;
6
+import java.util.regex.Matcher;
7
+import java.util.regex.Pattern;
8
+
9
+public class StringUtils {
10
+    private static Pattern humpPattern = Pattern.compile("[A-Z]");
11
+
12
+    public static boolean isEmpty(String str) {
13
+        return null == str || "".equals(str.trim()) || "null".equals(str) || "undefined".equals(str);
14
+    }
15
+
16
+    public static String trim(String src, String ...st) {
17
+        if (null == src) return src;
18
+        if (null == st || st.length == 0) return src.trim();
19
+
20
+        String start = st[0];
21
+        if (!src.startsWith(start)) {
22
+            return src;
23
+        }
24
+
25
+        return src.substring(start.length());
26
+    }
27
+
28
+    public static String ifNull(String src, String defaultVal) {
29
+        return isEmpty(src) ? defaultVal : src;
30
+    }
31
+
32
+    public static String random(int length) {
33
+        String str="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
34
+        Random random = new Random();
35
+        StringBuffer sb = new StringBuffer();
36
+        for(int i=0;i<length;i++){
37
+            int number=random.nextInt(62);
38
+            sb.append(str.charAt(number));
39
+        }
40
+        return sb.toString();
41
+    }
42
+
43
+    public static String urlEncode(String str) {
44
+        try {
45
+            return URLEncoder.encode(str, "UTF-8");
46
+        } catch (UnsupportedEncodingException e) {
47
+            e.printStackTrace();
48
+            return str;
49
+        }
50
+    }
51
+
52
+    public static String humpToLine(String str) {
53
+        if (null == str || "".equals(str)) return "";
54
+
55
+        Matcher matcher = humpPattern.matcher(str);
56
+        StringBuffer sb = new StringBuffer();
57
+        while (matcher.find()) {
58
+            matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
59
+        }
60
+        matcher.appendTail(sb);
61
+        return sb.toString();
62
+    }
63
+
64
+    public static String strToUnicode(String str) {
65
+        char[] chars = str.toCharArray();
66
+        String returnStr = "";
67
+        for (int i = 0; i < chars.length; i++) {
68
+            returnStr += "\\u" + Integer.toString(chars[i], 16);
69
+        }
70
+        return returnStr;
71
+    }
72
+
73
+    public static String repeat(String src, int len) {
74
+        if (null == src) {
75
+            return null;
76
+        }
77
+
78
+        if (len <= 0) {
79
+            return src;
80
+        }
81
+
82
+        String res = "";
83
+        for (int i = 0; i < len; i ++) {
84
+            res += src;
85
+        }
86
+
87
+        return res;
88
+    }
89
+
90
+    public static String lpad(String src, String padStr, int len) {
91
+        if (null == src) {
92
+            return null;
93
+        }
94
+
95
+        if (len <= 0 || src.length() >= len) {
96
+            return src;
97
+        }
98
+
99
+        if (null == padStr) {
100
+            padStr = "";
101
+        }
102
+
103
+        int padLen = len - src.length();
104
+        String prefix = repeat(padStr, padLen);
105
+        prefix = prefix.substring(0, padLen);
106
+        return prefix + src;
107
+    }
108
+}

+ 33
- 0
src/main/java/com/huiju/estateagents/common/WxQrCodeUtils.java Parādīt failu

@@ -0,0 +1,33 @@
1
+package com.huiju.estateagents.common;
2
+
3
+import com.alibaba.fastjson.JSONObject;
4
+import org.apache.commons.lang3.StringUtils;
5
+
6
+/**
7
+ * 微信二维码生成工具类
8
+ *
9
+ * @author gusy
10
+ * @date 2020/5/21 15:40
11
+ */
12
+public class WxQrCodeUtils {
13
+
14
+    /**
15
+     * 生成scene和页面
16
+     *
17
+     * @param type
18
+     * @param scene  为空则使用配置的通用模板
19
+     * @param params scene为空是必须按照模板内容填写
20
+     * @return
21
+     */
22
+    public static String generateSceneAndPage(String type, String scene, String... params) {
23
+        if (StringUtils.isBlank(scene)) {
24
+            String sceneTemplate = MiniAppPageEnum.getSceneByType(type);
25
+            scene = String.format(sceneTemplate, params);
26
+        }
27
+
28
+        JSONObject obj = new JSONObject();
29
+        obj.put("scene", scene);
30
+        obj.put("page", MiniAppPageEnum.getPageByType(type));
31
+        return obj.toJSONString();
32
+    }
33
+}

+ 59
- 0
src/main/java/com/huiju/estateagents/common/WxUtils.java Parādīt failu

@@ -0,0 +1,59 @@
1
+package com.huiju.estateagents.common;
2
+
3
+import cn.binarywang.wx.miniapp.api.WxMaService;
4
+import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
5
+import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
6
+import com.huiju.estateagents.entity.TaMiniapp;
7
+import com.huiju.estateagents.service.IMiniAppService;
8
+import org.springframework.beans.factory.annotation.Autowired;
9
+import org.springframework.stereotype.Component;
10
+
11
+import javax.annotation.PostConstruct;
12
+import java.util.List;
13
+import java.util.concurrent.ConcurrentHashMap;
14
+
15
+@Component
16
+public class WxUtils {
17
+    private ConcurrentHashMap<String, WxMaService> serives = new ConcurrentHashMap();
18
+
19
+    @Autowired
20
+    IMiniAppService iMiniAppService;
21
+
22
+    public WxMaService getMiniApp(String appid) {
23
+        return serives.get(appid);
24
+    }
25
+
26
+    @PostConstruct
27
+    public void init() {
28
+        System.out.println("-------------PostConstruct----------------");
29
+
30
+        List<TaMiniapp> taMiniappList = iMiniAppService.getAllAvaliableMiniapps();
31
+        if (null == taMiniappList) {
32
+            return;
33
+        }
34
+
35
+        for (TaMiniapp taMiniapp : taMiniappList) {
36
+            WxMaService service = newService(taMiniapp);
37
+            serives.put(taMiniapp.getMiniappId(), service);
38
+        }
39
+    }
40
+
41
+    public WxMaService newService(TaMiniapp taMiniapp, boolean ...changeServices) {
42
+        WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
43
+        config.setAppid(taMiniapp.getMiniappId());
44
+        config.setSecret(taMiniapp.getSecret());
45
+        config.setToken(taMiniapp.getToken());
46
+        config.setAesKey(taMiniapp.getAesKey());
47
+        config.setMsgDataFormat("JSON");
48
+
49
+        WxMaService service = new WxMaServiceImpl();
50
+        service.setWxMaConfig(config);
51
+
52
+        if (changeServices.length > 0 && changeServices[0]) {
53
+            serives.remove(taMiniapp.getMiniappId());
54
+            serives.put(taMiniapp.getMiniappId(), service);
55
+        }
56
+
57
+        return service;
58
+    }
59
+}

+ 42
- 0
src/main/java/com/huiju/estateagents/common/wxpay/IWXPayDomain.java Parādīt failu

@@ -0,0 +1,42 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+/**
4
+ * 域名管理,实现主备域名自动切换
5
+ */
6
+public abstract interface IWXPayDomain {
7
+    /**
8
+     * 上报域名网络状况
9
+     * @param domain 域名。 比如:api.mch.weixin.qq.com
10
+     * @param elapsedTimeMillis 耗时
11
+     * @param ex 网络请求中出现的异常。
12
+     *           null表示没有异常
13
+     *           ConnectTimeoutException,表示建立网络连接异常
14
+     *           UnknownHostException, 表示dns解析异常
15
+     */
16
+    abstract void report(final String domain, long elapsedTimeMillis, final Exception ex);
17
+
18
+    /**
19
+     * 获取域名
20
+     * @param config 配置
21
+     * @return 域名
22
+     */
23
+    abstract DomainInfo getDomain(final WXPayConfig config);
24
+
25
+    static class DomainInfo{
26
+        public String domain;       //域名
27
+        public boolean primaryDomain;     //该域名是否为主域名。例如:api.mch.weixin.qq.com为主域名
28
+        public DomainInfo(String domain, boolean primaryDomain) {
29
+            this.domain = domain;
30
+            this.primaryDomain = primaryDomain;
31
+        }
32
+
33
+        @Override
34
+        public String toString() {
35
+            return "DomainInfo{" +
36
+                    "domain='" + domain + '\'' +
37
+                    ", primaryDomain=" + primaryDomain +
38
+                    '}';
39
+        }
40
+    }
41
+
42
+}

+ 689
- 0
src/main/java/com/huiju/estateagents/common/wxpay/WXPay.java Parādīt failu

@@ -0,0 +1,689 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+
4
+import java.util.HashMap;
5
+import java.util.Map;
6
+import com.huiju.estateagents.common.wxpay.WXPayConstants.SignType;
7
+
8
+public class WXPay {
9
+
10
+    private WXPayConfig config;
11
+    private SignType signType;
12
+    private boolean autoReport;
13
+    private boolean useSandbox;
14
+    private String notifyUrl;
15
+    private WXPayRequest wxPayRequest;
16
+
17
+    public WXPay(final WXPayConfig config) throws Exception {
18
+        this(config, null, true, false);
19
+    }
20
+
21
+    public WXPay(final WXPayConfig config, final boolean autoReport) throws Exception {
22
+        this(config, null, autoReport, false);
23
+    }
24
+
25
+
26
+    public WXPay(final WXPayConfig config, final boolean autoReport, final boolean useSandbox) throws Exception{
27
+        this(config, null, autoReport, useSandbox);
28
+    }
29
+
30
+    public WXPay(final WXPayConfig config, final String notifyUrl) throws Exception {
31
+        this(config, notifyUrl, true, false);
32
+    }
33
+
34
+    public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport) throws Exception {
35
+        this(config, notifyUrl, autoReport, false);
36
+    }
37
+
38
+    public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport, final boolean useSandbox) throws Exception {
39
+        this.config = config;
40
+        this.notifyUrl = notifyUrl;
41
+        this.autoReport = autoReport;
42
+        this.useSandbox = useSandbox;
43
+        //if (useSandbox) {
44
+            this.signType = SignType.MD5;
45
+        //}
46
+        //else {
47
+        //    this.signType = SignType.HMACSHA256;
48
+        //}
49
+        this.wxPayRequest = new WXPayRequest(config);
50
+    }
51
+
52
+    private void checkWXPayConfig() throws Exception {
53
+        if (this.config == null) {
54
+            throw new Exception("config is null");
55
+        }
56
+        if (this.config.getAppID() == null || this.config.getAppID().trim().length() == 0) {
57
+            throw new Exception("appid in config is empty");
58
+        }
59
+        if (this.config.getMchID() == null || this.config.getMchID().trim().length() == 0) {
60
+            throw new Exception("appid in config is empty");
61
+        }
62
+        if (this.config.getCertStream() == null) {
63
+            throw new Exception("cert stream in config is empty");
64
+        }
65
+        if (this.config.getWXPayDomain() == null){
66
+            throw new Exception("config.getWXPayDomain() is null");
67
+        }
68
+
69
+        if (this.config.getHttpConnectTimeoutMs() < 10) {
70
+            throw new Exception("http connect timeout is too small");
71
+        }
72
+        if (this.config.getHttpReadTimeoutMs() < 10) {
73
+            throw new Exception("http read timeout is too small");
74
+        }
75
+
76
+    }
77
+
78
+    /**
79
+     * 向 Map 中添加 appid、mch_id、nonce_str、sign_type、sign <br>
80
+     * 该函数适用于商户适用于统一下单等接口,不适用于红包、代金券接口
81
+     *
82
+     * @param reqData
83
+     * @return
84
+     * @throws Exception
85
+     */
86
+    public Map<String, String> fillRequestData(Map<String, String> reqData) throws Exception {
87
+        reqData.put("appid", config.getAppID());
88
+        reqData.put("mch_id", config.getMchID());
89
+        reqData.put("nonce_str", WXPayUtil.generateNonceStr());
90
+        if (SignType.MD5.equals(this.signType)) {
91
+            reqData.put("sign_type", WXPayConstants.MD5);
92
+        }
93
+        else if (SignType.HMACSHA256.equals(this.signType)) {
94
+            reqData.put("sign_type", WXPayConstants.HMACSHA256);
95
+        }
96
+        reqData.put("sign", WXPayUtil.generateSignature(reqData, config.getKey(), this.signType));
97
+        return reqData;
98
+    }
99
+
100
+    /**
101
+     * 判断xml数据的sign是否有效,必须包含sign字段,否则返回false。
102
+     *
103
+     * @param reqData 向wxpay post的请求数据
104
+     * @return 签名是否有效
105
+     * @throws Exception
106
+     */
107
+    public boolean isResponseSignatureValid(Map<String, String> reqData) throws Exception {
108
+        // 返回数据的签名方式和请求中给定的签名方式是一致的
109
+        return WXPayUtil.isSignatureValid(reqData, this.config.getKey(), this.signType);
110
+    }
111
+
112
+    /**
113
+     * 判断支付结果通知中的sign是否有效
114
+     *
115
+     * @param reqData 向wxpay post的请求数据
116
+     * @return 签名是否有效
117
+     * @throws Exception
118
+     */
119
+    public boolean isPayResultNotifySignatureValid(Map<String, String> reqData) throws Exception {
120
+        String signTypeInData = reqData.get(WXPayConstants.FIELD_SIGN_TYPE);
121
+        SignType signType;
122
+        if (signTypeInData == null) {
123
+            signType = SignType.MD5;
124
+        }
125
+        else {
126
+            signTypeInData = signTypeInData.trim();
127
+            if (signTypeInData.length() == 0) {
128
+                signType = SignType.MD5;
129
+            }
130
+            else if (WXPayConstants.MD5.equals(signTypeInData)) {
131
+                signType = SignType.MD5;
132
+            }
133
+            else if (WXPayConstants.HMACSHA256.equals(signTypeInData)) {
134
+                signType = SignType.HMACSHA256;
135
+            }
136
+            else {
137
+                throw new Exception(String.format("Unsupported sign_type: %s", signTypeInData));
138
+            }
139
+        }
140
+        return WXPayUtil.isSignatureValid(reqData, this.config.getKey(), signType);
141
+    }
142
+
143
+
144
+    /**
145
+     * 不需要证书的请求
146
+     * @param urlSuffix String
147
+     * @param reqData 向wxpay post的请求数据
148
+     * @param connectTimeoutMs 超时时间,单位是毫秒
149
+     * @param readTimeoutMs 超时时间,单位是毫秒
150
+     * @return API返回数据
151
+     * @throws Exception
152
+     */
153
+    public String requestWithoutCert(String urlSuffix, Map<String, String> reqData,
154
+                                     int connectTimeoutMs, int readTimeoutMs) throws Exception {
155
+        String msgUUID = reqData.get("nonce_str");
156
+        String reqBody = WXPayUtil.mapToXml(reqData);
157
+
158
+        String resp = this.wxPayRequest.requestWithoutCert(urlSuffix, msgUUID, reqBody, connectTimeoutMs, readTimeoutMs, autoReport);
159
+        return resp;
160
+    }
161
+
162
+
163
+    /**
164
+     * 需要证书的请求
165
+     * @param urlSuffix String
166
+     * @param reqData 向wxpay post的请求数据  Map
167
+     * @param connectTimeoutMs 超时时间,单位是毫秒
168
+     * @param readTimeoutMs 超时时间,单位是毫秒
169
+     * @return API返回数据
170
+     * @throws Exception
171
+     */
172
+    public String requestWithCert(String urlSuffix, Map<String, String> reqData,
173
+                                  int connectTimeoutMs, int readTimeoutMs) throws Exception {
174
+        String msgUUID= reqData.get("nonce_str");
175
+        String reqBody = WXPayUtil.mapToXml(reqData);
176
+
177
+        String resp = this.wxPayRequest.requestWithCert(urlSuffix, msgUUID, reqBody, connectTimeoutMs, readTimeoutMs, this.autoReport);
178
+        return resp;
179
+    }
180
+
181
+    /**
182
+     * 处理 HTTPS API返回数据,转换成Map对象。return_code为SUCCESS时,验证签名。
183
+     * @param xmlStr API返回的XML格式数据
184
+     * @return Map类型数据
185
+     * @throws Exception
186
+     */
187
+    public Map<String, String> processResponseXml(String xmlStr) throws Exception {
188
+        String RETURN_CODE = "return_code";
189
+        String return_code;
190
+        Map<String, String> respData = WXPayUtil.xmlToMap(xmlStr);
191
+        if (respData.containsKey(RETURN_CODE)) {
192
+            return_code = respData.get(RETURN_CODE);
193
+        }
194
+        else {
195
+            throw new Exception(String.format("No `return_code` in XML: %s", xmlStr));
196
+        }
197
+
198
+        if (return_code.equals(WXPayConstants.FAIL)) {
199
+            return respData;
200
+        }
201
+        else if (return_code.equals(WXPayConstants.SUCCESS)) {
202
+           if (this.isResponseSignatureValid(respData)) {
203
+               return respData;
204
+           }
205
+           else {
206
+               throw new Exception(String.format("Invalid sign value in XML: %s", xmlStr));
207
+           }
208
+        }
209
+        else {
210
+            throw new Exception(String.format("return_code value %s is invalid in XML: %s", return_code, xmlStr));
211
+        }
212
+    }
213
+
214
+    /**
215
+     * 作用:提交刷卡支付<br>
216
+     * 场景:刷卡支付
217
+     * @param reqData 向wxpay post的请求数据
218
+     * @return API返回数据
219
+     * @throws Exception
220
+     */
221
+    public Map<String, String> microPay(Map<String, String> reqData) throws Exception {
222
+        return this.microPay(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
223
+    }
224
+
225
+
226
+    /**
227
+     * 作用:提交刷卡支付<br>
228
+     * 场景:刷卡支付
229
+     * @param reqData 向wxpay post的请求数据
230
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
231
+     * @param readTimeoutMs 读超时时间,单位是毫秒
232
+     * @return API返回数据
233
+     * @throws Exception
234
+     */
235
+    public Map<String, String> microPay(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
236
+        String url;
237
+        if (this.useSandbox) {
238
+            url = WXPayConstants.SANDBOX_MICROPAY_URL_SUFFIX;
239
+        }
240
+        else {
241
+            url = WXPayConstants.MICROPAY_URL_SUFFIX;
242
+        }
243
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
244
+        return this.processResponseXml(respXml);
245
+    }
246
+
247
+    /**
248
+     * 提交刷卡支付,针对软POS,尽可能做成功
249
+     * 内置重试机制,最多60s
250
+     * @param reqData
251
+     * @return
252
+     * @throws Exception
253
+     */
254
+    public Map<String, String> microPayWithPos(Map<String, String> reqData) throws Exception {
255
+        return this.microPayWithPos(reqData, this.config.getHttpConnectTimeoutMs());
256
+    }
257
+
258
+    /**
259
+     * 提交刷卡支付,针对软POS,尽可能做成功
260
+     * 内置重试机制,最多60s
261
+     * @param reqData
262
+     * @param connectTimeoutMs
263
+     * @return
264
+     * @throws Exception
265
+     */
266
+    public Map<String, String> microPayWithPos(Map<String, String> reqData, int connectTimeoutMs) throws Exception {
267
+        int remainingTimeMs = 60*1000;
268
+        long startTimestampMs = 0;
269
+        Map<String, String> lastResult = null;
270
+        Exception lastException = null;
271
+
272
+        while (true) {
273
+            startTimestampMs = WXPayUtil.getCurrentTimestampMs();
274
+            int readTimeoutMs = remainingTimeMs - connectTimeoutMs;
275
+            if (readTimeoutMs > 1000) {
276
+                try {
277
+                    lastResult = this.microPay(reqData, connectTimeoutMs, readTimeoutMs);
278
+                    String returnCode = lastResult.get("return_code");
279
+                    if (returnCode.equals("SUCCESS")) {
280
+                        String resultCode = lastResult.get("result_code");
281
+                        String errCode = lastResult.get("err_code");
282
+                        if (resultCode.equals("SUCCESS")) {
283
+                            break;
284
+                        }
285
+                        else {
286
+                            // 看错误码,若支付结果未知,则重试提交刷卡支付
287
+                            if (errCode.equals("SYSTEMERROR") || errCode.equals("BANKERROR") || errCode.equals("USERPAYING")) {
288
+                                remainingTimeMs = remainingTimeMs - (int)(WXPayUtil.getCurrentTimestampMs() - startTimestampMs);
289
+                                if (remainingTimeMs <= 100) {
290
+                                    break;
291
+                                }
292
+                                else {
293
+                                    WXPayUtil.getLogger().info("microPayWithPos: try micropay again");
294
+                                    if (remainingTimeMs > 5*1000) {
295
+                                        Thread.sleep(5*1000);
296
+                                    }
297
+                                    else {
298
+                                        Thread.sleep(1*1000);
299
+                                    }
300
+                                    continue;
301
+                                }
302
+                            }
303
+                            else {
304
+                                break;
305
+                            }
306
+                        }
307
+                    }
308
+                    else {
309
+                        break;
310
+                    }
311
+                }
312
+                catch (Exception ex) {
313
+                    lastResult = null;
314
+                    lastException = ex;
315
+                }
316
+            }
317
+            else {
318
+                break;
319
+            }
320
+        }
321
+
322
+        if (lastResult == null) {
323
+            throw lastException;
324
+        }
325
+        else {
326
+            return lastResult;
327
+        }
328
+    }
329
+
330
+
331
+
332
+    /**
333
+     * 作用:统一下单<br>
334
+     * 场景:公共号支付、扫码支付、APP支付
335
+     * @param reqData 向wxpay post的请求数据
336
+     * @return API返回数据
337
+     * @throws Exception
338
+     */
339
+    public Map<String, String> unifiedOrder(Map<String, String> reqData) throws Exception {
340
+        return this.unifiedOrder(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
341
+    }
342
+
343
+
344
+    /**
345
+     * 作用:统一下单<br>
346
+     * 场景:公共号支付、扫码支付、APP支付
347
+     * @param reqData 向wxpay post的请求数据
348
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
349
+     * @param readTimeoutMs 读超时时间,单位是毫秒
350
+     * @return API返回数据
351
+     * @throws Exception
352
+     */
353
+    public Map<String, String> unifiedOrder(Map<String, String> reqData,  int connectTimeoutMs, int readTimeoutMs) throws Exception {
354
+        String url;
355
+        if (this.useSandbox) {
356
+            url = WXPayConstants.SANDBOX_UNIFIEDORDER_URL_SUFFIX;
357
+        }
358
+        else {
359
+            url = WXPayConstants.UNIFIEDORDER_URL_SUFFIX;
360
+        }
361
+        if(this.notifyUrl != null) {
362
+            reqData.put("notify_url", this.notifyUrl);
363
+        }
364
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
365
+        return this.processResponseXml(respXml);
366
+    }
367
+
368
+
369
+    /**
370
+     * 作用:查询订单<br>
371
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
372
+     * @param reqData 向wxpay post的请求数据
373
+     * @return API返回数据
374
+     * @throws Exception
375
+     */
376
+    public Map<String, String> orderQuery(Map<String, String> reqData) throws Exception {
377
+        return this.orderQuery(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
378
+    }
379
+
380
+
381
+    /**
382
+     * 作用:查询订单<br>
383
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
384
+     * @param reqData 向wxpay post的请求数据 int
385
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
386
+     * @param readTimeoutMs 读超时时间,单位是毫秒
387
+     * @return API返回数据
388
+     * @throws Exception
389
+     */
390
+    public Map<String, String> orderQuery(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
391
+        String url;
392
+        if (this.useSandbox) {
393
+            url = WXPayConstants.SANDBOX_ORDERQUERY_URL_SUFFIX;
394
+        }
395
+        else {
396
+            url = WXPayConstants.ORDERQUERY_URL_SUFFIX;
397
+        }
398
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
399
+        return this.processResponseXml(respXml);
400
+    }
401
+
402
+
403
+    /**
404
+     * 作用:撤销订单<br>
405
+     * 场景:刷卡支付
406
+     * @param reqData 向wxpay post的请求数据
407
+     * @return API返回数据
408
+     * @throws Exception
409
+     */
410
+    public Map<String, String> reverse(Map<String, String> reqData) throws Exception {
411
+        return this.reverse(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
412
+    }
413
+
414
+
415
+    /**
416
+     * 作用:撤销订单<br>
417
+     * 场景:刷卡支付<br>
418
+     * 其他:需要证书
419
+     * @param reqData 向wxpay post的请求数据
420
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
421
+     * @param readTimeoutMs 读超时时间,单位是毫秒
422
+     * @return API返回数据
423
+     * @throws Exception
424
+     */
425
+    public Map<String, String> reverse(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
426
+        String url;
427
+        if (this.useSandbox) {
428
+            url = WXPayConstants.SANDBOX_REVERSE_URL_SUFFIX;
429
+        }
430
+        else {
431
+            url = WXPayConstants.REVERSE_URL_SUFFIX;
432
+        }
433
+        String respXml = this.requestWithCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
434
+        return this.processResponseXml(respXml);
435
+    }
436
+
437
+
438
+    /**
439
+     * 作用:关闭订单<br>
440
+     * 场景:公共号支付、扫码支付、APP支付
441
+     * @param reqData 向wxpay post的请求数据
442
+     * @return API返回数据
443
+     * @throws Exception
444
+     */
445
+    public Map<String, String> closeOrder(Map<String, String> reqData) throws Exception {
446
+        return this.closeOrder(reqData, config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
447
+    }
448
+
449
+
450
+    /**
451
+     * 作用:关闭订单<br>
452
+     * 场景:公共号支付、扫码支付、APP支付
453
+     * @param reqData 向wxpay post的请求数据
454
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
455
+     * @param readTimeoutMs 读超时时间,单位是毫秒
456
+     * @return API返回数据
457
+     * @throws Exception
458
+     */
459
+    public Map<String, String> closeOrder(Map<String, String> reqData,  int connectTimeoutMs, int readTimeoutMs) throws Exception {
460
+        String url;
461
+        if (this.useSandbox) {
462
+            url = WXPayConstants.SANDBOX_CLOSEORDER_URL_SUFFIX;
463
+        }
464
+        else {
465
+            url = WXPayConstants.CLOSEORDER_URL_SUFFIX;
466
+        }
467
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
468
+        return this.processResponseXml(respXml);
469
+    }
470
+
471
+
472
+    /**
473
+     * 作用:申请退款<br>
474
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
475
+     * @param reqData 向wxpay post的请求数据
476
+     * @return API返回数据
477
+     * @throws Exception
478
+     */
479
+    public Map<String, String> refund(Map<String, String> reqData) throws Exception {
480
+        return this.refund(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
481
+    }
482
+
483
+
484
+    /**
485
+     * 作用:申请退款<br>
486
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付<br>
487
+     * 其他:需要证书
488
+     * @param reqData 向wxpay post的请求数据
489
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
490
+     * @param readTimeoutMs 读超时时间,单位是毫秒
491
+     * @return API返回数据
492
+     * @throws Exception
493
+     */
494
+    public Map<String, String> refund(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
495
+        String url;
496
+        if (this.useSandbox) {
497
+            url = WXPayConstants.SANDBOX_REFUND_URL_SUFFIX;
498
+        }
499
+        else {
500
+            url = WXPayConstants.REFUND_URL_SUFFIX;
501
+        }
502
+        String respXml = this.requestWithCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
503
+        return this.processResponseXml(respXml);
504
+    }
505
+
506
+
507
+    /**
508
+     * 作用:退款查询<br>
509
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
510
+     * @param reqData 向wxpay post的请求数据
511
+     * @return API返回数据
512
+     * @throws Exception
513
+     */
514
+    public Map<String, String> refundQuery(Map<String, String> reqData) throws Exception {
515
+        return this.refundQuery(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
516
+    }
517
+
518
+
519
+    /**
520
+     * 作用:退款查询<br>
521
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
522
+     * @param reqData 向wxpay post的请求数据
523
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
524
+     * @param readTimeoutMs 读超时时间,单位是毫秒
525
+     * @return API返回数据
526
+     * @throws Exception
527
+     */
528
+    public Map<String, String> refundQuery(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
529
+        String url;
530
+        if (this.useSandbox) {
531
+            url = WXPayConstants.SANDBOX_REFUNDQUERY_URL_SUFFIX;
532
+        }
533
+        else {
534
+            url = WXPayConstants.REFUNDQUERY_URL_SUFFIX;
535
+        }
536
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
537
+        return this.processResponseXml(respXml);
538
+    }
539
+
540
+
541
+    /**
542
+     * 作用:对账单下载(成功时返回对账单数据,失败时返回XML格式数据)<br>
543
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
544
+     * @param reqData 向wxpay post的请求数据
545
+     * @return API返回数据
546
+     * @throws Exception
547
+     */
548
+    public Map<String, String> downloadBill(Map<String, String> reqData) throws Exception {
549
+        return this.downloadBill(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
550
+    }
551
+
552
+
553
+    /**
554
+     * 作用:对账单下载<br>
555
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付<br>
556
+     * 其他:无论是否成功都返回Map。若成功,返回的Map中含有return_code、return_msg、data,
557
+     *      其中return_code为`SUCCESS`,data为对账单数据。
558
+     * @param reqData 向wxpay post的请求数据
559
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
560
+     * @param readTimeoutMs 读超时时间,单位是毫秒
561
+     * @return 经过封装的API返回数据
562
+     * @throws Exception
563
+     */
564
+    public Map<String, String> downloadBill(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
565
+        String url;
566
+        if (this.useSandbox) {
567
+            url = WXPayConstants.SANDBOX_DOWNLOADBILL_URL_SUFFIX;
568
+        }
569
+        else {
570
+            url = WXPayConstants.DOWNLOADBILL_URL_SUFFIX;
571
+        }
572
+        String respStr = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs).trim();
573
+        Map<String, String> ret;
574
+        // 出现错误,返回XML数据
575
+        if (respStr.indexOf("<") == 0) {
576
+            ret = WXPayUtil.xmlToMap(respStr);
577
+        }
578
+        else {
579
+            // 正常返回csv数据
580
+            ret = new HashMap<String, String>();
581
+            ret.put("return_code", WXPayConstants.SUCCESS);
582
+            ret.put("return_msg", "ok");
583
+            ret.put("data", respStr);
584
+        }
585
+        return ret;
586
+    }
587
+
588
+
589
+    /**
590
+     * 作用:交易保障<br>
591
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
592
+     * @param reqData 向wxpay post的请求数据
593
+     * @return API返回数据
594
+     * @throws Exception
595
+     */
596
+    public Map<String, String> report(Map<String, String> reqData) throws Exception {
597
+        return this.report(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
598
+    }
599
+
600
+
601
+    /**
602
+     * 作用:交易保障<br>
603
+     * 场景:刷卡支付、公共号支付、扫码支付、APP支付
604
+     * @param reqData 向wxpay post的请求数据
605
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
606
+     * @param readTimeoutMs 读超时时间,单位是毫秒
607
+     * @return API返回数据
608
+     * @throws Exception
609
+     */
610
+    public Map<String, String> report(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
611
+        String url;
612
+        if (this.useSandbox) {
613
+            url = WXPayConstants.SANDBOX_REPORT_URL_SUFFIX;
614
+        }
615
+        else {
616
+            url = WXPayConstants.REPORT_URL_SUFFIX;
617
+        }
618
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
619
+        return WXPayUtil.xmlToMap(respXml);
620
+    }
621
+
622
+
623
+    /**
624
+     * 作用:转换短链接<br>
625
+     * 场景:刷卡支付、扫码支付
626
+     * @param reqData 向wxpay post的请求数据
627
+     * @return API返回数据
628
+     * @throws Exception
629
+     */
630
+    public Map<String, String> shortUrl(Map<String, String> reqData) throws Exception {
631
+        return this.shortUrl(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
632
+    }
633
+
634
+
635
+    /**
636
+     * 作用:转换短链接<br>
637
+     * 场景:刷卡支付、扫码支付
638
+     * @param reqData 向wxpay post的请求数据
639
+     * @return API返回数据
640
+     * @throws Exception
641
+     */
642
+    public Map<String, String> shortUrl(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
643
+        String url;
644
+        if (this.useSandbox) {
645
+            url = WXPayConstants.SANDBOX_SHORTURL_URL_SUFFIX;
646
+        }
647
+        else {
648
+            url = WXPayConstants.SHORTURL_URL_SUFFIX;
649
+        }
650
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
651
+        return this.processResponseXml(respXml);
652
+    }
653
+
654
+
655
+    /**
656
+     * 作用:授权码查询OPENID接口<br>
657
+     * 场景:刷卡支付
658
+     * @param reqData 向wxpay post的请求数据
659
+     * @return API返回数据
660
+     * @throws Exception
661
+     */
662
+    public Map<String, String> authCodeToOpenid(Map<String, String> reqData) throws Exception {
663
+        return this.authCodeToOpenid(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());
664
+    }
665
+
666
+
667
+    /**
668
+     * 作用:授权码查询OPENID接口<br>
669
+     * 场景:刷卡支付
670
+     * @param reqData 向wxpay post的请求数据
671
+     * @param connectTimeoutMs 连接超时时间,单位是毫秒
672
+     * @param readTimeoutMs 读超时时间,单位是毫秒
673
+     * @return API返回数据
674
+     * @throws Exception
675
+     */
676
+    public Map<String, String> authCodeToOpenid(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
677
+        String url;
678
+        if (this.useSandbox) {
679
+            url = WXPayConstants.SANDBOX_AUTHCODETOOPENID_URL_SUFFIX;
680
+        }
681
+        else {
682
+            url = WXPayConstants.AUTHCODETOOPENID_URL_SUFFIX;
683
+        }
684
+        String respXml = this.requestWithoutCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
685
+        return this.processResponseXml(respXml);
686
+    }
687
+
688
+
689
+} // end class

+ 103
- 0
src/main/java/com/huiju/estateagents/common/wxpay/WXPayConfig.java Parādīt failu

@@ -0,0 +1,103 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+import java.io.InputStream;
4
+
5
+public abstract class WXPayConfig {
6
+
7
+
8
+
9
+    /**
10
+     * 获取 App ID
11
+     *
12
+     * @return App ID
13
+     */
14
+    abstract String getAppID();
15
+
16
+
17
+    /**
18
+     * 获取 Mch ID
19
+     *
20
+     * @return Mch ID
21
+     */
22
+    abstract String getMchID();
23
+
24
+
25
+    /**
26
+     * 获取 API 密钥
27
+     *
28
+     * @return API密钥
29
+     */
30
+    abstract String getKey();
31
+
32
+
33
+    /**
34
+     * 获取商户证书内容
35
+     *
36
+     * @return 商户证书内容
37
+     */
38
+    abstract InputStream getCertStream();
39
+
40
+    /**
41
+     * HTTP(S) 连接超时时间,单位毫秒
42
+     *
43
+     * @return
44
+     */
45
+    public int getHttpConnectTimeoutMs() {
46
+        return 6*1000;
47
+    }
48
+
49
+    /**
50
+     * HTTP(S) 读数据超时时间,单位毫秒
51
+     *
52
+     * @return
53
+     */
54
+    public int getHttpReadTimeoutMs() {
55
+        return 8*1000;
56
+    }
57
+
58
+    /**
59
+     * 获取WXPayDomain, 用于多域名容灾自动切换
60
+     * @return
61
+     */
62
+    abstract IWXPayDomain getWXPayDomain();
63
+
64
+    /**
65
+     * 是否自动上报。
66
+     * 若要关闭自动上报,子类中实现该函数返回 false 即可。
67
+     *
68
+     * @return
69
+     */
70
+    public boolean shouldAutoReport() {
71
+        return true;
72
+    }
73
+
74
+    /**
75
+     * 进行健康上报的线程的数量
76
+     *
77
+     * @return
78
+     */
79
+    public int getReportWorkerNum() {
80
+        return 6;
81
+    }
82
+
83
+
84
+    /**
85
+     * 健康上报缓存消息的最大数量。会有线程去独立上报
86
+     * 粗略计算:加入一条消息200B,10000消息占用空间 2000 KB,约为2MB,可以接受
87
+     *
88
+     * @return
89
+     */
90
+    public int getReportQueueMaxSize() {
91
+        return 10000;
92
+    }
93
+
94
+    /**
95
+     * 批量上报,一次最多上报多个数据
96
+     *
97
+     * @return
98
+     */
99
+    public int getReportBatchSize() {
100
+        return 10;
101
+    }
102
+
103
+}

+ 59
- 0
src/main/java/com/huiju/estateagents/common/wxpay/WXPayConstants.java Parādīt failu

@@ -0,0 +1,59 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+import org.apache.http.client.HttpClient;
4
+
5
+/**
6
+ * 常量
7
+ */
8
+public class WXPayConstants {
9
+
10
+    public enum SignType {
11
+        MD5, HMACSHA256
12
+    }
13
+
14
+    public static final String DOMAIN_API = "api.mch.weixin.qq.com";
15
+    public static final String DOMAIN_API2 = "api2.mch.weixin.qq.com";
16
+    public static final String DOMAIN_APIHK = "apihk.mch.weixin.qq.com";
17
+    public static final String DOMAIN_APIUS = "apius.mch.weixin.qq.com";
18
+
19
+
20
+    public static final String FAIL     = "FAIL";
21
+    public static final String SUCCESS  = "SUCCESS";
22
+    public static final String HMACSHA256 = "HMAC-SHA256";
23
+    public static final String MD5 = "MD5";
24
+
25
+    public static final String FIELD_SIGN = "sign";
26
+    public static final String FIELD_SIGN_TYPE = "sign_type";
27
+
28
+    public static final String WXPAYSDK_VERSION = "WXPaySDK/3.0.9";
29
+    public static final String USER_AGENT = WXPAYSDK_VERSION +
30
+            " (" + System.getProperty("os.arch") + " " + System.getProperty("os.name") + " " + System.getProperty("os.version") +
31
+            ") Java/" + System.getProperty("java.version") + " HttpClient/" + HttpClient.class.getPackage().getImplementationVersion();
32
+
33
+    public static final String MICROPAY_URL_SUFFIX     = "/pay/micropay";
34
+    public static final String UNIFIEDORDER_URL_SUFFIX = "/pay/unifiedorder";
35
+    public static final String ORDERQUERY_URL_SUFFIX   = "/pay/orderquery";
36
+    public static final String REVERSE_URL_SUFFIX      = "/secapi/pay/reverse";
37
+    public static final String CLOSEORDER_URL_SUFFIX   = "/pay/closeorder";
38
+    public static final String REFUND_URL_SUFFIX       = "/secapi/pay/refund";
39
+    public static final String REFUNDQUERY_URL_SUFFIX  = "/pay/refundquery";
40
+    public static final String DOWNLOADBILL_URL_SUFFIX = "/pay/downloadbill";
41
+    public static final String REPORT_URL_SUFFIX       = "/payitil/report";
42
+    public static final String SHORTURL_URL_SUFFIX     = "/tools/shorturl";
43
+    public static final String AUTHCODETOOPENID_URL_SUFFIX = "/tools/authcodetoopenid";
44
+
45
+    // sandbox
46
+    public static final String SANDBOX_MICROPAY_URL_SUFFIX     = "/sandboxnew/pay/micropay";
47
+    public static final String SANDBOX_UNIFIEDORDER_URL_SUFFIX = "/sandboxnew/pay/unifiedorder";
48
+    public static final String SANDBOX_ORDERQUERY_URL_SUFFIX   = "/sandboxnew/pay/orderquery";
49
+    public static final String SANDBOX_REVERSE_URL_SUFFIX      = "/sandboxnew/secapi/pay/reverse";
50
+    public static final String SANDBOX_CLOSEORDER_URL_SUFFIX   = "/sandboxnew/pay/closeorder";
51
+    public static final String SANDBOX_REFUND_URL_SUFFIX       = "/sandboxnew/secapi/pay/refund";
52
+    public static final String SANDBOX_REFUNDQUERY_URL_SUFFIX  = "/sandboxnew/pay/refundquery";
53
+    public static final String SANDBOX_DOWNLOADBILL_URL_SUFFIX = "/sandboxnew/pay/downloadbill";
54
+    public static final String SANDBOX_REPORT_URL_SUFFIX       = "/sandboxnew/payitil/report";
55
+    public static final String SANDBOX_SHORTURL_URL_SUFFIX     = "/sandboxnew/tools/shorturl";
56
+    public static final String SANDBOX_AUTHCODETOOPENID_URL_SUFFIX = "/sandboxnew/tools/authcodetoopenid";
57
+
58
+}
59
+

+ 106
- 0
src/main/java/com/huiju/estateagents/common/wxpay/WXPayRefundReason.java Parādīt failu

@@ -0,0 +1,106 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+public enum WXPayRefundReason {
4
+    SYSTEMERROR("SYSTEMERROR","系统超时等"),
5
+    BIZERR_NEED_RETRY("BIZERR_NEED_RETRY","并发情况下,业务被拒绝,商户重试即可解决"),
6
+    TRADE_OVERDUE("TRADE_OVERDUE","订单已经超过可退款的最大期限(支付后一年内可退款)"),
7
+    ERROR("ERROR","申请退款业务发生错误"),
8
+    USER_ACCOUNT_ABNORMAL("USER_ACCOUNT_ABNORMAL","用户帐号注销"),
9
+    INVALID_REQ_TOO_MUCH("INVALID_REQ_TOO_MUCH","连续错误请求数过多被系统短暂屏蔽"),
10
+    NOTENOUGH("NOTENOUGH","商户可用退款余额不足"),
11
+    INVALID_TRANSACTIONID("INVALID_TRANSACTIONID","请求参数未按指引进行填写"),
12
+    PARAM_ERROR("PARAM_ERROR","请求参数未按指引进行填写"),
13
+    APPID_NOT_EXIST("APPID_NOT_EXIST","参数中缺少APPID"),
14
+    MCHID_NOT_EXIST("MCHID_NOT_EXIST","参数中缺少MCHID"),
15
+    ORDERNOTEXIST("ORDERNOTEXIST","缺少有效的订单号"),
16
+    REQUIRE_POST_METHOD("REQUIRE_POST_METHOD","未使用post传递参数 "),
17
+    SIGNERROR("SIGNERROR","参数签名结果不正确"),
18
+    XML_FORMAT_ERROR("XML_FORMAT_ERROR","XML格式错误"),
19
+    FREQUENCY_LIMITED("FREQUENCY_LIMITED","2个月之前的订单申请退款有频率限制"),
20
+    NOAUTH("NOAUTH","请求ip异常"),
21
+    ;
22
+
23
+    WXPayRefundReason(String code, String message) {
24
+        this.code = code;
25
+        this.message = message;
26
+    }
27
+
28
+    private String code;
29
+
30
+    private String message;
31
+
32
+    public String getCode() {
33
+        return code;
34
+    }
35
+
36
+    public void setCode(String code) {
37
+        this.code = code;
38
+    }
39
+
40
+    public String getMessage() {
41
+        return message;
42
+    }
43
+
44
+    public void setMessage(String message) {
45
+        this.message = message;
46
+    }
47
+
48
+
49
+    public static String getMsg(String code) {
50
+        String message = "";
51
+       switch (code){
52
+           case "SYSTEMERROR":
53
+               message = SYSTEMERROR.getMessage();
54
+               break;
55
+           case "BIZERR_NEED_RETRY":
56
+               message = BIZERR_NEED_RETRY.getMessage();
57
+               break;
58
+           case "TRADE_OVERDUE":
59
+               message = TRADE_OVERDUE.getMessage();
60
+               break;
61
+           case "ERROR":
62
+               message = ERROR.getMessage();
63
+               break;
64
+           case "USER_ACCOUNT_ABNORMAL":
65
+               message = USER_ACCOUNT_ABNORMAL.getMessage();
66
+               break;
67
+           case "INVALID_REQ_TOO_MUCH":
68
+               message = INVALID_REQ_TOO_MUCH.getMessage();
69
+               break;
70
+           case "NOTENOUGH":
71
+               message = NOTENOUGH.getMessage();
72
+               break;
73
+           case "INVALID_TRANSACTIONID":
74
+               message = INVALID_TRANSACTIONID.getMessage();
75
+               break;
76
+           case "PARAM_ERROR":
77
+               message = PARAM_ERROR.getMessage();
78
+               break;
79
+           case "APPID_NOT_EXIST":
80
+               message = APPID_NOT_EXIST.getMessage();
81
+               break;
82
+           case "MCHID_NOT_EXIST":
83
+               message = MCHID_NOT_EXIST.getMessage();
84
+               break;
85
+           case "REQUIRE_POST_METHOD":
86
+               message = REQUIRE_POST_METHOD.getMessage();
87
+               break;
88
+           case "SIGNERROR":
89
+               message = SIGNERROR.getMessage();
90
+               break;
91
+           case "XML_FORMAT_ERROR":
92
+               message = XML_FORMAT_ERROR.getMessage();
93
+               break;
94
+           case "FREQUENCY_LIMITED":
95
+               message = FREQUENCY_LIMITED.getMessage();
96
+               break;
97
+           case "NOAUTH":
98
+               message = NOAUTH.getMessage();
99
+               break;
100
+           case "ORDERNOTEXIST":
101
+               message = ORDERNOTEXIST.getMessage();
102
+               break;
103
+       }
104
+        return message;
105
+    }
106
+}

+ 265
- 0
src/main/java/com/huiju/estateagents/common/wxpay/WXPayReport.java Parādīt failu

@@ -0,0 +1,265 @@
1
+package com.huiju.estateagents.common.wxpay;
2
+
3
+import org.apache.http.HttpEntity;
4
+import org.apache.http.HttpResponse;
5
+import org.apache.http.client.HttpClient;
6
+import org.apache.http.client.config.RequestConfig;
7
+import org.apache.http.client.methods.HttpPost;
8
+import org.apache.http.config.RegistryBuilder;
9
+import org.apache.http.conn.socket.ConnectionSocketFactory;
10
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
11
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
12
+import org.apache.http.entity.StringEntity;
13
+import org.apache.http.impl.client.HttpClientBuilder;
14
+import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
15
+import org.apache.http.util.EntityUtils;
16
+
17
+import java.util.concurrent.ExecutorService;
18
+import java.util.concurrent.Executors;
19
+import java.util.concurrent.LinkedBlockingQueue;
20
+import java.util.concurrent.ThreadFactory;
21
+
22
+/**
23
+ * 交易保障
24
+ */
25
+public class WXPayReport {
26
+
27
+    public static class ReportInfo {
28
+
29
+        /**
30
+         * 布尔变量使用int。0为false, 1为true。
31
+         */
32
+
33
+        // 基本信息
34
+        private String version = "v1";
35
+        private String sdk = WXPayConstants.WXPAYSDK_VERSION;
36
+        private String uuid;  // 交易的标识
37
+        private long timestamp;   // 上报时的时间戳,单位秒
38
+        private long elapsedTimeMillis; // 耗时,单位 毫秒
39
+
40
+        // 针对主域名
41
+        private String firstDomain;  // 第1次请求的域名
42
+        private boolean primaryDomain; //是否主域名
43
+        private int firstConnectTimeoutMillis;  // 第1次请求设置的连接超时时间,单位 毫秒
44
+        private int firstReadTimeoutMillis;  // 第1次请求设置的读写超时时间,单位 毫秒
45
+        private int firstHasDnsError;  // 第1次请求是否出现dns问题
46
+        private int firstHasConnectTimeout; // 第1次请求是否出现连接超时
47
+        private int firstHasReadTimeout; // 第1次请求是否出现连接超时
48
+
49
+        public ReportInfo(String uuid, long timestamp, long elapsedTimeMillis, String firstDomain, boolean primaryDomain, int firstConnectTimeoutMillis, int firstReadTimeoutMillis, boolean firstHasDnsError, boolean firstHasConnectTimeout, boolean firstHasReadTimeout) {
50
+            this.uuid = uuid;
51
+            this.timestamp = timestamp;
52
+            this.elapsedTimeMillis = elapsedTimeMillis;
53
+            this.firstDomain = firstDomain;
54
+            this.primaryDomain = primaryDomain;
55
+            this.firstConnectTimeoutMillis = firstConnectTimeoutMillis;
56
+            this.firstReadTimeoutMillis = firstReadTimeoutMillis;
57
+            this.firstHasDnsError = firstHasDnsError?1:0;
58
+            this.firstHasConnectTimeout = firstHasConnectTimeout?1:0;
59
+            this.firstHasReadTimeout = firstHasReadTimeout?1:0;
60
+         }
61
+
62
+        @Override
63
+        public String toString() {
64
+            return "ReportInfo{" +
65
+                    "version='" + version + '\'' +
66
+                    ", sdk='" + sdk + '\'' +
67
+                    ", uuid='" + uuid + '\'' +
68
+                    ", timestamp=" + timestamp +
69
+                    ", elapsedTimeMillis=" + elapsedTimeMillis +
70
+                    ", firstDomain='" + firstDomain + '\'' +
71
+                    ", primaryDomain=" + primaryDomain +
72
+                    ", firstConnectTimeoutMillis=" + firstConnectTimeoutMillis +
73
+                    ", firstReadTimeoutMillis=" + firstReadTimeoutMillis +
74
+                    ", firstHasDnsError=" + firstHasDnsError +
75
+                    ", firstHasConnectTimeout=" + firstHasConnectTimeout +
76
+                    ", firstHasReadTimeout=" + firstHasReadTimeout +
77
+                    '}';
78
+        }
79
+
80
+        /**
81
+         * 转换成 csv 格式
82
+         *
83
+         * @return
84
+         */
85
+        public String toLineString(String key) {
86
+            String separator = ",";
87
+            Object[] objects = new Object[] {
88
+                version, sdk, uuid, timestamp, elapsedTimeMillis,
89
+                    firstDomain, primaryDomain, firstConnectTimeoutMillis, firstReadTimeoutMillis,
90
+                    firstHasDnsError, firstHasConnectTimeout, firstHasReadTimeout
91
+            };
92
+            StringBuffer sb = new StringBuffer();
93
+            for(Object obj: objects) {
94
+                sb.append(obj).append(separator);
95
+            }
96
+            try {
97
+                String sign = WXPayUtil.HMACSHA256(sb.toString(), key);
98
+                sb.append(sign);
99
+                return sb.toString();
100
+            }
101
+            catch (Exception ex) {
102
+                return null;
103
+            }
104
+
105
+        }
106
+
107
+    }
108
+
109
+    private static final String REPORT_URL = "http://report.mch.weixin.qq.com/wxpay/report/default";
110
+    // private static final String REPORT_URL = "http://127.0.0.1:5000/test";
111
+
112
+
113
+    private static final int DEFAULT_CONNECT_TIMEOUT_MS = 6*1000;
114
+    private static final int DEFAULT_READ_TIMEOUT_MS = 8*1000;
115
+
116
+    private LinkedBlockingQueue<String> reportMsgQueue = null;
117
+    private WXPayConfig config;
118
+    private ExecutorService executorService;
119
+
120
+    private volatile static WXPayReport INSTANCE;
121
+
122
+    private WXPayReport(final WXPayConfig config) {
123
+        this.config = config;
124
+        reportMsgQueue = new LinkedBlockingQueue<String>(config.getReportQueueMaxSize());
125
+
126
+        // 添加处理线程
127
+        executorService = Executors.newFixedThreadPool(config.getReportWorkerNum(), new ThreadFactory() {
128
+            public Thread newThread(Runnable r) {
129
+                Thread t = Executors.defaultThreadFactory().newThread(r);
130
+                t.setDaemon(true);
131
+                return t;
132
+            }
133
+        });
134
+
135
+        if (config.shouldAutoReport()) {
136
+            WXPayUtil.getLogger().info("report worker num: {}", config.getReportWorkerNum());
137
+            for (int i = 0; i < config.getReportWorkerNum(); ++i) {
138
+                executorService.execute(new Runnable() {
139
+                    public void run() {
140
+                        while (true) {
141
+                            // 先用 take 获取数据
142
+                            try {
143
+                                StringBuffer sb = new StringBuffer();
144
+                                String firstMsg = reportMsgQueue.take();
145
+                                WXPayUtil.getLogger().info("get first report msg: {}", firstMsg);
146
+                                String msg = null;
147
+                                sb.append(firstMsg); //会阻塞至有消息
148
+                                int remainNum = config.getReportBatchSize() - 1;
149
+                                for (int j=0; j<remainNum; ++j) {
150
+                                    WXPayUtil.getLogger().info("try get remain report msg");
151
+                                    // msg = reportMsgQueue.poll();  // 不阻塞了
152
+                                    msg = reportMsgQueue.take();
153
+                                    WXPayUtil.getLogger().info("get remain report msg: {}", msg);
154
+                                    if (msg == null) {
155
+                                        break;
156
+                                    }
157
+                                    else {
158
+                                        sb.append("\n");
159
+                                        sb.append(msg);
160
+                                    }
161
+                                }
162
+                                // 上报
163
+                                WXPayReport.httpRequest(sb.toString(), DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_READ_TIMEOUT_MS);
164
+                            }
165
+                            catch (Exception ex) {
166
+                                WXPayUtil.getLogger().warn("report fail. reason: {}", ex.getMessage());
167
+                            }
168
+                        }
169
+                    }
170
+                });
171
+            }
172
+        }
173
+
174
+    }
175
+
176
+    /**
177
+     * 单例,双重校验,请在 JDK 1.5及更高版本中使用
178
+     *
179
+     * @param config
180
+     * @return
181
+     */
182
+    public static WXPayReport getInstance(WXPayConfig config) {
183
+        if (INSTANCE == null) {
184
+            synchronized (WXPayReport.class) {
185
+                if (INSTANCE == null) {
186
+                    INSTANCE = new WXPayReport(config);
187
+                }
188
+            }
189
+        }
190
+        return INSTANCE;
191
+    }
192
+
193
+    public void report(String uuid, long elapsedTimeMillis,
194
+                       String firstDomain, boolean primaryDomain, int firstConnectTimeoutMillis, int firstReadTimeoutMillis,
195
+                       boolean firstHasDnsError, boolean firstHasConnectTimeout, boolean firstHasReadTimeout) {
196
+        long currentTimestamp = WXPayUtil.getCurrentTimestamp();
197
+        ReportInfo reportInfo = new ReportInfo(uuid, currentTimestamp, elapsedTimeMillis,
198
+                firstDomain, primaryDomain, firstConnectTimeoutMillis, firstReadTimeoutMillis,
199
+                firstHasDnsError, firstHasConnectTimeout, firstHasReadTimeout);
200
+        String data = reportInfo.toLineString(config.getKey());
201
+        WXPayUtil.getLogger().info("report {}", data);
202
+        if (data != null) {
203
+            reportMsgQueue.offer(data);
204
+        }
205
+    }
206
+
207
+
208
+    @Deprecated
209
+    private void reportSync(final String data) throws Exception {
210
+        httpRequest(data, DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_READ_TIMEOUT_MS);
211
+    }
212
+
213
+    @Deprecated
214
+    private void reportAsync(final String data) throws Exception {
215
+        new Thread(new Runnable() {
216
+            public void run() {
217
+                try {
218
+                    httpRequest(data, DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_READ_TIMEOUT_MS);
219
+                }
220
+                catch (Exception ex) {
221
+                    WXPayUtil.getLogger().warn("report fail. reason: {}", ex.getMessage());
222
+                }
223
+            }
224
+        }).start();
225
+    }
226
+
227
+    /**
228
+     * http 请求
229
+     * @param data
230
+     * @param connectTimeoutMs
231
+     * @param readTimeoutMs
232
+     * @return
233
+     * @throws Exception
234
+     */
235
+    private static String httpRequest(String data, int connectTimeoutMs, int readTimeoutMs) throws Exception{
236
+        BasicHttpClientConnectionManager connManager;
237
+        connManager = new BasicHttpClientConnectionManager(
238
+                RegistryBuilder.<ConnectionSocketFactory>create()
239
+                        .register("http", PlainConnectionSocketFactory.getSocketFactory())
240
+                        .register("https", SSLConnectionSocketFactory.getSocketFactory())
241
+                        .build(),
242
+                null,
243
+                null,
244
+                null
245
+        );
246
+        HttpClient httpClient = HttpClientBuilder.create()
247
+                .setConnectionManager(connManager)
248
+                .build();
249
+
250
+        HttpPost httpPost = new HttpPost(REPORT_URL);
251
+
252
+        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(readTimeoutMs).setConnectTimeout(connectTimeoutMs).build();
253
+        httpPost.setConfig(requestConfig);
254
+
255
+        StringEntity postEntity = new StringEntity(data, "UTF-8");
256
+        httpPost.addHeader("Content-Type", "text/xml");
257
+        httpPost.addHeader("User-Agent", WXPayConstants.USER_AGENT);
258
+        httpPost.setEntity(postEntity);
259
+
260
+        HttpResponse httpResponse = httpClient.execute(httpPost);
261
+        HttpEntity httpEntity = httpResponse.getEntity();
262
+        return EntityUtils.toString(httpEntity, "UTF-8");
263
+    }
264
+
265
+}

+ 0
- 0
src/main/java/com/huiju/estateagents/common/wxpay/WXPayRequest.java Parādīt failu


Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels